Production-minded Model Context Protocol server that exposes curated Cartesi developer resources from PostgreSQL to AI agents over streamable HTTP.
- FastMCP (
mcp[cli]1.26.x) withstreamable_http_app()— use FastMCP’s Starlette app directly in production so session lifespan runs correctly (seecreate_app()insrc/main.py). - Async SQLAlchemy + asyncpg for read-only access to the knowledge database.
- Layered layout: config and logging (
src/core/), DB session and models (src/db/), repositories, domain service (src/domain/resource_service.py), schemas, formatters, and server modules undersrc/server/. - Transport security: DNS rebinding protection and configurable
allowed_hosts/allowed_originsinsrc/server/server.py(extend for your deployment hostname). - Plain HTTP health:
GET /healthzreturns{"status":"ok"}alongside the MCP route.
Knowledge responses are metadata and links (titles, URIs, canonical_url, doc routes). They do not include full fetched page bodies; agents should fetch external URLs when they need raw HTML or markdown.
Workflow tools (prepare_cartesi_*, send_input_to_application, prepare_*_deposit_instructions, get_cartesi_app_logic_guidance) only return instructions and command templates for the user’s machine. They do not run the Cartesi CLI, cast, or chain RPC from this server.
- Python ≥ 3.11 (see
pyproject.toml; the includedDockerfileuses Python 3.12). - A PostgreSQL database populated with the curated resource schema expected by
src/db/models.pyandResourceService.
Copy .env.example to .env and adjust. Defaults and field names are defined in src/core/config.py (notably DATABASE_URL, APP_HOST, APP_PORT, MCP_BASE_URL, pagination limits). For PostgreSQL URLs, postgres://... is normalized to postgresql+asyncpg://..., and sslmode is translated to asyncpg-compatible ssl (for example, sslmode=disable becomes ssl=false).
Using uv (recommended):
uv syncUsing pip:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtpython -m src.mainuv run python -m src.mainuv run uvicorn src.main:create_app --factory --host 0.0.0.0 --port 8000The MCP endpoint is streamable HTTP at:
http://<host>:<port>/mcp(default:http://0.0.0.0:8000/mcp)
The repository includes a multi-stage Dockerfile that installs dependencies with uv and runs python -m src.main. Set DATABASE_URL and other env vars at runtime (for example via -e or your orchestrator).
Use MCP Inspector or any MCP-compatible client and connect to:
http://localhost:8000/mcp| URI | Purpose |
|---|---|
cartesi://health |
Server name, environment, MCP_BASE_URL, read-only flag, capabilities, content policy |
cartesi://resources |
Catalog: index of resource URIs, tool names, prompts, and suggested agent flow |
cartesi://resources/{resource_id} |
Normalized resource metadata |
cartesi://docs/{resource_id} |
Documentation resource view (same shape; non-doc IDs error) |
cartesi://docs/routes/{route_id} |
Single doc route with parent context |
cartesi://repositories/{resource_id} |
Repository sync / freshness metadata |
cartesi://collections/tag/{tag} |
Resources grouped by tag |
cartesi://collections/source/{source} |
Resources grouped by source |
These are the name= values clients see (Python handler names may differ).
Knowledge
summarize_knowledge_base— coverage, counts, orientationget_knowledge_taxonomy— known tag and source titlessearch_knowledge_resources— search by query, tag, source, kindget_resource_detail— one resource by ID, optional routeslist_resource_doc_routes— routes for a documentation resourcesearch_documentation_routes— search routes across resourceslist_resources_for_tag/list_resources_for_sourceget_repository_sync_statusbuild_debugging_context— issue-focused bundle of resources and routes
Host-side Cartesi workflow (instructions only)
prepare_cartesi_create_command— stable v1.5.x vs alpha v2.0 create guidanceprepare_cartesi_build_commandprepare_cartesi_run_commandsend_input_to_application— InputBox +casttemplatesprepare_erc20_deposit_instructions— ERC20Portal flowprepare_erc721_deposit_instructions— ERC721Portal flowprepare_erc1155_deposit_instructions— ERC1155SinglePortal flowget_cartesi_app_logic_guidance— address-book, portals, vouchers, notices, reports
debug_cartesi_issue— structured debugging using curated knowledgefind_cartesi_docs— doc route discovery for a topicexplain_repository_context— repository resource + status summary