Report for
github.com
https://github.com/webmachinelearning/webmcpvisit site ↗
- Find
friction
- Understand
clear
- Act
friction
- Survival
- 75
- Can an agent read and act at all?
- Superpower
- 30
- WebMCP tools exposed
- If WebMCP added
- 79
- Headline with WebMCP at full marks
Do this first
ranked by severity × category weight
- Machine-readable structurehigh
No structured data (JSON-LD)
Add a JSON-LD block describing the page's primary entity.
Show the fix
One script tag turns guesswork into facts. Start with WebSite/Organization, then the page type (Product, Article, FAQPage…).
Reference ↗<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "WebSite", "name": "github.com", "url": "https://github.com/", "potentialAction": { "@type": "SearchAction", "target": "https://github.com/search?q={query}", "query-input": "required name=query" } } </script> - Form semanticshigh
Controls outside a <form>
Wrap controls in a <form> with an explicit submit control.
Show the fix
Agents submit forms via standard HTML — not div onclick handlers.
<form action="/submit" method="post"> …fields… <button type="submit">Submit</button> </form>
- Agent discoverymedium
robots.txt blocks 1 AI agent
Distinguish training crawlers from user agents.
Show the fix
Block GPTBot/CCBot if you like; allow ChatGPT-User and Claude-User so people's agents can act for them.
Reference ↗User-agent: GPTBot Disallow: / User-agent: ChatGPT-User Allow: / User-agent: Claude-User Allow: /
Category breakdown
- 40
Agent discovery
1 of 5 discovery signals present.
weight 18% · confidence high
- 65
Machine-readable structure
Agents must infer what this page is from prose alone.
weight 18% · confidence high
- 100
Access & renderability
Agents can read this page without a browser.
weight 18% · confidence high
- 75
Form semantics
Forms are labelled and typed — an agent can fill them.
weight 16% · confidence high
- 98
Actionability
Actions are real links, buttons and forms.
weight 15% · confidence high
- 30
WebMCP capabilitysuperpower
Partial WebMCP support — the tools aren't fully declared yet.
weight 15% · confidence medium
Find
frictionCan an agent locate this page and its entry points?
Agent discovery
40/1001 of 5 discovery signals present.
mediumrobots.txt blocks 1 AI agentBlocked for this page: Bytespider. Blocking training crawlers is a legitimate choice, but user-driven agents (e.g. ChatGPT-User, Claude-User) act on behalf of a person and cannot complete tasks here.▶
Evidence
- robots.txt · Disallowed tokens: Bytespider
Fix
Distinguish training crawlers from user agents.
Block GPTBot/CCBot if you like; allow ChatGPT-User and Claude-User so people's agents can act for them.
User-agent: GPTBot Disallow: / User-agent: ChatGPT-User Allow: / User-agent: Claude-User Allow: /
mediumNo sitemap foundAgents that plan multi-step tasks use the sitemap to find the right page without crawling.▶
Evidence
- sitemap.xml · https://github.com/sitemap.xml not found and no Sitemap: line in robots.txt
Fix
Publish /sitemap.xml and reference it from robots.txt.
Most frameworks generate one; Next.js supports app/sitemap.ts.
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url><loc>https://github.com/</loc></url> </urlset>
lowNo feed or API description linkedNothing on the page tells an agent where structured data or an API lives.▶
Evidence
- raw-html · No <link rel=alternate type=application/rss+xml> or OpenAPI link
Fix
Link your API description or a feed from <head>.
A single <link> makes the machine entry point discoverable without guessing URLs.
<link rel="service-desc" type="application/vnd.oai.openapi+json" href="https://github.com/openapi.json"> <!-- or --> <link rel="alternate" type="application/rss+xml" title="Updates" href="https://github.com/feed.xml">
lowNo MCP discovery filesNothing under /.well-known tells an agent whether this site exposes an MCP server. Only relevant if you run one — but if you do, this is how agents find it.▶
Evidence
- well-known · https://github.com/.well-known/oauth-protected-resource, mcp.json, mcp/server-card.json not found
Fix
If you host an MCP server, publish /.well-known/oauth-protected-resource.
Required by the MCP authorization spec; clients use it to locate your authorization server.
{
"resource": "https://github.com/mcp",
"authorization_servers": ["https://auth.github.com"],
"scopes_supported": ["read"],
"bearer_methods_supported": ["header"]
}1 thing already working
- ✓llms.txt present — A curated, LLM-friendly summary of the site is available. (Adoption by agents is still uneven — this is a bonus, not a foundation.)
Understand
clearCan it tell what the page is without guessing?
Machine-readable structure
65/100Agents must infer what this page is from prose alone.
highNo structured data (JSON-LD)Without schema.org markup an agent must infer what this page is — a product, an article, an organisation — from prose. That inference is where agents make mistakes.▶
Evidence
- raw-html · No script[type=application/ld+json] found
Fix
Add a JSON-LD block describing the page's primary entity.
One script tag turns guesswork into facts. Start with WebSite/Organization, then the page type (Product, Article, FAQPage…).
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "github.com",
"url": "https://github.com/",
"potentialAction": {
"@type": "SearchAction",
"target": "https://github.com/search?q={query}",
"query-input": "required name=query"
}
}
</script>lowNo canonical URLLanguage and canonical URL help agents choose the right version of a page and parse its text correctly.▶
Evidence
- raw-html · lang=en; canonical=none
Fix
Declare lang and a canonical link.
Two attributes; prevents duplicate-URL confusion and wrong-language parsing.
<html lang="en"> <head> <link rel="canonical" href="https://github.com/webmachinelearning/webmcp">
2 things already working
- ✓Semantic landmarks present — main, nav, header/footer
- ✓Clean heading outline — One h1, 58 headings, no skipped levels.
Access & renderability
100/100Agents can read this page without a browser.
3 things already working
- ✓Response headers allow agent access — No noindex/noai directives or bot-management headers detected.
- ✓No CAPTCHA markup detected — No reCAPTCHA, hCaptcha, or Turnstile widgets found in the raw HTML.
- ✓Content is readable without JavaScript — Primary content appears in the raw HTML; no JS-dependence heuristics fired.
Act
frictionCan it complete the task — book, buy, submit?
Form semantics
75/100Forms are labelled and typed — an agent can fill them.
mediumControls missing a name attribute1 control lacks name — without a name the value cannot be submitted or described in a tool schema.▶
Evidence
- raw-html · div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div > span > input @ div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div > span > input
Fix
Add a name attribute to every control.
Agents need stable field keys for submission and tool schemas.
<label for="field">Go to file</label> <input id="field" name="field" type="text">
highControls outside a <form>inputs outside a <form> cannot be submitted by an agent without executing scripts▶
Evidence
- raw-html · div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div > span > input @ div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div > span > input
Fix
Wrap controls in a <form> with an explicit submit control.
Agents submit forms via standard HTML — not div onclick handlers.
<form action="/submit" method="post"> …fields… <button type="submit">Submit</button> </form>
mediumMissing submit affordance1 control is not inside a form with a submit button — an agent cannot send the values.▶
Evidence
- raw-html · div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div > span > input @ div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div > span > input
Fix
Add a submit button inside the owning form.
Agents need a standard submit control to complete form actions.
<form action="/submit" method="post"> <label for="field">Go to file</label> <input id="field" name="field" type="text"> <button type="submit">Submit</button> </form>
1 thing already working
- ✓All controls are labelled — 1 control with accessible names.
Actionability
98/100Actions are real links, buttons and forms.
medium6 links have no destinationThese anchors do not expose a usable navigation target.▶
Evidence
- raw-html · div:nth-of-type(1) > div:nth-of-type(2) > div > span:nth-of-type(1) > a
<a class="Link--inTextBlock" href="">Reload</a>
- raw-html · div:nth-of-type(1) > div:nth-of-type(2) > div > span:nth-of-type(2) > a
<a class="Link--inTextBlock" href="">Reload</a>
- raw-html · div:nth-of-type(1) > div:nth-of-type(2) > div > span:nth-of-type(3) > a
<a class="Link--inTextBlock" href="">Reload</a>
- raw-html · div > div:nth-of-type(1) > nav > ul > li:nth-of-type(2) > a
<a href="#" aria-current="page" class="prc-components-UnderlineItem-7fP-n"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusab…
- raw-html · div > div:nth-of-type(1) > nav > ul > li:nth-of-type(3) > a
<a href="#" class="prc-components-UnderlineItem-7fP-n"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="oc…
Fix
Replace the non-native control with the matching native HTML element.
Native controls are keyboard-operable, appear in the accessibility tree, and are what agents (and WebMCP) can target.
<!-- Use a button for an in-page action --> <button type="button">Open cart</button> <!-- Or give navigation a real destination --> <a href="/cart">View cart</a>
low1 focusable elements have no roleA tabindex without a role tells agents something is interactive but not what it is.▶
Evidence
- raw-html · div#repos-split-pane-content
<div class="content__cw9d2I" data-selector="repos-split-pane-content" id="repos-split-pane-content" tabindex="0"><div style="--spacing:var(--spacing-none)" cla…
Fix
Replace the non-native control with the matching native HTML element.
Native controls are keyboard-operable, appear in the accessibility tree, and are what agents (and WebMCP) can target.
<!-- before --> <div tabindex="0">Details</div> <!-- after --> <button type="button">Details</button> <!-- Or add role="button" with keyboard handling -->
1 thing already working
- ✓Primary action 'Secret protectionStop leaks before they start' is a real <a> — The page's primary action is directly invokable from its raw HTML.
WebMCP capability
30/100Partial WebMCP support — the tools aren't fully declared yet.
1 thing already working
- ✓modelContext.registerTool referenced in page script — document.modelContext.registerTool is referenced in an inline script — registration can't be verified without executing the page, so this is credited as a strong signal rather than a confirmed tool.
Fetched Wed, 14 Oct 2026 19:24:26 GMT in 1.5s · HTTP 200 · 8 discovery files checked · rendered DOM: skipped
Rendered-DOM checks are not run in v1; JavaScript dependence is estimated from the raw HTML.