From isagentready
Implements AI agent interaction protocols — adds WebMCP declarative tool annotations, WebMCP manifests, Google A2A Agent Cards, MCP discovery documents, OpenAPI specifications, and agents.json so AI agents can directly interact with website functionality. Use when asked to "add WebMCP", "implement A2A", "create agent card", "add MCP discovery", "create OpenAPI spec", "add agents.json", "improve agent protocols score", "make site agent-interactive", or any WebMCP, A2A, MCP, or OpenAPI task.
How this skill is triggered — by the user, by Claude, or both
Slash command
/isagentready:agent-protocolsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Fixes Category 4 (Agent Protocols, 15% weight) issues from [IsAgentReady.com](https://isagentready.com). This category checks whether AI agents can discover and use your website's functionality directly through standardized protocols.
Fixes Category 4 (Agent Protocols, 15% weight) issues from IsAgentReady.com. This category checks whether AI agents can discover and use your website's functionality directly through standardized protocols.
security-trust skillstructured-data skillcontent-semantics skillai-content-discovery skill| ID | Checkpoint | Points | What passes |
|---|---|---|---|
| 4.1 | WebMCP Declarative API | 25 | Forms with tool-name + tool-description attributes |
| 4.2 | WebMCP manifest | 10 | Valid JSON at /.well-known/webmcp or /.well-known/webmcp.json |
| 4.3 | A2A Agent Card | 25 | /.well-known/agent.json with name, description, url, capabilities |
| 4.4 | MCP Discovery | 10 | Non-empty JSON object at /.well-known/mcp.json |
| 4.5 | OpenAPI / API docs | 20 | OpenAPI 3.x at standard paths (JSON or YAML) |
| 4.6 | agents.json | 10 | Valid non-empty JSON at /.well-known/agents.json or /agents.json |
Total: 100 points
WebMCP is the W3C proposal for exposing website functionality directly to AI agents. Declarative tool annotations on forms let agents perform actions (search, purchase, book) without screen scraping.
What the scanner checks: HTML forms/inputs with both tool-name AND tool-description attributes. Also detects page manifest and imperative API (partial credit).
Scoring: Declarative attributes = 25 pts | Page manifest only = 15 pts | Imperative API only = 10 pts | None = 0
Step 1: Identify interactive forms on your site
Find forms that perform useful actions: search, contact, booking, purchase, filtering, login.
Step 2: Add WebMCP declarative attributes to each form
<!-- Search form -->
<form action="/search" method="GET"
tool-name="search-products"
tool-description="Search the product catalog by keyword, category, or price range">
<input type="text" name="query"
tool-param-description="Search keywords">
<select name="category"
tool-param-description="Product category filter">
<option value="">All categories</option>
<option value="electronics">Electronics</option>
<option value="books">Books</option>
</select>
<button type="submit">Search</button>
</form>
<!-- Contact form -->
<form action="/contact" method="POST"
tool-name="send-message"
tool-description="Send a message to customer support">
<input type="text" name="name"
tool-param-description="Full name of the sender">
<input type="email" name="email"
tool-param-description="Email address for replies">
<textarea name="message"
tool-param-description="Message content"></textarea>
<button type="submit">Send</button>
</form>
Step 3 (optional): Add a page-level manifest for richer metadata
<script type="application/json" id="webmcp">
{
"tools": [
{
"name": "search-products",
"description": "Search the product catalog",
"parameters": [
{"name": "query", "type": "string", "required": true},
{"name": "category", "type": "string", "required": false}
]
}
]
}
</script>
Key rules:
tool-name AND tool-description on the form — one alone won't scoretool-name) and non-hyphenated (toolname) forms are acceptedtool-param-description on inputs is optional but recommended for richer context<form>, <input>, <select>, and <textarea> elementsSee references/webmcp-guide.md for imperative API, page manifests, and advanced patterns.
A WebMCP manifest enables pre-navigation discovery — AI agents can learn what tools your site offers before loading any page.
What the scanner checks: Valid JSON at /.well-known/webmcp or /.well-known/webmcp.json.
Step 1: Create the manifest file
{
"spec": "webmcp/0.1",
"tools": [
{
"name": "search-products",
"description": "Search the product catalog by keyword",
"url": "/search",
"method": "GET",
"parameters": [
{"name": "q", "type": "string", "description": "Search query", "required": true}
]
},
{
"name": "get-product",
"description": "Get product details by ID",
"url": "/api/products/{id}",
"method": "GET",
"parameters": [
{"name": "id", "type": "string", "description": "Product ID", "required": true}
]
}
]
}
Step 2: Serve at the well-known path
The file must be accessible at /.well-known/webmcp or /.well-known/webmcp.json and return Content-Type: application/json.
.well-known/ directoryapp.get('/.well-known/webmcp.json', (req, res) => res.json(manifest))Bonus: Include a "spec" field (e.g., "webmcp/0.1") for version identification.
See references/webmcp-guide.md for manifest schema details.
Google's Agent-to-Agent (A2A) protocol enables autonomous agent-to-agent communication. An Agent Card advertises your agent's capabilities to other AI systems.
What the scanner checks: /.well-known/agent.json with all 4 required fields: name, description, url, capabilities.
Scoring: All 4 fields = 25 pts | 2-3 fields = 15 pts | <2 fields = 0 pts
Step 1: Create the Agent Card
{
"name": "Acme Support Agent",
"description": "AI assistant for customer support, order tracking, and product recommendations",
"url": "https://example.com/agent",
"capabilities": {
"streaming": true,
"pushNotifications": false,
"stateTransitionHistory": false
},
"skills": [
{
"id": "order-tracking",
"name": "Order Tracking",
"description": "Track order status and delivery updates"
},
{
"id": "product-search",
"name": "Product Search",
"description": "Search and recommend products"
}
],
"defaultInputModes": ["text/plain"],
"defaultOutputModes": ["text/plain", "application/json"]
}
Step 2: Serve at /.well-known/agent.json
Must return valid JSON with Content-Type: application/json.
Required fields (all 4 needed for full score):
name — Human-readable agent namedescription — What the agent doesurl — Endpoint where the agent accepts requestscapabilities — Object describing what the agent supportsSee references/a2a-mcp-guide.md for all A2A fields and advanced configuration.
The Model Context Protocol (MCP) by Anthropic is the standard for connecting AI assistants to external tools and data. A discovery document lets AI systems find your MCP server.
What the scanner checks: /.well-known/mcp.json returns a valid non-empty JSON object.
Step 1: Create the MCP discovery document
{
"mcpServers": {
"main": {
"url": "https://example.com/mcp",
"name": "Example MCP Server",
"description": "Provides product search, order management, and customer data tools"
}
}
}
Step 2: Serve at /.well-known/mcp.json
Must return valid JSON with Content-Type: application/json. The JSON must be a non-empty object — empty {} will fail.
See references/a2a-mcp-guide.md for MCP discovery patterns and server configuration.
OpenAPI specifications let AI agents understand and call your API programmatically. AI coding assistants and agent frameworks use OpenAPI to generate correct API calls automatically.
What the scanner checks: Non-HTML response at /openapi.json, /openapi.yaml, /swagger.json, /api-docs, or /.well-known/openapi.
Scoring: OpenAPI 3.x = 20 pts | Swagger 2.x = 15 pts | Endpoint exists but unparseable = 10 pts | Not found = 0
Step 1: Create an OpenAPI 3.x specification
{
"openapi": "3.1.0",
"info": {
"title": "My Site API",
"version": "1.0.0",
"description": "API for product search and order management"
},
"servers": [
{"url": "https://example.com"}
],
"paths": {
"/api/search": {
"get": {
"operationId": "searchProducts",
"summary": "Search products by keyword",
"parameters": [
{
"name": "q",
"in": "query",
"required": true,
"schema": {"type": "string"},
"description": "Search query"
},
{
"name": "limit",
"in": "query",
"schema": {"type": "integer", "default": 20},
"description": "Max results to return"
}
],
"responses": {
"200": {
"description": "Search results",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {"$ref": "#/components/schemas/Product"}
}
}
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"Product": {
"type": "object",
"properties": {
"id": {"type": "string"},
"name": {"type": "string"},
"price": {"type": "number"}
}
}
}
}
}
Step 2: Serve at a standard path
Serve at /openapi.json (preferred) or any of: /openapi.yaml, /swagger.json, /api-docs, /.well-known/openapi.
Key rules:
"openapi": "3.x.x" for full score; "swagger": "2.0" gets partial (15 pts)operationId on each operation — AI agents use these as function namesSee references/a2a-mcp-guide.md for OpenAPI best practices for AI agents.
agents.json provides a directory of AI agent endpoints on your site. It helps agent orchestration systems discover and connect to your available AI services.
What the scanner checks: Valid non-empty JSON at /.well-known/agents.json or /agents.json.
Step 1: Create agents.json
{
"agents": [
{
"name": "Customer Support Agent",
"description": "Handles customer inquiries, order tracking, and returns",
"url": "https://example.com/agents/support",
"protocol": "a2a",
"capabilities": ["text", "streaming"]
},
{
"name": "Product Recommendation Agent",
"description": "Recommends products based on preferences and browsing history",
"url": "https://example.com/agents/recommendations",
"protocol": "a2a",
"capabilities": ["text"]
}
]
}
Step 2: Serve at /.well-known/agents.json or /agents.json
Must return valid, non-empty JSON. Empty {} or [] will fail.
For a site that has a search form and a basic API, here's the minimum to pass all checkpoints:
Add tool-name and tool-description to every interactive <form>.
/.well-known/ directory with 4 JSON files.well-known/
webmcp.json # 4.2 — tool manifest
agent.json # 4.3 — A2A Agent Card
mcp.json # 4.4 — MCP discovery
agents.json # 4.6 — agent directory
Serve your API spec at /openapi.json.
Ensure all /.well-known/* paths return Content-Type: application/json and are not blocked by your WAF, CDN, or middleware.
Common mistakes that cause checkpoint failures:
tool-name alone scores 0capabilities drops to 15 pts{} at mcp.json scores 0tool-name and toolname both acceptedSee references/gotchas.md for detailed correct vs incorrect examples of each.
/.well-known/* paths return valid JSON with correct Content-TypeIf $ARGUMENTS is provided, interpret it as the URL to fix or the specific checkpoint to address.
npx claudepluginhub bartwaardenburg/isagentready-skills --plugin isagentreadyProvides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.