# 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 21 Oct 2026. Web page: https://uprock.ai/integrations/cursor

## On this page

- [What Cursor's agent gets](#what-cursors-agent-gets)
- [Set it up](#set-it-up)
- [Approvals and a rule](#approvals-and-a-rule)
- [A working call](#a-working-call)
- [Good to know](#good-to-know)
- [FAQ](#faq)
- [Other use cases to explore](#explore)
- [Related articles](#related)
- [References](#references)
- [Get started](#get-started)

## 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):

```json
{
  "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:

```bash
export UPROCK_API_KEY=your-key   # in ~/.zshrc or ~/.bashrc
```

Then 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`:

```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:

```text
---
description: Fetching web pages from a specific country, or when another fetch fails
alwaysApply: false
---
When a web page must be read as it looks in a specific country, or another fetch failed
or returned 401/403/429, call uprock crawl_fetch with the url and country, then
resource_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:

```text
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):

```json
{
  "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`:

```bash
agent mcp list
agent -p "Fetch https://example.com from Germany with UpRock and give me the title" --approve-mcps --trust
```

## Good 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 `headers` field 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_fetch` rather 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](https://uprock.ai/use-cases/page-from-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](https://uprock.ai/compare/browserbase#what-1000-page-reads-cost): 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](https://uprock.ai/compare/crawl4ai#plug-uprock-into-fallback_fetch_function): send only the pages your server can't load to a device in the country you choose.
- [Search public video by moment](https://uprock.ai/video-semantic-search): find the second something is shown or said, across platforms.

## Related articles

- [How do I give Claude Code live web access with UpRock?](https://uprock.ai/integrations/claude-code.md): Add UpRock's MCP server to Claude Code with the key kept out of your repo, check it's connected, tell Claude when to use it, and know the output limits that matter for big pages.
- [How do I use UpRock as a LangChain tool?](https://uprock.ai/integrations/langchain.md): Load UpRock's MCP tools into LangChain in Python or JavaScript, call them directly or from an agent, and handle the result format, with code we ran against the live server.
- [How do I give a Vercel AI SDK app web access with UpRock?](https://uprock.ai/integrations/vercel-ai-sdk.md): Connect UpRock's MCP server with @ai-sdk/mcp, call its tools directly or let the model choose them in generateText, and avoid the timeout and key-logging traps, with code we ran against the live server.
- [How do I fetch web pages from a chosen country in n8n?](https://uprock.ai/integrations/n8n.md): Install UpRock's verified n8n node, add your key, import a two-node workflow we ran in n8n 2.44, and read the page's markdown in the next step, or give the node to an AI Agent as a tool.
- [How do I add UpRock to OpenAI's Codex CLI?](https://uprock.ai/integrations/codex.md): Add UpRock's MCP server to Codex with one command, keep the API key in an environment variable, raise the 60-second tool timeout, and add your own rules in AGENTS.md.
- [How do I give a CrewAI agent web access with UpRock?](https://uprock.ai/integrations/crewai.md): Load UpRock's MCP tools into CrewAI with MCPServerAdapter and the key in a header, why it beats the mcps field's 30-second limit, and how to read what the tools return, with tested code.
- [How do I give a Mastra agent web access with UpRock?](https://uprock.ai/integrations/mastra.md): Connect UpRock's MCP server with MCPClient from @mastra/mcp, raise its 60-second timeout, and call the tools directly or from an Agent, with tested code.
- [Integrations: all articles](https://uprock.ai/integrations.md)

## References

1. [Cursor docs, Model Context Protocol (MCP)](https://cursor.com/docs/mcp), checked 21 Oct 2026
2. [Cursor help, MCP setup](https://cursor.com/help/customization/mcp), checked 21 Oct 2026
3. [Cursor docs, Permissions (MCP allowlist)](https://cursor.com/docs/reference/permissions), checked 21 Oct 2026
4. [Cursor docs, Rules](https://cursor.com/docs/rules), checked 21 Oct 2026
5. [Cursor docs, Skills](https://cursor.com/docs/skills), checked 21 Oct 2026
6. [Cursor docs, CLI (using MCP)](https://cursor.com/docs/cli/using), checked 21 Oct 2026
7. [UpRock, setup for every agent](https://uprock.ai/agents.md), checked 21 Oct 2026
8. [UpRock, everything in one file (API, CLI, MCP, pricing)](https://uprock.ai/llms-full.txt), checked 21 Oct 2026

## Get started

Get an API key: https://uprock.ai/app/api-keys

Paste this into your agent:

```text
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.
```

Setup for every client (MCP, skill, CLI): https://uprock.ai/agents.md
