Skip to main content

mcp-minion

A minimal ReAct agent that drives one or more MCP servers through an OpenAI-compatible API (OpenRouter by default). It reads a task from a run folder, loops "think → call tool → observe" until the model produces a final answer, and writes a complete JSON log of the run.

mcp-minion is developed in the mcp-solver monorepo, where it is used to run solver templates over code-execution MCP servers, but it has no dependency on the solver and works with any MCP server.

Install

From the monorepo (workspace member):

uv sync --package mcp-minion

Or standalone:

pip install -e minion

Set an OpenRouter API key, either in ~/.mcp-minion or in a run folder's .env:

OPENROUTER_API_KEY=sk-...

Run-folder config

A run folder holds everything for a single run:

File Required Purpose
config.json yes Model, agent, MCP server, and kernel settings
task.md yes The specific task for this run
project.md no Shared instructions prepended to the task
files.system target no System-prompt body (see below)
run_*.json auto Per-run JSON log (written automatically)

config.json (nested format):

{
  "model": {
    "name": "google/gemini-2.5-flash",
    "temperature": 0,
    "max_tokens": 2048
  },
  "agent": { "max_steps": 10, "max_total_tokens": 500000 },
  "files": { "system": "system.md" },
  "packages": ["z3-solver"],
  "mcpServers": {
    "ipython": { "command": "ipython_mcp", "args": [] }
  }
}

Key options:

  • files.system — path (relative to the run folder) to a markdown file whose contents become the system prompt. If the file contains the literal placeholder {tool_sections}, the generated per-server tool list is spliced in at that spot (via a literal replace, so other {/} in the file — e.g. ASP templates — are left untouched); otherwise the tool list is appended after the file contents. When files.system is absent, a built-in default system prompt is used.
  • agent.max_total_tokens — hard cap on the cumulative input+output tokens of a single run. The cap is checked after each completed step: once the total exceeds it, the loop stops, the final answer becomes [Agent stopped: per-run token cap of N exceeded (cumulative M)], and the run log records token_cap_reached (both on the last step and in the result). Omit the key — or set it to 0 — for no cap. max_steps alone does not bound spending, since a single step can be arbitrarily expensive.
  • mcpServers — the servers to start for the run. If any of them fails to start, mcp-minion aborts with a RuntimeError naming the server rather than running the agent with a silently reduced tool set.
  • packages — packages to preinstall in a code-execution kernel. On the first call to a python_exec tool, if no python_reset has happened yet, mcp-minion automatically calls python_reset with these packages and reuses any returned kernel_id for subsequent python_exec calls.

Examples

Bundled test server

The package ships a tiny MCP server exposing echo and add:

{
  "model": { "name": "google/gemini-2.5-flash", "temperature": 0 },
  "agent": { "max_steps": 5 },
  "mcpServers": {
    "test": {
      "command": "python",
      "args": ["-m", "mcp_minion.test_mcp_server"]
    }
  }
}
mcp-minion path/to/run_folder -v

IPython code execution

With an ipython_mcp server available:

{
  "model": { "name": "google/gemini-2.5-flash", "temperature": 0 },
  "agent": { "max_steps": 5 },
  "mcpServers": {
    "ipython": { "command": "ipython_mcp", "args": [] }
  }
}

task.md:

Use the python_exec tool to compute sum(range(1, 11)) and report the result.

Artifacts

mcp_minion.artifacts.extract_last_submission(log_or_steps, tool_name="submit_code") returns the code argument of the last successful call to a submission tool, so callers can persist an agent's final code alongside the run log.

Tests

uv run --with-editable ./minion --with pytest --with pytest-asyncio \
    python -m pytest minion/tests -q

The end-to-end tests under minion/e2e_tests/ make real API calls and are skipped unless OPENROUTER_API_KEY is set.

Metadata

Release files for mcp-minion 0.2.1

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

Source distribution (sdist)

Source distribution for mcp-minion 0.2.1
File Size Uploaded
mcp_minion-0.2.1.tar.gz 36.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mcp-minion 0.2.1
File Interpreter ABI Platform
mcp_minion-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 62.1 kB

Release files / mcp_minion-0.2.1.tar.gz

Download URL mcp_minion-0.2.1.tar.gz
Size 36.1 kB
Tags Source
SHA-256 checksum
How to use checksums
c6ec5a5b437bb6fd3b24bfdda5115918256d7932f70fde9c68eaa8130b812c5d
BLAKE2b-256 checksum
How to use checksums
60a8210da488a87d7dae17f8754df4300c8454d341ae97ad39a554d6d6a13c3b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.2

Release files / mcp_minion-0.2.1-py3-none-any.whl

Download URL mcp_minion-0.2.1-py3-none-any.whl
Size 26.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
307946ae7c95ccdf652b93854171185894c8c3e3a6db9bcf3394ce866456c90a
BLAKE2b-256 checksum
How to use checksums
d0583e1fd9ef363999f3f0e023acce4399c2f785dfb0e44e5d04eebde9d018bf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.2

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

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