# 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 SpanlyClient, MonitorOptions, and the per-request hooks. - [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 SpanlyClient, MonitorOptions, and the per-packet hooks. - [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. - [Session tracking](https://spanly.com/docs/session-tracking/): How Spanly groups MCP requests into sessions, including synthetic session IDs for sessionless servers. ### 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. - [Alerts](https://spanly.com/docs/alerts/): Get notified when your MCP servers, agents, or tools start misbehaving. - [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. ## Blog Engineering and product writing on MCP observability. Full text at /llms-full.txt. - [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.