Skip to main content

Mimir — declarative MCP router with LLM-guided onboarding, scoped plugins and a layered security model.

Project description

Mimir

CI PyPI version Python versions License: MIT

🇬🇧 You're reading the English version · 🇪🇸 Léeme en español

"Mimir guarda el pozo de la sabiduría: aconseja a Odín cuando le falta contexto. Tu router MCP hace lo mismo con el LLM."

Mimir is a declarative MCP router built on FastMCP 3.x. Drop a plugin.toml next to any MCP server and Mimir discovers it, mounts it under its own namespace, scopes its credentials, filters its tools, and exposes the union to your client (Claude Desktop, an agent in a loop, anything that speaks MCP over stdio).

What sets Mimir apart from other MCP aggregators:

  • Declarative plugin contract — every plugin ships its own plugin.toml describing identity, runtime, security, requirements. No central config to keep in sync.
  • Inventory separated from plugins — operators describe their infrastructure in inventory/*.yaml (hosts, services). Plugins ask the router "give me hosts of type X" — they never hardcode IPs or hostnames.
  • LLM-guided onboarding — when a plugin needs hosts or credentials the operator hasn't supplied, the router exposes a setup_<plugin>() meta-tool. The LLM walks the operator through what's missing, conversation by conversation.
  • Layered security — manifest quarantine, audit log, scoped credential vault, profile gate, tool whitelist/blacklist, and cross-plugin env scoping in subprocess. See docs/security-model.md.

Quick install

git clone https://github.com/CTRQuko/mimir-mcp
cd mimir-mcp
uv sync
uv run python router.py --dry-run

The dry-run prints what Mimir sees: inventory, discovered plugins, skills/agents. Without configuration it serves only meta-tools — that's intentional. Drop your first plugin under plugins/ and re-run.

Hello world — the minimal plugin

Look at examples/echo-plugin/ to see the full contract in ~30 lines. To mount it:

ln -s "$(pwd)/examples/echo-plugin" plugins/echo
uv run python router.py --dry-run

Output:

[mimir] router — profile: default
[mimir] Core: inventory, secrets, audit, memory(noop)
[mimir] Inventory: 0 hosts, 0 services
[mimir] Plugins discovered: 1
[mimir] Skills: 0  Agents: 0

Now the client sees echo_echo and echo_reverse alongside the router_* meta-tools.

How it compares

There are several MCP aggregators in the wild. Mimir occupies a specific slot:

Tool What it adds Where Mimir differs
FastMCP mount() Library to mount subservers in code Mimir adds discovery, manifest schema and security layers on top
MetaMCP Aggregator + middleware in Docker, three-level hierarchy Mimir is a single-process Python router, focused on declarative plugin contracts and LLM-guided onboarding
Local MCP Gateway Aggregator with Web UI, OAuth, profiles Mimir is CLI-first and focused on the plugin contract — no UI, no OAuth (yet)
mcp-proxy-server Routes requests to backend servers Mimir adds the inventory layer and semantic requirements
mxcp Build MCP servers from YAML/SQL/Python Mimir aggregates already-built servers; complementary, not competing

Documentation

Status

Mimir is a working framework with a 280+ test suite covering the core modules, the loader, the router wiring, the security model, the example plugin and the cutover manifests. It is being used in production by the author against a real homelab. The branch refactor/generify-naming (this code) is not yet published; the public release is gated on the cutover described under docs/operator-notes/cutover/.

Project goals (and non-goals)

Goals:

  • A small, readable router that anyone can audit in an evening.
  • Plugins as truly independent MCP servers — usable standalone or mounted.
  • Onboarding that an LLM can carry the operator through.
  • Security defaults that the operator can reason about.

Non-goals:

  • A full PaaS or sandbox. Mimir trusts the OS for process isolation; layer 5 tier 2 (filesystem/network/exec interceptors) is explicitly deferred until a real sandbox lands.
  • A web UI. CLI + LLM are the supported control planes.
  • Replacing FastMCP. Mimir is built on top of it.

License

MIT. See LICENSE.

Acknowledgements

  • The Model Context Protocol team at Anthropic for the standard.
  • FastMCP for the Python building blocks.
  • The author's prima Claude, for asking "is this for one homelab or for an ecosystem?" at the right moment.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mimir_router_mcp-0.3.1.tar.gz (72.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mimir_router_mcp-0.3.1-py3-none-any.whl (44.7 kB view details)

Uploaded Python 3

File details

Details for the file mimir_router_mcp-0.3.1.tar.gz.

File metadata

  • Download URL: mimir_router_mcp-0.3.1.tar.gz
  • Upload date:
  • Size: 72.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for mimir_router_mcp-0.3.1.tar.gz
Algorithm Hash digest
SHA256 8a69734dfdb8d0e829e161642dddf51b156d125eb21724ee6b486ec6189526a0
MD5 f12347bff68e4d0e3fc3832e76d89759
BLAKE2b-256 575266d4e6ad3e7c1450866349bf04016247bc1dfb128beffac5ccdd32c0a9f2

See more details on using hashes here.

File details

Details for the file mimir_router_mcp-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: mimir_router_mcp-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 44.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for mimir_router_mcp-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0512a11292a155a7436763936fc7ac64fc2f007e9051b37e268ec89dff382e09
MD5 1077bf59aef421996e315db123071fdd
BLAKE2b-256 9b515e2ee981b9d7effa2af3b4b4b5776c0f3b816dc9220584d2186980531f2a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page