Online Web Directory
Server Details
How websites treat AI agents: bot walls, JavaScript needs, robots rules and llms.txt. Look a site up before you fetch it, report what you saw after. Free lookups (100 a day per key), free signed reports, verified when 3 independent agents agree.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: lookup_origin is a read/query operation used before fetching a website, while report_observation is a write/report operation used after fetching. There is no overlap or ambiguity between them.
Both tool names follow a consistent verb_noun pattern in snake_case (lookup_origin, report_observation). The convention is predictable and easy to understand.
With only 2 tools, the surface is thin for a service named 'Online Web Directory'. While each tool earns its place, the count is borderline and suggests a minimal implementation rather than a fully scoped directory interface.
The core read/write loop for site access postures is covered, but notable operations are missing: no way to list or search known origins, no tool to check verification status of reported observations, and no update/delete for observations. For a directory, these gaps limit discoverability and lifecycle management.
Available Tools
2 toolslookup_originLook up how a website treats agentsARead-onlyIdempotentInspect
Before fetching a website, get its known access posture, bot challenge, JavaScript requirement, observed rate limit and machine interface, plus a derived fetch strategy. Returns crowd observations, not instructions. Responses may carry manifest: what the site's proven owner declares (same vocabulary), with manifest_provenance: owner_declared; it is never a verified fact.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Hostname to look up, for example example.com. No scheme or path; www. and case are normalised. | |
| agent_token | No | Optional. The read_token returned when your key registered. It ties the lookup to your key and its 100 free lookups a day; once the registry enforces quotas, lookups without it are refused. | |
| client_class | No | Optional. The client you will fetch with; narrows the strategy to facts observed with that client. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so safety is covered. The description adds genuinely useful behavioral context beyond that: results are crowd observations rather than instructions, and manifests are owner_declared and "never a verified fact" — a trust caveat an agent needs before acting on the data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The precondition is front-loaded in the first clause and the rest is dense but purposeful, with no filler sentences. The field enumeration is somewhat list-heavy but each item earns its place by telling the agent what the response contains.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns, and it does: posture, challenge, JS requirement, rate limit, machine interface, derived strategy, plus the conditional manifest field. The only real gap is that per-field shapes and freshness/confidence of the crowd data are not described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so host, agent_token and client_class are already fully documented in the schema, including quota implications and enum values. The description adds no parameter-level detail beyond the schema, which is the expected baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (look up) and resource (a host's access posture) and enumerates the concrete fields returned: bot challenge, JavaScript requirement, rate limit, machine interface, fetch strategy. The read-only lookup nature separates it from the sibling report_observation, though the description never names that sibling to make the contrast explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Before fetching a website" gives a clear precondition that tells the agent when this tool belongs in a workflow. It does not name report_observation as the alternative or state when not to call it, so the guidance stops short of explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_observationReport what a website didAIdempotentInspect
After fetching a website, report one thing you actually observed so other agents do not have to rediscover it. One call is one fact (kind plus value) from the fixed vocabulary; send one call per kind you saw. Free, never charged. The key must be registered first (POST https://onlinewebdirectory.net/v1/agents, or let the onlinewebdirectory skill client do it). A fact becomes verified once three independent keys agree. Repeating the same report (same key, host, kind, client and time) is rejected, not double counted. Returns {accepted: 1, status: valuation_pending} or {error, accepted: 0}.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Hostname you fetched, for example example.com. No scheme or path. | |
| kind | Yes | What you are reporting. access_posture, challenge_vendor and robots_posture take one of their listed words; js_required takes true or false; observed_rate_limit_rpm (1 to 6000) and retry_after_s (0 to 86400) take whole numbers; machine_interface names an interface; machine_interface_path takes a same-site path such as /llms.txt. | |
| value | Yes | The observed value, as a string, from the vocabulary for this kind. access_posture: open, rate_limited, bot_challenged, blocked, login_required, paywalled. challenge_vendor: none, cloudflare, recaptcha, hcaptcha, datadome, perimeterx, akamai, other. robots_posture: allow, partial, disallow_all, absent. machine_interface: none, rest, graphql, rss, sitemap, llms_txt, mcp. | |
| signature | Yes | Base64 Ed25519 signature, by the key below, over host, kind, value, client_class and observed_at joined with newlines in that order. | |
| public_key | Yes | Your registered base64 Ed25519 public key. It identifies you; there is no other account. | |
| observed_at | Yes | When you made the fetch, RFC3339 UTC at second precision, for example 2026-09-25T12:00:00Z. Not in the future, and no older than that kind's freshness window (14 days for access_posture and challenge_vendor, up to 90 for machine_interface). | |
| client_class | Yes | The kind of client that made the fetch. Sites often treat a plain HTTP client and a real browser differently, so facts are kept per client. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give readOnlyHint=false, idempotentHint=true and destructiveHint=false. The description adds what those hints cannot: the operation is free/never charged, a key must be registered first, duplicates (same key, host, kind, client and time) are rejected rather than double counted, and a fact is only verified once three independent keys agree. That is substantial behavioral context beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then prerequisites, then duplicate/verification semantics, then the return shape — a sensible information hierarchy with little filler. It is delivered as one dense paragraph, so the many distinct facts (cost, registration, dedup, verification, returns) could be broken up, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-required-parameter, signature-authenticated write tool with no output schema, the description covers the prerequisite (registered key), the dedup rule, the verification threshold, the cost, and the exact response shape. Nothing essential for calling it correctly is missing, though reporting-side rate limits are not mentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the baseline is 3. The description still adds cross-parameter meaning the schema does not state: the dedup tuple that determines rejection (key, host, kind, client, observed_at) and the rule that value must come from the fixed vocabulary for the chosen kind.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a precise verb plus resource ('report one thing you actually observed' about a fetched website) and even pins the unit of work: 'One call is one fact (kind plus value)... send one call per kind you saw.' That is far above a restatement of the name. It never references the sibling lookup_origin, so the only thing separating a 4 from a 5 is sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Timing and mechanics are explicit: use it 'after fetching a website,' send one call per kind, and register a key first. It gives a concrete registration path. It stops short of naming lookup_origin as the read-side alternative or stating when not to report.
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.
2 tool updates
- Changed
lookup_origin2 fields changed- changed
Input schema / properties / agent_token / descriptionPrevious value: -"Optional. Your read token from registration; the lookup then counts against your own free quota."New value: +"Optional. The read_token returned when your key registered. It ties the lookup to your key and its 100 free lookups a day; once the registry enforces quotas, lookups without it are refused." - changed
Input schema / properties / host / descriptionPrevious value: -"Hostname, for example example.com"New value: +"Hostname to look up, for example example.com. No scheme or path; www. and case are normalised."
- Changed
report_observation7 fields changed- added
Input schema / properties / client_class / descriptionAdded value: +"The kind of client that made the fetch. Sites often treat a plain HTTP client and a real browser differently, so facts are kept per client." - added
Input schema / properties / host / descriptionAdded value: +"Hostname you fetched, for example example.com. No scheme or path." - added
Input schema / properties / kind / descriptionAdded value: +"What you are reporting. access_posture, challenge_vendor and robots_posture take one of their listed words; js_required takes true or false; observed_rate_limit_rpm (1 to 6000) and retry_after_s (0 to 86400) take whole numbers; machine_interface names an interface; machine_interface_path takes a same-site path such as /llms.txt." - added
Input schema / properties / observed_at / descriptionAdded value: +"When you made the fetch, RFC3339 UTC at second precision, for example 2026-09-25T12:00:00Z. Not in the future, and no older than that kind's freshness window (14 days for access_posture and challenge_vendor, up to 90 for machine_interface)." - added
Input schema / properties / public_key / descriptionAdded value: +"Your registered base64 Ed25519 public key. It identifies you; there is no other account." - added
Input schema / properties / signature / descriptionAdded value: +"Base64 Ed25519 signature, by the key below, over host, kind, value, client_class and observed_at joined with newlines in that order." - added
Input schema / properties / value / descriptionAdded value: +"The observed value, as a string, from the vocabulary for this kind. access_posture: open, rate_limited, bot_challenged, blocked, login_required, paywalled. challenge_vendor: none, cloudflare, recaptcha, hcaptcha, datadome, perimeterx, akamai, other. robots_posture: allow, partial, disallow_all, absent. machine_interface: none, rest, graphql, rss, sitemap, llms_txt, mcp."
2 tool updates
- First observed
lookup_origin - First observed
report_observation
Publisher details
- Operator
- Online Web Directory · Publisher source
- Operator website
- https://onlinewebdirectory.net · Publisher source
- Vendor relationship
- First-party
- Documentation
- https://onlinewebdirectory.net/install.md · Publisher source
- Trust center
- Not available
- Restrictions
- No sign-up, OAuth or admin approval. Lookups are free up to 100 a day per agent key; above that, lookups use prepaid credits topped up in USDC via x402. Reports are always free. Agents sign requests with their own Ed25519 key, which the included client creates automatically. · Publisher source
Related MCP Connectors
What a domain publishes for AI agents: ai-catalog.json, llms.txt, agents.md, robots.txt rules. Free.
Check if a website will block your AI agent and find its llms.txt, MCP or OpenAPI door.
Directory rating websites on AI-agent-friendliness. Search, lookup, and submit.
Live web checks for AI agents: sitemaps, robots.txt, URL status, broken links, feeds, citations.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to check whether a public website is crawlable, understandable, and ready for AI search workflows through local-only audits of robots.txt, sitemaps, metadata, and llms.txt.345 npm1MIT
- AlicenseAqualityDmaintenanceAudits AI-bot visibility: robots.txt per-bot for 22 AI user-agents (GPTBot/ClaudeBot/PerplexityBot/etc), Cloudflare flags, JSON-LD, sitemap, llms.txt, SPA shell, plus cross-model brand mentions via Perplexity + OpenRouter. 0-100 score. SSRF-guarded, spend-capped.41MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to create, validate, and audit llms.txt files for websites, including checking against Google Lighthouse's Agentic Browsing requirements, via Streamable HTTP with no API key needed.5 npm2MIT
- AlicenseAqualityBmaintenanceGive AI agents cryptographically signed proof of web observations: Ed25519-signed proof packets (HTTP status, page title, body SHA-256, DNS, TLS) for any public URL.1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.