Web2Agent Protocol

The web,
agent-readable.

An open protocol for websites to declare their capabilities to AI agents. One file. Any framework. Zero crawling.

MCPAgent ↔ Toolsmodelcontextprotocol.io
A2AAgent ↔ Agenta2a-protocol.org
W2AAgent ↔ Webw2a-protocol.org

Choose what applies to you.

Website owner
Make your site agent-readable in 2 minutes. No code required.
Generate agents.json →
Python developer
Build agents with LangChain, LlamaIndex, AutoGen, or CrewAI.
pip install w2a →
JS / TS developer
Build for Node.js, Cloudflare Workers, Vercel Edge, or the browser.
npm install w2a-client →
Claude / Cursor user
Add W2A sites as tools to your AI assistant in one config line.
npx w2a-mcp →
Architect / CTO
Understand the discovery problem and how W2A fits the agent stack.
Read the paper →
Contributor
Apache 2.0. The spec, SDKs, and tools are all open for contribution.
View on GitHub →

The problem

Agents visit websites with no map.

There is no standard for a website to declare itself to an AI agent. Every agent that visits your site discovers it the way a human does — loading page after page.

40–50
page requests to understand
what one site does
200M+
public websites with no
agent-readable declaration
0
existing open standards
for website-to-agent

The solution

One file. Declare everything.

Serve agents.json at /.well-known/agents.json. Any AI agent reads it once and knows exactly what your site can do — no crawling required.

/.well-known/agents.json
W2A v0.1
{
  "w2a":  "1.0",
  "site": { "name": "Acme Store", "type": "ecommerce" },

  "capabilities": [
    {
      "id":      "search_products",
      "intent": "find products by query or category",
      "action": "GET /api/search",
      "input":  { "q": "string", "category": "string?" },
      "output": { "items": "Product[]", "total": "int" },
      "auth":   "none"
    },
    {
      "id":      "checkout",
      "intent": "complete a purchase",
      "action": "POST /api/orders",
      "input":  { "cart_id": "string", "payment_token": "string" },
      "output": { "order_id": "string", "status": "string" },
      "auth":   "session"
    }
  ],

  "policies": {
    "rate_limit":    "60/min",
    "allowed_agents": ["*"]
  }
}

Get started

Four paths.
Same result.

Every website can be agent-ready in under two minutes. Every agent can read any W2A-enabled site in one line of code.

For website owners — no engineering required
Live now
# 1. Go to the generator
w2a-protocol.org/tools

# 2. Enter your URL — auto-detects OpenAPI, Schema.org,
#    Open Graph, sitemaps, and HTML forms

# 3. Download and place at:
/.well-known/agents.json

# Vercel / Next.js  →  public/.well-known/agents.json
# WordPress         →  public_html/.well-known/agents.json
# Any other host    →  root folder → .well-known/
Python — LangChain, LlamaIndex, AutoGen, CrewAI
pip install w2a
# Install
pip install w2a

# Discover any W2A-enabled site
from w2a import discover

site = await discover("yoursite.com")
print(site.name, f"— {len(site.skills)} skills")

for skill in site.public_skills:
    print(skill.id, "—", skill.intent)

# Call a skill directly
result = await client.call(site, "search_products", q="shoes")
pypi.org/project/w2a SDK source
TypeScript / JavaScript — Node.js, Edge, Browser
npm install w2a-client
// Install
npm install w2a-client

// Discover any W2A-enabled site
import { discover } from 'w2a-client'

const site = await discover('yoursite.com')
console.log(`${site.name}${site.skills.length} skills`)

// Find a skill by intent fragment
const skill = site.findSkill('search')

// Call it
const result = await client.call(site, skill.id, { q: 'shoes' })
npmjs.com/package/w2a-client SDK source
MCP — Claude Desktop, Cursor, Cline, any MCP client
npx w2a-mcp
// Add to ~/.claude/claude_desktop_config.json
{
  "mcpServers": {
    "w2a": {
      "command": "npx",
      "args": ["w2a-mcp", "--url", "https://yoursite.com"]
    }
  }
}

// Every W2A skill becomes a Claude tool automatically.
// No coding required.
npmjs.com/package/w2a-mcp Source

Ecosystem

The missing third layer.

W2A completes the agentic web stack alongside MCP and A2A. Each protocol solves a distinct layer. None overlap.

Anthropic
MCP
Agent ↔ Tools
Model Context Protocol. Standardises how agents connect to tools, APIs, and data sources.
modelcontextprotocol.io →
Google · Linux Foundation
A2A
Agent ↔ Agent
Agent2Agent Protocol. Enables enterprise agents to discover each other and collaborate on tasks.
a2a-protocol.org →
Open · Community
W2A
Agent ↔ Web
Web2Agent Protocol. Makes any website discoverable by AI agents. The layer MCP and A2A both assume but never defined.
w2a-protocol.org →
A2A compatibility — agents.json is a valid A2A AgentCard
A2A compatible
{
  "w2a": "1.0",
  "a2a_profile": {
    "name":    "Acme Store Agent",
    "url":     "https://acme.com/.well-known/agents.json",
    "version": "1.0"
  }
  // ... capabilities
}

The lineage

The third chapter.

Each generation of the web needed a standard to make it machine-readable. W2A is the one for the agent era.

1994
robots.txt
Told crawlers what not to index
2005
sitemap.xml
Told crawlers where pages are
2026
agents.json
Tells agents what a site can do

Spec v0.1

Simple by design.

Full specification in the GitHub repository. Core capability schema:

Capability object
FieldTypeRequiredDescription
idstringyesUnique slug — e.g. "search_products"
intentstringyesPlain-English description the agent reads to understand what this capability does
actionstringyesHTTP method and path — e.g. "GET /api/search"
inputobjectnoNamed input parameters with types: string string? int float bool object[]
outputobjectnoNamed output fields with types
authstringyesnone · session · bearer · apikey

Full spec including site fields, policies, and federation → spec/v0.1.md


Open standard

Apache 2.0.
Community owned.

W2A is maintained by The Order AI and open to contributions. The goal is a protocol no single company controls — the same model as A2A under the Linux Foundation.

View on GitHub Join discussions A2A proposal