Universal MCP server for any OpenAI-compatible LLM. Supports OpenAI and Anthropic API formats.
Project description
AgentSpawnMCP
Universal MCP server for any OpenAI-compatible LLM. Supports OpenAI and Anthropic API formats, cloud providers (OpenAI, Grok, Claude, Minimax, DeepSeek) and local models (Ollama, LM Studio, Jan). Built on FastMCP with pure httpx.
Quick Start — Spawn Agents
# No install needed — run directly with uvx
export MINIMAX_TOKEN=your-token
uvx agent-spawn-mcp spawn \
--name minimax \
--url https://api.minimax.io/anthropic/v1 \
--token-env MINIMAX_TOKEN \
--model MiniMax-M2.7 \
--api-type anthropic
Or install globally:
pip install agent-spawn-mcp
agent-spawn-mcp spawn --name minimax --url https://api.minimax.io --token-env MINIMAX_TOKEN --model MiniMax-M2.7
API Types
--api-type openai(default) — OpenAI-compatible (chat/completions)--api-type anthropic— Anthropic API (v1/messages)
URL versioning
Pass --url pointing directly at the API root. If your base URL already contains
a version segment (e.g. …/paas/v4), the client will not re-append v1/.
Examples:
| Provider | --url |
--api-type |
|---|---|---|
| OpenAI | https://api.openai.com/v1 |
openai |
| Grok | https://api.x.ai/v1 |
openai |
| z.ai (primary) | https://api.z.ai/api/paas/v4 |
openai |
| z.ai (coding) | https://api.z.ai/api/coding/paas/v4 |
openai |
| z.ai Anthropic | https://api.z.ai/api/anthropic |
anthropic |
| Anthropic | https://api.anthropic.com |
anthropic |
| Minimax | https://api.minimax.io/anthropic/v1 |
anthropic |
Claude Code / OpenCode Integration
Add to your .mcp.json:
{
"mcpServers": {
"minimax-agent": {
"command": "uvx",
"args": ["agent-spawn-mcp", "spawn",
"--name", "minimax",
"--url", "https://api.minimax.io/anthropic/v1",
"--token", "your-minimax-token",
"--model", "MiniMax-M2.7",
"--api-type", "anthropic"]
},
"claude-agent": {
"command": "uvx",
"args": ["agent-spawn-mcp", "spawn",
"--name", "claude",
"--url", "https://api.anthropic.com",
"--token", "your-anthropic-token",
"--model", "claude-sonnet-4-20250514",
"--api-type", "anthropic"]
},
"glm-agent": {
"command": "uvx",
"args": ["agent-spawn-mcp", "spawn",
"--name", "glm",
"--url", "https://api.z.ai/api/paas/v4",
"--token", "your-zai-token",
"--model", "glm-5.1"]
},
"glm-turbo-agent": {
"command": "uvx",
"args": ["agent-spawn-mcp", "spawn",
"--name", "glm-turbo",
"--url", "https://api.z.ai/api/paas/v4",
"--token", "your-zai-token",
"--model", "glm-5-turbo"]
}
}
}
Gotchas:
- Each entry in
.mcp.jsonmust use a unique--name— it becomes the tool name{name}_agent, and duplicates collide. --tokenon the command line is visible inpsoutput and some crash logs. Prefer keeping the MCP config file read-protected (chmod 600).
Codex CLI Integration
Codex can register stdio MCP servers with codex mcp add.
For a Minimax Anthropic-compatible agent:
export MINIMAX_TOKEN=your-minimax-token
codex mcp add minimax-agent -- \
uvx agent-spawn-mcp spawn \
--name minimax \
--url https://api.minimax.io/anthropic/v1 \
--token-env MINIMAX_TOKEN \
--model MiniMax-M2.7 \
--api-type anthropic
For z.ai GLM through the OpenAI-compatible API:
export ZAI_TOKEN=your-zai-token
codex mcp add glm-agent -- \
uvx agent-spawn-mcp spawn \
--name glm \
--url https://api.z.ai/api/paas/v4 \
--token-env ZAI_TOKEN \
--model glm-5.1
Verify the registration:
codex mcp list
codex mcp get minimax-agent
Restart Codex from a shell where the token env var is set. The tool exposed to
Codex is named from --name, for example minimax_agent or glm_agent.
If you need Codex to store the env var with the MCP server config, add
--env MINIMAX_TOKEN="$MINIMAX_TOKEN" before --. This is convenient, but it
stores the secret in Codex config. Passing --token directly also works, but
stores the token in the command args.
Tools Exposed
{name}_agent(task, model?, system_prompt?, temperature?, max_tokens?, timeout?)— Spawn agentagent_info()— Get provider info
max_tokens behaviour
The client imposes no cap. Behaviour when max_tokens is omitted depends
on --api-type:
-
openai— the field is simply not sent; the provider falls back to its own default (usually the model's full output budget). Reasoning models like GLM-5.x can burn huge amounts on chain-of-thought, so pass an explicit limit for short tasks. -
anthropic— the Anthropic API requires the field, so when you omit it the client fills in a safe default of 16384. Override when you need more or want to cap spend:claude_agent(task="summarise this PR") # uses 16384 claude_agent(task="exhaustive review", max_tokens=64000) # bigger claude_agent(task="ping", max_tokens=256) # cheaper
Typical values:
Use case max_tokensShort answer / ping 1024 Summary / routine agent run 4096 Code generation / long task 8192 Default (if omitted) 16384 Exhaustive analysis 32000+ Upper bound is model-specific (Claude Sonnet 4 — 64k, Opus 4 — 32k, GLM-4.5-Air — 8k, etc.). Pass
max_tokensexplicitly up to that limit.
Return Format
{
"result": "...", # Agent response text
"metadata": {
"provider": "minimax",
"model_used": "MiniMax-M2.7",
"usage": {"prompt_tokens": 100, "completion_tokens": 500},
"latency_ms": 2340
}
}
AgentSpawnMCP — Full Server
Full MCP server with all tools (chat, vision, files, search, agent). Requires git clone.
git clone https://github.com/sandsaber/AgentSpawnMCP
cd AgentSpawnMCP
uv sync
cp example.env .env
# Edit .env with your tokens
uv run python main.py main --provider grok
Auto-Discovery
Providers auto-detected when env var is set:
| Env Var | Provider |
|---|---|
XAI_TOKEN |
Grok |
OPENAI_TOKEN |
OpenAI |
GROQ_TOKEN |
Groq |
DEEPSEEK_TOKEN |
DeepSeek |
ZAI_TOKEN |
z.ai (GLM) |
Available Tools (Full Server)
| Tool | Description |
|---|---|
list_providers |
All discovered providers |
list_models |
Models for the active provider |
chat |
Text completion with session history |
stateful_chat |
Server-side conversation |
chat_with_vision |
Analyze images (jpg/jpeg/png) |
generate_image |
Create or edit images (OpenAI-format only) |
upload_file / list_files / get_file_content / delete_file |
File management |
chat_with_files |
Chat with documents |
web_search |
Agentic web search |
code_executor |
Execute code |
agent |
Unified agent |
list_chat_sessions / get_chat_history / clear_chat_history |
Session history |
Image generation support
generate_image targets the OpenAI /images/generations request shape
(model / prompt / n / image_url). Providers that expose the same
shape (OpenAI dall-e-3, Grok grok-imagine-image) work out of the box.
Providers with custom image APIs are not currently supported:
- z.ai (
glm-image,cogview-4-250304) expectsquality/size/user_idat/paas/v4/images/generations, not the OpenAI shape. - Anthropic-compat endpoints don't expose image generation at all.
For these, use the provider's native HTTP API directly.
License
MIT License. Copyright (c) 2026 Michael Makarov.
See LICENSE for the full license text.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agent_spawn_mcp-2.0.0.tar.gz.
File metadata
- Download URL: agent_spawn_mcp-2.0.0.tar.gz
- Upload date:
- Size: 1.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
630e895405cd92b9b5e20c1f0f1b16895e04e8ed115fb8bc843c0e158d1b94d1
|
|
| MD5 |
2327086cb33c497eb57944c83d7fec14
|
|
| BLAKE2b-256 |
038b3933d1eb68f1fafee1bb7871714c5796c756110435d90708761387c9cf29
|
File details
Details for the file agent_spawn_mcp-2.0.0-py3-none-any.whl.
File metadata
- Download URL: agent_spawn_mcp-2.0.0-py3-none-any.whl
- Upload date:
- Size: 28.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea04b98ec59e83b23217bef530e7891a5d8f1de702d0367f5aebad595e37ca1f
|
|
| MD5 |
2e7938c8234e62207603379661996d92
|
|
| BLAKE2b-256 |
9559c5e8306b1e8adb07076813a00e0d241111af14e05c6663ce08ce8df37e76
|