Syncanix with FastAPI
Make a FastAPI service agent-ready: what discovery reads, how to run it, and how to ship the chat surface and MCP server.
FastAPI composes routers with prefixes at two levels — on the APIRouter itself and again at include_router. Discovery folds both in, within and across files.
What discovery reads
Discovery is static — it reads your source, not your traffic. It composes full request paths across files, so mounted prefixes are part of every extracted route:
# main.py
app.include_router(orders_router, prefix="/api")
# orders.py
orders_router = APIRouter(prefix="/orders")
@orders_router.get("/{order_id}") # → GET /api/orders/{order_id}
@orders_router.post("/{order_id}/refund") # → POST /api/orders/{order_id}/refundThe extractor composes APIRouter(prefix=…) with include_router(…, prefix=…) within and across files — including nested aggregator chains — so decorated path operations are catalogd under their fully-composed paths.
Run discovery
From the repository root, run the init command. It detects the framework automatically, asks for consent before any LLM enrichment, and writes a deterministic catalog:
$ npx syncanix init
✓ detected framework
✓ scanned routes
✓ wrote .syncanix/catalog.json
→ review your capabilities in the dashboardReview the catalog
The catalog at .syncanix/catalog.json lists every capability discovery found — method, path, and the enriched description your users will see. Review it like code before uploading: it is the contract your chat surface and MCP server expose.
Ship the surface
Once the catalog is uploaded, embed the widget for in-app chat and connect the per-tenant MCP server for Claude, ChatGPT, and Cursor. Every write action stays permission-gated, confirmed, and audited.