mcp-pulse

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

  1. Connect with the official TypeScript SDK. The client name is mcp-pulse. We send no credentials.
  2. Send initialize and notifications/initialized. Record the time to the initialize result, the protocol version, the server name and version, the capabilities and the length of the instructions.
  3. If the server has tools, call tools/list. Follow the pagination. Record the time and the tools.
  4. 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/list while that stream is open.
  5. Close the session.

Each request has a timeout of 15 seconds. We run one probe at a time against each host.

Results

alive
initialize and tools/list were successful.
needs auth
HTTP 401 or 403. We record the WWW-Authenticate scheme 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