Agent Discovery Doctor - llms.txt, agent card, mcp.json

dev.workers.pathwren.wwwPublished by www.pathwren.workers.devOfficial publisherv1.4.0Updated Oct 24, 2026

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

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingDeveloper Tools

Overview

AI-generated overview

A free, read-only remote MCP server that checks a host's agent-discovery documents (llms.txt, agent card, mcp.json) and validates pasted ones.

What you can do
It probes the 22 discovery documents that agents and trust indexes request from its own host and reports their status, and it can explain individual catalogue entries. It validates pasted llms.txt files against the expected format and validates a pasted agent-card.json against the required A2A fields. It can also draft an llms.txt from a pasted sitemap.xml or list of URLs, and a whoami tool reports the user-agent it received and how the host classifies it.
When to use it
Use it when you want to see whether a site exposes the discovery documents that AI agents look for, or when you need to check or draft an llms.txt or an A2A agent card before publishing it.
Requirements
A remote streamable HTTP endpoint; no package, account, API key, environment variable or header is declared.
Before you install
The checks target the server's own host, not an arbitrary site, and the whoami tool reports the user-agent you send and whether you have been seen before. Validation and drafting tools work on content you paste in, so avoid pasting anything confidential.

Installation

In SourceWeft

  1. Open Agent Discovery Doctor - llms.txt, agent card, mcp.json in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/dev.workers.pathwren.www%2Fagent-discovery-doctor/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "agent-discovery-doctor-llms-txt-agent-ca": {
      "type": "http",
      "url": "https://www.pathwren.workers.dev/c/mcp-registry-official/mcp/doctor"
    }
  }
}

Tools

8

no_arguments_check_this_hosts_own_discovery_documents

No arguments: the discovery check this server runs on a host you name, run on this host

TAKES NO ARGUMENTS. POST {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"no_arguments_check_this_hosts_own_discovery_documents","arguments":{}}} to https://www.pathwren.workers.dev/mcp/doctor — the answer is the whole agent-discovery catalogue checked against THIS host — every document this server tracks, whether this host serves it, its size and content type, which ones are missing, and the part only this server can add: the named clients it has watched ask for each file, when, and the status that request took. There is nothing to fill in: the input schema is literally empty, `arguments: {}` and no `arguments` key at all both work, and the subject is a file this host already publishes, so the answer does not depend on you at all. No key, no account, no OAuth, no session to open first, read-only, and nothing for you to invent. Nothing is fetched to build it — no request leaves this edge, and none is made to you. whoami and example are here too and take nothing either. Every other tool on this server wants a file pasted in; this one wants nothing. The siblings answer one question each under the tool named beside them: /mcp (whoami), /mcp/lint (whoami), /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). Example: the complete call, exactly as written, nothing to fill in — {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"no_arguments_check_this_hosts_own_discovery_documents","arguments":{}}} returns a present/missing verdict per tracked document with its byte size, the group each belongs to, the score out of the catalogue, and the observed askers per document with the date and status each one got.

Takes no parameters.

whoami

Who is calling? — the one call that needs nothing from you

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"whoami","arguments":{}}} — POST that to https://www.pathwren.workers.dev/mcp/doctor 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: which of the discovery documents this catalogue tracks (llms.txt, the agent card, mcp.json, apis.json, oauth-protected-resource…) a client like yours has been observed asking THIS host for, when, and what status it took. 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/lint (whoami), /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 which agent-discovery documents this host has watched a client like yours ask for — the dates, and the status each request took.

Takes no parameters.

example

Run this server's worked example (no arguments)

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"example","arguments":{}}} — POST that exact body to https://www.pathwren.workers.dev/mcp/doctor 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 — validate_llms_txt, 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 — validate_llms_txt on a four-line llms.txt held as a constant in this file: it exercises the H1, the blockquote summary and an H2 link section, which is the whole format — and it fetches nothing, from us or from anyone — 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 validate_llms_txt with {"text":"# Site\n\n> One line.\n\n## Docs\n\n- [Guide](https://e.com/g): start here."} and returns its real answer.

Takes no parameters.

check_discovery_documents

Which discovery documents does this host serve?

FIRST CALL, needs nothing: {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"no_arguments_check_this_hosts_own_discovery_documents","arguments":{}}} — Probes 22 documents agents and trust indexes ask for — llms.txt, agent card, owners.json, oauth metadata, mcp.json, apis.json, openapi, robots, sitemap — as served, missing, gated or 200-with-HTML soft-404, and says who asks for each missing one. Refuses private, ephemeral and its own hosts. Example: host='example.com'.

Parametershostrequiredgroupsmcp_path

explain_document

What is this document, and who reads it?

FIRST CALL, needs nothing: {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"no_arguments_check_this_hosts_own_discovery_documents","arguments":{}}} — One catalogue entry: what the document is for, the named clients observed asking this host for it with dates and the status they took, what a 404 costs, and the spec URL. No argument lists all 22. Example: name='owners.json' names the bot that asks for it twice.

Parametersname

validate_llms_txt

Check a pasted llms.txt

FIRST CALL, needs nothing: {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"no_arguments_check_this_hosts_own_discovery_documents","arguments":{}}} — Checks pasted llms.txt against the format: one H1, a blockquote summary, H2 sections of `- [name](url): notes`. Errors and warnings with line numbers and fixes, plus the parsed links. Text in, nothing fetched. Example: text='# Site' warns it has no summary and no sections.

Parameterstextrequired

llms_txt_from_sitemap

Draft an llms.txt from a sitemap

FIRST CALL, needs nothing: {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"no_arguments_check_this_hosts_own_discovery_documents","arguments":{}}} — Paste sitemap.xml, or one URL per line, and get a draft llms.txt: URLs grouped into H2 sections by path, titles from slugs, lastmod kept, and a TODO wherever only you can write the sentence. A sitemap index is reported as one. Example: xml='https://e.com/docs/a\nhttps://e.com/blog/b'.

Parametersxmlrequiredtitlesummarymax_per_section

validate_agent_card

Check a pasted A2A agent card

FIRST CALL, needs nothing: {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"no_arguments_check_this_hosts_own_discovery_documents","arguments":{}}} — Validates a pasted /.well-known/agent-card.json against the nine fields A2A marks required and each skill's id/name/description/tags, and warns on capabilities declared true that a reader will then try. Example: json='{"name":"a"}' returns the eight missing fields.

Parametersjsonrequired

Version history

1
  1. v1.4.0LatestSep 16, 2026

Score

83% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts

    Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.

  • LicenseNot applicable

    A hosted service is used under its provider's terms, so no license is expected here. This check is left out of the percentage.

Other Workers integrations