Products
Datacenter proxies from $19/mo Rotating proxies from $25/mo ISP proxies from $33/mo Dedicated proxies from $3.50/mo UDP proxies from $5/mo Try proxies
Use cases
Data & scraping AI services Social media & messaging E-commerce & finance Media & entertainment Marketing & ads Automation & tools All use cases →
Pricing
Full pricing table All locations Money-back guarantee
Resources
Dashboard guide API reference API and MCP Setup guides FAQ Blog For business About us Affiliate program
New dashboard
English
English Русский
MCP integration

How to add the PapaProxy.net MCP server to Claude Code

The PapaProxy.net MCP server gives Claude Code 56 tools for your proxy account: check stock, get quotes, buy, configure IP whitelisting, export proxy lists, and analyze errors. It’s a remote server, so there’s nothing to install: one claude mcp add command connects it, and Claude can manage the proxies behind the scrapers it writes, including on a remote server you work on over SSH.

Before you start

Step 1. Create an API key with the right scopes

In the Dashboard, open Settings → API keys, name the key (for example, “Claude Code”), and select scopes. The full key is shown once, right after creation. Scopes are enforced on our end, so they limit Claude regardless of your permission rules or permission mode.

What Claude should doScopes
Analyze only: stock, quotes, your services, usage, and errorscatalog:read, services:read, usage:read
Also configure: IP whitelisting, credentials, auto-renewalthe above plus services:write
Also pay from your balance: orders, renewals, add-ons, extra IPsthe above plus wallet:read and wallet:spend

Start without wallet:spend. Claude can still price any order and show you the quote; add the scope, or create a second key, when you actually want it to buy. The full scope list is on the developers page.

Step 2. Add the server to Claude Code

Claude Code stores MCP servers in one of three scopes. The scope decides where the server loads and whether your team gets it too.

ScopeWhere it loadsStored in
local (default)Only the project you ran the command in, only for you~/.claude.json, under that project
userAll your projects on this machine~/.claude.json
projectEveryone who works in the repository.mcp.json in the project root

Option A: one command

For a personal setup, add the server in user scope so it’s available in every project. Replace fb_YOUR_API_KEY with your key and keep Bearer and the space before it.

macOS and Linux
claude mcp add --transport http --scope user papaproxy-net \
  https://papaproxy.net/account_new/api/v1/mcp \
  --header "Authorization: Bearer fb_YOUR_API_KEY"
Windows (PowerShell or Command Prompt), one line
claude mcp add --transport http --scope user papaproxy-net https://papaproxy.net/account_new/api/v1/mcp --header "Authorization: Bearer fb_YOUR_API_KEY"

Claude Code prints an Added ... line on success. Drop --scope user to limit the server to the current project. The key is saved in plain text in ~/.claude.json; if that’s a concern, use Option B.

Option B: .mcp.json with the key in an environment variable

Use this to share the setup with a team through Git. Claude Code expands ${VAR} in url and headers, so the committed file names the variable and each developer keeps their own key outside the repository.

.mcp.json in the project root
{
  "mcpServers": {
    "papaproxy-net": {
      "type": "http",
      "url": "https://papaproxy.net/account_new/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer ${PAPAPROXY_API_KEY}"
      }
    }
  }
}
~/.zshrc or ~/.bashrc
export PAPAPROXY_API_KEY="fb_..."

Open a new terminal, or run source ~/.zshrc, before starting claude, so it sees the variable. On Windows, set the variable in System Properties → Environment Variables. The first time you run claude in the project, it asks you to approve servers from .mcp.json; until you do, the server shows Pending approval.

Step 3. Check the connection

Run this in your terminal. The status should read ✔ Connected; if it reads ✘ Failed to connect, the line also shows the HTTP status and the error text from our server.

Terminal
claude mcp get papaproxy-net

Inside a session, /mcp lists the server with its tool count. Then send a request that can’t cost anything:

Prompt
Using the papaproxy-net MCP server, list the countries where datacenter proxies are in stock, then quote 100 US IPs for one month. Don't buy anything.

Claude should call list_countries and quote_composite and reply with a price in dollars. Quotes are free and don’t reserve or charge anything. If a call fails, see Troubleshooting.

Permissions: what Claude can run without asking

Claude Code asks before it calls an MCP tool unless a permission rule allows it. In rules, a tool is named mcp__papaproxy-net__<tool>. Rules are checked in a fixed order: deny, then ask, then allow. That means an ask rule keeps a paid tool under approval even if a broader rule allows it. Add rules with /permissions in a session, or put them in .claude/settings.json (this project) or ~/.claude/settings.json (all projects):

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__papaproxy-net__list_countries",
      "mcp__papaproxy-net__quote_composite",
      "mcp__papaproxy-net__list_services",
      "mcp__papaproxy-net__get_service",
      "mcp__papaproxy-net__list_proxy_ips",
      "mcp__papaproxy-net__get_whitelist",
      "mcp__papaproxy-net__get_usage_overview",
      "mcp__papaproxy-net__get_diagnostics",
      "mcp__papaproxy-net__get_recommendations",
      "mcp__papaproxy-net__wallet_balance"
    ],
    "ask": [
      "mcp__papaproxy-net__order_composite",
      "mcp__papaproxy-net__order_dedicated",
      "mcp__papaproxy-net__add_ips",
      "mcp__papaproxy-net__renew_service",
      "mcp__papaproxy-net__purchase_addon",
      "mcp__papaproxy-net__refresh_ips",
      "mcp__papaproxy-net__rotate_proxy_credentials",
      "mcp__papaproxy-net__remove_whitelist_ip",
      "mcp__papaproxy-net__cancel_service",
      "mcp__papaproxy-net__disable_addon"
    ]
  }
}

The allow list holds read-only tools: nothing changes and nothing is charged. The ask list holds tools that charge your balance or change access; cancel_service and disable_addon also require an explicit confirmation from Claude. The real boundary is still the key: a key without wallet:spend can’t pay for anything, whatever permission mode Claude Code runs in, and a key with it can pay only from your account balance.

What to do with it in Claude Code

Claude Code already writes and runs your scrapers from the terminal. With the MCP server connected, the same session can manage the proxies they use.

Build a scraper on live proxies“Write a Python scraper for this site that loads the proxy list from the PapaProxy.net API at startup and reads the key from PAPAPROXY_API_KEY.” Claude checks your services with list_services and list_proxy_ips, then writes code that fetches the list at runtime, so a proxy list refresh doesn’t break the scraper.
Whitelist the server you’re on“Add this machine’s IP to IP whitelisting on my datacenter plan.” get_my_ip returns the IP the request comes from, so when Claude Code runs on a remote server, that’s the server’s public IP, and add_whitelist_ip adds it before the first run.
Get a daily error reportRun Claude Code without a session, for example from cron: claude -p "Summarize yesterday's proxy errors" --allowedTools "mcp__papaproxy-net__get_usage_timeseries" "mcp__papaproxy-net__get_diagnostics". In -p mode no one can approve a call, so list the read-only tools the run needs.
Price before you buy“What would 500 IPs across Germany and the Netherlands cost for 3 months?” Claude checks stock with list_countries, prices the mix with quote_composite, and stops there. When you confirm, a key with wallet:spend places the order with an idempotency key, so a retry doesn’t create a duplicate.

Large proxy lists. list_proxy_ips returns the whole list of a service in one response. Claude Code warns when a tool response exceeds 10,000 tokens and cuts it at 25,000 tokens by default, which a package of a few thousand IPs can reach. For big packages, ask Claude to write code that downloads the list through the REST API instead of reading it into the chat, or raise the limit with MAX_MCP_OUTPUT_TOKENS.

All 56 tools, with the scope each needs and the REST endpoint it calls, are in the API reference. When a workflow becomes a fixed job, move it to the REST API: plain code is cheaper and easier to test than an agent.

Troubleshooting: Claude Code MCP not working

Start with claude mcp list or claude mcp get papaproxy-net: they show the status of the server, configuration warnings, and the error our server returned.

What you seeCause and fix
Missing or malformed Authorization headerThe --header option is missing, or the value doesn’t start with Bearer . With Option B, check that PAPAPROXY_API_KEY is set in the terminal you start claude from.
Invalid or revoked API keyA typo, a revoked key, or the placeholder fb_YOUR_API_KEY left in the command. Remove the server with claude mcp remove papaproxy-net and add it again with the right key.
Leading or trailing whitespace in: headers.AuthorizationThe pasted key carries a space or a line break. Claude Code uses the value as written, so remove the server and add it again without it.
⏸ Pending approvalThe server comes from .mcp.json and you haven’t approved it yet. Run claude in the project and approve it.
A warning that names PAPAPROXY_API_KEYThe variable isn’t set. Add the export line, open a new terminal, and start claude again.
A warning about the same server name in more than one scopeThe server was added twice, for example in local and user scope. Keep one and remove the other with claude mcp remove papaproxy-net --scope local.
A tool call fails with a scope errorThe key doesn’t have the scope that tool needs. Errors come back to Claude as text with a short code and an explanation, so ask it which scope is missing, then add it to a new key.
Calls fail after many requests in a rowThe limit is 60 requests per minute per account, shared by all your API keys and the MCP server. Wait a minute, or ask Claude to batch its work.
The command fails on WindowsThe \ line breaks only work in macOS and Linux shells. Use the one-line Windows command.

If the status shows a server error rather than a configuration problem, contact support with the time of the failed call; we’ll check it on our end.

Other MCP clients

The same URL and header work in other clients; only the config file and its format differ. There are step-by-step guides for Cursor and n8n, and setup for VS Code, Windsurf, Cline, Codex CLI, Gemini CLI, and Claude Desktop is on the developers page.

Frequently asked questions

Where does Claude Code store MCP servers?

Servers added in local or user scope are stored in ~/.claude.json in your home folder; local ones sit under the project they belong to. Servers in project scope are stored in .mcp.json in the project root, which you can commit to Git. Run claude mcp list to see every server Claude Code loads in the current folder.

How do I add a remote MCP server with an API key to Claude Code?

Pass the key in a header: claude mcp add --transport http papaproxy-net https://papaproxy.net/account_new/api/v1/mcp --header "Authorization: Bearer <key>". To keep the key out of config files, add the server to .mcp.json with "Authorization": "Bearer ${PAPAPROXY_API_KEY}" and set the variable in your shell.

Does the MCP server cost extra?

No. The MCP server and the REST API are included with every PapaProxy.net account. You pay only for the proxies and add-ons you order, at the same prices as in the Dashboard.

Can Claude Code buy proxies without asking me?

Only if its key includes the wallet:spend scope, and only up to your account balance. Without that scope, paid calls are rejected on our end in any permission mode. With it, keep paid tools in the ask list of your permission rules and ask Claude to show a quote before it orders.

Can I use it in scripts and cron jobs?

Yes. claude -p runs a single prompt without a session and can call MCP tools you allow with --allowedTools. Use a key without wallet:spend for unattended runs. For a job that never changes, the REST API is simpler.