Skip to main content
Glama
proxycove
by proxycove
README.md
# ProxyCove MCP Server

**Let an AI agent buy and manage real proxies — no signup, no dashboard, no card details in the chat.**

[ProxyCove](https://proxycove.com) sells residential, mobile and datacenter proxies prepaid per GB across 170+ countries. This MCP server exposes that as 14 tools, so an agent can create its own account, hand the human a payment link, buy a proxy and get working connection credentials — all inside one conversation.

```
https://mcp.proxycove.com/mcp     ← remote endpoint (streamable HTTP)
```

> **Status: live.** The endpoint above is public — connect and use it.
> Anonymous calls are allowed for `get_pricing`, `list_locations` and
> `create_account`; everything else needs a key. Clients that prefer OAuth 2.1
> can discover it at `/.well-known/oauth-protected-resource`.

**Who it's for:** developers building scraping / automation / testing agents, anyone whose agent needs an exit IP in a specific country, and MCP clients that want a proxy provider they can call directly instead of wrapping a REST API by hand.

**What an agent can do end to end**

1. `create_account` → gets an API key (`pc_live_...`). No registration form, no email required.
2. `create_topup` → gets a `payment_url`. The **human** pays in the browser (SBP, bank card, crypto).
3. `buy_proxy` → gets `http://login:password@go.proxycove.com:824` and starts using it.

Prices: **residential $2.7/GB · mobile $3.8/GB · datacenter $1.5/GB.** Traffic is prepaid and does not expire while the account is active.

---

## Quick start

The server is remote — nothing to install. Add the endpoint to your client and (once you have a key) send it as a bearer token.

You can add the connector **without a key**: `get_pricing`, `list_locations` and `create_account` work unauthenticated. Run `create_account`, save the returned `pc_live_...` key, put it in the header, reconnect.

### Claude Code

```bash
claude mcp add --transport http proxycove https://mcp.proxycove.com/mcp \
  --header "Authorization: Bearer pc_live_YOUR_KEY"
```

Without a key yet (to call `create_account` first):

```bash
claude mcp add --transport http proxycove https://mcp.proxycove.com/mcp
```

### Claude Desktop / Claude.ai (Connectors)

Settings → **Connectors** → **Add custom connector**

| Field | Value |
| --- | --- |
| Name | `ProxyCove` |
| Remote MCP server URL | `https://mcp.proxycove.com/mcp` |

Until OAuth ships, Claude Desktop can also reach the server through the stdio bridge, which is where the header lives:

```json
{
  "mcpServers": {
    "proxycove": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://mcp.proxycove.com/mcp",
        "--header", "Authorization: Bearer pc_live_YOUR_KEY"
      ]
    }
  }
}
```

### ChatGPT (developer mode)

Settings → **Connectors** → **Advanced** → enable **Developer mode**, then **Create**:

| Field | Value |
| --- | --- |
| Name | `ProxyCove` |
| MCP server URL | `https://mcp.proxycove.com/mcp` |
| Authentication | Access token / API key → paste `pc_live_YOUR_KEY` |

### Cursor

`~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (per project):

```json
{
  "mcpServers": {
    "proxycove": {
      "url": "https://mcp.proxycove.com/mcp",
      "headers": {
        "Authorization": "Bearer pc_live_YOUR_KEY"
      }
    }
  }
}
```

### Codex CLI

`~/.codex/config.toml`:

```toml
[mcp_servers.proxycove]
url = "https://mcp.proxycove.com/mcp"
bearer_token_env_var = "PROXYCOVE_API_KEY"
```

```bash
export PROXYCOVE_API_KEY=pc_live_YOUR_KEY
```

### Any other MCP client

```json
{
  "mcpServers": {
    "proxycove": {
      "type": "http",
      "url": "https://mcp.proxycove.com/mcp",
      "headers": {
        "Authorization": "Bearer pc_live_YOUR_KEY"
      }
    }
  }
}
```

Transport is **streamable HTTP, stateless** — `POST` only, one JSON-RPC request per call, no SSE stream and no session id. `GET`/`DELETE` on the endpoint return `405`.

---

## Tools

| Tool | What it does | API key |
| --- | --- | --- |
| `get_pricing` | Price per GB (USD) for residential / mobile / datacenter | no |
| `list_locations` | Countries available for a given proxy type | no |
| `create_account` | Creates an account with no signup form, returns a `pc_live_...` key | no |
| `get_account` | Balance (USD), attached email, number of active proxies | yes |
| `create_topup` | Creates an invoice, returns `payment_url` for the human | yes |
| `get_payment_status` | Invoice status: `pending` / `paid` / `cancelled` | yes |
| `buy_proxy` | Buys a proxy from the balance, returns connection credentials | yes |
| `list_proxies` | All proxies with remaining traffic and credentials | yes |
| `get_credentials` | Connection string for one proxy | yes |
| `extend_proxy` | Adds prepaid GB to an existing proxy (credentials unchanged) | yes |
| `get_usage` | Live used / remaining traffic for one proxy | yes |
| `set_rotation` | Rotate every request ↔ sticky IP for 1–120 minutes | yes |
| `link_telegram` | Returns a code to link the account to the Telegram bot (second way back in if the key is lost) | yes |
| `attach_recovery` | Attaches an email so the human can log in on the website | yes |

Read-only tools carry `readOnlyHint`. **No tool deletes anything** — there is no destructive operation in this server, and no tool can move money out of the account.

### Connection model

Every proxy is reachable at `go.proxycove.com`:

| Port | Behaviour |
| --- | --- |
| `824` | New IP on every request |
| `10000` | Sticky IP, held for the configured 1–120 minutes |

`set_rotation` switches a proxy between the two modes; the login and password stay the same.

> After `buy_proxy`, wait ~5 seconds before the first request. The country filter takes a moment to propagate upstream, and an immediate first request may exit from another country.

---

## Authentication

* The account API key looks like `pc_live_...` and is sent as `Authorization: Bearer pc_live_...`.
* `create_account` issues one. The three no-auth tools exist precisely so an agent can bootstrap: check prices, check countries, create the account — then the human stores the key in the connector config.
* The MCP server holds no state of its own. It forwards your `Authorization` header to the ProxyCove REST API and returns the JSON response.
* Calling an authenticated tool without a key returns a structured `no_api_key` error explaining what to do — not a crash.
* **OAuth 2.1 + PKCE is coming next**, which will remove the manual header step for clients that support it. The bearer key will keep working.

---

## Payments: the agent never touches card data

This is a hard boundary, enforced by the tool design:

* `create_topup` returns a **`payment_url`**. That is all the agent gets.
* The agent gives the URL to the human, who opens it in their own browser and pays there.
* Methods: `sbp` (Russian instant bank transfer), `card_ru`, `card_international`, `crypto`, `crypto_cryptomus`. Minimum top-up **$1.50**.
* No tool accepts a card number, CVV, or any payment credential. There is no field for one anywhere in the schema.
* The agent then polls `get_payment_status` until `paid` and continues.

Purchases (`buy_proxy`, `extend_proxy`) spend the **prepaid balance only**. An agent cannot spend money that the human has not already deposited.

---

## Self-hosting / running locally

The server is a thin, stateless wrapper over the public ProxyCove REST API — roughly 200 lines of Node with no database, no cache and no persistence. Self-host it if you want to audit the traffic, pin a version, or run it inside your own network.

**Requirements:** Node 20+ (or Docker).

```bash
git clone https://github.com/proxycove/mcp-server.git
cd mcp-server
npm install

export BACKEND_BASE_URL=https://proxycove.com
export MCP_PORT=4010
export MCP_SECRET_PATH=/mcp

npm start
# → http://localhost:4010/mcp
```

Docker:

```bash
docker build -t proxycove-mcp .
docker run -d --name proxycove-mcp \
  -p 4010:4010 \
  -e BACKEND_BASE_URL=https://proxycove.com \
  -e MCP_PORT=4010 \
  -e MCP_SECRET_PATH=/mcp \
  proxycove-mcp
```

### Environment variables

| Variable | Default | Purpose |
| --- | --- | --- |
| `MCP_PORT` | `4010` | Port the HTTP server listens on |
| `MCP_SECRET_PATH` | `/mcp` | Path the MCP endpoint is mounted at |
| `BACKEND_BASE_URL` | `http://backend:5000` | Base URL of the ProxyCove API; use `https://proxycove.com` when self-hosting |
| `PUBLIC_API_INVITE_CODE` | *(empty)* | Optional invite code forwarded by `create_account` |

Configuration is entirely from env — there is no config file and no secret baked into the image.

`GET /healthz` returns `{ "ok": true, "service": "proxycove-mcp" }`.

Point your client at your own instance the same way:

```json
{
  "mcpServers": {
    "proxycove": {
      "type": "http",
      "url": "http://localhost:4010/mcp",
      "headers": { "Authorization": "Bearer pc_live_YOUR_KEY" }
    }
  }
}
```

---

## REST API (non-MCP integrations)

Everything the MCP server does is available directly over HTTP — same endpoints, same key:

* Base URL: **`https://proxycove.com/api/v1`**
* OpenAPI spec: **`https://proxycove.com/api/v1/openapi.json`**

```bash
curl https://proxycove.com/api/v1/pricing

curl https://proxycove.com/api/v1/account \
  -H "Authorization: Bearer pc_live_YOUR_KEY"
```

Use this if you are writing a normal client, a LangChain/LlamaIndex tool, a CI job, or anything that is not an MCP host.

---

## Security

* **The API key is shown once**, at `create_account`. Save it immediately — ProxyCove cannot show it again.
* A key can be **revoked at any time** from the account on [proxycove.com](https://proxycove.com) or by writing to support. Revoking it kills agent access instantly; the balance and proxies stay.
* Run `attach_recovery` or `link_telegram` early. Without a recovery channel on the account, a lost key means a lost balance.
* Treat `pc_live_...` like a password: it is a spending credential. Never paste it into a shared chat, a public repo, or an issue on this tracker.
* Prefer env-var indirection (`bearer_token_env_var`, `${VAR}` substitution) over literal keys in config files that get committed.
* Found a vulnerability, or something that lets an agent spend more than it should? Email **support@proxycove.com** — please do not open a public issue for security reports.

---

## Contributing

Issues and pull requests are welcome — bug reports, client-config recipes for MCP hosts not covered above, and tool-description improvements especially. The tool schemas are the product surface here; if a description misled your agent, that is a bug worth filing.

## License

[MIT](LICENSE) © ProxyCove

---

**Website:** [proxycove.com](https://proxycove.com) · **MCP endpoint:** `https://mcp.proxycove.com/mcp` · **REST API:** `https://proxycove.com/api/v1` · **Support:** support@proxycove.com