method
How mcp-pulse measures
One open-source probe. The same steps for every server.
What we probe
The probe reads the official MCP registry. It uses the latest version of each server. It takes the first streamable-http remote. If the server has only an sse remote, it takes that one. We do not probe servers that ship only as packages (npm, PyPI, OCI, MCPB).
How we probe a server
- Connect with the official TypeScript SDK. The client name is
mcp-pulse. We send no credentials. - Send
initializeandnotifications/initialized. Record the time to theinitializeresult, the protocol version, the server name and version, the capabilities and the length of the instructions. - If the server has tools, call
tools/list. Follow the pagination. Record the time and the tools. - Do not open the standalone GET stream. The probe answers 405 to the SDK's GET. The probe needs no messages from the server. Some servers stop
tools/listwhile that stream is open. - Close the session.
Each request has a timeout of 15 seconds. We run one probe at a time against each host.
Results
- alive
initializeandtools/listwere successful.- needs auth
- HTTP 401 or 403. We record the
WWW-Authenticatescheme when the server sends one. The server is reachable, but it does not talk to clients without credentials. - paid (402)
- HTTP 402 Payment Required.
- newer protocol
- The server answers with a protocol version that the current SDK does not support. The server is reachable.
- not found
- HTTP 404, 405 or 410 on the MCP endpoint.
- not MCP
- HTTP 200, but the response is not a valid MCP reply. Or the server returned a JSON-RPC error to
initialize. - timeout, no DNS, TLS error, refused, server error, rate limited
- Transport failures. We name each one after its cause.
Token counts
We serialize each tool as compact JSON with name, description and input_schema. We count the tokens with the o200k_base tokenizer. Clients wrap tool definitions in different ways. Models also tokenize in different ways. The count is an estimate. It is the same estimate for every server. This makes servers comparable. “Of a 200k context window” divides the count by 200 000.
Same tool set
We hash the sorted tool names and their schema sizes. Servers with the same hash serve the same tools. This shows bulk publishers that register one server under many names.
Live check
/check probes one server on demand. It uses the same steps and a timeout of 10 seconds. The Worker does the network part. Your browser counts the tokens with the same tokenizer, because the Worker has a small CPU budget. We keep a result for ten minutes. A URL that is already in the registry opens its page.
Machine access
Each server has JSON at /api/s/<name>.json. The list is at /api/servers.json. The live probe is at /api/check.json?url=…. The run summary is at /api/summary.json. The board is also an MCP server: https://mcp-pulse.ulehla.dev/mcp over Streamable HTTP, no auth. Its tools are lookup_server, search_servers, check_server and registry_summary. /llms.txt lists all of this.
Being a good guest
Each request carries the User-Agent mcp-pulse/<version> (+https://github.com/ondraulehla/mcp-pulse). The probe runs one time each day. It sends no tool calls. It makes at most three requests to each server. To exclude a server, open an issue with its registry name.
Run it yourself
git clone https://github.com/ondraulehla/mcp-pulse cd mcp-pulse && npm install npm run probe -- --sample 200 --per-host 2