Skip to main content

mcpulse

Analytics for MCP servers, for the Python MCP SDK.

One import, one wrap — see which of your tools actually work for the models calling them.

from mcp.server.mcpserver import MCPServer
from mcpulse import watch

mcp = MCPServer("my-server")
watch(mcp, key="mp_live_…")

That is the whole integration. The server is instrumented in place and handed straight back, so the call drops in around an existing server without moving anything else.

Install

pip install mcpulse-sdk

The distribution is mcpulse-sdk; the import stays mcpulse. They differ because mcpulse on PyPI belongs to an unrelated project, and PyPI has no scoping to fall back on the way npm does — so this package mirrors the npm name (@mcpulse/sdk) instead.

No runtime dependencies. mcp is your dependency, not ours.

Options

Option Default Meaning
key — Ingest key, mp_live_…, minted per MCP in the dashboard
endpoint https://api.getmcpulse.com Point at a local API while developing
enabled True False makes watch() a no-op — useful in tests and CI
debug False Log what is sent, and why a send failed, to stderr

An empty key turns it off, so a server started without its key configured is silent rather than a source of 401s on every flush.

What leaves your process

Sizes and hashes. Arguments and results do not, and no option turns that on.

Every tool call reports its name, how long it took, how it ended, how many bytes came back, whether the result was empty, and a 12-character one-way hash of the arguments — enough to tell a retry from a fresh call, and not enough to learn anything about either.

The three rules

  1. Never throw. Every entry point swallows. If MCPulse fails inside your tool call, your tool fails and you blame us.
  2. Never block. Record, buffer, return. Nothing awaits the network on the path a model is waiting on — sending happens on a background thread, never on your event loop.
  3. Never store customer data. See above.

Supported

  • mcp >= 2.0 — attaches through the supported Server.middleware chain.
  • mcp 1.x — falls back to patching the dispatcher's handler map.

Both then wrap your own tool callbacks, which is what lets MCPulse tell a tool that crashed from one whose arguments never validated — the MCP server converts both to isError before anything outside can see the difference.

Cross-language consistency

args_hash is the first 12 hex characters of the SHA-256 of the RFC 8785 canonical form of the arguments. tests/fixtures/canonical.json is the shared conformance suite that every MCPulse SDK runs, so a call hashed here and a call hashed by the TypeScript SDK land in the same bucket.

Licence

MIT

Metadata

Release files for mcpulse-sdk 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mcpulse-sdk 0.1.0
File Size Uploaded Provenance
mcpulse_sdk-0.1.0.tar.gz 25.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for mcpulse-sdk 0.1.0
File Interpreter ABI Platform
mcpulse_sdk-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 51.3 kB

Release files / mcpulse_sdk-0.1.0.tar.gz

Download URL mcpulse_sdk-0.1.0.tar.gz
Size 25.5 kB
Tags Source
SHA-256 checksum
How to use checksums
b119b2c717b38cf5e7c59eb39a3afe690de4d3db99b2992c43011968841c0ca3
BLAKE2b-256 checksum
How to use checksums
14e8dece0cb220d79724baf79c4f2c579fe41add5a2e4cc22f746e46b2414694
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.22

Release files / mcpulse_sdk-0.1.0-py3-none-any.whl

Download URL mcpulse_sdk-0.1.0-py3-none-any.whl
Size 25.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
88f9f85021983ad848db89a843ad98a466039c39c39a8373981394bff1a476f6
BLAKE2b-256 checksum
How to use checksums
a1b4a776a9792e90565842260d363dbe1531a96a67ffc8d57d4edcee7100f708
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.22

Security for mcpulse-sdk 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page