Skip to main content

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.

Metadata

Release files for mimir-router-mcp 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mimir-router-mcp 0.6.0
File Size Uploaded Provenance Actions
mimir_router_mcp-0.6.0.tar.gz 92.0 kB Without provenance Details for mimir_router_mcp-0.6.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for mimir-router-mcp 0.6.0
File Interpreter ABI Platform Actions
mimir_router_mcp-0.6.0-py3-none-any.whl Python 3 none any Details for mimir_router_mcp-0.6.0-py3-none-any.whl

Total release size: 143.1 kB

Release files / mimir_router_mcp-0.6.0.tar.gz

Download URL mimir_router_mcp-0.6.0.tar.gz
Size 92.0 kB
Tags Source
SHA-256 checksum
How to use checksums
d7c211af2bc4ca8d04132adac31bfd96ccc3ea9f6822ea41e73fc87f9b07c760
BLAKE2b-256 checksum
How to use checksums
0af2387f0785a55393849e93a84c5e7ee9af9511e8cdccbbdf3b98005cc6fe98
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release files / mimir_router_mcp-0.6.0-py3-none-any.whl

Download URL mimir_router_mcp-0.6.0-py3-none-any.whl
Size 51.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
01631b199706ce8643c2e1cc2018175b6353e1de86c523a85b83e73ed9444c75
BLAKE2b-256 checksum
How to use checksums
03abf92ee6855f43230ffaebd466d0914d2ae61f39b6573bf611910680ea1970
Upload date
Uploaded using Trusted Publishing?
What is 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}

Security for mimir-router-mcp 0.6.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page