#  Better Stack MCP MCP Server

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

---

## About

Better Stack helps engineering teams monitor application reliability and investigate production incidents. Manage uptime monitors, inspect logs and error traces, query telemetry, track incidents, configure on-call schedules, and analyze service health across applications and infrastructure.

---

## Details

- Server ID: `betterstack-mcp`
- Version: 1.0.0
- Tools: 149
- 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 —  Better Stack MCP has to be in the toolset
first. In order:

1. Add  Better Stack MCP to your toolset at https://mewcp.com/mcp/betterstack-mcp
2. Connect your  Better Stack 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 (149)

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.

- `query` _(read)_ — Execute a ClickHouse SQL query to retrieve logs, traces/spans, errors, and metrics from telemetry data. Write the query as a template and the server builds the…
- `render_chart` _(read)_ — Execute a ClickHouse SQL query and visualize the result as a chart. Use `chart_type` to choose the visualization: - `line` (default) — trends over time. Alias…
- `query_windows` _(read)_ — Size an S3 query before running it: how many rows its time range holds and, when that is more than one `query` call reads (50,000,000 rows, 50 seconds), the…
- `create_file_upload` _(write)_ — Get a single-use URL to upload a file (a log, a screenshot, a trace) to, and attach it with a tool that takes `attachment_upload_ids`, such as…
- `acknowledge_incident` _(write)_ — Acknowledge an ongoing incident
- `create_incident_comment` _(write)_ — Create a comment on an incident. To attach files, upload each one with create_file_upload first and pass the upload_id values it returns in…
- `update_incident_comment` _(destructive)_ — Rewrite a comment on an incident timeline and edit its copies in Slack, Microsoft Teams and Linear in place; no one is notified again. Only your own comments,…
- `remove_incident_comment` _(destructive)_ — Remove a comment from an incident timeline and its copies in Slack, Microsoft Teams and Linear; only your own comments, or ones no team member wrote such as…
- `create_incident` _(write)_ — Create a new incident providing a summary of the issue, requester email, and other optional details. Notification channels (call, sms, email, critical_alert)…
- `escalate_incident` _(write)_ — Escalate an ongoing incident to a user, team, on-call calendar, escalation policy, or the whole organization. A policy brings its own notification channels;…
- `incident_comments` _(read)_ — Get comments for an incident
- `incident` _(read)_ — Get detailed information about a specific incident
- `available_incident_escalation_policies` _(read)_ — Get available escalation policies for an incident
- `incident_timeline` _(read)_ — Get the timeline of events for an incident
- `incidents` _(read)_ — List incidents with filtering and pagination options
- `reopen_incident` _(write)_ — Reopen a resolved incident (must be within 24 hours of resolution)
- `resolve_incident` _(write)_ — Resolve an ongoing incident
- `escalation_policy` _(read)_ — Get detailed information about a specific escalation policy
- `add_escalation_policy_step_member` _(write)_ — Add a member to an escalation step of an escalation policy, for example an outgoing webhook (type webhook) so the step fires it, or a user, an on-call calendar…
- `remove_escalation_policy_step_member` _(destructive)_ — Remove a member from an escalation step of an escalation policy, for example an outgoing webhook (type webhook). An escalation step needs a member, so removing…
- `severity` _(read)_ — Get detailed information about a specific severity (urgency level)
- `escalation_policies` _(read)_ — List all escalation policies with their steps and configuration
- `severities` _(read)_ — List all severities (urgency levels) with their notification settings
- `create_monitor` _(write)_ — Create a new monitor that tracks the availability of a website, host, or service. Provide the `url` to monitor. For ping, TCP, UDP, SMTP, POP, IMAP, and DNS…
- `monitor_availability` _(read)_ — Get availability (SLA) summary for a specific monitor
- `monitor` _(read)_ — Get details of a specific monitor
- `monitor_response_times` _(read)_ — Get response time metrics for a specific monitor
- `monitors` _(read)_ — List monitors with optional filtering and pagination
- `update_monitor` _(destructive)_ — Change a monitor, or pause or unpause it. Only the parameters you pass change: request_headers replace stored headers of the same name and keep the others, and…
- `remove_monitor` _(destructive)_ — Remove a monitor, which stops its checks and alerts, takes it off every status page it is on, and resolves its ongoing incident with the usual notifications…
- `create_heartbeat` _(write)_ — Create a new heartbeat that expects a periodic request from a cron job, worker, or other background task, and alerts when that request stops arriving. Provide…
- `heartbeat_availability` _(read)_ — Get availability summary for a specific heartbeat
- `heartbeat` _(read)_ — Get details of a specific heartbeat
- `heartbeats` _(read)_ — List all heartbeats with filtering and pagination options
- `update_heartbeat` _(destructive)_ — Change a heartbeat, or pause or unpause it. Only the parameters you pass change
- `remove_heartbeat` _(destructive)_ — Remove a heartbeat, which stops it alerting, takes it off every status page it is on, and resolves its ongoing incident with the usual notifications (an…
- `on_call` _(read)_ — Get detailed information about a specific on-call calendar
- `on_call_event` _(read)_ — Get detailed information about a specific on-call event
- `on_call_rotation` _(read)_ — Get on-call rotation configuration for a specific calendar
- `on_call_events` _(read)_ — List all on-call schedule events for a specific calendar
- `on_calls` _(read)_ — List all on-call calendars for the team
- `create_status_page_report` _(write)_ — Create a new status page report
- `create_status_page_report_update` _(write)_ — Create a new status update for an existing status page report
- `update_status_page_report` _(destructive)_ — Change a status page report's title or times; only the parameters you pass change. Subscribers are not e-mailed and its status, which comes from its updates,…
- `update_status_page_report_update` _(destructive)_ — Change an update on a status page report. Only the parameters you pass change. Its Slack and Microsoft Teams posts are edited in place, and the report's status…
- `remove_status_page_report` _(destructive)_ — Remove a status page report with all of its updates, so it disappears from the status page and its history, and delete their Slack and Microsoft Teams posts…
- `remove_status_page_report_update` _(destructive)_ — Remove an update from a status page report and delete its Slack and Microsoft Teams posts; the report's status is recalculated from the updates left, and…
- `status_page` _(read)_ — Get details of a specific status page
- `status_page_resources` _(read)_ — Get resources (monitors/heartbeats) for a specific status page
- `status_page_report_update` _(read)_ — Get details of a specific status page report update
- `status_page_reports` _(read)_ — List status reports (incidents/maintenance) for a specific status page
- `status_pages` _(read)_ — List all status pages with filtering and pagination options
- `status_page_report_updates` _(read)_ — List status updates for a specific status report
- `status_page_sections` _(read)_ — List the sections (resource groups) of a status page
- `update_status_page` _(destructive)_ — Update the settings of a status page (company name, contact URL, theme, layout, and more)
- `create_status_page_resource` _(write)_ — Add a resource (monitor, heartbeat, or group) to a status page. Provide the `resource_type` and `resource_id` of the thing to display, plus a `public_name`…
- `update_status_page_resource` _(destructive)_ — Update a resource on a status page. Change its public name, description, widget type (e.g. show or hide the uptime history), or move it by setting `position`…
- `remove_status_page_resource` _(destructive)_ — Remove a resource from a status page
- `create_status_page_section` _(write)_ — Create a section (resource group) on a status page to group resources under a heading
- `update_status_page_section` _(destructive)_ — Rename a status page section or move it by setting its position
- `remove_status_page_section` _(destructive)_ — Remove a section from a status page. Resources in the section are removed with it.
- `outgoing_webhooks` _(read)_ — List outgoing webhooks: the requests Better Stack sends to a URL when incidents, on-call or monitors change
- `outgoing_webhook` _(read)_ — Get one outgoing webhook: its URL, events and request. Header values and basic authentication credentials are never shown
- `create_outgoing_webhook` _(write)_ — Create an outgoing webhook: Better Stack sends a request to the URL when incidents change (or on-call, or monitors). An incident webhook fires for incidents…
- `update_outgoing_webhook` _(destructive)_ — Change an outgoing webhook. Only the parameters you pass change: headers replace stored headers of the same name and keep the others, and remove_headers drops…
- `remove_outgoing_webhook` _(destructive)_ — Remove an outgoing webhook. It stops firing and is removed from every escalation policy step that uses it
- `slack_integrations` _(read)_ — List the Slack integrations (one per connected channel) with their channel and notification type
- `slack_integration` _(read)_ — Get every setting of a Slack integration: notification type, channel invitees, who Slack users can alert, and the notification options
- `edit_slack_integration` _(destructive)_ — Change the settings of a Slack integration, as on Integrations › Slack › Configure. Only the parameters you pass change. channel_invitees, alert_options and…
- `catalog_relations` _(read)_ — List the catalog's relations with their primary and added attributes and how many records each holds. ## How the catalog works The catalog adds business…
- `catalog_relation` _(read)_ — Show one catalog relation with its records, one column per attribute, paginated. Objects read as `Platform (Team 123)`, so a record can name them again by…
- `create_catalog_relation` _(write)_ — Create a catalog relation with its primary and added attributes in one call. Add records with `upsert_catalog_records` afterwards. See `catalog_relations` for…
- `update_catalog_relation` _(destructive)_ — Change a catalog relation: rename it, change its description or matching, add attributes or remove them. Only what you pass changes. Removing an attribute…
- `remove_catalog_relation` _(destructive)_ — Remove a catalog relation with all of its attributes and records, so new incidents stop picking up metadata from it (metadata already on incidents stays)
- `upsert_catalog_records` _(destructive)_ — Add or update a catalog relation's records, keyed by their primary values, so running the same sync again updates instead of duplicating. A record whose…
- `delete_catalog_records` _(destructive)_ — Remove catalog records by their primary values, or every record of a relation with `all: true`. A record is removed when its primary values equal a given…
- `add_chart_to_dashboard` _(write)_ — Add a new chart to a dashboard. Use the `section` parameter to organize charts into named sections — sections are auto-created if they don't exist, and charts…
- `add_dashboard_section` _(write)_ — Add a section divider to a dashboard. Sections span the full width and help organize charts into groups. Charts and sections at or below the insertion point…
- `create_application` _(write)_ — Create a new application in Better Stack. Returns the created application details including ID, ingestion token, ingesting host URL, retention settings, and…
- `create_chart_alert` _(write)_ — Create a new chart alert on an existing chart. The chart must support alerts (line_chart, bar_chart, or tail_chart with time variables; Number charts take no…
- `create_cloud_connection` _(write)_ — Create a secure cloud connection for direct ClickHouse query access to logs, spans, and metrics data. Returns connection credentials (host, port, username,…
- `create_collector` _(write)_ — Create a Better Stack Collector, the agent that collects logs, metrics and traces from a Docker host, a Docker Swarm or a Kubernetes cluster. Returns the…
- `create_dashboard` _(write)_ — Create a new dashboard. Optionally use a template to start with pre-configured charts. Call chart_building_help for guidance on dashboard structure and layout.…
- `create_error_comment` _(write)_ — Post a comment on an error so the findings land in the conversation the team reads in Better Stack. The comment is written as the user whose token made the…
- `create_error_issue` _(write)_ — Create an issue for an error in Linear, or a work item in Jira, through the team's integration and link the two. The issue gets Better Stack's standard body…
- `create_metric_expression` _(write)_ — Create a new metric expression (extract-metrics-from-logs rule) on a source. `sql_expression` runs against each log row; log fields live inside the `raw` JSON…
- `create_release` _(write)_ — Register a release for an errors application, so it appears the moment it deploys instead of when its first error arrives. Returns the release ID, usable with…
- `create_source` _(write)_ — Create a new log source in Better Stack. Returns the created source details including ID, ingestion token, ingesting host URL, retention settings, and…
- `delete_chart_alert` _(destructive)_ — Delete a chart alert permanently. This will also clean up any associated incidents and anomaly models. This action cannot be undone. Use chart_alerts or…
- `delete_metric_expression` _(destructive)_ — Delete a metric expression from a source. This action cannot be undone. Call `metric_expressions` first to get the ID. `build_type: new_data` (default) stops…
- `edit_application` _(destructive)_ — Edit an existing application in Better Stack - rename it, pause or resume ingesting, or set its VRL transformations, including the exception grouping program.…
- `edit_chart_alert` _(destructive)_ — Edit an existing chart alert configuration. Only provide the fields you want to change. Call chart_alert_help for configuration reference. Use chart_alerts or…
- `edit_chart` _(destructive)_ — Edit an existing chart name, query, type, or settings. Only provide the fields you want to change. **If changing the query:** the new query's FROM must…
- `edit_dashboard_section` _(destructive)_ — Edit an existing dashboard section. Only provide the fields you want to change. Use dashboard first to find the section ID
- `edit_dashboard` _(destructive)_ — Edit an existing dashboard's name or source eligibility. Only provide the fields you want to change. Use dashboard first to find the dashboard ID.
- `export_dashboard` _(read)_ — Export a dashboard configuration as JSON. Returns the complete dashboard data structure including charts, sections, presets, and settings
- `link_error_issue` _(write)_ — Link an error to an issue or work item that already exists in Linear or Jira. Better Stack then posts every change to the error state as a comment on the…
- `application` _(read)_ — Get comprehensive details of a specific application including its configuration, VRL transformations (the exception grouping program among them), retention…
- `chart_alert` _(read)_ — Get detailed information about a specific chart alert including its configuration, SQL queries, status, and current incident info. Use chart_alerts first to…
- `chart_alert_help` _(read)_ — Get instructions for creating and configuring chart alerts, including alert types, operators, configuration fields, supported chart types, and common mistakes.…
- `chart_building_help` _(read)_ — Get comprehensive instructions for building charts and dashboards, including chart types, units, axis settings, column mapping, legend placement, layout tips,…
- `chart` _(read)_ — Get detailed information about a specific chart including its SQL queries, configuration, and settings. Use dashboard first to find the chart ID
- `dashboard` _(read)_ — Get detailed information about a specific dashboard including its charts, sections, layout, template variables, and configuration. Use this to understand a…
- `dashboard_query_help` _(read)_ — Get instructions for writing a ClickHouse query to use inside a Better Stack **Dashboard** chart (or chart alert). The query uses template variables…
- `exploration` _(read)_ — Get detailed information about a specific exploration (saved Explore query) including its sources, chart type, template variables, saved time range, and query.…
- `error` _(read)_ — Get comprehensive details of a specific error including its type, message, call site information, first occurrence, current state (unhandled, unresolved,…
- `errors_query_help` _(read)_ — Get comprehensive instructions for building SQL ClickHouse queries for error tracking, including both error patterns (metrics) and individual exceptions.…
- `explore_logs_query_help` _(read)_ — Get instructions for writing a ClickHouse query to use inside the Better Stack **Explore logs** page (and live-tail charts) for log and span data. The query…
- `metric` _(read)_ — Get comprehensive details about a specific metric. Returns metric overview (data points, active series, available aggregations), definition (SQL expression or…
- `metrics_query_help` _(read)_ — Get instructions for building SQL ClickHouse queries for metrics (available metrics, aggregations, examples) to run directly via the query tools (`query` /…
- `metrics_schema` _(read)_ — Get metrics and cardinality for a source. Returns a paginated table of available metrics (user-defined and ingested) ordered by active series (highest…
- `query_help` _(read)_ — Get instructions for building SQL ClickHouse queries for logs and spans (fields, aggregations, examples) to run directly via the query tools (query /…
- `replays_query_help` _(read)_ — Get comprehensive instructions for building SQL ClickHouse queries for session replays. Explains data structure, provides examples for listing replays, finding…
- `source` _(read)_ — Get comprehensive details of a specific source including its configuration, VRL transformations, retention settings, ingestion details, custom bucket settings…
- `source_fields` _(read)_ — Get complete field catalog for a logs or spans source. Returns a table of all queryable fields with their paths and data types. Essential for understanding…
- `import_dashboard` _(write)_ — Import a dashboard from JSON configuration. Creates a new dashboard with the provided data structure. Pass exactly one of `data` or `url`. Writing a large JSON…
- `applications` _(read)_ — List all available applications in a paginated table format. Returns application ID, name, platform type, team, status (active/paused), data region, and…
- `chart_alerts` _(read)_ — List chart alerts with optional filtering by team, chart, or dashboard. Returns alert ID, name, type, chart, dashboard, and status
- `clusters` _(read)_ — List all available storage clusters for a specific team. Returns a table with cluster IDs, names, and regions. Used primarily for creating cloud connections to…
- `dashboard_groups` _(read)_ — List the dashboard groups dashboards are organized into, with how many dashboards each one holds. Use this to find the exact name of an existing group before…
- `dashboard_templates` _(read)_ — List all available dashboard templates in a paginated table format. Returns template ID, name, description, and other metadata
- `dashboards` _(read)_ — List all available dashboards in a paginated table format. Returns dashboard ID, name, creation date, and last updated date. Pass resource_group_id to list…
- `explorations` _(read)_ — List saved explorations (saved Explore queries) in a paginated table. Returns exploration ID, name, chart type, sources, group, and last updated date. Use this…
- `data_regions` _(read)_ — List all available data regions and clusters for application and source creation. Returns a table with region IDs (to use when creating applications or…
- `error_comments` _(read)_ — Read the conversation on an error: comments left in the app, comments posted by an agent over MCP, replies written in the error Slack thread, and comments…
- `errors` _(read)_ — List error patterns for an application with occurrence counts, affected users, current state, and links. Defaults to unresolved errors and supports filtering…
- `metric_expressions` _(read)_ — List the metric expressions (extract-metrics-from-logs rules) on a source. Returns the rule ID, name, kind (metric vs label), ClickHouse type, SQL expression,…
- `releases` _(read)_ — List all releases for a specific application in a paginated table format. Returns release ID (usable with remove_release), reference, environments, origin,…
- `sources` _(read)_ — List all available sources in a paginated table format. Returns source ID, name, platform type, team, status (active/paused), data region, and creation date
- `teams` _(read)_ — List all available teams in Better Stack Logs. Returns a table with team IDs and names, grouped by organization
- `move_charts` _(write)_ — Move one or more charts to new positions on a dashboard. Validates the final layout for overlaps, allowing swaps and complex rearrangements. All moves are…
- `remove_chart` _(destructive)_ — Remove a chart from its dashboard permanently. This action cannot be undone and will also remove any alerts associated with the chart. Use dashboard first to…
- `remove_dashboard_section` _(destructive)_ — Remove a section divider from a dashboard permanently. This action cannot be undone. Charts are not affected - only the section header is removed. Use…
- `remove_dashboard` _(destructive)_ — Remove a dashboard permanently. This action cannot be undone
- `remove_dashboard_variable` _(destructive)_ — Remove a dashboard template variable by name. Cannot remove the automatic variables source, start_time, end_time, or time. A chart still referencing a removed…
- `remove_exploration_variable` _(destructive)_ — Remove a variable from an exploration (saved Explore query) by name. Cannot remove the automatic variables source, start_time, end_time, or time. A query still…
- `remove_release` _(destructive)_ — Remove a release permanently. A release still receiving error events is re-detected automatically when its next event arrives. Use the releases tool to find…
- `set_dashboard_variable` _(destructive)_ — Create or update a dashboard template variable — a user-facing filter in the dashboard toolbar, referenced in chart SQL as `{{name}}` (required — the chart…
- `set_exploration_variable` _(destructive)_ — Create or update a variable on an exploration (saved Explore query), referenced in its query as `{{name}}`. The most common use is setting the exploration's…
- `toggle_chart_alert_pause` _(write)_ — Pause or unpause a chart alert. When paused, the alert will not trigger any incidents
- `unlink_error_issue` _(destructive)_ — Remove the link between an error and an issue in Linear, Jira, or GitLab. Better Stack stops syncing the two; the issue itself is left untouched.
- `update_error_state` _(write)_ — Update the state of a specific error (mark as resolved, ignored, or unresolved)
- `update_metric_expression` _(destructive)_ — Update an existing metric expression. Call `metric_expressions` first to get the ID. At least one of `name`, `sql_expression`, `type`, `aggregations` must be…
- `documentation` _(read)_ — Search for relevant documentation articles and return their contents
- `team_members` _(read)_ — List the members of a Better Stack team, including pending invitations. Returns each member's email, name, role and the mobile app platforms they have signed…
- `team_roles` _(read)_ — List the roles defined in a Better Stack organization, including their role_id and system-role identifier (admin, billing_admin, team_lead, responder, member,…
- `invite_team_member` _(write)_ — Invite someone to a Better Stack team by e-mail address. Optionally set their role by system-role name (`role`: responder, member, team_lead, billing_admin) or…
- `change_team_member_role` _(destructive)_ — Change a team member's role. Identify the member by `email` or `user_id` (from team_members) and pass the target `role_id` (from team_roles). The admin role…
- `remove_team_member` _(destructive)_ — Remove a member from a Better Stack team, or cancel a pending invitation. Identify them by `email` or `user_id` (from team_members). Admins cannot be removed…

---

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