# Spanly > Spanly is observability for MCP (Model Context Protocol) servers. It captures > every tool call, resource read, and prompt as a first-class signal, so > engineering teams running MCP in production can debug failures, watch > performance per tool, and reconcile MCP traffic with the rest of their stack. Spanly is built to run alongside an existing APM (Datadog, Sentry, New Relic), not to replace it. The SDK cross-links every span to the host APM via W3C trace context, so an MCP-scoped error in Spanly opens straight into the parent trace in the APM the team already runs. The product is targeted at B2B SaaS companies (Series A to C, 20 to 500 engineers) that have shipped or are shipping an MCP server. The SDK and CLI are open source (Apache 2.0); the hosted backend is paid with a free tier. ## Core concepts - **MCP (Model Context Protocol)**: a JSON-RPC based protocol used by AI clients (Claude, Cursor, Windsurf, custom agents) to call tools, read resources, and fetch prompts from a server. Standard APMs see the outer HTTP request; Spanly sees the protocol-level operation. - **Tool call**: an individual `tools/call` operation. Spanly captures the tool name, arguments, response, latency, and error if any. - **Resource read**: a `resources/read` operation. Spanly captures the resource URI, size, and cache outcome. - **Session**: a single client-server MCP connection. Spanly groups all requests under a session so an incident can be traced end to end. - **Client identity**: the MCP client that initiated traffic (e.g. Claude Desktop, Cursor, Windsurf, an in-house agent). Spanly breaks down metrics per client. ## Differences from general APMs | Signal | General APM | Spanly | | ----------- | ------------------------------- | ------------------------------------------------------ | | Protocol | HTTP POST /mcp | tools/call, resources/read, prompts/get | | Errors | 500 + stack trace | Tool-call rejection with the full prompt and arguments | | Performance | p95 endpoint latency | p95 per tool, per server name, per client | | Payload | Bytes in / bytes out | Tokens in / tokens out, resource read sizes | | Clients | One client identity per session | Claude, Cursor, Windsurf, custom | ## Pages - [Home](https://spanly.com/): product overview, APM comparison, dashboard preview. - [MCP observability](https://spanly.com/mcp-observability/): what MCP-native observability covers and why an APM alone misses it. - [Pricing](https://spanly.com/pricing/): tiers and ingest pricing. - [Security](https://spanly.com/security/): data residency, encryption, compliance posture. - [Founder program](https://spanly.com/founding/): early-access design partner offer. - [About](https://spanly.com/about/): company description. - [Careers](https://spanly.com/careers/): open roles. - [Privacy policy](https://spanly.com/privacy/) - [Terms of service](https://spanly.com/terms/) ## Open source - GitHub: https://github.com/spanlyhq/spanly (Apache 2.0) - TypeScript SDK: `npm install @spanly/sdk` - Python SDK: `pip install spanly` - CLI: `npx -y @spanly/spanly` or `brew install spanlyhq/tap/spanly` - Docker: `docker pull spanly/spanly:latest` ## Data handling - Regions: US and EU. - All ingest TLS-encrypted; storage encrypted at rest. - GDPR compliant; data does not cross regions. - SDK overhead: under 1 ms per traced operation in benchmarks. ## Contact - Website: https://spanly.com - Status: https://spanly.com/#status ## Documentation Product documentation: quickstarts, SDK and CLI references, and platform guides. Full text at /llms-full.txt. - [Quickstart](https://spanly.com/docs/): Send your first MCP request to Spanly in under five minutes. ### Instrumentation - [TypeScript SDK](https://spanly.com/docs/typescript-sdk/): Instrument a TypeScript or Node MCP server with @spanly/sdk in one line. - [Installation](https://spanly.com/docs/typescript-sdk/installation/): Install the @spanly/sdk package and wire up your API key. - [Quickstart](https://spanly.com/docs/typescript-sdk/quickstart/): Instrument a TypeScript MCP server with @spanly/sdk in one line. - [API reference](https://spanly.com/docs/typescript-sdk/api-reference/): Full reference for spanly(), wrapFetchHandler(), and the options they accept. - [Examples](https://spanly.com/docs/typescript-sdk/examples/): Recipes for common TypeScript SDK integrations. - [Python SDK](https://spanly.com/docs/python-sdk/): Instrument a Python MCP server with the spanly package in one line. - [Installation](https://spanly.com/docs/python-sdk/installation/): Install the spanly package and set up your API key. - [Quickstart](https://spanly.com/docs/python-sdk/quickstart/): Instrument a Python MCP server with spanly in one line. - [API reference](https://spanly.com/docs/python-sdk/api-reference/): Full reference for SpanlyMiddleware and the options it accepts. - [Examples](https://spanly.com/docs/python-sdk/examples/): Recipes for common Python SDK integrations. - [CLI](https://spanly.com/docs/cli/): Monitor any MCP server with the Spanly CLI, no code changes required. - [Installation](https://spanly.com/docs/cli/installation/): Install the spanly CLI via npm, Homebrew, direct download, or Docker. - [spanly run](https://spanly.com/docs/cli/run/): Wrap an MCP server as a child process, stdio or HTTP, zero code changes. - [spanly proxy](https://spanly.com/docs/cli/proxy/): Standalone HTTP/SSE reverse proxy in front of an existing MCP server. - [Flag reference](https://spanly.com/docs/cli/flags/): Every flag accepted by spanly run and spanly proxy. - [Production deploy](https://spanly.com/docs/cli/production/): Helm, Kustomize, SSE pass-through, and admin endpoints. - [Docker](https://spanly.com/docs/docker/): Run the Spanly CLI as a container or sidecar alongside your MCP server. - [Installation](https://spanly.com/docs/docker/installation/): Pull and run the Spanly CLI from its container image. - [Sidecar patterns](https://spanly.com/docs/docker/sidecar/): Run Spanly alongside your MCP server in docker-compose or Kubernetes. ### Platform - **Spanly MCP** - [Overview](https://spanly.com/docs/mcp/overview/): The Spanly MCP server gives an agent read access to your telemetry, including requests, errors, dashboards, and alerts. - [Connecting](https://spanly.com/docs/mcp/connecting/): How to connect Claude, Cursor, Windsurf, and other MCP clients to the Spanly MCP server. - [Tools](https://spanly.com/docs/mcp/tools/): The full surface of tools exposed by the Spanly MCP server. - [Session tracking](https://spanly.com/docs/session-tracking/): How Spanly groups MCP requests into sessions, including synthetic session IDs for sessionless servers. - [Identify your users](https://spanly.com/docs/identify-users/): Attribute MCP sessions to your end users and accounts with JWT claim mapping or a resolver endpoint. Tokens never leave your infrastructure. - [Identity resolver protocol](https://spanly.com/docs/identity-resolver/): The HTTP contract between Spanly producers and your token-to-user resolver endpoint. Version 1. - [Overview](https://spanly.com/docs/gateway/): The Spanly gateway is a hosted endpoint in front of your MCP server that captures traffic with no code changes. - [Overview](https://spanly.com/docs/gateway/): The Spanly gateway is a hosted endpoint in front of your MCP server that captures traffic with no code changes. - [Quickstart](https://spanly.com/docs/gateway/quickstart/): Create a gateway, test the connection, and see live requests in under 10 minutes. - [Custom domains](https://spanly.com/docs/gateway/custom-domains/): Serve your gateway from your own hostname so end users never see a Spanly URL. - [Auth behind the gateway](https://spanly.com/docs/gateway/auth/): How OAuth passthrough, static header injection, and gateway-managed client keys work. - [Edge protection](https://spanly.com/docs/gateway/edge-protection/): Rate limiting, request size caps, and IP rules the gateway enforces before traffic reaches your server. - [Security and data handling](https://spanly.com/docs/gateway/security/): What the Spanly gateway sees, what it stores, how long it keeps it, and what happens when Spanly infrastructure is degraded. - [Limits and troubleshooting](https://spanly.com/docs/gateway/limits/): How the gateway behaves at your quota, its fail-open guarantees, and what each error means. - [Notifications](https://spanly.com/docs/notifications/): Get notified when a new Issue opens on your MCP servers, agents, or tools. - [Concepts](https://spanly.com/docs/mend/): Mend finds manifest faults in your MCP server, drafts a fix, tests it on live traffic, and carries the winner until you ship it upstream. - [How canaries work](https://spanly.com/docs/mend/canaries/): Session bucketing, arms, primary metrics, the guardrail gates, and the sequential test that lets a canary conclude as early as the data allows. - [Trust and safety](https://spanly.com/docs/mend/trust/): The exact set of changes Mend can make, what is deliberately impossible, the fail-open guarantees, and what Spanly can and cannot see or change. - [SDK and CLI reference](https://spanly.com/docs/mend/reference/): How the collector syncs Mend delivery state, how to verify what is being served, and how to disable Mend for an environment. - [Upstreaming guide](https://spanly.com/docs/mend/upstreaming/): Read a shim's diff, apply the same change in your MCP server source, and let Mend retire the shim automatically. - [Patch delivery](https://spanly.com/docs/pulse/): How collectors stay in sync with patch delivery state through the Spanly-Pulse response header. - [Shared dashboards](https://spanly.com/docs/shared-dashboards/): Send a read-only view of a Spanly dashboard to customers, vendors, or your wider team. - [Organisations](https://spanly.com/docs/organisations/): Manage members, roles, and per-project access in your Spanly organisation. ### Help - [Troubleshooting](https://spanly.com/docs/troubleshooting/): Common setup issues and how to diagnose them. - [Migrating to sessionless MCP (2026-07-28)](https://spanly.com/docs/sessionless-migration/): What the 2026-07-28 MCP spec changes for server teams, a migration checklist, and how Spanly captures both protocol eras. ## Blog Engineering and product writing on MCP observability. Full text at /llms-full.txt. - [Agentjacking: when your telemetry becomes a prompt-injection vector](https://spanly.com/blog/agentjacking-telemetry-prompt-injection/) (2026-06-26): Researchers turned a public Sentry DSN into remote code execution by hiding shell commands in an error report. How agentjacking works, why no single tool can filter it away, and how MCP observability surfaces the read-to-exec pivot it leaves behind. - [MCP OpenTelemetry tracing vs Spanly: what each one actually captures](https://spanly.com/blog/mcp-opentelemetry-tracing-vs-spanly/) (2026-06-11): The MCP Python SDK now ships OpenTelemetry tracing per SEP-414. It answers a different question than packet-level MCP observability does. Here is what the spans capture, what they leave out, and how traceparent ties the two together. - [EU AI Act traceability for MCP tool calls](https://spanly.com/blog/eu-ai-act-mcp-traceability/) (2026-06-04): If your MCP server is part of an AI system in scope of the EU AI Act, logging and traceability are not optional. A practical look at what that means for tool calls, and a checklist. - [How to monitor your MCP server in production](https://spanly.com/blog/monitor-mcp-server-in-production/) (2026-06-02): A practical guide to monitoring an MCP server in production: what to instrument, which metrics matter, and how to set up alerting for tool calls, sessions, and clients. - [MCP observability vs APM: what still falls through the gap](https://spanly.com/blog/mcp-observability-vs-apm/) (2026-05-28): APM vendors are adding MCP support, and it helps. Here is what their SDK-based coverage gets you, what it structurally cannot, and why you need both. - [Spanly architecture](https://spanly.com/blog/spanly-architecture/) (2026-05-22): The architecture of Spanly: mindset and reasoning behind our decisions, and the stack we ended up with. - [Introducing Spanly: observability built for MCP](https://spanly.com/blog/launching-spanly/) (2026-05-22): Spanly is observability for MCP servers. Two-minute install, MCP-native telemetry, EU and US data residency. - [Hello, Spanly](https://spanly.com/blog/hello-spanly/) (2026-05-21): A short note announcing the Spanly engineering blog.