# Resend MCP MCP Server

> **Resend MCP MCP Server** is a hosted, multitenant Model Context Protocol (MCP) server run by **MewCP** (https://mewcp.com), giving AI agents managed access to Resend 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/resend-mcp
> MewCP docs:   https://docs.mewcp.com
> Full catalog: https://mewcp.com/llms.txt

---

## About

Resend provides AI-powered email infrastructure for sending transactional emails, managing contacts and audience segments, creating scheduled broadcast campaigns, handling inbound emails and attachments, configuring domains and webhooks, and monitoring email delivery.

---

## Details

- Server ID: `resend-mcp`
- Version: 1.1.0
- Tools: 132
- 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 — Resend MCP has to be in the toolset
first. In order:

1. Add Resend MCP to your toolset at https://mewcp.com/mcp/resend-mcp
2. Connect your Resend 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 (132)

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.

- `get-tiptap-json-content` _(write)_ — **Purpose:** Retrieve the existing TipTap JSON content of a broadcast or template, optionally bundled with the TipTap schema reference. Also connects the agent…
- `connect-to-editor` _(write)_ — **Purpose:** Show agent presence in the Resend dashboard editor. Users will see an agent avatar while connected. **When to use:** - To signal to dashboard…
- `disconnect-from-editor` _(write)_ — Remove agent presence from the Resend dashboard editor. Call this when done editing.
- `create-api-key` _(write)_ — Create a new API key in Resend. The token is only shown once upon creation, so you MUST display it to the user.
- `list-api-keys` _(read)_ — List all API keys from Resend. Returns API key names, IDs, and creation dates. Don't bother telling the user the IDs or creation dates unless they ask for them.
- `update-api-key` _(write)_ — Rename an existing API key in Resend. Only the name can be changed — permission and domain restrictions are fixed at creation and cannot be updated.
- `remove-api-key` _(destructive)_ — Remove an API key by ID from Resend. Before using this tool, you MUST double-check with the user that they want to remove this API key. Reference the NAME of…
- `create-automation` _(write)_ — **Purpose:** Create an automation workflow that triggers on events and executes a sequence of steps. **When to use:** - User wants to set up automated email…
- `update-automation` _(write)_ — **Purpose:** Update an automation's name, status, or workflow. **When to use:** - User wants to rename an automation - User wants to enable or disable an…
- `get-automation` _(read)_ — **Purpose:** Get details of a specific automation (with its workflow) or list all automations. **Modes:** - With `id`: Returns full automation details…
- `duplicate-automation` _(write)_ — Duplicate an existing automation by ID or Resend dashboard URL. Creates a copy with its own ID, including the steps and connections of the original. Use this…
- `remove-automation` _(destructive)_ — Remove an automation by ID or Resend dashboard URL. Before using this tool, you MUST double-check with the user that they want to remove this automation.…
- `get-automation-runs` _(read)_ — **Purpose:** List runs for an automation, or get details of a specific run. **Modes:** - With `runId`: Returns detailed run info with step-by-step execution…
- `create-broadcast` _(write)_ — **Purpose:** Create a broadcast campaign (one email sent to an entire segment). Defines subject, body, and segment; does NOT send yet. Use send-broadcast to…
- `send-broadcast` _(destructive)_ — **Purpose:** Send (or schedule) an existing broadcast by ID. The broadcast must have been created with create-broadcast first. **NOT for:** Sending a new…
- `cancel-broadcast` _(destructive)_ — **Purpose:** Cancel a queued or scheduled broadcast by ID or Resend dashboard URL, without removing it. Cancelling a queued broadcast stops it mid-send (emails…
- `duplicate-broadcast` _(write)_ — **Purpose:** Duplicate a broadcast by ID or Resend dashboard URL. Creates a new draft broadcast with the same segment, topic, sender, subject, reply-to,…
- `list-broadcasts` _(read)_ — **Purpose:** List all broadcast campaigns (newsletters/bulk emails to audiences) with ID, name, audience, status, timestamps. **NOT for:** Listing…
- `get-broadcast` _(read)_ — Retrieve full details of a specific broadcast by ID or Resend dashboard URL (e.g. https://resend.com/broadcasts/<id>), including HTML and plain text content.
- `remove-broadcast` _(destructive)_ — Remove a broadcast by ID or Resend dashboard URL. Before using this tool, you MUST double-check with the user that they want to remove this broadcast.…
- `compose-broadcast` _(write)_ — **Purpose:** Set the TipTap JSON content of a broadcast, enabling it to be edited visually in the Resend dashboard editor. Automatically connects and…
- `list-broadcast-recipients` _(read)_ — **Purpose:** List the individual recipients of a broadcast for a given event type (sent, delivered, opened, clicked, bounced, complained, unsubscribed,…
- `update-broadcast` _(write)_ — Update broadcast metadata by ID or Resend dashboard URL (name, subject, from, html, text, segment, preview text, reply-to). To edit TipTap content, use…
- `list-broadcast-clicked-links` _(read)_ — **Purpose:** List the links clicked in a broadcast, ranked by total clicks. **Returns:** For each link: id (opaque pagination cursor for that row, not an…
- `create-contact-import` _(write)_ — Bulk-import contacts from a CSV file into Resend. The import is processed asynchronously: this returns an import ID immediately, then use get-contact-import to…
- `get-contact-import` _(read)_ — Get the status and counts of a contact import by ID. Use after create-contact-import to track progress (queued, in_progress, completed, failed).
- `list-contact-imports` _(read)_ — List contact imports from Resend. Optionally filter by status. Use to discover import IDs or review past imports.
- `create-contact-property` _(write)_ — Create a new contact property in Resend. A contact property is a custom attribute (e.g. "company_name", "plan_tier") that can be attached to contacts.
- `list-contact-properties` _(read)_ — List all contact properties from Resend. This tool is useful for getting property IDs and seeing which custom attributes are configured. If you need a contact…
- `get-contact-property` _(read)_ — Get a contact property by ID from Resend.
- `update-contact-property` _(write)_ — Update an existing contact property in Resend. Only the fallback value can be changed — the key and type cannot be modified after creation.
- `remove-contact-property` _(destructive)_ — Remove a contact property by ID from Resend. Before using this tool, you MUST double-check with the user that they want to remove this contact property.…
- `create-contact` _(write)_ — Create a new contact in Resend. Optionally assign to segments and configure topic subscriptions.
- `list-contacts` _(read)_ — **Purpose:** List contacts from Resend. Optionally filter by segment. Use to discover contact IDs or emails. **NOT for:** Listing segments (use list-segments).…
- `get-contact` _(read)_ — Get a contact by ID or email from Resend.
- `update-contact` _(write)_ — Update a contact in Resend (by ID or email).
- `remove-contact` _(destructive)_ — Remove a contact from Resend (by ID or email). Before using this tool, you MUST double-check with the user that they want to remove this contact. Reference the…
- `add-contact-to-segment` _(write)_ — Add a contact to a segment in Resend (by contact ID or email).
- `remove-contact-from-segment` _(destructive)_ — Remove a contact from a segment in Resend (by contact ID or email). Before using this tool, you MUST double-check with the user that they want to remove the…
- `list-contact-segments` _(read)_ — List all segments a contact belongs to in Resend (by contact ID or email). Don't bother telling the user the IDs or creation dates unless they ask for them.
- `list-contact-topics` _(read)_ — List all topic subscriptions for a contact in Resend (by contact ID or email). Don't bother telling the user the IDs unless they ask for them.
- `update-contact-topics` _(write)_ — Update topic subscriptions for a contact in Resend (by contact ID or email).
- `create-domain` _(write)_ — Create a new domain in Resend. Returns DNS records that must be configured with your DNS provider for verification. You MUST display the DNS records to the…
- `list-domains` _(read)_ — List all domains from Resend. Returns domain names, statuses, regions, and capabilities. Don't bother telling the user the IDs unless they ask for them.
- `get-domain` _(read)_ — Get a domain by ID from Resend. Returns full domain details including DNS records needed for verification.
- `update-domain` _(write)_ — Update an existing domain in Resend. Allows changing tracking settings, TLS mode, and capabilities.
- `remove-domain` _(destructive)_ — Remove a domain by ID from Resend. Before using this tool, you MUST double-check with the user that they want to remove this domain. Reference the NAME of the…
- `verify-domain` _(write)_ — Trigger domain verification in Resend. This starts an asynchronous verification process that checks if the DNS records are correctly configured. The domain…
- `create-domain-claim` _(write)_ — Start a claim for a domain another Resend account has already verified. The domain is recreated under your account with brand-new DKIM keys, so the previous…
- `get-domain-claim` _(read)_ — Retrieve the latest claim for a domain by its placeholder Domain ID (the domain_id from create-domain-claim). Returns claim status and the TXT record needed to…
- `verify-domain-claim` _(write)_ — Trigger asynchronous DNS verification and ownership transfer for a domain claim, using the placeholder Domain ID. The claim stays "pending" while verification…
- `send-email` _(destructive)_ — **Purpose:** Send a single transactional email to one or more recipients immediately (or schedule it). Use for one-off messages, notifications, and direct…
- `list-emails` _(read)_ — **Purpose:** List recently sent emails (transactional emails sent via send-email) with metadata: recipient, subject, status, timestamps. **NOT for:** Listing…
- `get-email` _(read)_ — Retrieve full details of a specific sent transactional email by ID, including message_id, HTML and plain text content.
- `list-received-emails` _(read)_ — **Purpose:** List emails received (inbox) by your Resend receiving address. Use for "show my inbox", "what emails did I get?", "list incoming mail". **NOT…
- `get-received-email` _(read)_ — Retrieve full details of a specific received email by ID, including HTML and plain text content, headers, and raw email download URL.
- `list-received-email-attachments` _(read)_ — List all attachments from a specific received (inbox) email. Returns attachment metadata including filename, size, content type, and a time-limited download…
- `get-received-email-attachment` _(read)_ — Retrieve details of a specific attachment from a received email, including a time-limited download URL.
- `cancel-email` _(destructive)_ — Cancel a scheduled email that has not yet been sent. Only works for emails that were scheduled using the scheduledAt parameter.
- `share-email` _(write)_ — Create a shareable link for a sent or received email, so anyone with the link can view it without Resend dashboard access. Works for any email ID, sent or…
- `get-email-metrics` _(read)_ — Retrieve account-level email delivery and engagement metrics (sent, delivered, bounced, opened, clicked, etc.) for a date range, optionally broken down by…
- `update-email` _(write)_ — Reschedule a scheduled email by updating its scheduled send time. Only works for emails that were scheduled and have not yet been sent.
- `list-sent-email-attachments` _(read)_ — List all attachments from a specific sent email (from send-email or list-emails). Returns attachment metadata including filename, size, content type, and a…
- `get-sent-email-attachment` _(read)_ — Retrieve details of a specific attachment from a sent email, including a time-limited download URL.
- `send-batch-emails` _(destructive)_ — **Purpose:** Send up to 100 transactional emails in one API call. Each item has the same fields as send-email (to, subject, text, from, etc.). **NOT for:**…
- `send-event` _(destructive)_ — **Purpose:** Fire an event to trigger automations for a specific contact. **When to use:** - User wants to trigger an automation workflow for a contact -…
- `manage-events` _(destructive)_ — **Purpose:** Create, list, get, update, or remove event definitions in Resend. Events define named triggers that your application sends to start automations.…
- `create-inbox` _(write)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. Create an inbox in Resend. An inbox receives email at an address on one of your domains and…
- `list-inboxes` _(read)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. **Purpose:** List the Resend inboxes on the account. Use to discover inbox IDs, or to see which…
- `get-inbox` _(read)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. Get an inbox by ID or email address from Resend, including its domain, receiving address,…
- `update-inbox` _(write)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. Update an inbox in Resend. Renames the inbox internally, changes the display name shown on the…
- `remove-inbox` _(destructive)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. Remove an inbox by ID from Resend. This also deletes all of the inbox's threads. Before using…
- `list-inbox-threads` _(read)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. **Purpose:** List the threads in one Resend inbox, the conversations that arrived at its…
- `search-inbox-threads` _(read)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. **Purpose:** Search the threads in one Resend inbox. Where list-inbox-threads browses folders,…
- `get-inbox-thread` _(read)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. **Purpose:** Get one thread in a Resend inbox: the thread itself plus the metadata of its…
- `update-inbox-thread` _(write)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. **Purpose:** Update one thread in a Resend inbox: mark it read or unread, move it to another…
- `remove-inbox-thread` _(destructive)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. Remove a thread by ID from a Resend inbox. This moves the whole thread, every message in it…
- `get-inbox-thread-email` _(read)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. **Purpose:** Read one message in a Resend inbox thread, body included: its html and text, its…
- `reply-to-inbox-thread-email` _(destructive)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. **Purpose:** Reply to one message in a Resend inbox thread. This sends a real email the moment…
- `forward-inbox-thread-email` _(destructive)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. **Purpose:** Forward one message from a Resend inbox thread to someone else. This sends a real…
- `list-inbox-labels` _(read)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. **Purpose:** List the labels in one Resend inbox (the tags its threads can carry), each with its…
- `create-inbox-label` _(write)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. Create a label in a Resend inbox. A label is a tag the threads in that inbox can carry. Creating…
- `update-inbox-label` _(write)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. Update a label in a Resend inbox: rename it, recolor it, or both. The change follows the label…
- `remove-inbox-label` _(destructive)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. Remove a label by ID from a Resend inbox. This takes the label off every thread that carries it,…
- `list-inbox-drafts` _(read)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. **Purpose:** List the drafts in one Resend inbox (the messages composed there but not sent),…
- `create-inbox-draft` _(write)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. **Purpose:** Create a draft in a Resend inbox: a message saved for later, NOT sent. At least one…
- `get-inbox-draft` _(read)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. Get a draft by ID from a Resend inbox, body included: its recipients, subject, html and text,…
- `update-inbox-draft` _(write)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. **Purpose:** Update a draft in a Resend inbox: change its recipients, its subject, or its body.…
- `remove-inbox-draft` _(destructive)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. Remove a draft by ID from a Resend inbox. The draft was never sent, so no mail and no thread is…
- `send-inbox-draft` _(destructive)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. Send a draft from a Resend inbox. This puts a real email in the mail the moment you call it,…
- `get-inbox-agent` _(read)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. Get the AI agent settings of a Resend inbox: the instructions the agent follows, the tone it…
- `update-inbox-agent` _(write)_ — **Beta.** Only accounts in the Inboxes beta can use this tool. Update the AI agent settings of a Resend inbox: the instructions the agent follows, the tone it…
- `list-logs` _(read)_ — **Purpose:** List API request logs for the account. Use to review recent API activity, debug issues, or audit API usage. **Returns:** For each log: id,…
- `get-log` _(read)_ — **Purpose:** Get detailed information about a specific API request log, including the full request and response bodies. **Returns:** Log details: id,…
- `list-oauth-grants` _(read)_ — List OAuth grants for the team — the apps authorized to act on the team's behalf. Returns every grant, active and revoked; a grant with a non-null revoked_at…
- `revoke-oauth-grant` _(destructive)_ — Revoke an OAuth grant by ID. Before using this tool, you MUST double-check with the user that they want to revoke this grant. Reference the NAME of the app…
- `create-segment` _(write)_ — Create a new segment in Resend. A segment is a group of contacts that can be used to target specific broadcasts.
- `list-segments` _(read)_ — **Purpose:** List all segments in the account. Use to get segment IDs required by create-contact, create-broadcast, list-contacts. **NOT for:** Listing…
- `get-segment` _(read)_ — Get a segment by ID from Resend.
- `update-segment` _(write)_ — Rename an existing segment in Resend.
- `remove-segment` _(destructive)_ — Remove a segment by ID from Resend. Before using this tool, you MUST double-check with the user that they want to remove this segment. Reference the NAME of…
- `add-suppression` _(write)_ — Add an email address to the suppression list in Resend. Suppressed addresses never receive emails from the account, even when included as recipients. Hard…
- `list-suppressions` _(read)_ — **Purpose:** List email addresses on the suppression list. Suppressed addresses never receive emails from the account. Optionally filter by origin: "bounce"…
- `get-suppression` _(read)_ — Get a suppression list entry by ID or email address from Resend. Use this to check whether a specific address is suppressed and why (origin: bounce, complaint,…
- `remove-suppression` _(destructive)_ — Remove an entry by ID or email address from the suppression list in Resend, allowing the address to receive emails again. Before using this tool, you MUST…
- `batch-add-suppressions` _(write)_ — Add multiple email addresses to the suppression list in Resend in a single call. Suppressed addresses never receive emails from the account. Hard bounces and…
- `batch-remove-suppressions` _(destructive)_ — Remove multiple entries from the suppression list in Resend in a single call, by email addresses or by suppression IDs (provide exactly one of the two). The…
- `create-template` _(write)_ — Create a new email template in Resend. Templates are created in draft status. Use publish-template to make them available for sending. Variables use…
- `list-templates` _(read)_ — List all email templates from Resend. Returns template names, statuses, and aliases. Don't bother telling the user the IDs unless they ask for them.
- `get-template` _(read)_ — Get an email template by ID, alias, or Resend dashboard URL (e.g. https://resend.com/templates/<id>) from Resend. Returns full template details including HTML…
- `compose-template` _(write)_ — **Purpose:** Set the TipTap JSON content of a template, enabling it to be edited visually in the Resend dashboard editor. Automatically connects and…
- `update-template` _(write)_ — Update template metadata by ID, alias, or Resend dashboard URL (name, subject, from, html, variables, etc.). After updating a published template, use…
- `remove-template` _(destructive)_ — Remove an email template by ID, alias, or Resend dashboard URL from Resend. Before using this tool, you MUST double-check with the user that they want to…
- `publish-template` _(write)_ — Publish an email template in Resend. Templates must be published before they can be used for sending emails. Re-publishing a previously published template…
- `duplicate-template` _(write)_ — Duplicate an existing email template in Resend. Creates a new draft copy of the template with a new ID. Accepts a template ID, alias, or Resend dashboard URL.
- `create-topic` _(write)_ — Create a new topic in Resend. Topics allow contacts to manage their subscription preferences for different types of emails.
- `list-topics` _(read)_ — List all topics from Resend. This tool is useful for getting topic IDs to use with other tools like send-email.
- `get-topic` _(read)_ — Get a topic by ID from Resend.
- `update-topic` _(write)_ — Update an existing topic in Resend. Note: defaultSubscription cannot be modified after creation.
- `remove-topic` _(destructive)_ — Remove a topic by ID from Resend. Before using this tool, you MUST double-check with the user that they want to remove this topic. Reference the NAME of the…
- `get-usage` _(read)_ — **Purpose:** Retrieve the account's current usage and plan limits. **Returns:** Email sending/receiving usage (daily and monthly), contacts, segments,…
- `create-webhook` _(write)_ — Create a new webhook in Resend. A webhook allows you to receive notifications at a specified URL when certain events occur (e.g. email.sent, email.delivered,…
- `list-webhooks` _(read)_ — List all webhooks from Resend. Use to get webhook IDs and see which endpoints and events are configured. Not for listing emails, segments, or broadcasts.
- `get-webhook` _(read)_ — Get a webhook by ID from Resend, including its signing secret. Use this when the user needs the current secret to verify payloads; use…
- `update-webhook` _(write)_ — Update an existing webhook in Resend. You can change the endpoint URL, subscribed events, or enable/disable the webhook.
- `list-webhook-events` _(read)_ — **Purpose:** List the events Resend delivered to one webhook, most recent first, with the delivery status of each. **NOT for:** Listing the event types a…
- `get-webhook-event` _(read)_ — **Purpose:** Get one event delivered to a webhook, including the exact payload Resend sent to the endpoint. **Returns:** id, type, created_at, status,…
- `replay-webhook-event` _(write)_ — **Purpose:** Queue one more delivery of a webhook event to its endpoint — the same action as the dashboard's Replay button. **NOT for:** Inspecting an event…
- `rotate-webhook-signing-secret` _(destructive)_ — **Purpose:** Replace a webhook's signing secret with a new one — the same action as the dashboard's Rotate button. Returns the new secret. **NOT for:**…
- `list-webhook-event-attempts` _(read)_ — **Purpose:** List the delivery attempts Resend made for one webhook event, most recent first, with what the endpoint returned each time. **Returns:** For each…
- `remove-webhook` _(destructive)_ — Remove a webhook by ID from Resend. Before using this tool, you MUST double-check with the user that they want to remove this webhook. Reference the ENDPOINT…
- `get_more_tools` _(read)_ — Check for additional tools whenever your task might benefit from specialized capabilities - even if existing tools could work as a fallback.

---

## 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: 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 and restart Claude Desktop
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)