{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_we4cmkse49q7","handle":"dhis2w-mcp-router","url":"https://wellknown.network/agents/dhis2w-mcp-router","links":{"self":"https://wellknown.network/agents/dhis2w-mcp-router/record.json","html":"https://wellknown.network/agents/dhis2w-mcp-router","markdown":"https://wellknown.network/agents/dhis2w-mcp-router/record.md","api":"https://wellknown.network/api/v1/agents/dhis2w-mcp-router","status":"https://wellknown.network/api/v1/agents/dhis2w-mcp-router/status","claim":"https://wellknown.network/agents/dhis2w-mcp-router/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/dhis2w-mcp-router/claim.json","badge":"https://wellknown.network/agents/dhis2w-mcp-router/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/dhis2w-mcp-router/history","tools":"https://wellknown.network/api/v1/agents/dhis2w-mcp-router/tools"},"ard":{"identifier":"urn:air::server:dhis2w-mcp-router","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"dhis2w-mcp-router","summary":"Domain-neutral MCP router: front many upstream MCP servers behind two meta-tools (search + dispatch) so an agent gets lazy, searchable tool discovery instead of a huge up-front tool payload.","description":"# dhis2w-mcp-router\n\nA **domain-neutral MCP router**: front many upstream MCP servers behind two meta-tools so an agent gets\n**lazy, searchable tool discovery** instead of a huge up-front tool payload.\n\nIt is the portable, MCP-native equivalent of the Claude Agent SDK's ToolSearch — but it works with *any*\nMCP client (local models via LM Studio / Ollama / llama.cpp, or cloud agents), not just Claude's SDK.\n\n## Why\n\nA big MCP server (e.g. ~337 dhis2-mcp tools) dumps ~49k tokens of tool schemas into context up front —\nwhich overflows small local models and costs cloud models on every call. The single-tool `dhis2_cli`\nbridge avoids that by collapsing everything behind one tool, but then the agent must *discover* a CLI\n(run `--help`, trial commands) — discovery overhead. The router is the middle ground:\n\n| | tool payload | discovery | typed schemas | guardable chokepoint |\n| --- | --- | --- | --- | --- |\n| full MCP server | huge (all schemas) | none | yes | per-tool |\n| single-tool bridge | tiny (1 tool) | high (learn a CLI) | no | yes (1 tool) |\n| **router (this)** | **tiny (2 meta-tools)** | **low (search)** | **yes (search returns schemas)** | **yes (1 dispatch)** |\n\n## The two tools\n\n- `search_tools(query, limit)` — matching tools with their **namespaced** names (`server__tool`) and input schemas.\n- `call_tool(name, arguments)` — dispatch one tool to its upstream and return the result.\n\n`call_tool` is a single chokepoint, so a policy guard sits there — the same security property as the\nbridge, with typed discovery on top.\n\n## Read-only mode\n\nSet `MCP_ROUTER_READONLY=1` (global) or mark a single upstream `\"readonly\": true` in the config to run\nread-only: write tools are **hidden from `search_tools`** and **refused by `call_tool`** (a\n`PermissionError`). Tools are classified by their `readOnlyHint` annotation when present, else by a\nread-verb heuristic on the tool name (fail-closed). This is how a local model safely drives the surface\non a shared host — front `play` …","publisher":{"name":"Morten Hansen","url":null},"homepage":"https://winterop-com.github.io/dhis2w-mcp/","repository":"https://github.com/winterop-com/dhis2w-mcp","version":"1.38.3","license":null,"protocols":["mcp"],"tags":["mcp"],"pricing":null,"endpoints":[{"url":"pypi:dhis2w-mcp-router","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","repoUrl":"pypi","summary":"pypi","version":"pypi","description":"pypi","homepageUrl":"pypi","publisherName":"pypi"}},"derived":{"capabilities":[],"categories":[],"language":"en"},"observed":{"status":"unknown","statusReason":"Distributed as a package to run locally; no network endpoint to check.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[],"tools":null,"package":{"name":"dhis2w-mcp-router","registry":"pypi","observedAt":"2026-11-09T03:24:40.157Z","publishedAt":"2026-11-01T14:58:38.835960Z","latestVersion":"1.38.3"},"toolSurface":null,"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"dhis2w-mcp-router","url":"https://pypi.org/project/dhis2w-mcp-router/","firstSeenAt":"2026-09-09T14:31:34.846Z","fetchedAt":"2026-11-09T03:23:30.169Z","normalizedAt":"2026-11-09T03:23:30.169Z"}]},"firstSeenAt":"2026-09-09T14:31:34.846Z","updatedAt":"2026-11-09T03:24:40.157Z"}