How to Connect Cursor to a YouTube MCP Server
Cursor adds the Prepublish YouTube script audit with one entry in mcp.json, either the project file or the global one, or in one click from Customize. A stale entry in the project file overrides the global one silently, which is the failure to check first when the server looks wrong.
TL;DR
Cursor adds the Prepublish YouTube script audit with one entry in mcp.json: .cursor/mcp.json for a project or ~/.cursor/mcp.json for all of them, both merged with the project entry winning on a duplicate name. A remote entry is a url, and a pp_live_ key goes in headers through ${env:NAME} interpolation. Cursor also supports stdio, so the npx -y prepublish-mcp bridge works when an allowlist approves commands rather than URLs.
Try it on your own script
Paste your draft below. You get your hook, structure, and pacing scores, a script-level attention-risk map, and the single biggest issue quoted from your own lines. Free, no login.
Free · No login · See a sample audit first if you prefer.
Key Takeaways
- Cursor adds Prepublish with one entry in .cursor/mcp.json for a project or ~/.cursor/mcp.json for every project, or in one click from Customize then MCPs
- Cursor merges both config files, and the project-level entry wins for a duplicate server name, which explains most confusing behaviour
- Cursor supports stdio, SSE and Streamable HTTP, so the npx prepublish-mcp bridge is available as well as the hosted URL
- The cursor://anysphere.cursor-deeplink/mcp/install scheme was not documented on a Cursor-owned page read on 2026-09-21
- Cursor's MCP logs live in the Output panel under MCP Logs, and the default Auto-review mode sends non-allowlisted tools through a classifier
- The default free tier is 100 AI-backed anonymous calls per UTC day across the endpoint and 6 per caller per 10 minutes, published in prepublish-fe/lib/mcp/limits.ts
Key Statistics
- •Cursor merges ~/.cursor/mcp.json and .cursor/mcp.json, and the project-level config wins when the same server name appears in both (https://cursor.com/help/customization/mcp, read 2026-09-21).
- •Cursor supports stdio, SSE and Streamable HTTP transports for MCP servers (https://cursor.com/docs/mcp, read 2026-09-21).
- •MCP logs in Cursor are in the Output panel under MCP Logs, opened with Cmd+Shift+U on macOS (https://cursor.com/help/customization/mcp, read 2026-09-21).
- •Cursor Enterprise allowlists approve stdio servers by command pattern and remote servers by URL entry pattern (https://cursor.com/docs/mcp, read 2026-09-21).
- •The default free tier is 100 AI-backed anonymous calls per UTC day across the whole endpoint and 6 per anonymous caller per 10 minutes (prepublish-fe/lib/mcp/limits.ts).
In This Guide
How to Connect Cursor to a YouTube MCP Server
Cursor adds Prepublish in one entry, either by hand or in one click. The by-hand route is a file, and there are two of them: .cursor/mcp.json for one project and ~/.cursor/mcp.json for every project. Paste this into either one:
{
"mcpServers": {
"prepublish": {
"url": "https://mcp.prepublish.ai"
}
}
}
Save the file and restart Cursor. Prepublish audits a script you have written but not recorded, and Cursor is the client that puts that check next to the file you are writing the script in. The shared reference, including the six tools and the published limits, is the Claude Code hub guide. This page covers only what is specific to Cursor.
The click path, and the two mcp.json locations
Cursor documents both install routes in Model Context Protocol and in MCP integrations, read on 2026-09-21.
One click. Open Customize in the sidebar, click MCPs, find the server and click Add to Cursor, then follow any authentication prompts. Prepublish needs no authentication, so nothing follows the click.
By hand. Create mcp.json in one of the two documented locations:
.cursor/mcp.jsoninside the project, which the help page suggests committing so teammates inherit the same tools.~/.cursor/mcp.jsonin your home directory, for every project on the machine.
The help page states one rule that matters more than the rest: both files are merged, and when the same server name appears in both, the project-level entry wins. That precedence is the cause of most confusing Cursor MCP behaviour, and it is the first thing to check when a server looks misconfigured.
The MCP reference adds what a URL entry can carry. A remote server uses url, and headers is where a token goes. Interpolation works in command, args, env, url and headers, with ${env:NAME} for an environment variable, so a key never has to be written into the file. Use it with a pp_live_ key:
{
"mcpServers": {
"prepublish": {
"url": "https://mcp.prepublish.ai",
"headers": { "Authorization": "Bearer ${env:PREPUBLISH_API_KEY}" }
}
}
}
Cursor also supports a local stdio entry, which is the shape the bridge takes. The documented fields are type, command, args, and env or envFile, and envFile is available for stdio servers only.
The deeplink, and what Cursor's own pages document
You may have seen a cursor://anysphere.cursor-deeplink/mcp/install link offered by a server's own documentation, usually with a base64 encoded config in a query parameter. That scheme was not verified on a Cursor-owned page on 2026-09-21. The two pages read for this guide, the MCP reference and the MCP help page, describe one-click installation as browsing Customize > MCPs and clicking Add to Cursor, and describe custom servers as entries in mcp.json. Neither documents a cursor:// install scheme.
Treat the deeplink as unverified in both directions: it is not documented on that page, and no claim is made here that it fails. You do not need it either way, because the file entry above is documented and the deeplink would write it.
The hosted URL or the stdio bridge in Cursor
Cursor supports all three transports: stdio, SSE and Streamable HTTP, per the MCP reference, so both routes are available to you.
Use the hosted URL by default. It is one line, it needs no Node installation, and it is the entry that survives a reinstall of the editor.
Use the bridge when something upstream forces the command shape:
- A Team or Enterprise allowlist may approve stdio servers by command pattern and remote servers by URL entry pattern, per the MCP reference. If your administrators approve commands rather than URLs,
npx -y prepublish-mcpis the entry that will pass. - You want the tool list served from a process you started, with the upstream named in its stderr line on startup.
The stdio entry is the same one every client uses:
{
"mcpServers": {
"prepublish": {
"type": "stdio",
"command": "npx",
"args": ["-y", "prepublish-mcp"]
}
}
}
The bridge forwards to the same hosted server, and prepublish-mcp/test/bridge.test.ts asserts that its sorted tool names equal the six names in the hosted list. It needs Node 20 or newer, per the engines field in prepublish-mcp/package.json. PREPUBLISH_MCP_URL points it at another deployment and PREPUBLISH_TOKEN forwards a bearer token, so the environment block is where a pp_live_ key belongs if you take this route.
Cursor's own failure modes, and what the server answers
Four failures are Cursor's rather than the server's.
A stale project entry overrides the global one. Because both files merge and the project entry wins for a duplicate name, a prepublish entry left in one repository keeps overriding the global entry there. If the server behaves differently in one project, read .cursor/mcp.json in it first.
The editor has to be restarted. The help page states that you save the file and restart Cursor, and that a server relying on shell environment variables needs those variables visible to Cursor, which also means a restart after a shell profile change.
A tool that has not been approved never runs. Cursor asks for approval before using MCP tools by default, and the MCP reference describes the run modes: the default Auto-review mode lets allowlisted MCP tools run immediately and routes everything else through a classifier.
The logs are in the editor. The help page puts them in the Output panel, opened with Cmd+Shift+U, with MCP Logs selected from the dropdown. A JSON syntax error and a failed connection both surface there.
When the problem is on the server side, the response says so, and these strings come from the endpoint's own code.
| What you see | What produced it |
|---|---|
Origin "https://example.com" may not connect to this MCP endpoint | A request arrived with an Origin header the deployment does not list. Revision 2025-11-25 of the transport requires this 403 (prepublish-fe/app/mcp/route.ts). A request from the Cursor process carries no origin, and an absent origin is allowed |
Unsupported MCP-Protocol-Version "2024-10-07" | A request declared a revision this server does not implement, and the response lists the supported ones |
Request body is not valid JSON | A manual call sent a body that did not parse |
Unknown tool "no_such_tool" | A misspelled name or a stale tool list. Re-run tools/list |
Method "resources/read" is not implemented by this server | This server declares the tools capability only. resources/list and prompts/list return empty arrays, and any other method lands here |
Prepublish's free MCP endpoint has reached its daily limit of 100 AI-backed calls (it resets at 00:00 UTC). ... | The shared anonymous counter for the UTC day is spent |
This connection has used its 6 free Prepublish AI checks for now; the allowance resets in about N minute(s). ... | Six AI-backed calls arrived from one caller inside ten minutes |
Prepublish needs an email address to continue: ... | A free full audit is released by email, and the backend rejected the request without an address |
The last four are tool-level errors, so they appear in the conversation and the model reads them, which is why the message tells the model what to do next rather than only what went wrong.
A first run in Cursor
Open the Agent panel in the repository where you keep your drafts and ask for the free arithmetic first:
Use the prepublish server to tell me how many words I need for a twelve minute video, and how long a 2,400 word script would run.
The call shows up as a tool invocation with expandable arguments and a response. The payload carries speaking_rates_words_per_minute with fast, median and slow, a source string, a caveat string, word_count, runtime_minutes and word_budget, the last two each with the same three keys. The rates are the measured ones in prepublish-fe/lib/seo/wpm-data.ts. Computed from them, a 2,400 word script is 15 minutes at 160 words per minute, 13.3 at 181 and 11.9 at 201, and a twelve minute target needs 1,920 words at the slow rate, 2,172 at the median and 2,412 at the fast rate. Nothing is billed for that call, so it doubles as a connection test.
Then hand over an opening, which is the check Cursor is best placed for, because the draft is in front of you:
Audit this hook with the prepublish server and name the sentence that loses attention first: "Most creators lose half their viewers in the first fifteen seconds, and the reason is rarely the editing."
audit_hook takes hook_text, an optional niche and an optional email, and returns a hook object with evaluation_id, hook_text, niche, overall_score, grade, one_sentence_verdict, sentences, top_issues, rewrites, model_used and created_at. Each entry in sentences has its own attention read, so the flagged line is a real line from the draft rather than a summary of it. This one is AI-backed, and Cursor asks for approval before running it.
The payload repeats its own limit, and the model relays it: "This is a text-only check of an unrecorded script. It maps relative attention risk inside the draft. It does not measure or predict published YouTube retention, and it cannot account for delivery, editing, thumbnail, topic or distribution."
Limits on the Cursor connection
The check reads text. It does not watch a video, fetch a transcript or read your channel, and no result is a forecast of audience behaviour.
The free tier is published in prepublish-fe/lib/mcp/limits.ts, and the values in force for the current day are in the server card at https://mcp.prepublish.ai.
| Limit | Default | Window |
|---|---|---|
| AI-backed anonymous calls across the whole endpoint | 100 | One UTC day |
| AI-backed anonymous calls per caller | 6 | 10 minutes |
| AI-backed calls per authenticated caller | 30 | 10 minutes |
script_runtime and get_audit | Unlimited | None |
A full audit is released by email, so audit_script asks for an address and the backend rejects a request without one. The narrower checks do not ask. An optional pp_live_ API key, interpolated from an environment variable as shown above, takes the call out of the shared daily cap and applies your account's plan quota instead.
Frequently asked questions
How do I connect a YouTube MCP server to Cursor?
Create mcp.json in .cursor/ for one project or in ~/.cursor/ for every project, and add an entry under mcpServers with a url of https://mcp.prepublish.ai. Save the file and restart Cursor. The one-click route is Customize, then MCPs, then Add to Cursor. Cursor merges the two files, and the project entry wins if the same server name appears in both.
Should the Cursor MCP config be global or project level?
Global, ~/.cursor/mcp.json, if you want the script check in every repository you open. Project level, .cursor/mcp.json, if the team should share the same tools, which is what Cursor's help page suggests committing. Both are merged, and a project entry overrides a global one without warning, which matters when a server behaves differently in one repository.
Does the cursor://anysphere.cursor-deeplink/mcp/install link work for this server?
That scheme was not verified on a Cursor-owned page on 2026-09-21. The MCP reference and the MCP help page describe one-click installation through Customize then MCPs and Add to Cursor, and describe custom servers as mcp.json entries, and neither documents a cursor:// install scheme. Nothing here claims that it fails. The file entry is the documented route and the deeplink would write the same entry.
Why does my Cursor MCP server not appear or look wrong?
Check the project file first, because .cursor/mcp.json overrides ~/.cursor/mcp.json for the same server name. Then confirm that Cursor was restarted after the edit, which the help page requires. Then open the Output panel with Cmd+Shift+U and select MCP Logs. Finally, check whether the tool you expected was declined, because Cursor asks for approval before running MCP tools.
Can Cursor use the hosted URL, or does it need the npx bridge?
Cursor supports all three transports, so the URL is enough. The bridge is for two cases: when a Team or Enterprise allowlist approves stdio servers by command pattern rather than remote servers by URL, and when you want the tool list served by a local process. The bridge forwards to the same endpoint and its tool list is asserted to match the hosted six, so only the transport changes.
Is the YouTube MCP server free in Cursor?
Yes. The endpoint is anonymous and needs no account, API key or card, and the free tier is published in prepublish-fe/lib/mcp/limits.ts. Cursor's own plan is unrelated to the server's allowance. An optional pp_live_ API key, interpolated from an environment variable in the headers block, lifts the shared anonymous cap.
What happens when the daily cap is reached in Cursor?
The tool returns an error naming the daily limit of 100 AI-backed calls, saying it resets at 00:00 UTC, and instructing the model not to retry. A separate per-caller message reports that this connection has used its 6 free checks for now and gives the reset time in minutes. Both are tool-level errors, so they arrive in the conversation, and reconnecting will not clear them before the window resets.
Can Cursor audit a script for a video that is already published?
No. All six tools read text you paste: the script, the hook, the policy draft. Nothing fetches a video, a transcript or a channel, and no result describes a published video. The check is built for the moment before recording, which is why it pairs with a code editor: the draft is already on disk.
Related Guides
Free tools to put this into practice
Hook Analyzer
Score your first 1-3 sentences
Title Analyzer
Writing rubric + 5 rewrites
Words to Minutes
Script length calculator
Word Counter
Count, reading time, duration
Want to see how this reads on real channels? Browse the channel breakdowns. Each one compares script patterns across a channel's own higher-viewed and lower-viewed uploads, quoted from the transcripts.
See where your next script leaks viewers
Paste your script, get your scores and the biggest leak for free. No login.