Skip to main content
Glama

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

Run this server's worked example (no arguments)

example
Read-onlyIdempotent

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds substantial context beyond those annotations: it is deterministic, touches no third party, makes no outbound request, returns exactly the real structuredContent (not a mock), and even lists the specific defects wired into the fixture. This is rich, accurate behavioral disclosure with no contradiction.

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 but repetitive. 'Touches no third party' appears three times, and 'no arguments' / 'no URL of yours is fetched' / 'input is canned' are stated multiple times in slightly different forms. The front-loaded opening is strong, but the redundancy prevents a higher score.

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 having no output schema, the description fully explains what the tool returns, how to call it, its side-effect profile, and its purpose. An agent has everything needed to invoke it correctly and interpret the result as a real structuredContent response.

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 schema coverage is 100%, so the baseline is 4. The description reinforces this by saying 'Takes no arguments' and showing an example call with arguments={}. There is nothing more to add.

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 ('runs'), a resource ('this server's worked example'), and the exact operation (score_card on a built-in fixture). It is immediately distinguishable from sibling tools like score_card or whoami because it emphasizes that it exercises the server's own end-to-end example with a canned fixture.

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 explicitly tells the agent when to use it: 'Use it to see the shape of an answer before you decide what to send.' It gives clear context for why this is useful. It does not explicitly name alternative tools or state when not to use it, but the intended usage is well conveyed.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a clearly distinct role: the four check tools target separate protocol aspects, score_card is explicitly the aggregate runner, example is a fixture demo, and whoami is self-inspection. Even where score_card composes the other checks, descriptions make the relationship unambiguous.

Naming Consistency3/5

Names are all lowercase and underscore-separated, but the pattern is mixed: discovery_report, handshake_report, and tools_list_report share a report suffix, while error_conformance, score_card, example, and whoami do not follow it. The names are readable and descriptive, but not fully predictable.

Tool Count5/5

Seven tools is well-scoped for an endpoint linter: four specialized checks, one aggregate score, one demo helper, and one identity/rate-limit introspection tool. Each tool earns its place and the count supports both granular investigation and high-level monitoring.

Completeness5/5

The tool surface covers the stated domain end to end: pre-handshake discovery, initialize/handshake behavior, tools/list schema validation, and JSON-RPC error conformance, plus an aggregate score_card. No obvious dead ends or missing operations exist within the server's declared purpose.

Resources