# Porkbun MCP MCP Server

> **Porkbun MCP MCP Server** is a hosted, multitenant Model Context Protocol (MCP) server run by **MewCP** (https://mewcp.com), giving AI agents managed access to Porkbun MCP.
>
> MewCP takes care of all MCP infrastructure for you — credential storage, OAuth flows,
> token refresh, and production-grade auto-scaling — so your AI agents can connect to
> third-party services and run freely without you managing any MCP server yourself.
>
> Server page:  https://mewcp.com/mcp/porkbun-mcp
> MewCP docs:   https://docs.mewcp.com
> Full catalog: https://mewcp.com/llms.txt

---

## About

Porkbun lets AI agents search domain availability and pricing, register and transfer domains, manage DNS and DNSSEC records, configure URL forwarding and email, provision hosting, deploy static websites, retrieve SSL certificates, and connect domains to Cloudflare. Built-in spending limits and safety checks help protect domain operations

---

## Details

- Server ID: `porkbun-mcp`
- Version: 0.52.0
- Tools: 116
- Authentication: OAuth, managed by MewCP
- Transport: http

---

## Access

The gateway URL below serves your **entire MewCP toolset**, not this server on its
own. Pasting a config snippet is not enough — Porkbun MCP has to be in the toolset
first. In order:

1. Add Porkbun MCP to your toolset at https://mewcp.com/mcp/porkbun-mcp
2. Connect your Porkbun MCP account (OAuth); MewCP stores the credential and attaches it to each call
3. Copy your MewCP API key from the dashboard (Developer)
4. Configure your client with the snippet for it below

Once connected, an agent does **not** see this server's tools as top-level tools.
It sees four meta-tools and reaches everything through them:

- `search(query)` — find tools by keyword across the toolset
- `get_schema(tools)` — full description and arguments for the tools you picked
- `list_accounts(provider)` — only when one app has several connected accounts
- `call_tool(server_maskedId, tool_name, args)` — execute

So the list below is what `search` can return for this server, not a set of
callable tool names on their own.

---

## Tools (116)

Descriptions are truncated to 160 characters; call `get_schema`
for the full text and the argument schema. Where a tool is annotated, its type
is shown — treat `destructive` as irreversible.

- `ping` _(read)_ — Verify the Porkbun API connection and credentials. Returns the caller's public IP, whether the API key is valid, `account` (the username of the Porkbun account…
- `check_domain` _(read)_ — Check whether a single domain is available for registration and what it costs. Returns availability (`avail: yes|no`), registration price, renewal price,…
- `check_domains` _(read)_ — Check up to 25 domains for availability and price in ONE call. Prefer this over calling `check_domain` in a loop whenever you have more than one name: Porkbun…
- `get_registration_requirements` _(read)_ — Get a TLD's registration requirements as JSON Schema. Returns whether the TLD is registerable via the API (`apiRegisterable`), the `register_domain` request…
- `get_pricing` _(read)_ — Get current Porkbun pricing: registration, renewal and transfer prices per TLD in USD. No authentication required. **Pass `tlds` whenever you know which TLDs…
- `list_marketplace` _(read)_ — Browse domains for sale on Porkbun Marketplace: names other Porkbun customers listed themselves, not new registrations. This is ONE aftermarket source; to find…
- `list_domains` _(read)_ — List domains in the authenticated Porkbun account. Returns one page (up to 1000) with metadata: expire date, auto-renew, security lock, WHOIS privacy, API…
- `get_domain` _(read)_ — Get the metadata for a single domain in the authenticated account: status, TLD, create date, expire date, security lock, WHOIS privacy, auto-renew, API access…
- `get_balance` _(read)_ — Get the available account credit balance for the authenticated Porkbun account. Returns the balance in cents (integer) and a human-readable display string…
- `get_auto_topup` _(read)_ — Read the account's auto top-up configuration: whether it is on, the balance threshold that triggers it, the amount added, whether a payment method is actually…
- `top_up_with_usdc` _(write)_ — Add account credit by paying USDC on Base, through a Coinbase checkout. Use it to add credit when a purchase failed with INSUFFICIENT_FUNDS and there is no…
- `top_up_with_card_mpp` _(write)_ — Get a payment link that adds account credit when paid with the user's CARD over MPP (Machine Payments Protocol), using a Stripe Shared Payment Token from their…
- `send_phone_verification_code` _(write)_ — Text a verification code to the phone number on the user's Porkbun account, to clear VERIFICATION_REQUIRED (purchases and top-ups need a verified phone and…
- `confirm_phone_verification` _(write)_ — Verify the account's phone number with the code the user received from `send_phone_verification_code`. On success, retry what failed with…
- `send_email_verification_code` _(write)_ — Email a verification code to the email address on the user's Porkbun account, to clear VERIFICATION_REQUIRED (purchases and top-ups need a verified email and…
- `confirm_email_verification` _(write)_ — Verify the account's email address with the code from the verification email (`send_email_verification_code`, or any verification email from the last 3 days).…
- `get_usdc_topup_status` _(read)_ — Check a USDC top-up from `top_up_with_usdc`: `state` is ACTIVE (not paid yet), PROCESSING (paid, being credited), COMPLETED (credited: `credited` true),…
- `list_invoices` _(read)_ — List the account's invoices (one per order), newest first, with each one's date, state (`PAID`, `PARTIALLY_REFUNDED`, `REFUNDED` or `UNPAID`), net total in…
- `get_invoice` _(read)_ — Get one invoice as data: who it is billed to, how it was paid (card brand and last four only), each line with its product, term, resulting domain expiry and…
- `get_invoice_pdf` _(read)_ — Get an invoice PDF: the same document as Download PDF on porkbun.com. The file comes back as an embedded PDF resource (for clients that can show or save…
- `configure_auto_topup` _(destructive)_ — Set the top-up amount, and/or turn auto top-up on or off. `amount_cents` (integer US cents) is what a top-up adds, and it stands on its own:…
- `top_up_account_credit` _(write)_ — **Charges the user's saved payment method** (`amount_cents` is integer cents: 803 charges $8.03; tell the user the dollar figure first) and adds the money to…
- `get_api_settings` _(read)_ — Get the account's API spend controls and the limits actually enforced, in cents. `spendLimit` caps everything bought over the API in a calendar month…
- `get_nameservers` _(read)_ — Get the current nameservers configured for a domain in the authenticated account. Returns an array of nameserver hostnames, read live from the registry.…
- `list_dns_records` _(read)_ — List all DNS records for a domain in the authenticated account. Returns each record's id, type (A, AAAA, CNAME, MX, TXT, etc.), name (subdomain or empty for…
- `search_closeouts` _(read)_ — Search expired-domain closeouts: names that did not sell at auction and are now offered at a fixed price that descends on a schedule. No bidding — the first…
- `search_aftermarket` _(read)_ — Find registered domains that are FOR SALE on the aftermarket: Afternic, Sedo, Atom, NameBright and DAX listings and auctions, plus Porkbun Marketplace, merged…
- `get_closeout` _(read)_ — Get one closeout plus `totalPrice` — the binding amount, which is the closeout price plus the registration year that comes with it. Always call this before…
- `buy_closeout` _(write)_ — **Spends account credit, or pays directly by card (`pay_with_card`) or in USDC (`pay_with_usdc`).** Buys a closeout at its current price and claims the name.…
- `get_transfer_setup` _(read)_ — Report where a held inbound transfer is and what it is waiting on: whether it is held at PENDINGDNS, whether its DNS zone exists, how many records it holds,…
- `prepare_transfer` _(write)_ — Create the Porkbun DNS zone for a domain whose inbound transfer is held, so records can be added before the domain moves. Step 2 of the no-downtime sequence…
- `start_transfer` _(destructive)_ — Release a held inbound transfer to the registry. Final step of the no-downtime sequence, and the only thing that releases a hold — nothing does it on a timer,…
- `cancel_transfer` _(destructive)_ — **Cancels a paid inbound transfer and refunds the order.** Confirm with the user first. The order is deliberate: mark cancelled locally, withdraw at the…
- `update_transfer_auth_code` _(destructive)_ — Replace the authorization code on an inbound transfer that stalled because the code was wrong, and re-queue it — instead of cancelling, refunding and…
- `scan_dns_records` _(read)_ — Discover the DNS records a domain currently publishes by querying its live authoritative nameservers. Writes nothing. Use this before moving a domain to…
- `import_dns_records` _(write)_ — Create many DNS records on a Porkbun domain in one call — the companion to scan_dns_records for keeping a transferred domain working. Pass `records` to import…
- `list_dnssec_records` _(read)_ — List the DNSSEC DS records currently submitted to the registry for a domain. Returns key tag, algorithm, digest type, and digest. Use this to verify DNSSEC…
- `list_url_forwards` _(read)_ — List all URL forwarding rules configured for a domain. Each entry includes its `id` (used by `delete_url_forward`), the source subdomain, the destination URL,…
- `list_glue_records` _(read)_ — List glue records for a domain. Glue records associate a host (e.g. `ns1.example.com`) with one or more IP addresses at the registry, used when running your…
- `list_transfers` _(read)_ — List all in-progress and recent inbound domain transfers for the authenticated account. Returns each transfer's domain, status (`NEW`, `PENDINGAUTH`,…
- `get_transfer_status` _(read)_ — Get the status of a specific inbound transfer for a domain. Useful for polling after `transfer_domain` to know when the transfer completes (typical window: 5-7…
- `get_ssl_bundle` _(read)_ — Retrieve the free Porkbun-issued SSL certificate bundle for a domain. Returns the certificate chain, private key, and public key (PEM-encoded strings). Porkbun…
- `get_contacts` _(read)_ — Get the four contacts (registrant, admin, tech, billing) for a domain in the authenticated account, with their current field values (name, organization,…
- `register_domain` _(write)_ — **Spends account credit, or pays directly by card (`pay_with_card`) or in USDC (`pay_with_usdc`).** Registers a new domain on the authenticated Porkbun…
- `renew_domain` _(write)_ — **Spends account credit, or pays directly by card (`pay_with_card`) or in USDC (`pay_with_usdc`).** Renews an existing domain in the authenticated account. The…
- `transfer_domain` _(write)_ — **Spends account credit, or pays directly by card (`pay_with_card`) or in USDC (`pay_with_usdc`).** Initiates a transfer of an external domain into Porkbun.…
- `update_auto_renew` _(destructive)_ — Turn auto-renewal on or off for a domain in the authenticated account. When auto-renew is on, Porkbun automatically charges your account credit at expiration.…
- `update_nameservers` _(destructive)_ — Replace the nameservers for a domain in the authenticated account. **This is a full replacement, not an append** — the supplied list becomes the complete set…
- `update_contacts` _(destructive)_ — Edit a domain's contacts. Provide `contacts` keyed by role with ANY subset of registrant/admin/tech/billing (unspecified roles keep their current values), or a…
- `list_hosting_plans` _(read)_ — List the hosting plans provisionable via the API, with price (cents — pass as `acknowledged_cost_cents` to create_hosting), interval, trial length, and…
- `create_hosting` _(destructive)_ — Provision hosting for a domain in the account — Secure Static Hosting OR Cloud for WordPress (a managed WordPress site), chosen by `sku`. The domain's FIRST…
- `get_hosting` _(read)_ — Get Secure Static Hosting status for a domain (plan, server, trial, expiry, auto-renew), or null if the domain has no hosting. When ACTIVE, deploy_site…
- `deploy_site` _(destructive)_ — Upload static files to a domain's Secure Static Hosting. `files` is an array of { path, content } where `content` is the file's bytes base64-encoded. A `path`…
- `list_hosting_files` _(read)_ — List file/directory names under an optional `path` in a domain's Secure Static Hosting space. Calls the Porkbun Hosting API (https://porkbun.com/llms/hosting).
- `delete_hosting_file` _(destructive)_ — Delete a file or directory at `path` in a domain's Secure Static Hosting space. Idempotent: a path that is already gone succeeds with `alreadyAbsent: true`, so…
- `make_hosting_dir` _(write)_ — Create a directory (and any missing parent directories) at `path` in a domain's Secure Static Hosting space. deploy_site already auto-creates the directories…
- `create_wp_credentials` _(write)_ — CLOUD FOR WORDPRESS ONLY. Mint a WordPress Application Password for a domain's managed WordPress site so you can drive it over the WP REST API at…
- `list_wp_credentials` _(read)_ — CLOUD FOR WORDPRESS ONLY. List the WordPress application passwords on a domain's site (uuid, name, created, last used) so you can audit them or pick one to…
- `delete_wp_credentials` _(destructive)_ — CLOUD FOR WORDPRESS ONLY. Revoke a WordPress application password by `uuid` (from list_wp_credentials), or every one for the user with `all: true`. Anything…
- `delete_hosting` _(destructive)_ — Deprovision (cancel) Secure Static Hosting for a domain; teardown is scheduled by Porkbun. Note: the domain has already used its one free trial, so…
- `request_api_key` _(write)_ — Start creating a new LIVE Porkbun API key that the account holder approves in their browser (no credentials needed to call this). Returns `authUrl`: give it to…
- `retrieve_api_key` _(write)_ — Collect the API key the user approved after `request_api_key`. Returns the public key (`apikey`, pk1_...) and the secret key (`secretapikey`, sk1_...) exactly…
- `mock_call` _(read)_ — Get a schema-accurate EXAMPLE response for any API endpoint with NO credentials — nothing to set up. Mirrors the real path under /mock (e.g. path…
- `create_dns_record` _(write)_ — Create a DNS record on a domain in the authenticated account. Returns the new record's `id` so it can be referenced by `update_dns_record` and…
- `preflight_domain` _(read)_ — Ask whether a change is about to break a domain, BEFORE making it. Read-only, free, and the right thing to call before changing nameservers, transferring a…
- `list_dns_restore_points` _(read)_ — List the saved versions of a domain's DNS zone, newest first. **DNS is the one layer with no undo built in, and this is it** — if a record was deleted or…
- `diff_dns_restore_point` _(read)_ — Compare a DNS restore point with the live zone before changing anything. Always do this before `restore_dns_zone` — it is free and it is the difference between…
- `restore_dns_zone` _(destructive)_ — Put a domain's DNS zone back to a saved restore point. Call `diff_dns_restore_point` first and show the user what will change. **By default this only ADDS BACK…
- `update_dns_record` _(destructive)_ — Update an existing DNS record by its numeric `record_id` (obtained from `list_dns_records`). All fields except `record_id` and `domain` are optional — pass…
- `delete_dns_record` _(destructive)_ — Delete a single DNS record by its numeric `record_id` (obtained from `list_dns_records`). Idempotent: deleting an already-deleted record returns success. Free.…
- `create_dnssec_record` _(destructive)_ — Submit a DNSSEC DS record to the registry for a domain. Use when you sign DNS yourself (custom nameservers running BIND/Knot/PowerDNS/etc.) and need to publish…
- `delete_dnssec_record` _(destructive)_ — Remove a DNSSEC DS record from the registry for a domain, identified by key tag. Use when retiring a key. Idempotent: deleting a non-existent key tag returns…
- `create_url_forward` _(destructive)_ — Add a URL forwarding rule for a domain. Forwards a subdomain (or apex if `subdomain` is empty/omitted) to an arbitrary destination URL. Useful for redirects…
- `delete_url_forward` _(destructive)_ — Delete a URL forwarding rule by its `id` (obtained from `list_url_forwards`). Idempotent.
- `list_email_forwards` _(read)_ — List the email forwards on a domain: each `address` at the domain and the `forwardTo` mailbox it is delivered to (one address can forward to several). Also…
- `create_email_forward` _(write)_ — Forward an address at the domain (e.g. `info@example.com`) to another mailbox. Free, up to the domain's limit. No catch-all or wildcard forwards, and an…
- `delete_email_forward` _(destructive)_ — Delete one email forward, named by its `address` and `forward_to` (from `list_email_forwards`; an address can forward to several mailboxes, so both are…
- `list_mailboxes` _(read)_ — List a domain's email hosting mailboxes (real inboxes at the domain, read over IMAP/POP or webmail), with `status`, `address`, whether each is the free…
- `setup_mailbox` _(write)_ — Give a waiting mailbox (already paid for, or the free trial that comes with a domain registration) its address and password. Free. If none is waiting the…
- `create_mailbox` _(write)_ — **Spends account credit, or pays directly by card (`pay_with_card`) or in USDC (`pay_with_usdc`).** Buy one email hosting mailbox ($36.00 a year, renewing…
- `renew_mailbox` _(write)_ — **Spends account credit, or pays directly by card (`pay_with_card`) or in USDC (`pay_with_usdc`).** Add a year to an email hosting mailbox now, at its…
- `set_email_password` _(destructive)_ — Change the password of an email hosting mailbox (an active one, from `list_mailboxes`). The new password needs 12-72 characters with an upper case letter, a…
- `create_glue_record` _(write)_ — Create a glue record for a host on a domain. Used when running your own nameservers on the same domain they serve (e.g. `ns1.example.com` serving…
- `update_glue_record` _(destructive)_ — Update the IP addresses associated with an existing glue record. Replaces the full IP list — pass all IPs you want set, not just additions. Idempotent.
- `delete_glue_record` _(destructive)_ — Delete a glue record by host on a domain. Idempotent: deleting a non-existent glue record returns success.
- `list_doc_topics` _(read)_ — List the available Porkbun API documentation topics. Returns the docs index (Markdown) — every per-topic page (e.g. dns, domain, webhooks, ssl, pricing) with a…
- `read_doc` _(read)_ — Read a Porkbun documentation page as Markdown. Pass a `topic` from list_doc_topics (e.g. `dns`, `domain`, `webhooks`, `ssl`, `pricing`, `account`,…
- `search_docs` _(read)_ — Keyword-search the full Porkbun API reference and return the most relevant sections (endpoints/topics) as Markdown. Use for 'how do I…' questions — e.g.…
- `get_webhook_event_types` _(read)_ — List the event types you can subscribe a webhook endpoint to. Returns event-type strings like `domain.registered`, `domain.renewed`,…
- `list_webhooks` _(read)_ — List the webhook endpoints registered on the authenticated account. Each endpoint includes its id, URL, subscribed events, status (ACTIVE|DISABLED),…
- `get_webhook` _(read)_ — Fetch a single webhook endpoint by its numeric id, including its signing secret and delivery health (consecutive failures, last success/failure).
- `list_webhook_deliveries` _(read)_ — List recent webhook delivery attempts (newest first), across all endpoints or filtered to one. Each row reports event type, event id, status…
- `get_webhook_delivery` _(read)_ — Fetch a single webhook delivery by id, including the full JSON payload that was (or will be) sent and its delivery status. Get delivery ids from…
- `create_webhook` _(write)_ — Register a webhook endpoint. Porkbun will POST a signed JSON payload to `url` whenever a subscribed event occurs. Returns the new endpoint including its…
- `update_webhook` _(destructive)_ — Update a webhook endpoint. Only the supplied fields change. Set `status` to `DISABLED` to pause deliveries or `ACTIVE` to resume (resuming also clears the…
- `rotate_webhook_secret` _(destructive)_ — Generate a new signing secret for a webhook endpoint and return the endpoint with the new secret. Deliveries are signed with the new secret immediately, so…
- `test_webhook` _(write)_ — Send a `webhook.test` event to an endpoint to confirm it's reachable and that signature verification works. The endpoint must be ACTIVE. Delivery happens…
- `resend_webhook` _(write)_ — Re-queue a past webhook delivery to its endpoint. Clones the delivery into a fresh attempt, reusing the ORIGINAL event id — so a consumer that dedupes on…
- `delete_webhook` _(destructive)_ — Delete a webhook endpoint by id. Deliveries stop immediately. Idempotent in effect: deleting a non-existent endpoint returns an error you can safely ignore.
- `get_cloudflare_connection` _(read)_ — Check whether this Porkbun account is connected to a Cloudflare account, and which one. THIS IS THE POLL TARGET for the connect flow. Connecting is a HUMAN…
- `list_cloudflare_inventory` _(read)_ — List every domain in the account with its Cloudflare eligibility: `state` is eligible / warn / blocked / connected / inprogress, each with a human-readable…
- `connect_domains_to_cloudflare` _(destructive)_ — Queue domains to move into the customer's own Cloudflare account: Porkbun creates the zone there, copies over the DNS records it holds, and repoints the…
- `get_cloudflare_queue` _(read)_ — List every Cloudflare move this account has requested, with per-domain status and message. Use this to poll progress after connect_domains_to_cloudflare. Queue…
- `get_cloudflare_domain_status` _(read)_ — Get the Cloudflare move status for ONE domain, including the Cloudflare zone id once created and the nameservers Porkbun replaced (kept so the move can be…
- `retry_cloudflare_domain` _(destructive)_ — Re-queue a domain whose Cloudflare move failed or was skipped. Fails if it is already connected, already in progress, or no longer in the account — the message…
- `rollback_cloudflare_domain` _(destructive)_ — UNDO a completed Cloudflare move: point the domain's nameservers back at Porkbun, restoring the DNS Porkbun still holds. This changes authoritative DNS for a…
- `disconnect_cloudflare` _(destructive)_ — Remove this account's stored Cloudflare connection. Domains already moved stay on Cloudflare and keep resolving — this only stops Porkbun making further…
- `get_cloudflare_records` _(read)_ — List a domain's LIVE DNS records as Cloudflare holds them, each with its orange-cloud (`proxied`) state and whether it is `proxiable` at all. Once a domain has…
- `set_cloudflare_proxy` _(destructive)_ — Turn the Cloudflare proxy (orange cloud) on or off for a domain's DNS records. NOTE: connecting a domain deliberately imports every record DNS-only (grey…
- `preview_cloudflare_move` _(read)_ — Show exactly which DNS records would be copied into Cloudflare for a domain, and which would be dropped, WITHOUT queueing anything. Use this to tell a user…
- `get_cloudflare_zone` _(read)_ — Get what CLOUDFLARE currently says about a domain's zone (status, paused, its nameservers, activation date) rather than what Porkbun's queue row remembers.…
- `get_cloudflare_zone_settings` _(read)_ — Read the Cloudflare zone settings that matter after a move: ssl mode, always_use_https, automatic_https_rewrites, min_tls_version, development_mode,…
- `set_cloudflare_zone_settings` _(destructive)_ — Change Cloudflare zone settings for a moved domain. Only an allowlist is editable (ssl, always_use_https, automatic_https_rewrites, min_tls_version,…
- `create_cloudflare_record` _(write)_ — Create a DNS record in a domain's Cloudflare zone. IMPORTANT: for a domain that has been moved to Cloudflare this is the tool that changes what actually…
- `edit_cloudflare_record` _(destructive)_ — Update a DNS record in a domain's Cloudflare zone. Partial: fields you omit keep their current value. Get `record_id` from get_cloudflare_records. The response…
- `delete_cloudflare_record` _(destructive)_ — Delete a DNS record from a domain's Cloudflare zone. This changes live DNS for a domain Cloudflare is authoritative for, so confirm with the user first —…

---

## Connect

Gateway URL: https://gateway.mewcp.com/personal/mcp

Every request carries one header:

    Authorization: Bearer <API_KEY>

Replace `API_KEY` with your own key from the dashboard (Developer).

## Apps

### Claude Desktop

Mac & Windows app

- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote@latest",
        "https://gateway.mewcp.com/personal/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open Claude Desktop → Settings → Developer → "Edit Config"
2. Paste the snippet inside the outer { } of the config file (merge with your existing "mcpServers" section if you have one)
3. Save the file, then quit Claude Desktop completely and reopen it
4. Start a new conversation — your tool will be available

### VS Code

Copilot / Cline

- Command Palette → "MCP: Open User Configuration" (opens mcp.json). For one project only, use .vscode/mcp.json instead.

```json
{
  "mcp.servers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have a "servers" section in your mcp.json? Just add the server entry inside it.

1. Open VS Code → Command Palette (Cmd+Shift+P / Ctrl+Shift+P)
2. Run "MCP: Open User Configuration" to open your mcp.json
3. Paste the snippet and save
4. Start the server when prompted (or from the MCP servers view) and use it in Copilot Chat

### Cursor

AI-first editor

- macOS: `~/.cursor/mcp.json`
- Windows: `%USERPROFILE%\.cursor\mcp.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your mcp.json? Just add the server entry inside it.

1. Open Cursor → Settings → Cursor Settings → MCP
2. Click "Add new global MCP server"
3. Paste the snippet and save
4. Restart Cursor

### Codex

OpenAI's CLI agent

- Add the snippet to your Codex MCP config or your standard MCP config file for the CLI tool you use.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Codex generally reads a standard MCP server block, so you can add this alongside your other configured servers.

1. Open your Codex MCP config or project-level config file
2. Paste the MewCP server block inside the config JSON/TOML structure your tool expects
3. Save the file and restart Codex
4. Verify the tool is available inside a fresh session

### Claude Code

Anthropic's CLI agent

- ~/.claude.json (user scope) or .mcp.json in your project root — create it if it doesn't exist. Or skip the file and use the CLI command below.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open ~/.claude.json (or .mcp.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file and start (or restart) Claude Code
4. Or skip the file entirely and run the CLI command below instead

### OpenCode

Open-source terminal agent

- ~/.config/opencode/opencode.json (global) or opencode.json in your project root — create it if it doesn't exist.

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mewcp": {
      "type": "remote",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcp" section in your opencode.json? Just add the server entry inside it.

1. Open ~/.config/opencode/opencode.json (or opencode.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and start (or restart) OpenCode

### OpenClaw

Self-hosted agent gateway

- ~/.openclaw/openclaw.json — create it if it doesn't exist.

```json
{
  "mcp": {
    "servers": {
      "mewcp": {
        "transport": "streamable-http",
        "url": "https://gateway.mewcp.com/personal/mcp",
        "enabled": true,
        "headers": {
          "Authorization": "Bearer API_KEY"
        }
      }
    }
  }
}
```

Already have an "mcp" section in your openclaw.json? Just add the server entry inside "servers".

1. Open ~/.openclaw/openclaw.json in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and restart OpenClaw

### Antigravity

Google's agentic IDE

- ~/.gemini/config/mcp_config.json (global) or .agents/mcp_config.json (workspace-local) — create it if it doesn't exist.

```json
{
  "mcpServers": {
    "mewcp": {
      "serverUrl": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it. Remote servers must use the "serverUrl" field — the legacy "url"/"httpUrl" fields aren't supported.

1. In the editor's agent side panel, click "…" → "MCP Servers" → "Manage MCP Servers" → "View raw config" (Antigravity CLI: type /mcp instead to open the Interactive MCP Manager)
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file — the server connects automatically

### Hermes

Nous Research's CLI agent

- config.yaml in your Hermes config directory (~/.hermes) — add this under a top-level "mcp_servers:" key.

```yaml
mcp_servers:
  mewcp:
    url: "https://gateway.mewcp.com/personal/mcp"
    headers:
      Authorization: "Bearer API_KEY"
```

Already have an "mcp_servers" section in your config.yaml? Just add the server entry inside it.

1. Open config.yaml in your Hermes config directory
2. Paste the snippet under the top-level "mcp_servers:" key (merge with existing entries if you have any)
3. Save the file, then run /reload-mcp in Hermes (or start a fresh session)
4. Ask Hermes "Tell me which MCP-backed tools are available right now" to confirm it connected

### DeepSeek Harness

DeepSeek's agent harness

- cordis.yml in your DSH project — or the patch file you mount plugins from.

```yaml
- id: mcp-mewcp
  name: '@deepseek-ai/dsh-mcp-client'
  config:
    serverName: mewcp
    transport: streamable-http
    url: https://gateway.mewcp.com/personal/mcp
    headers:
      Authorization: "Bearer API_KEY"
```

One plugin instance = one MCP server. Add this entry to your plugin list; don't nest it inside another entry.

1. Open cordis.yml (or your patch file) in your DSH project
2. Paste the entry into your plugin list, keeping the leading dash and indentation
3. Restart DSH (or let HMR reload) — tools register as mcp__mewcp__<tool_name>
4. Verify with: dsh web --dump-config | grep -A3 mcp

## SDKs

### Python

fastmcp client

```python
import asyncio
from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport

SERVER_URL = "https://gateway.mewcp.com/personal/mcp"
API_KEY = "API_KEY"

transport = StreamableHttpTransport(
    url=SERVER_URL,
    headers={
        "Authorization": f"Bearer {API_KEY}",
    }
)

async def main():
    client = Client(transport)
    async with client:
        tools = await client.list_tools()
        print(tools)

asyncio.run(main())
```

1. Install fastmcp: pip install fastmcp
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run your script

### TypeScript

MCP SDK

```typescript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const SERVER_URL = "https://gateway.mewcp.com/personal/mcp";
const API_KEY = "API_KEY";

const transport = new StreamableHTTPClientTransport(new URL(SERVER_URL), {
  requestInit: {
    headers: {
      Authorization: `Bearer ${API_KEY}`,
    },
  },
});

const client = new Client({ name: "mewcp-client", version: "1.0.0" });
await client.connect(transport);

const tools = await client.listTools();
console.log(tools.tools.map((t) => t.name));
```

1. Install: npm install @modelcontextprotocol/sdk
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run with Node 18+ as an ES module (e.g. npx tsx script.ts)