eswat2-mcp — how this was built
This server is a Python project built on FastAPI and FastMCP. FastAPI handles the REST layer; FastMCP mounts at /mcp and exposes the same content as MCP resources and tools over the Model Context Protocol. Both share the same in-memory knowledge base — one namespace per kbs/*-kb.json file, all loaded at startup — one source of truth, two protocols. See the full architecture diagram for how the layers fit together, or the implementation plan for the phases, modules, and file structure behind the build.
Content lives as Markdown files under modules/, one directory per namespace (profile, projects, research, vault, art, gallery, specs). A build script (scripts/build_all.py) reads those files, calculates word and character counts, pulls last-updated timestamps from git history, and writes each namespace's compiled kbs/*-kb.json. Rebuilding is a one-command operation (task build).
The server is deployed to Vercel via its Python runtime. In production the base URL is inferred from Vercel's environment variables; locally it defaults to http://localhost:9100. A start.sh / stop.sh pair wraps uvicorn for local development, run through an isolated uv-managed virtual environment — dependencies are pinned in pyproject.toml and locked in uv.lock, so local dev and Vercel resolve the same versions instead of drifting against whatever's globally installed.
The wiki and graph pages use two typefaces. Iosevka — a narrow, extended monospace — serves as the body and UI font, set at 14px with weight 300. Podkova — a slab serif — is used exclusively for headings. Both are self-hosted as WOFF2 subsets under /fonts/.
The entire project was built with Claude Code — Anthropic's CLI coding assistant — running in an agentic loop against this repository. Architecture decisions, content drafts, code, and tests were all iterated through conversation. The MCP server was registered back into Claude Code itself during development, so the assistant had live access to its own output while building it.
Grok (xAI) was instrumental in reviewing and testing this knowledge base. Grok has a distinctive capability no other tested LLM shares: given only the base URL — https://eswat2-mcp.vercel.app — it autonomously discovers and consumes the manifest and content endpoints without further instruction. That made it an effective end-to-end validator for how the server presents itself to AI clients in the wild.
MCP (Model Context Protocol) is an open standard from Anthropic for connecting AI models to external data and tools. This server exposes biographical and career content under the profile:// URI scheme — readable by any MCP-compatible client, including Claude Desktop and Claude Code.
All /manifest and /resolve responses are served with Cache-Control: no-cache so LLM clients always fetch fresh content after a deployment. If you're seeing stale content despite this header, appending a random cache-busting query parameter forces a fresh fetch — e.g. /manifest?t=1749362 or /resolve?uri=profile://about&t=1749362. The value must be different each time; reusing the same number just creates a new cached URL with the same stale response.