# Maple MCP server

Connect Claude, Cursor and other AI agents to your Maple telemetry over the Model Context Protocol: endpoints, authentication, and every tool the server exposes.

Maple runs a Model Context Protocol (MCP) server. Each connection works inside one organization. From there an agent can query services, traces, logs and infrastructure, triage error issues, edit dashboards, manage alert rules, SLOs, uptime monitors and ingest rules, update status pages, read security audit runs, and query the databases and APIs the organization connected as data sources.

|                          |                                                                                                                                            |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
| Endpoint (US)            | `https://api.maple.dev/mcp`                                                                                                                |
| Endpoint (EU)            | `https://api.eu.maple.dev/mcp`                                                                                                             |
| Transport                | Streamable HTTP                                                                                                                            |
| Manifest (`server.json`) | [maple.dev/.well-known/mcp.json](/.well-known/mcp.json) · [api.maple.dev/.well-known/mcp.json](https://api.maple.dev/.well-known/mcp.json) |
| Registry name            | `dev.maple/maple`                                                                                                                          |
| Auth                     | Maple API key as Bearer token, or OAuth 2.1                                                                                                |
| Rate limit               | 120 requests per 10 seconds per key or user; over it, `429` with `Retry-After: 10`                                                         |

Use the endpoint of your organization's [region](/docs/reference/regions). The examples below use the US endpoint; for an EU organization replace `api.maple.dev` with `api.eu.maple.dev`.

## Connecting a client

Any MCP client that speaks Streamable HTTP can connect. **Settings → MCP** in the dashboard shows the endpoint for your region and ready-made configuration for common clients. There are two ways to authenticate. Both are described in more detail on [Authentication](/docs/reference/authentication).

**API key.** Create a key under **Settings → MCP** or **Settings → Keys** and pass it as a Bearer token:

```json
{
	"mcpServers": {
		"maple": {
			"type": "http",
			"url": "https://api.maple.dev/mcp",
			"headers": { "Authorization": "Bearer maple_ak_…" }
		}
	}
}
```

For Claude Code: `claude mcp add --transport http maple https://api.maple.dev/mcp --header "Authorization: Bearer maple_ak_…"`.

**OAuth.** Clients that support the MCP authorization flow need no key. The server publishes its protected-resource metadata at `https://api.maple.dev/.well-known/oauth-protected-resource/mcp` and its authorization server metadata at `https://api.maple.dev/.well-known/oauth-authorization-server`. Dynamic client registration and PKCE (`S256`) are supported, so the client needs only the endpoint URL. It opens a browser sign-in on first use.

Requests are scoped to the organization the key belongs to, or the one chosen at sign-in. A user in several organizations picks one during the OAuth consent step.

## Tools

The server exposes the tools below. Read-only tools are marked **read**; the rest change data in your organization. `tools/list` returns the current set with full parameter schemas.

Tools that take an alert rule, alert destination, dashboard or error issue ID accept either its UUID or its [REST API](/docs/reference/api) ID (`alrt_…`, `dest_…`, `dash_…`, `iss_…`). `list_alert_destinations`, `list_dashboards`, `get_dashboard` and `create_dashboard` return both. The REST API also accepts the UUID in place of its prefixed ID.

### Services and discovery

| Tool                         | Access | What it does                                                                                          |
| ---------------------------- | ------ | ----------------------------------------------------------------------------------------------------- |
| `list_services`              | read   | Active services with throughput, error rate and P95 latency                                           |
| `diagnose_service`           | read   | One service's health, top errors, recent traces and logs, and the platform resources behind it        |
| `get_service_top_operations` | read   | A service's top operations (endpoints or spans), ranked by a chosen metric                            |
| `service_map`                | read   | Service-to-service dependencies with call counts, error rates and latency per edge                    |
| `compare_periods`            | read   | Error rate, throughput and P95 across two periods, overall and per service, with regressions flagged  |
| `explore_attributes`         | read   | Attribute keys and their values for filtering; `source=services` lists environments and commit SHAs   |
| `list_metrics`               | read   | Custom metrics with type, unit, monotonicity and data volume                                          |
| `describe_warehouse_tables`  | read   | Tables and columns available to raw SQL, with sorting keys and notes on units and casing              |
| `service_deployments`        | read   | Versions (commit SHAs) each service ran, with traffic, error rate and P95 per version                 |
| `route_usage`                | read   | HTTP endpoints per service with request count, error rate, P95 and first and last seen, up to 90 days |
| `db_query_volume`            | read   | Database query shapes ranked by call volume per service and database, with errors and latency         |

### Traces, logs and queries

| Tool                   | Access | What it does                                                                                                                                  |
| ---------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `search_traces`        | read   | Find traces by service, duration, error status, HTTP method, span name or one span attribute                                                  |
| `find_slow_traces`     | read   | The slowest traces with p50, p95, min and max for context                                                                                     |
| `inspect_trace`        | read   | Span tree and logs for one trace                                                                                                              |
| `inspect_span`         | read   | Full attribute set for one span; decodes messages and tool calls on AI agent spans                                                            |
| `search_logs`          | read   | Log entries, newest first, filtered by service, severity, body text, trace or span                                                            |
| `mine_log_patterns`    | read   | Cluster log messages into templates with counts and a severity and service breakdown                                                          |
| `compare_log_patterns` | read   | Log templates that are new, gone, or whose share doubled or halved between two windows, such as before and after a deploy                     |
| `compare_operations`   | read   | A service's operations that are new, gone, or whose share, error rate or p95 changed between two windows, such as before and after a deploy   |
| `query_data`           | read   | Aggregate traces, logs, metrics or product events into a time series or top-N breakdown                                                       |
| `run_sql`              | read   | Run one read-only ClickHouse `SELECT`. The model sees the first 100 rows and the full row count; see the [SQL reference](/docs/reference/sql) |

### Errors

| Tool                               | Access | What it does                                                                                        |
| ---------------------------------- | ------ | --------------------------------------------------------------------------------------------------- |
| `find_errors`                      | read   | Errors grouped by type with counts, affected services and a stable fingerprint                      |
| `error_detail`                     | read   | Sample traces and correlated logs for one error fingerprint                                         |
| `list_error_issues`                | read   | Error issues with workflow state, counts, assignee and lease holder                                 |
| `list_error_issue_events`          | read   | An issue's audit log: state changes, claims, comments, agent notes and fix proposals                |
| `get_investigation`                | read   | One investigation by `inv_…` id: its subject, status and the AI diagnosis with evidence             |
| `list_error_incidents`             | read   | Time-bounded flare-ups under an error issue (first seen and regressions)                            |
| `claim_error_issue`                | write  | Take a lease on an issue so other agents do not duplicate the work                                  |
| `release_error_issue`              | write  | Give up your lease, optionally moving the issue to another state                                    |
| `transition_error_issue`           | write  | Move an issue to another workflow state                                                             |
| `transition_error_issues`          | write  | Move up to 200 issues to one workflow state, with a note on each                                    |
| `merge_error_issues`               | write  | Fold up to 50 duplicate issues into one; each merged issue is archived pointing at the kept one     |
| `set_issue_severity`               | write  | Set or clear an issue's triage severity                                                             |
| `comment_on_error_issue`           | write  | Add a comment or agent note to an issue's timeline                                                  |
| `propose_fix`                      | write  | Record a proposed fix and move the issue to `in_review`                                             |
| `link_pull_request`                | write  | Attach a GitHub pull request to an issue; Maple verifies the fix after it merges                    |
| `register_agent`                   | write  | Register an LLM agent so it can claim and transition issues. Needs a signed-in user, not an API key |
| `get_error_notification_policy`    | read   | The error notification policy: destinations, toggles, and when the first notification goes out      |
| `update_error_notification_policy` | write  | Choose whether error incidents notify alert destinations, and which ones. Org admins only           |

### Alerting

| Tool                         | Access | What it does                                                                             |
| ---------------------------- | ------ | ---------------------------------------------------------------------------------------- |
| `list_alert_rules`           | read   | Alert rules with severity, signal type and condition                                     |
| `get_alert_rule`             | read   | One rule's full configuration: thresholds, filters, evaluation settings and destinations |
| `list_alert_destinations`    | read   | Notification destinations with id, type and delivery health                              |
| `list_alert_incidents`       | read   | Triggered alert incidents, open and resolved, with the last observed value               |
| `acknowledge_alert_incident` | write  | Acknowledge an open incident, which pauses its reminders, or clear the acknowledgement   |
| `get_incident_timeline`      | read   | Trigger, notification and resolution times for one rule's incidents, or all rules'       |
| `list_alert_checks`          | read   | A rule's recent evaluations with observed value, threshold and sample count              |
| `preview_alert_rule`         | read   | Replay a saved or draft rule over past data: each window's verdict and skip reason       |
| `create_alert_rule`          | write  | Create an alert rule from a template or from signal type, comparator and threshold       |
| `update_alert_rule`          | write  | Change the fields you pass on an alert rule                                              |
| `delete_alert_rule`          | write  | Delete an alert rule and its incident history. Requires `confirm=true`                   |
| `list_escalation_chains`     | read   | Escalation chains with their steps, repeats and the rules using them                     |
| `create_escalation_chain`    | write  | Page destinations step by step, waiting for an acknowledgement between steps             |
| `update_escalation_chain`    | write  | Change a chain's name, steps, repeats or description                                     |
| `delete_escalation_chain`    | write  | Delete a chain no rule uses                                                              |
| `list_maintenance_windows`   | read   | One-off and weekly maintenance windows with their schedule, matchers and next occurrence |
| `create_maintenance_window`  | write  | Silence matching rules once or every week; can keep those hours out of anomaly baselines |
| `delete_maintenance_window`  | write  | Delete a maintenance window and end an occurrence in progress. Requires `confirm=true`   |
| `list_oncall_schedules`      | read   | On-call schedules with their layers and who is on call now                               |
| `who_is_on_call`             | read   | Who is on call for a schedule at an instant, why, and who is next                        |
| `create_oncall_schedule`     | write  | Rotate workspace members daily, weekly or every N hours, in layers                       |
| `update_oncall_schedule`     | write  | Change a schedule's name, time zone, layers or description                               |
| `delete_oncall_schedule`     | write  | Delete a schedule and its overrides                                                      |
| `create_oncall_override`     | write  | Put one member on call for a window, over every layer                                    |
| `delete_oncall_override`     | write  | Delete an override so the layers decide again                                            |
| `list_alert_silences`        | read   | Active and scheduled alert silences, or ended ones, with their matchers and window       |
| `create_alert_silence`       | write  | Hold back notifications for matching rules for a duration or until a time                |
| `end_alert_silence`          | write  | End a silence now so notifications resume; cancels a scheduled one                       |

### SLOs and uptime monitors

| Tool                    | Access | What it does                                                                                           |
| ----------------------- | ------ | ------------------------------------------------------------------------------------------------------ |
| `list_slos`             | read   | Every SLO with its current SLI, error budget left and worst burn rate, breaching ones first            |
| `inspect_slo`           | read   | One SLO in full: config, error budget, the burn rate of each window and its burn-rate alerting         |
| `create_slo`            | write  | Define an availability or latency SLO on one service, with burn-rate alerts                            |
| `update_slo`            | write  | Change an SLO's service, SLI, target, window or burn-rate alerting                                     |
| `delete_slo`            | write  | Delete an SLO and its burn-rate alert rule. Requires `confirm=true`                                    |
| `list_uptime_monitors`  | read   | HTTP, TCP and DNS checks and heartbeats with their status, last check and recent pass rate, down first |
| `create_uptime_monitor` | write  | Start an HTTP, TCP or DNS check, or a heartbeat; returns a heartbeat's ping URL                        |
| `update_uptime_monitor` | write  | Pause, resume or change a monitor's target, assertions, schedule or destinations                       |
| `delete_uptime_monitor` | write  | Delete a monitor and its alert rule. Requires `confirm=true`                                           |

The write tools here need the org admin or engineer role.

### Status pages

| Tool                       | Access | What it does                                                                                    |
| -------------------------- | ------ | ----------------------------------------------------------------------------------------------- |
| `get_status_page`          | read   | Every status page, or one page as visitors see it, with component status and open incidents     |
| `post_status_page_update`  | write  | Open a public incident or maintenance notice, or post its next update; new ones start as drafts |
| `apply_status_page_config` | write  | Replace a page's settings, theme and components in one write. Org admins and engineers only     |

### Dashboards

| Tool                        | Access | What it does                                                                             |
| --------------------------- | ------ | ---------------------------------------------------------------------------------------- |
| `list_dashboards`           | read   | Dashboards with widget counts and timestamps                                             |
| `get_dashboard`             | read   | One dashboard's full configuration, every widget included                                |
| `describe_dashboard_schema` | read   | What a widget can be: panel types, data sources, units, aggregations and display options |
| `inspect_chart_data`        | read   | Run a widget's query and report row counts, series statistics and a health verdict       |
| `create_dashboard`          | write  | Create a dashboard from a template, simplified widget specs or full JSON                 |
| `update_dashboard`          | write  | Change a dashboard's name, description or time range                                     |
| `add_dashboard_widget`      | write  | Add one widget, from the query builder, raw SQL or a funnel                              |
| `update_dashboard_widget`   | write  | Replace one widget with a full widget object                                             |
| `remove_dashboard_widget`   | write  | Remove one widget                                                                        |
| `reorder_dashboard_widgets` | write  | Move or resize widgets                                                                   |
| `replace_dashboard_widgets` | write  | Replace every widget in one validated write                                              |

### Session replays and product events

| Tool                     | Access | What it does                                                                                |
| ------------------------ | ------ | ------------------------------------------------------------------------------------------- |
| `search_sessions`        | read   | Find browser session replays by user, client, errors, duration or what happened in them     |
| `get_session_transcript` | read   | A session replay as a text transcript of navigation, clicks, console, network and errors    |
| `get_session_traces`     | read   | The backend traces a browser session produced                                               |
| `list_product_events`    | read   | Product event names with how often each fired and how many sessions and people it reached   |
| `query_funnel`           | read   | Conversion funnel over product events, with step counts, conversion and drop-off            |
| `list_users`             | read   | The end users your apps identified, with sessions, requests, errors and their busiest route |
| `inspect_user`           | read   | One end user: sessions, MCP sessions, the issues they hit and their failed requests         |

### Agent sessions

| Tool                           | Access | What it does                                                                         |
| ------------------------------ | ------ | ------------------------------------------------------------------------------------ |
| `list_agent_sessions`          | read   | AI agent sessions with agent, models, LLM and tool calls, failures, tokens and cost  |
| `get_agent_session`            | read   | One agent session: verdict, checks, findings, timing, turns, tokens and cost         |
| `get_agent_session_transcript` | read   | One agent session step by step: prompts, replies, tool calls and results, sub-agents |
| `get_agent_tools_overview`     | read   | Calls, failures and latency per agent tool, compared with the previous window        |
| `get_agent_tool_error`         | read   | One agent tool failure group with affected sessions and sample calls                 |

### Setup

| Tool                                  | Access | What it does                                                                                           |
| ------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------ |
| `audit_setup`                         | read   | Check the whole organization setup: alert routing, error notifications and per-service ingest coverage |
| `get_instrumentation_recommendations` | read   | Span and resource attribute problems found in your live data                                           |
| `list_integrations`                   | read   | Connected integrations, what each one feeds, and which resources are failing or stale                  |
| `list_ingest_sources`                 | read   | Everything that sends data to the organization, worst health first, and when each last sent data       |
| `ingest_freshness`                    | read   | Newest received timestamp per signal, with its lag                                                     |
| `ingest_usage`                        | read   | Spans, log records and metric data points ingested per service, with org totals                        |

### Ingest rules

| Tool                  | Access | What it does                                                                                   |
| --------------------- | ------ | ---------------------------------------------------------------------------------------------- |
| `list_ingest_rules`   | read   | The rules that drop or redact telemetry before Maple stores or bills it, in the order they run |
| `preview_ingest_rule` | read   | Run a saved or draft rule over recent traces or logs and count what it would drop or redact    |
| `create_ingest_rule`  | write  | Add a drop or redact rule; it applies to new data within 30 seconds                            |
| `update_ingest_rule`  | write  | Turn a rule on or off, rename or move it, or replace its signals, conditions or action         |
| `delete_ingest_rule`  | write  | Delete a rule. Requires `confirm=true`                                                         |

The write tools here need the org admin or engineer role.

### Data sources

| Tool                   | Access | What it does                                                                                        |
| ---------------------- | ------ | --------------------------------------------------------------------------------------------------- |
| `list_data_sources`    | read   | The external databases and APIs the organization connected for Maple to query in place              |
| `search_data_sources`  | read   | Find which data source, table or field holds a topic, such as failed payments or signups            |
| `describe_data_source` | read   | One data source's tables or resources, their fields and sample values, and its query language       |
| `query_data_source`    | read   | Run one read-only SQL or resource query against a data source; `explain=true` returns only the plan |

### Infrastructure

| Tool            | Access | What it does                                                                             |
| --------------- | ------ | ---------------------------------------------------------------------------------------- |
| `list_infra`    | read   | Hosts, Kubernetes, Docker containers and integration resources, closest to a limit first |
| `inspect_infra` | read   | One host, pod, node, workload, container or integration resource in depth                |

### Security

| Tool                         | Access | What it does                                                                                                                        |
| ---------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| `list_security_findings`     | read   | Code audit findings, vulnerable dependencies, scanner probes that got a 2xx and outdated runtimes, worst first, or one area in full |
| `inspect_security_finding`   | read   | One finding in full, or whether an advisory (CVE, GHSA) affects any repository or service                                           |
| `list_security_audit_runs`   | read   | Code security audit runs, newest first, with status, cost and findings, and this month's audit spend against its limit              |
| `inspect_security_audit_run` | read   | One audit run in full: what it covered, every claim it reported, and its step log. Org admins and engineers only                    |

### Integrations

| Tool                   | Access | What it does                                                                     |
| ---------------------- | ------ | -------------------------------------------------------------------------------- |
| `sync_railway`         | write  | Poll Railway now and report each environment's last sync                         |
| `create_scrape_target` | write  | Start scraping a Prometheus endpoint that needs no credentials                   |
| `update_scrape_target` | write  | Pause, resume or change a Prometheus scrape target                               |
| `delete_scrape_target` | write  | Delete a Prometheus scrape target and its check history; its stored metrics stay |

These are admin-only. Connecting a provider, and adding a scrape credential, stay in the dashboard, under **Sources** or **Settings → Integrations**.

### Search Console

| Tool                     | Access | What it does                                                                                                                |
| ------------------------ | ------ | --------------------------------------------------------------------------------------------------------------------------- |
| `search_console_queries` | read   | Google search queries from the connected Search Console: clicks, impressions, CTR and position, against the previous period |
| `search_console_pages`   | read   | Search landing pages joined with Maple web analytics: sessions, bounce rate and, optionally, conversions                    |

### Feedback

| Tool                  | Access | What it does                                                                                            |
| --------------------- | ------ | ------------------------------------------------------------------------------------------------------- |
| `send_maple_feedback` | write  | Tell the Maple team about a bug, a missing capability or a misleading doc: its kind, the agent, and why |
| `list_maple_feedback` | read   | Maple team only: read the feedback agents sent. Refused for any other organization                      |

The same feedback can be sent over the REST API with `POST /v2/agent_feedback`.

## Prompts and resources

The server also provides three prompts (`incident_triage`, `latency_analysis`, `debug_errors`) and two resources: `maple://instructions`, which explains Maple's data model to the model, and `maple://data-sources`, which lists the organization's connected data sources.

## Related

- [Maple API](/docs/reference/api): the REST API, with its [OpenAPI spec](/openapi.json)
- [Authentication](/docs/reference/authentication): API keys and OAuth
- [Limits](/docs/reference/limits): query ranges and rate limits
- [llms.txt](/llms.txt): the machine-readable index of this site
