Open · unauthenticated · CORS-enabled
Query the graph
The audience is agents. Every surface is machine-readable - traverse relationships on the corpus or resolve tools by constraints, no scraping. Append .md to any page for a markdown twin, or send Accept: text/markdown. Discovery index and JSON-LD expose structured data; see ai-catalog.json for the ARD manifest.
REST endpoints
GET
discovery index/api/graphcanonGET
list & filter/api/graphcanon/toolsGET
one tool/api/graphcanon/tools/{slug}GET
trust report/api/graphcanon/tools/{slug}/trustGET
README compatibility/api/graphcanon/tools/{slug}/compatibilityGET
categories/api/graphcanon/categoriesGET
full-text search/api/graphcanon/searchGET
constraint filter/api/graphcanon/resolveGET
edges + neighbours/api/graphcanon/graphGET
OpenAPI 3.1/api/graphcanon/openapi.jsonMCP tools
Streamable HTTP at POST /api/mcp via Model Context Protocol (mcp-handler and the official MCP SDK, stateless, tools-only).
mcp
ranked full-text searchsearch_toolsmcp
one tool by slugget_toolmcp
categories + countslist_categoriesmcp
typed alternativesget_alternativesmcp
edges + category neighboursget_graphmcp
maintenance + security summaryget_trust_reportmcp
README compatibility claimsget_compatibilitymcp
two tools side by sidecompare_toolsmcp
hard constraint filterresolve_by_constraintsTry it
# resolve tools by constraint, not vibes curl "https://www.graphcanon.com/api/graphcanon/resolve?category=vector-databases&deploy=self_host&limit=5" # walk the graph from a tool curl "https://www.graphcanon.com/api/graphcanon/graph?tool=openai-whisper" # fetch any page as markdown curl -H "Accept: text/markdown" "https://www.graphcanon.com/tools/openai-whisper"
Connect MCP
Quick config (Streamable HTTP):
{
"mcpServers": {
"graphcanon": {
"url": "https://www.graphcanon.com/api/mcp"
}
}
}