Files
docs/standards/mcp/modules/wiki_mcp_setup.json
Vishesh 'ironeagle' Bangotra a67edf4175
All checks were successful
continuous-integration/drone/push Build is passing
docs(standards): add MCP setup page covering all clients and servers
New wiki page documents the ten per-repo MCP servers (standards + libraries, ports 8001-8010) and per-client config for Claude Code, Codex, Antigravity, OpenCode, and PyCharm, each with linked localhost / mcp.aetoskia.com tabs.
2026-10-18 12:41:42 +05:30

8 lines
14 KiB
JSON

{
"module": "wiki_mcp_setup",
"content": {
"path": "wiki_mcp_setup",
"docstring": "# 🔌 MCP Setup\n\nEvery repository ships its documentation as a **Model Context Protocol (MCP)**\nserver, and the `standards` registry server ties them together. The `docs`\nportal runs each one as a FastMCP **streamable-http** app bound to\n`0.0.0.0:<port>`, exposing the endpoint at `/mcp` (see `docs/main.py` and\n`docs/config.yml`).\n\nConnect your agent to the **`standards`** server first: it answers\n`find_library`, `list_repos`, and the `start_app` prompt, so the agent reaches\nfor an internal library instead of reimplementing one (see the\n[Library Registry](../lib/13_library_registry/)).\n\n---\n\n## ▶️ Run the servers locally\n\nFrom the `docs` checkout:\n\n```bash\n.venv\\Scripts\\python.exe main.py # every server\n.venv\\Scripts\\python.exe main.py --servers standards # just the registry\n```\n\n`:8000` is the health endpoint (`GET /healthz`), **not** an MCP server.\n\n---\n\n## 🧭 Servers\n\n| Slug | MCP server | Port | localhost | mcp.aetoskia.com |\n|------|------------|------|-----------|------------------|\n| `standards` | `standards` | 8009 | `http://localhost:8009/mcp` | `https://mcp.aetoskia.com/standards/mcp` |\n| `doc-forge` | `docforge` | 8001 | `http://localhost:8001/mcp` | `https://mcp.aetoskia.com/doc-forge/mcp` |\n| `mail-intake` | `mail_intake` | 8002 | `http://localhost:8002/mcp` | `https://mcp.aetoskia.com/mail-intake/mcp` |\n| `omniread` | `omniread` | 8003 | `http://localhost:8003/mcp` | `https://mcp.aetoskia.com/omniread/mcp` |\n| `openapi-first` | `openapi_first` | 8004 | `http://localhost:8004/mcp` | `https://mcp.aetoskia.com/openapi-first/mcp` |\n| `py-jwt` | `jwtlib` | 8005 | `http://localhost:8005/mcp` | `https://mcp.aetoskia.com/py-jwt/mcp` |\n| `dagpipe` | `dagpipe` | 8006 | `http://localhost:8006/mcp` | `https://mcp.aetoskia.com/dagpipe/mcp` |\n| `mongo-ops` | `mongo_ops` | 8007 | `http://localhost:8007/mcp` | `https://mcp.aetoskia.com/mongo-ops/mcp` |\n| `hexa` | `hexa` | 8008 | `http://localhost:8008/mcp` | `https://mcp.aetoskia.com/hexa/mcp` |\n| `doc-weaver` | `doc-weaver` | 8010 | `http://localhost:8010/mcp` | `https://mcp.aetoskia.com/doc-weaver/mcp` |\n\nThe hosted endpoints are served over HTTPS at `https://mcp.aetoskia.com/<slug>/mcp`.\nThe tabs below are linked (`content.tabs.link`): switching one switches all of\nthem. Every snippet registers **all ten** servers, so a single paste is enough.\n\n---\n\n## 🤖 Claude Code\n\nProject-scoped `.mcp.json` at the repo root. The `type` field is required — an\nentry with a `url` but no `type` is read as a stdio server and skipped.\n\n=== \"localhost\"\n\n ```json\n {\n \"mcpServers\": {\n \"standards\": { \"type\": \"http\", \"url\": \"http://localhost:8009/mcp\" },\n \"doc-forge\": { \"type\": \"http\", \"url\": \"http://localhost:8001/mcp\" },\n \"mail-intake\": { \"type\": \"http\", \"url\": \"http://localhost:8002/mcp\" },\n \"omniread\": { \"type\": \"http\", \"url\": \"http://localhost:8003/mcp\" },\n \"openapi-first\": { \"type\": \"http\", \"url\": \"http://localhost:8004/mcp\" },\n \"py-jwt\": { \"type\": \"http\", \"url\": \"http://localhost:8005/mcp\" },\n \"dagpipe\": { \"type\": \"http\", \"url\": \"http://localhost:8006/mcp\" },\n \"mongo-ops\": { \"type\": \"http\", \"url\": \"http://localhost:8007/mcp\" },\n \"hexa\": { \"type\": \"http\", \"url\": \"http://localhost:8008/mcp\" },\n \"doc-weaver\": { \"type\": \"http\", \"url\": \"http://localhost:8010/mcp\" }\n }\n }\n ```\n\n=== \"mcp.aetoskia.com\"\n\n ```json\n {\n \"mcpServers\": {\n \"standards\": { \"type\": \"http\", \"url\": \"https://mcp.aetoskia.com/standards/mcp\" },\n \"doc-forge\": { \"type\": \"http\", \"url\": \"https://mcp.aetoskia.com/doc-forge/mcp\" },\n \"mail-intake\": { \"type\": \"http\", \"url\": \"https://mcp.aetoskia.com/mail-intake/mcp\" },\n \"omniread\": { \"type\": \"http\", \"url\": \"https://mcp.aetoskia.com/omniread/mcp\" },\n \"openapi-first\": { \"type\": \"http\", \"url\": \"https://mcp.aetoskia.com/openapi-first/mcp\" },\n \"py-jwt\": { \"type\": \"http\", \"url\": \"https://mcp.aetoskia.com/py-jwt/mcp\" },\n \"dagpipe\": { \"type\": \"http\", \"url\": \"https://mcp.aetoskia.com/dagpipe/mcp\" },\n \"mongo-ops\": { \"type\": \"http\", \"url\": \"https://mcp.aetoskia.com/mongo-ops/mcp\" },\n \"hexa\": { \"type\": \"http\", \"url\": \"https://mcp.aetoskia.com/hexa/mcp\" },\n \"doc-weaver\": { \"type\": \"http\", \"url\": \"https://mcp.aetoskia.com/doc-weaver/mcp\" }\n }\n }\n ```\n\nOr add them with the CLI:\n`claude mcp add --transport http standards http://localhost:8009/mcp`.\n\n---\n\n## 🤖 Codex\n\n`~/.codex/config.toml` (or a project-scoped `.codex/config.toml`).\n\n=== \"localhost\"\n\n ```toml\n [mcp_servers.standards]\n url = \"http://localhost:8009/mcp\"\n\n [mcp_servers.doc-forge]\n url = \"http://localhost:8001/mcp\"\n\n [mcp_servers.mail-intake]\n url = \"http://localhost:8002/mcp\"\n\n [mcp_servers.omniread]\n url = \"http://localhost:8003/mcp\"\n\n [mcp_servers.openapi-first]\n url = \"http://localhost:8004/mcp\"\n\n [mcp_servers.py-jwt]\n url = \"http://localhost:8005/mcp\"\n\n [mcp_servers.dagpipe]\n url = \"http://localhost:8006/mcp\"\n\n [mcp_servers.mongo-ops]\n url = \"http://localhost:8007/mcp\"\n\n [mcp_servers.hexa]\n url = \"http://localhost:8008/mcp\"\n\n [mcp_servers.doc-weaver]\n url = \"http://localhost:8010/mcp\"\n ```\n\n=== \"mcp.aetoskia.com\"\n\n ```toml\n [mcp_servers.standards]\n url = \"https://mcp.aetoskia.com/standards/mcp\"\n\n [mcp_servers.doc-forge]\n url = \"https://mcp.aetoskia.com/doc-forge/mcp\"\n\n [mcp_servers.mail-intake]\n url = \"https://mcp.aetoskia.com/mail-intake/mcp\"\n\n [mcp_servers.omniread]\n url = \"https://mcp.aetoskia.com/omniread/mcp\"\n\n [mcp_servers.openapi-first]\n url = \"https://mcp.aetoskia.com/openapi-first/mcp\"\n\n [mcp_servers.py-jwt]\n url = \"https://mcp.aetoskia.com/py-jwt/mcp\"\n\n [mcp_servers.dagpipe]\n url = \"https://mcp.aetoskia.com/dagpipe/mcp\"\n\n [mcp_servers.mongo-ops]\n url = \"https://mcp.aetoskia.com/mongo-ops/mcp\"\n\n [mcp_servers.hexa]\n url = \"https://mcp.aetoskia.com/hexa/mcp\"\n\n [mcp_servers.doc-weaver]\n url = \"https://mcp.aetoskia.com/doc-weaver/mcp\"\n ```\n\nOr add them with the CLI:\n`codex mcp add standards --url http://localhost:8009/mcp`.\n\n---\n\n## 🤖 Antigravity\n\n`~/.gemini/antigravity/mcp_config.json` (IDE) or\n`~/.gemini/config/mcp_config.json` (CLI). Antigravity uses **`serverUrl`**, not\n`url`, for HTTP endpoints.\n\n=== \"localhost\"\n\n ```json\n {\n \"mcpServers\": {\n \"standards\": { \"serverUrl\": \"http://localhost:8009/mcp\" },\n \"doc-forge\": { \"serverUrl\": \"http://localhost:8001/mcp\" },\n \"mail-intake\": { \"serverUrl\": \"http://localhost:8002/mcp\" },\n \"omniread\": { \"serverUrl\": \"http://localhost:8003/mcp\" },\n \"openapi-first\": { \"serverUrl\": \"http://localhost:8004/mcp\" },\n \"py-jwt\": { \"serverUrl\": \"http://localhost:8005/mcp\" },\n \"dagpipe\": { \"serverUrl\": \"http://localhost:8006/mcp\" },\n \"mongo-ops\": { \"serverUrl\": \"http://localhost:8007/mcp\" },\n \"hexa\": { \"serverUrl\": \"http://localhost:8008/mcp\" },\n \"doc-weaver\": { \"serverUrl\": \"http://localhost:8010/mcp\" }\n }\n }\n ```\n\n=== \"mcp.aetoskia.com\"\n\n ```json\n {\n \"mcpServers\": {\n \"standards\": { \"serverUrl\": \"https://mcp.aetoskia.com/standards/mcp\" },\n \"doc-forge\": { \"serverUrl\": \"https://mcp.aetoskia.com/doc-forge/mcp\" },\n \"mail-intake\": { \"serverUrl\": \"https://mcp.aetoskia.com/mail-intake/mcp\" },\n \"omniread\": { \"serverUrl\": \"https://mcp.aetoskia.com/omniread/mcp\" },\n \"openapi-first\": { \"serverUrl\": \"https://mcp.aetoskia.com/openapi-first/mcp\" },\n \"py-jwt\": { \"serverUrl\": \"https://mcp.aetoskia.com/py-jwt/mcp\" },\n \"dagpipe\": { \"serverUrl\": \"https://mcp.aetoskia.com/dagpipe/mcp\" },\n \"mongo-ops\": { \"serverUrl\": \"https://mcp.aetoskia.com/mongo-ops/mcp\" },\n \"hexa\": { \"serverUrl\": \"https://mcp.aetoskia.com/hexa/mcp\" },\n \"doc-weaver\": { \"serverUrl\": \"https://mcp.aetoskia.com/doc-weaver/mcp\" }\n }\n }\n ```\n\n---\n\n## 🤖 OpenCode\n\n`opencode.json` (project) or `~/.config/opencode/opencode.json` (global).\n\n=== \"localhost\"\n\n ```json\n {\n \"$schema\": \"https://opencode.ai/config.json\",\n \"mcp\": {\n \"standards\": { \"type\": \"remote\", \"url\": \"http://localhost:8009/mcp\", \"enabled\": true },\n \"doc-forge\": { \"type\": \"remote\", \"url\": \"http://localhost:8001/mcp\", \"enabled\": true },\n \"mail-intake\": { \"type\": \"remote\", \"url\": \"http://localhost:8002/mcp\", \"enabled\": true },\n \"omniread\": { \"type\": \"remote\", \"url\": \"http://localhost:8003/mcp\", \"enabled\": true },\n \"openapi-first\": { \"type\": \"remote\", \"url\": \"http://localhost:8004/mcp\", \"enabled\": true },\n \"py-jwt\": { \"type\": \"remote\", \"url\": \"http://localhost:8005/mcp\", \"enabled\": true },\n \"dagpipe\": { \"type\": \"remote\", \"url\": \"http://localhost:8006/mcp\", \"enabled\": true },\n \"mongo-ops\": { \"type\": \"remote\", \"url\": \"http://localhost:8007/mcp\", \"enabled\": true },\n \"hexa\": { \"type\": \"remote\", \"url\": \"http://localhost:8008/mcp\", \"enabled\": true },\n \"doc-weaver\": { \"type\": \"remote\", \"url\": \"http://localhost:8010/mcp\", \"enabled\": true }\n }\n }\n ```\n\n=== \"mcp.aetoskia.com\"\n\n ```json\n {\n \"$schema\": \"https://opencode.ai/config.json\",\n \"mcp\": {\n \"standards\": { \"type\": \"remote\", \"url\": \"https://mcp.aetoskia.com/standards/mcp\", \"enabled\": true },\n \"doc-forge\": { \"type\": \"remote\", \"url\": \"https://mcp.aetoskia.com/doc-forge/mcp\", \"enabled\": true },\n \"mail-intake\": { \"type\": \"remote\", \"url\": \"https://mcp.aetoskia.com/mail-intake/mcp\", \"enabled\": true },\n \"omniread\": { \"type\": \"remote\", \"url\": \"https://mcp.aetoskia.com/omniread/mcp\", \"enabled\": true },\n \"openapi-first\": { \"type\": \"remote\", \"url\": \"https://mcp.aetoskia.com/openapi-first/mcp\", \"enabled\": true },\n \"py-jwt\": { \"type\": \"remote\", \"url\": \"https://mcp.aetoskia.com/py-jwt/mcp\", \"enabled\": true },\n \"dagpipe\": { \"type\": \"remote\", \"url\": \"https://mcp.aetoskia.com/dagpipe/mcp\", \"enabled\": true },\n \"mongo-ops\": { \"type\": \"remote\", \"url\": \"https://mcp.aetoskia.com/mongo-ops/mcp\", \"enabled\": true },\n \"hexa\": { \"type\": \"remote\", \"url\": \"https://mcp.aetoskia.com/hexa/mcp\", \"enabled\": true },\n \"doc-weaver\": { \"type\": \"remote\", \"url\": \"https://mcp.aetoskia.com/doc-weaver/mcp\", \"enabled\": true }\n }\n }\n ```\n\nOr add them with the CLI:\n`opencode mcp add standards --url http://localhost:8009/mcp --global`.\n\n---\n\n## 🤖 PyCharm (Junie / AI Assistant)\n\n`~/.junie/mcp/mcp.json` (user scope) or `.junie/mcp/mcp.json` (project scope).\nThe same config is reachable from **Settings | Tools | MCP Server → Manual\nClient Configuration → Copy HTTP Stream Config**.\n\n=== \"localhost\"\n\n ```json\n {\n \"mcpServers\": {\n \"standards\": { \"url\": \"http://localhost:8009/mcp\" },\n \"doc-forge\": { \"url\": \"http://localhost:8001/mcp\" },\n \"mail-intake\": { \"url\": \"http://localhost:8002/mcp\" },\n \"omniread\": { \"url\": \"http://localhost:8003/mcp\" },\n \"openapi-first\": { \"url\": \"http://localhost:8004/mcp\" },\n \"py-jwt\": { \"url\": \"http://localhost:8005/mcp\" },\n \"dagpipe\": { \"url\": \"http://localhost:8006/mcp\" },\n \"mongo-ops\": { \"url\": \"http://localhost:8007/mcp\" },\n \"hexa\": { \"url\": \"http://localhost:8008/mcp\" },\n \"doc-weaver\": { \"url\": \"http://localhost:8010/mcp\" }\n }\n }\n ```\n\n=== \"mcp.aetoskia.com\"\n\n ```json\n {\n \"mcpServers\": {\n \"standards\": { \"url\": \"https://mcp.aetoskia.com/standards/mcp\" },\n \"doc-forge\": { \"url\": \"https://mcp.aetoskia.com/doc-forge/mcp\" },\n \"mail-intake\": { \"url\": \"https://mcp.aetoskia.com/mail-intake/mcp\" },\n \"omniread\": { \"url\": \"https://mcp.aetoskia.com/omniread/mcp\" },\n \"openapi-first\": { \"url\": \"https://mcp.aetoskia.com/openapi-first/mcp\" },\n \"py-jwt\": { \"url\": \"https://mcp.aetoskia.com/py-jwt/mcp\" },\n \"dagpipe\": { \"url\": \"https://mcp.aetoskia.com/dagpipe/mcp\" },\n \"mongo-ops\": { \"url\": \"https://mcp.aetoskia.com/mongo-ops/mcp\" },\n \"hexa\": { \"url\": \"https://mcp.aetoskia.com/hexa/mcp\" },\n \"doc-weaver\": { \"url\": \"https://mcp.aetoskia.com/doc-weaver/mcp\" }\n }\n }\n ```\n\n---\n\n## ✅ Verify\n\n- Health check: `curl http://localhost:8000/healthz` → `ok`.\n- Claude Code: `claude mcp list` → each server … `✓ Connected`.\n- Codex: `codex mcp list` → each server … `http`.\n- OpenCode: `opencode mcp list` → each server … `connected`.\n- In-session: run `/mcp` to list the connected servers and their tools.\n\n---\n\n## 📚 Reference\n\n- [Library Registry](../lib/13_library_registry/) — the catalog each server\n mirrors, and where `find_library` resolves\n- [Start an App](03_start_an_app.md) — connect `standards`, then invoke\n `start_app`\n- [App Components](02_components.md) — the component model\n\n---\n\n## Related\n\n- [Start an App](03_start_an_app.md) · [Testing & Quality](04_development/01_testing.md) · [Library Registry](../lib/13_library_registry/)\n",
"objects": {}
}
}