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
- Never throw. Every entry point swallows. If MCPulse fails inside your tool call, your tool fails and you blame us.
- 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.
- Never store customer data. See above.
Supported
mcp >= 2.0— attaches through the supportedServer.middlewarechain.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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| mcpulse_sdk-0.1.0.tar.gz | 25.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.