How do I add UpRock to Cursor?
Add UpRock's MCP server to .cursor/mcp.json with the key read from the UPROCK_API_KEY environment variable, turn it on under Customize, and Cursor's agent can load pages on an opted-in device in the country you choose and search public video. A rule in .cursor/rules tells it when to reach for UpRock, and the same setup works in Cursor's command-line agent.
Updated · Read as markdown
What Cursor's agent gets
UpRock's MCP server runs over streamable HTTP at https://mcp.uprock.ai/mcp, with your API key in an Authorization: Bearer header (clients that can't send headers can use https://mcp.uprock.ai/<API_KEY>/mcp instead). Added as uprock, it gives Cursor's agent six tools. In Cursor's allowlists they're written uprock:<tool>:
| Tool | What it does | Typical prompt |
|---|---|---|
uprock:crawl_fetch | Loads a page in a real browser on a desktop or mobile device in the country you pass; returns a summary and links to the stored markdown and HTML | "Fetch this pricing page as it looks in Japan" |
uprock:resource_fetch | Reads a stored result in full, such as the markdown crawl_fetch saved | Used right after crawl_fetch |
uprock:video_search | Finds moments in public video by meaning | "Find a video that shows how to replace this part" |
uprock:video_moment | Describes what happens in a stretch of one video | Used after video_search |
uprock:verify | Loads one URL from several regions with status, timings and screenshots | "Check our site from Europe and Asia" |
uprock:web_research | Searches several engines from chosen countries | Use with care: when we tested on 21 Oct 2026 it returned empty or off-topic results from some countries |
Set it up
Create .cursor/mcp.json in your project (or ~/.cursor/mcp.json for every project):
{ "mcpServers": { "uprock": { "url": "https://mcp.uprock.ai/mcp", "headers": { "Authorization": "Bearer ${env:UPROCK_API_KEY}" } } }}Cursor resolves ${env:UPROCK_API_KEY} from its environment, so the key never sits in the file. Set it in your shell profile (get a key at uprock.ai/app/api-keys), then restart Cursor so it picks the variable up:
export UPROCK_API_KEY=your-key # in ~/.zshrc or ~/.bashrcThen open Customize → MCPs and turn uprock on. The tools list at the top of the chat panel lets you switch individual tools on and off, and Output → MCP Logs shows what happened if the server doesn't start.
Approvals and a rule
Cursor asks before running an MCP tool. To let the agent fetch without asking each time, add the fetch tools to .cursor/permissions.json:
{ "mcpAllowlist": ["uprock:crawl_fetch", "uprock:resource_fetch"]}Then tell the agent when UpRock is the right tool. Project rules live in .cursor/rules/ as .mdc files (a plain .md file there is ignored). With alwaysApply: false, Cursor reads the description and pulls the rule in when it's relevant:
---description: Fetching web pages from a specific country, or when another fetch failsalwaysApply: false---When a web page must be read as it looks in a specific country, or another fetch failedor returned 401/403/429, call uprock crawl_fetch with the url and country, thenresource_fetch on the markdown resource it returns. Ask before fetching more than 100 pages.Save it as .cursor/rules/uprock.mdc. If you already use the UpRock skill with Claude Code, Cursor loads skills from .claude/skills/ too, so one SKILL.md covers both.
A working call
In the agent chat:
Fetch https://example.com as it looks from Germany with UpRock and tell me the page title.The agent calls crawl_fetch with {"url": "https://example.com", "country": "DE"} and gets back a summary like this one, from our own call to the same server on 21 Oct 2026 (resource IDs shortened):
{ "status": "success", "meta": { "url": "https://example.com", "title": "Example Domain", "content_type": "text/html" }, "content": { "markdown": { "resource": "crawl://…/markdown", "size_bytes": 1342 } }}For the full page it follows up with resource_fetch on the markdown resource.
From a terminal, Cursor's command-line agent (agent) reads the same mcp.json:
agent mcp listagent -p "Fetch https://example.com from Germany with UpRock and give me the title" --approve-mcps --trustGood to know
- Restart after changing the key.
${env:…}is read from Cursor's own environment, so a new value in your shell profile needs a restart. - The key goes in a header. Cursor sends the
headersfield with every request, and${env:UPROCK_API_KEY}keeps the key out of the file. If your Cursor build can't send headers to remote servers, put the key in the URL instead:"url": "https://mcp.uprock.ai/${env:UPROCK_API_KEY}/mcp". - Time. A fresh fetch takes 10 to 40 seconds and a recently fetched page about a second; long pages come back through
resource_fetchrather than in the first response.
We checked the config format against Cursor's docs and made the same crawl_fetch and resource_fetch calls against the live UpRock server through the official MCP SDK on 21 Oct 2026. We didn't run them inside Cursor itself, which needs a signed-in Cursor account.
FAQ
Does Cursor support environment variables in mcp.json?
Yes. Cursor resolves ${env:NAME} in the command, args, env, url and headers fields, so the URL can read your key from UPROCK_API_KEY. For remote servers, Cursor's docs say to set the variable in your shell profile and restart Cursor after changing it.
Project or global config?
Either. .cursor/mcp.json in a project applies to that project and can be committed if the key comes from an environment variable; ~/.cursor/mcp.json applies everywhere. Cursor merges the two, and the project file wins when both define the same server name.
How do I stop Cursor asking before every UpRock call?
Add "uprock:crawl_fetch" and "uprock:resource_fetch" (or "uprock:*") to mcpAllowlist in .cursor/permissions.json or ~/.cursor/permissions.json. Cursor asks for approval before MCP tools by default.
Can I use the same skill in Cursor and Claude Code?
Yes. Cursor loads skills from .cursor/skills and .agents/skills, and also from Claude's .claude/skills folders, so the UpRock SKILL.md can live in one place for both.
Does the Cursor command-line agent use this config?
Yes. Cursor's CLI, run as agent, reads your mcp.json. agent mcp list shows the servers, and agent -p with --approve-mcps runs a one-shot prompt that can use them.
Other use cases to explore
- See a page as it looks in another country: one store page from five countries, with five prices, two languages and a cookie banner in one country only.
- Read a page without opening a browser: what 1,000 single-page reads cost in browser sessions, and when a plain fetch is enough.
- Add a fallback to a crawler you host: send only the pages your server can't load to a device in the country you choose.
- Search public video by moment: find the second something is shown or said, across platforms.
References
- Cursor docs, Model Context Protocol (MCP), checked 21 Oct 2026
- Cursor help, MCP setup, checked 21 Oct 2026
- Cursor docs, Permissions (MCP allowlist), checked 21 Oct 2026
- Cursor docs, Rules, checked 21 Oct 2026
- Cursor docs, Skills, checked 21 Oct 2026
- Cursor docs, CLI (using MCP), checked 21 Oct 2026
- UpRock, setup for every agent, checked 21 Oct 2026
- UpRock, everything in one file (API, CLI, MCP, pricing), checked 21 Oct 2026
Get started
Add UpRock in one paste.
Paste this into Claude Code, Codex, Cursor or any agent with a terminal. It reads our docs, sets up the MCP server or CLI, and tells you the cost before it spends anything.
Set up UpRock for me: read https://uprock.ai/agents.md, connect the UpRock MCP server, and run one test crawl. Tell me what it costs before you spend anything.