agentready
agentreadyaudited 2026-10-14
0255075100
68
grade C · 100% coverage

Report for

github.com

https://github.com/webmachinelearning/webmcpvisit site ↗

  1. Find

    friction

  2. Understand

    clear

  3. 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

  1. 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…).

    <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>
    Reference ↗
  2. 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>
  3. 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.

    User-agent: GPTBot
    Disallow: /
    
    User-agent: ChatGPT-User
    Allow: /
    
    User-agent: Claude-User
    Allow: /
    Reference ↗

Category breakdown

  • Agent discovery

    1 of 5 discovery signals present.

    40

    weight 18% · confidence high

  • Machine-readable structure

    Agents must infer what this page is from prose alone.

    65

    weight 18% · confidence high

  • Access & renderability

    Agents can read this page without a browser.

    100

    weight 18% · confidence high

  • Form semantics

    Forms are labelled and typed — an agent can fill them.

    75

    weight 16% · confidence high

  • Actionability

    Actions are real links, buttons and forms.

    98

    weight 15% · confidence high

  • WebMCP capabilitysuperpower

    Partial WebMCP support — the tools aren't fully declared yet.

    30

    weight 15% · confidence medium

Find

friction

Can an agent locate this page and its entry points?

Agent discovery

40/100

1 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: /
Reference ↗
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>
Reference ↗
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">
Reference ↗
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"]
}
Reference ↗
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

clear

Can it tell what the page is without guessing?

Machine-readable structure

65/100

Agents 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>
Reference ↗
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/100

Agents 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

friction

Can it complete the task — book, buy, submit?

Form semantics

75/100

Forms 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/100

Actions 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/100

Partial 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.