Part of Mahoney Context Protocol.
Portable, config-driven generators for the agent-native protocol layer of any website. Each feature ships one check against Cloudflare's Agent Readiness scanner.
Repo: https://github.com/MahoneyContextProtocol/mcp-foundation
| Feature | Surface | Status |
|---|---|---|
| 01 | robots.txt (validity + AI bot rules + Content Signals) |
shipped |
| 02 | sitemap.xml |
planned |
| 03 | Link headers (RFC 8288) | planned |
| 04 | Markdown content negotiation | planned |
| 05 | Content Signals (covered by 01) | n/a |
| 06 | API Catalog (RFC 9727) | planned |
| 07 | OAuth/OIDC discovery (RFC 8414) | planned |
| 08 | OAuth Protected Resource (RFC 9728) | planned |
| 09 | MCP Server Card | planned |
| 10 | A2A Agent Card | planned |
| 11 | Agent Skills index | planned |
| 12 | WebMCP runtime | planned |
npm installRequires Node 20+.
cp config.example.yml config.yml # edit values
npm run generate -- config.yml # writes ./output/robots.txtOverride the output directory:
npm run generate -- config.yml --output ./publicnpm test # unit tests (vitest)
npm run test:verify -- https://yoursite.example.com # live scanThe test:verify script runs the same checks Cloudflare's scanner
runs for the robots.txt portion of the score:
200 OKwithtext/plaincontent-typeUser-agent: *block present- At least one AI bot
User-agentline Content-Signal:directive present- Absolute
Sitemap:URL - Sitemap reachable (warns; full validation in Feature 02)
See config.example.yml for the full annotated config. Schema is
strict — unknown fields fail validation.
src/
generators/robots-txt.ts # pure function: Config -> string
schemas/config.schema.json # JSON Schema, strict
cli.ts # argv -> read yaml -> generate -> write
index.ts # library entry point
test/
fixtures/ # valid + invalid configs
verify/robots-txt.sh # live URL scanner
examples/ # ready-to-edit configs
output/ # generated artifacts (gitignored)