Handshake methodology
How Influzer verifies an MCP server
A handshake is a timed HTTPS request that speaks MCP initialize and, when that succeeds, tools/list. The verification grade adds that result to other stored facts. It is not a safety score.
What is tested
- The URL is an HTTP or HTTPS address. Anything else is skipped and not probed.
- initialize is sent as JSON-RPC with protocol version 2024-11-05 and client name influzer-mcp-validator.
- A notifications/initialized message is sent after initialize returns a result.
- tools/list is sent on the same session. Tool names and descriptions from that reply are what “live” tools means.
- The round trip is timed. The default timeout is MCP_LIVE_TIMEOUT_MS, or 20 seconds when that is unset.
How often
- The catalog file is refreshed by the weekly registry workflow.
- The validation workflow re-checks live endpoints daily and writes data/mcp-validation-state.json.
- A public probe at /api/v1/probe and the badge at /api/v1/probe/badge can run the same client on demand.
- Each stored probe can append a sample (time, status, latency) to data/mcp-probe-history.json. 30-day uptime is hidden until a server has samples on two different UTC days.
Probe statuses
skipped— No HTTP endpoint, so the client did not connect.unreachable— The initialize request failed on the network.auth_required— The server answered and asked for authentication before tools/list could finish.error— The server answered, but initialize or tools/list failed.ok— tools/list returned at least one tool.ok_empty— tools/list returned an empty list. The directory status map does not currently treat ok_empty as Live OK, so the listing can still say Not probed.
Directory statuses
- Live OK (
live_ok) — The stored probe endpoint_status is ok. ok_empty is not mapped to this label. - Auth required (
auth_required) — The stored probe endpoint_status is auth_required. - Unreachable (
unreachable) — The stored probe endpoint_status is unreachable, error, or failed. - Not probed (
not_probed) — No mapped probe result. This includes listings we have not probed and ok_empty results. - Local only (
local_unprobed) — Transport is stdio or local and there is no HTTPS endpoint to probe.
Auth labels
- Auth gate (
required) — Shown when the live status is Auth required. - No auth gate seen (
none_detected) — Shown when the live status is Live OK. We did not see an auth challenge on that probe. It does not prove the server will stay open. - Auth unknown (
unknown) — Shown for every other live status.
Tool source labels
- tools/list (live) (
live) — The stored validation method includes live_mcp and the catalog has at least one tool. - Registry fallback (
registry) — The stored validation method mentions smithery or registry and the catalog has at least one tool. - Catalog tools (
catalog) — The catalog has tools, and the validation method is neither live nor registry. - No tools indexed (
none) — The catalog tools array is empty.
Listing surface labels
- Ready surface (
ready) — At least two indexed tools, a known transport (http, sse, or stdio), and either a live or auth response or a manual/official listing. - Tools indexed (
indexed) — At least one indexed tool and a known transport, without the ready rule. - Thin listing (
thin) — One indexed tool, or no tools but an HTTP endpoint, docs URL, or GitHub URL. - Unverified (
unverified) — None of the rules above.
Verification grade
- The verification grade is 0–100. It is not a safety score.
- Live OK adds 40. Auth required adds 25. Other live statuses add nothing.
- At least one indexed tool adds 20. Five or more indexed tools add another 10.
- An HTTPS endpoint adds 15. If there is no HTTPS endpoint and the transport is stdio or local, that adds 10 instead.
- A stored probe timestamp within the last 7 days adds 15.
- The score is capped at 100. A is 80–100, B is 60–79, C is 40–59, D is 0–39.
- Latency is measured and stored when a probe runs. It is not part of the grade.
- 30-day uptime is the share of stored samples in that window whose status shows the server responded (live_ok, auth_required, ok, or ok_empty). It is omitted until samples exist on two different UTC days.
What this does not prove
- That the server is safe to install or that its tools do what they claim.
- That a tool call succeeds. We do not call the tools.
- That resources/list, prompts/list, or sampling work.
- That authentication will keep working, or that an open initialize stays open.
- That a stdio server runs on your machine. Those are marked local and are not probed over the network.