Skip to main content
Glama

MCP Endpoint Lint - handshake, tool schemas, JSON-RPC errors

Server Details

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"whoami","arguments":{}}} free no key

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
97.4% over 18 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4/5.0

Scored across 7 tools

Disambiguation4/5

The five lint/report tools target clearly distinct phases: discovery, handshake, tool schemas, error handling, and aggregate scoring. The main ambiguity is 'example', which is a demo wrapper around score_card rather than a distinct lint operation, and 'whoami' is tangential meta-information.

Naming Consistency3/5

Names are readable and mostly lowercase noun phrases, but there is no consistent pattern: discovery_report, handshake_report, and tools_list_report share a suffix while error_conformance, score_card, example, and whoami do not. 'whoami' especially follows a Unix command convention rather than the server's report-style naming.

Tool Count4/5

Seven tools is a reasonable size for an MCP endpoint linter and stays within the well-scoped range. 'example' and 'whoami' are somewhat auxiliary to the core linting workflow, so the count is appropriate but not perfectly lean.

Completeness4/5

The set covers the main lifecycle areas: discovery documents, handshake/version negotiation, tool schema validation, and JSON-RPC error conformance, with score_card to aggregate them. It omits obvious adjacent MCP surfaces such as resources and prompts, but the tool set is not missing operations essential to its stated linting purpose.

Available Tools

7 tools
discovery_reportWhat a client looks for before it dialsA
Read-onlyIdempotent
Inspect

FIRST CALL, needs nothing: {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"whoami","arguments":{}}} — GET the documents an MCP client reads BEFORE the handshake and report what each one answered: /.well-known/oauth-protected-resource in BOTH forms — the root form everyone publishes and the RFC 9728 §3.1 insertion form a spec-following client actually requests for a resource served under a path — /.well-known/oauth-authorization-server, /.well-known/mcp, /.well-known/mcp.json, /mcp.json and /llms.txt. Each result carries the status, the verdict (served, missing, gated, soft-404 — a 200 carrying an HTML error page — or invalid JSON) and what a client does with that document. Makes one GET per document, 6 s each. Example: host='mcp.example.com' or host='https://mcp.example.com/mcp' (a path turns on the RFC 9728 insertion-form check) — or {} for the built-in fixture.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostYesA hostname, or the full endpoint URL. Give the full URL when your endpoint is served under a path: that is what the RFC 9728 §3.1 insertion form is derived from.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnly, idempotent, non-destructive, and openWorld; the description adds that it makes one GET per document with a 6-second timeout, reports per-document status and verdict, and checks both root and RFC 9728 §3.1 insertion forms when a path is supplied. This clearly extends beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and informative, but it front-loads a confusing JSON-RPC snippet for whoami that is not this tool's invocation, wasting space before the actual action is stated. The rest is well organized with documents, verdicts, timing, and examples, but the extraneous prelude and inline JSON block reduce clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by stating that each result carries status, verdict, and what a client does with the document, plus timing, path behavior, and fixture support. It covers the main invocation and interpretation needs for a one-parameter read-only diagnostic, though it does not specify the exact report aggregation format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers host with 100% description coverage, but the tool description adds further meaning: it accepts a hostname, a full endpoint URL where a path enables the insertion-form check, or {} for the built-in fixture. This goes beyond the schema, although the '{}' option slightly conflicts with the schema's required field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: GET the discovery documents an MCP client reads before the handshake and report what each answered, listing exact endpoints and verdict categories. It distinguishes from siblings like handshake_report by emphasizing 'BEFORE the handshake' and from tools_list_report/whoami by targeting well-known documents rather than listings or identity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description positions the tool as 'FIRST CALL' and gives concrete host examples, but it never explicitly names alternatives or says when not to use it. The 'FIRST CALL, needs nothing' prelude is ambiguous because the embedded JSON-RPC payload is for whoami, not for this tool, weakening the guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

error_conformanceDoes it answer JSON-RPC errors, or HTML 500s?A
Read-onlyIdempotent
Inspect

FIRST CALL, needs nothing: {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"whoami","arguments":{}}} — Send five things a real client eventually sends by accident and check what comes back: an unknown method (expects -32601), tools/call naming a tool that does not exist (expects -32602/-32601 or a result with isError), tools/call with no tool name (expects -32602), a body that is not JSON (expects -32700), and a body missing "jsonrpc":"2.0" (expects -32600). Reports the HTTP status and the error code side by side, and flags an HTML error page or a 5xx where a JSON-RPC error belongs — the failure that makes a client report the wrong cause. Makes 5 requests, 6 s each. Example: url='https://mcp.example.com/mcp' — or {} for the fixture, which fails two of the five.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe MCP endpoint to lint — the URL you POST JSON-RPC to, e.g. https://mcp.example.com/mcp. Not stored anywhere. This server refuses its own publisher, IP literals and private names.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations: it discloses that the tool makes 5 network requests, waits 6 seconds each, reports HTTP status and JSON-RPC error codes side by side, flags HTML/5xx responses where JSON-RPC errors belong, and supports a fixture that fails two checks. This adds meaningful behavioral context beyond readOnlyHint, idempotentHint, and openWorldHint, and does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient; every sentence carries useful operational information and it is front-loaded with the essential first-call payload. However, the long parenthetical list of five test cases with expected codes makes it a wall of text that could be parsed more easily with separate lines or clearer separation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity and the absence of an output schema, the description is remarkably complete: it covers inputs, the exact requests sent, expected JSON-RPC error codes, output behavior (HTTP status vs error code), the HTML/5xx failure condition, request count, timeout, and fixture behavior. An agent can confidently invoke and interpret this tool from the description alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the url parameter fully (100% coverage). The description adds extra value with a concrete example URL and the {} fixture alias with expected failure behavior, which helps an agent select the right input without opening the schema. Slightly more detail on URL edge cases exists in the schema, so this is strong but not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: it is an error-conformance linter that sends five deliberately malformed JSON-RPC requests to an MCP endpoint and checks the returned HTTP status and JSON-RPC error codes. This makes it distinguishable from siblings like handshake_report or discovery_report, which target different aspects of endpoint behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is clearly conveyed: it explains what to send, the expected error codes for each probe, that it makes 5 requests with 6-second timeout each, and how to choose between an external URL and the fixture via {}. It does not explicitly name when to prefer this tool over sibling alternatives, but the operational context is strong enough to avoid confusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

exampleRun this server's worked example (no arguments)A
Read-onlyIdempotent
Inspect

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"example","arguments":{}}} — POST that exact body to https://www.pathwren.workers.dev/mcp/lint and you are done: free, read-only, no API key, no account, no consent prompt, nothing for you to invent, and what comes back is this server's own worked example — score_card, run for real on a canned input from this host's own data — so you see the exact shape of an answer before you send anything of yours. Takes no arguments. Safe to call. Deterministic. Touches no third party. Runs this server's own worked example end to end — score_card on this server's built-in fixture — an in-process MCP endpoint with one real defect wired in per check (it ignores the protocol version you ask for, refuses a second initialize, publishes a tool whose required names a property that does not exist, and answers an unknown method with an HTML 500). No outbound request is made and no third party is touched — and returns exactly the structuredContent a real call returns, not a mock and not a description of one. Use it to see the shape of an answer before you decide what to send. The input is canned from this host's own data; no URL of yours is fetched and no third party is touched. Example: arguments={} runs score_card with {"url":"fixture://mcp-endpoint-lint/demo"} and returns its real answer.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
ranYesThe tool name and the exact arguments that were run.
answerYesThe real structuredContent of that call, not a mock.
licenseYes
reproduceYesA command that reproduces this answer.
answered_byYes
what_it_showsYes
input_came_fromYesWhere the canned input came from — always this host's own data.
this_is_not_a_mockYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnly, idempotent, and non-destructive, and the description adds substantial context: no third-party contact, deterministic behavior, in-process execution, a fixture input, one real defect wired per check, and that the return value is the exact structuredContent of a real call, not a mock. This goes well beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is heavily repetitive, repeating 'no third party is touched' three times and 'worked example' multiple times. It also includes a raw JSON-RPC POST body that is tangential to invoking this MCP tool and could confuse an agent. The core information is buried in a long, redundant block.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, has an output schema, and carries safety/lifecycle annotations, the description provides more than enough context: purpose, exact input, real output, safety, determinism, and behavioral caveats. Nothing essential is missing for an agent to decide whether and how to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the description explicitly states 'Takes no arguments' and gives the exact argument shape {}. With no parameters to document, the description handles parameter semantics clearly and accurately, though it somewhat redundantly repeats the empty-argument message.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool runs this server's worked example end to end, specifically score_card on a built-in fixture, and returns real structuredContent. It is specific about the resource and action, though it does not explicitly name sibling tools or draw a sharp line against score_card for real inputs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use it 'to see the shape of an answer before you decide what to send' and notes it takes no arguments, is safe, and makes no outbound requests. However, it never explicitly states when not to use it or names an alternative tool for real inputs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

handshake_reportDoes the handshake work, and is it idempotent?A
Read-onlyIdempotent
Inspect

FIRST CALL, needs nothing: {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"whoami","arguments":{}}} — POST initialize to an MCP endpoint you name and report what came back: the protocol version it negotiated against the one you asked for, the capabilities it advertises, serverInfo, timing, the transport shape (JSON or SSE frame, session id, content-type), and — sent a second time, byte for byte — whether the server answers an identical initialize the same way. Also asks for a version nobody publishes, to see whether it negotiates down or agrees to anything. Makes 3 requests, 6 s timeout each, user-agent growth-loop/1.0 (+https://www.pathwren.workers.dev/mcp-lint.html). Example: url='https://mcp.example.com/mcp' — or call with {} to run it against the built-in fixture, which makes no outbound request at all.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe MCP endpoint to lint — the URL you POST JSON-RPC to, e.g. https://mcp.example.com/mcp. Not stored anywhere. This server refuses its own publisher, IP literals and private names.
protocol_versionNoThe protocolVersion to ask for. Defaults to 2026-07-28.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only/idempotent annotations, it discloses that it sends 3 requests, each with a 6-second timeout, uses a specific user-agent, probes an unpublished version to test negotiation, repeats the identical initialize byte-for-byte, and can run against an in-process fixture. This gives an agent a realistic picture of the side effects and network behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long and dense, but the protocol details, timeout, user-agent, and fixture behavior all earn their place for an outbound network tool. The opening 'FIRST CALL, needs nothing' and embedded JSON-RPC are slightly distracting, but the structure is front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating exactly what will be reported: negotiated version, capabilities, serverInfo, timing, transport shape, and idempotency result. It also covers the fixture mode and the default protocol version, making the tool callable without missing context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both url and protocol_version with defaults and constraints. The description adds a usage example and clarifies the version probing behavior, but it does not need to add much parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: POST initialize to a named MCP endpoint and report the protocol negotiation, capabilities, serverInfo, timing, and transport shape, plus an idempotency retry. This makes the tool's function clear, but it never names or contrasts sibling tools like discovery_report or error_conformance, so differentiation is left to the reader.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete invocation context: provide an endpoint URL, optionally a protocol_version, and it fires three requests with a 6-second timeout; it also explains the built-in fixture alternative. It does not explicitly say when to choose this over sibling tools, so there are no exclusions but also no routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

score_cardAll four checks, one machine-readable verdictA
Read-onlyIdempotent
Inspect

FIRST CALL, needs nothing: {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"whoami","arguments":{}}} — Run handshake_report, tools_list_report, error_conformance and discovery_report against one endpoint and return a single verdict: a score out of 100 (handshake 30, tool schemas 30, error conformance 25, discovery 15), a letter grade, every finding by severity with the section it came from, and the full detail of each section underneath. This is the tool to call from a monitor: the score is stable enough to alert on and the findings say what to fix. Makes up to 19 requests to the URL you give it, 6 s each, and is rate-limited per caller and per target host. Example: url='https://mcp.example.com/mcp' — or {} to score the built-in fixture (it gets a D) with no outbound request at all.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe MCP endpoint to lint — the URL you POST JSON-RPC to, e.g. https://mcp.example.com/mcp. Not stored anywhere. This server refuses its own publisher, IP literals and private names.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and idempotent; the description goes further by disclosing the operational cost ('Makes up to 19 requests ... 6 s each'), per-caller/per-host rate limiting, the stable-alert property, and the no-outbound fixture behavior. For a tool with no output schema, this behavioral detail is especially valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense and mostly valuable, but the opening JSON-RPC payload for whoami is not about score_card and pushes the actual purpose statement later. It is not a tautology or padded, but it is less front-loaded than it could be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description explains return content, scoring weights, request budget, rate limits, fixture behavior, and an example URL. For a complex tool that aggregates four checks, this is a complete picture for an agent deciding whether and how to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers the single url parameter at 100%, so the baseline is 3. The description adds a concrete URL example and a fixture option, but the 'or {} to score the built-in fixture' suggestion conflicts with the schema's required ['url'], which could cause an agent to construct an invalid call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource: 'Run handshake_report, tools_list_report, error_conformance and discovery_report against one endpoint and return a single verdict'. It specifies the output (score, letter grade, findings by severity, section details) and therefore clearly differentiates the aggregator from its sibling report tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete selection guidance: 'This is the tool to call from a monitor' and positions it as the 'FIRST CALL', while naming the individual reports it replaces. It does not explicitly state when to prefer a sibling report alone, so it stops short of a full when/when-not matrix.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tools_list_reportSchema-validate every tool the endpoint advertisesA
Read-onlyIdempotent
Inspect

FIRST CALL, needs nothing: {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"whoami","arguments":{}}} — Handshake, then tools/list, then check every tool it returns: a missing or empty description, a description too short to choose on, a missing inputSchema, an inputSchema that is not an object schema, JSON-Schema faults (an invalid type keyword, a required naming a property that is not in properties, a pattern that will not compile, an empty enum), names that break the character rule, and names that collide — exactly, or once case is ignored. Each finding names the tool and says what breaks. Makes 3 requests, 6 s timeout each. Example: url='https://mcp.example.com/mcp' — or {} for the built-in fixture, whose six tools carry one of each fault.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe MCP endpoint to lint — the URL you POST JSON-RPC to, e.g. https://mcp.example.com/mcp. Not stored anywhere. This server refuses its own publisher, IP literals and private names.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/openWorld/idempotent/non-destructive, and the description adds substantial behavioral context beyond them: it makes exactly 3 requests with 6 s timeouts each, follows a whoami-then-tools/list-then-validate sequence, reports per-tool named findings, supports a built-in fixture mode, and (in the schema) refuses its own publisher, IP literals, and private names. No contradiction with the annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but nearly every clause earns its place: workflow sequence, the full check list, request count, timeout, output form, and example. It is long and the inline JSON-RPC payload adds reading weight, but for a multi-category linter this level of detail is operationally necessary and the most critical information (workflow) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description covers the return value's nature ('Each finding names the tool and says what breaks'), network behavior, input options, URL restrictions, and privacy ('Not stored anywhere'). The main gap is the absence of an exact output JSON structure, and the {} fixture claim vs required-url inconsistency is unresolved; otherwise the definition is thorough for a single-param, read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (the url parameter is already documented), so the baseline is 3. The description adds a concrete example URL, the fixture alternative, and the '{}' shorthand for the built-in fixture. However, the '{}' suggestion conflicts with the schema's required:['url'] and additionalProperties:false, creating an ambiguity about which invocation is actually valid; that actively undermines the added guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title and description name a specific verb-resource pair: schema-validate every tool an endpoint advertises via tools/list. The description enumerates the exact fault categories checked (empty descriptions, invalid inputSchema, JSON-Schema faults, name rule breaks, collisions), which sharply distinguishes it from siblings like handshake_report, discovery_report, and error_conformance. An agent can tell exactly what this tool produces without inspecting any sibling schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys clear context: it is the tool to run when you need to lint the schema quality of an MCP endpoint's advertised tools, and it spells out the internal workflow (whoami handshake, tools/list, then validation) plus the fixture alternative for testing. However, it never names sibling tools or states explicit when-not-to-use conditions, so an agent must infer routing from the tool's purpose rather than being told.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiWho is calling? — the one call that needs nothing from youA
Read-onlyIdempotent
Inspect

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"whoami","arguments":{}}} — POST that to https://www.pathwren.workers.dev/mcp/lint and the answer is the user-agent you sent, the class this host's own instrument books it as, whether we have logged you here before — and the part only this server can answer: your own client's record on this host, surface by surface, with the status codes it took, plus exactly what this server would do with a URL you handed it (which hosts it refuses, what it identifies itself as, the timeout and the rate limit). Takes no arguments. Safe to call. Deterministic. Touches no third party. Nothing is fetched to build it: every fact comes from the headers on your own request or from a file this host already publishes. Only this server answers the last part — its five siblings answer one other question each about you, same empty arguments, each under the tool named beside its path: /mcp (whoami), /mcp/doctor (no_arguments_check_this_hosts_own_discovery_documents), /mcp/triage (no_arguments_triage_this_hosts_own_crawler_log), /mcp/robots (no_arguments_lint_this_hosts_robots_txt), /mcp/netcheck (no_arguments_report_the_crawler_ip_ranges_this_host_mirrors), /mcp/markdown (markdown_lane_self_report) on https://www.pathwren.workers.dev. Example: arguments={} returns your user-agent, your address, the class we book you as, whether we have seen you here before, and your own client's record on this host — every surface of ours your user-agent has been seen on, with the status codes it took.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
youYesThe user-agent you sent and the address you came from.
caveatsYesWhat this answer does NOT establish — a user-agent is a claim.
licenseYes
answered_byYesWhich server answered, at which endpoint.
independentYesThis host is independent and unaffiliated.
we_book_you_asYesThe class this host's own instrument records for that user-agent.
we_have_seen_youYesWhether this user-agent appears in the published observation window.
this_call_touchedYesExactly which files were read to answer. No third party is contacted.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly, idempotent, non-destrictive), the description adds determinism, no third-party access, no fetching, and the fact that all data come from request headers or an already-published file. It also discloses response details such as status codes, timeout, rate limit, and refused hosts. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a dense, run-on block that embeds a JSON-RPC POST example, repeats the returned fields twice, and inlines a full sibling path/name list. For a zero-parameter tool this is over-long and poorly structured, even though the title and opening clause do front-load the core idea.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the verbosity, the description is complete: it explains exactly what the response contains, the data provenance, determinism, safety, and sibling endpoints. With an output schema present and zero parameters, no critical calling information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description reinforces 'Takes no arguments' and shows arguments={}, while the schema already declares required=[], properties={}, and additionalProperties=false. Nothing further is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly names the tool's output: the caller's user-agent, booking class, prior-visit status, per-surface client record with status codes, and the server's URL-handling policy. It also distinguishes itself from siblings by noting they answer one other question each with the same empty arguments, even though the exact sibling mapping is tangled.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives strong context for safe invocation — 'Takes no arguments. Safe to call. Deterministic. Touches no third party' — and notes that siblings exist with empty arguments. However, it never states which sibling answers which 'other question', so an agent cannot confidently choose this tool over a sibling from the description alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updates
    • First observeddiscovery_report
    • First observederror_conformance
    • First observedexample
    • First observedhandshake_report
    • First observedscore_card
    • First observedtools_list_report
    • First observedwhoami

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    53 security & enrichment MCP tools for AI agents. Contract scanning, threat intel, OSINT, crypto data, DNS/WAF recon. Pay-per-call via HTTP 402 + USDC on Base mainnet. No API keys. First call free.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Keyless, pay-per-call AI gateway: 248 LLMs plus image/video/voice/music generation and live crypto, DeFi, markets, web-search and research tools through one MCP server. Pay per call in USDC via x402 on Base/Solana — no API key, no signup, free tier.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides real Bitcoin full node data via 17 tools, with pay-per-call in USDC on Base mainnet. Free tools include blockchain info, fees, and mempool; paid tools enable transaction tracking, address analysis, and more.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources