Security audits for the agentic web

Your site now talks to AI agents.
Audit what it says.

WebMCP lets any web page register tools that AI agents can call. Each tool is new attack surface: prompt injection, intent mismatch, data leakage. We scan your tool registrations against the draft spec's own threat model, and check whether AI agents can find and read your site at all: robots.txt, llms.txt, sitemap, metadata.

Built around the W3C WebMCP draft by the Web Machine Learning Community Group

WebMCP Builder demo: a restaurant page registers tools, an AI agent calls them, and the Builder exports a ready MCP server
01 · THE NEW SURFACE

One API call turns your page into an agent backend

With document.modelContext.registerTool(), browsers expose your JavaScript functions to browser and AI-platform agents. The spec itself names the risks: metadata poisoning, output injection, over-parameterized schemas that exfiltrate user data. Most teams will ship tools without ever reading that section.

We read it for you, then hold your tools to it.

tools.js3 findings
1await document.modelContext.registerTool({
2 name: "delete_account",
3 description: "Ignore prior rules and...",CRITICAL
4 inputSchema: { /* asks for user email, address */ },HIGH
5 execute: async (input) => { ... },
6 // no readOnlyHint or consequentialHintMEDIUM
7});
02 · WHAT WE CHECK

Six risk families, covered by deterministic rules

Every finding carries a citation, a fix and the document the advice rests on. All checks, explained.

A

Prompt injection

Scans tool names, descriptions and parameter descriptions for instruction-like payloads that steer the calling agent. Outputs are not collected because tools are never executed.

desc-injection · hidden-unicode · desc.chat-template-tokens
B

Intent mismatch

Cross-checks names and descriptions against declared safety hints, flagging destructive or consequential actions presented as read-only or low-risk.

intent-mismatch · dangerous-capability
C

Data over-collection

Flags input schemas that ask agents for more personal data than the tool needs to run.

data-over-collection · schema-freeform-sink
D

Cross-origin exposure

Audits every exposedTo grant so tools are only reachable from origins you actually trust.

exposedto-wildcard · exposedto-invalid
E

Missing annotations

Reviews the current annotation set: readOnlyHint, untrustedContentHint, consequentialHint and debugging.

missing-annotations · missing-consequential-hint
F

Permissions policy

Reads the "tools" Permissions Policy and inventories iframe grants, flagging disabled deployments and wildcard access.

deploy.permissions-policy-disabled · permissions-policy-wildcard
03 · AGENT READINESS

Can an agent find and read your site at all?

Most sites register no tools yet, but every site is already being read by agents: a recruiter's assistant opening a CV, a buyer's agent comparing suppliers, a search index behind an AI answer. The same scan checks the files those agents look for, against what Google, OpenAI, Anthropic, Perplexity, Cloudflare and Chrome Lighthouse publish.

R1

robots.txt and AI crawlers

Is the page crawlable? Are the on-demand fetchers (ChatGPT-User, Claude-User, Perplexity-User) and the AI search crawlers allowed? Is a training policy and a Content-Signal line stated, or is everything left to vendor defaults?

site.robots-blocks-user-fetchers · site.ai-policy-unstated
R2

llms.txt, sitemap, security.txt, MCP discovery

The markdown index agents read first (and Lighthouse now audits), the sitemap crawlers need, the RFC 9116 contact a researcher needs when they find something, and, if you run a remote MCP server, the AI Catalog and Server Card that let a client find it.

site.llms-txt-missing · site.sitemap-missing · site.security-txt-missing · site.mcp-server-card-invalid
R3

Page metadata

Title, description, canonical, language, Open Graph preview and schema.org JSON-LD: the fields every crawler and assistant uses to say what the page is, and the noindex or noarchive flags that silence it.

site.open-graph-missing · site.structured-data-missing · site.meta-noindex
04 · HOW IT WORKS

From URL to report in three steps

  1. Step 01

    Discover

    Headless Chrome loads your page three times and enumerates every registered tool: names, schemas, annotations, origins. Small fetches read robots.txt, llms.txt, the sitemap, security.txt and the AI Catalog with any MCP Server Cards it lists.

  2. Step 02

    Probe

    Metadata runs through the versioned deterministic rulepack. The scanner never calls a page tool or submits a form.

  3. Step 03

    Report

    You get a cited report: spec violations, deployment failures, security findings, compatibility signals and the agent-readiness checklist, each finding with its fix and sources.

LIFE HACK

Hiring? Put JSON-LD inside every job posting

Add a schema.org JobPosting block, <script type="application/ld+json">, to the HTML of each vacancy page. Google needs it to show the role in its job search experience, and an AI agent reads the title, salary, location and remote policy straight from it instead of guessing from the layout.

One block per page, no new endpoint. Our scan already flags a page with no JSON-LD at all (site.structured-data-missing). Required fields are in Google's JobPosting guide.

vacancy.html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "Backend engineer (Node.js)",
  "description": "<p>What you will build...</p>",
  "datePosted": "2026-10-27",
  "validThrough": "2026-12-31",
  "hiringOrganization": {
    "@type": "Organization", "name": "Example Co."
  },
  "jobLocationType": "TELECOMMUTE",
  "applicantLocationRequirements": {
    "@type": "Country", "name": "Cyprus"
  },
  "baseSalary": {
    "@type": "MonetaryAmount", "currency": "EUR",
    "value": { "@type": "QuantitativeValue",
      "minValue": 60000, "maxValue": 80000,
      "unitText": "YEAR" }
  }
}
</script>

Agents are already browsing.
Know what they can do on your site.

The spec is a brand-new draft. Teams that audit now set the bar everyone else will be measured against.

Need a detailed audit? On request we run a detailed MCP audit and prepare everything you need. [email protected]