← jwatte.com

Agent Invocation Sitemap Generator

Traditional sitemap.xml lists pages for crawlers to READ. An agent-invocation sitemap lists ACTIONS for agents to CALL — book, quote, verify, order, contact. This generator emits both a schema.org PotentialAction JSON-LD block and an MCP-compatible tools manifest. First-mover advantage window for agent-native commerce is open in 2026.

Context and background

Read the story behind this tool: Why your site needs a sitemap for actions, not just pages →

Business info

Declared callable actions

'; $('resultsCard').innerHTML = '

1. Paste into your homepage <head> — schema.org potentialAction

'+esc(htmlBlock)+'
' + '

2. Host at /.well-known/mcp.json — MCP tools manifest

'+esc(JSON.stringify(mcp, null, 2))+'
' + '

3. Host at /.well-known/agent-actions.json — plain agent-actions sitemap

Emerging convention parallel to sitemap.xml — declares invocable actions rather than pages.

'+esc(JSON.stringify(agentSitemap, null, 2))+'
' + '

Next steps

  1. Implement each action endpoint server-side. Match the URL, method, auth, and description exactly.
  2. Add origin-allowlist or API-key checks to prevent abuse. Enforce rate limits.
  3. Add the schema.org block to your homepage <head>.
  4. Deploy the two /.well-known/ JSON files at the declared paths.
  5. Run the MCP Advertising Audit to verify discoverability.
  6. Smoke-test: try calling each action from Claude Desktop with your MCP manifest path.
'; $('resultsCard').style.display='block'; document.getElementById('cp1').addEventListener('click', function(){ navigator.clipboard.writeText(htmlBlock); this.textContent='Copied!'; setTimeout(()=>this.textContent='Copy',1500); }); document.getElementById('cp2').addEventListener('click', function(){ navigator.clipboard.writeText(JSON.stringify(mcp, null, 2)); this.textContent='Copied!'; setTimeout(()=>this.textContent='Copy',1500); }); document.getElementById('cp3').addEventListener('click', function(){ navigator.clipboard.writeText(JSON.stringify(agentSitemap, null, 2)); this.textContent='Copied!'; setTimeout(()=>this.textContent='Copy',1500); }); }); if (!$('actsBox').children.length) newActRow();