Observed since 20 Oct, 23:27 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
agent-spawn-mcp
Universal MCP server for any OpenAI-compatible LLM. Supports OpenAI and Anthropic API formats.
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.
# 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-type openai (default) — OpenAI-compatible (chat/completions)--api-type anthropic — Anthropic API (v1/messages)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 |
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:
.mcp.json must use a unique --name — it becomes the tool
name {name}_agent, and duplicates collide.--token on the command line is visible in ps output and some crash logs.
Prefer keeping the MCP config file read-protected (chmod 600).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.
{name}_agent(task, model?, system_prompt?, temperature?, max_tokens?, timeout?) — Spawn agentagent_info() — Get provider infomax_tokens behaviourThe 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_tokens |
|---|---|
| Short 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_tokens explicitly up to that limit.
{
"result": "...", # Agent response text
"metadata": {
"provider": "minimax",
"model_used": "MiniMax-M2.7",
"usage": {"prompt_tokens": 100, "completion_tokens": 500},
"latency_ms": 2340
}
}
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
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) |
| 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 |
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:
glm-image, cogview-4-250304) expects quality / size / user_id
at /paas/v4/images/generations, not the OpenAI shape.For these, use the provider's native HTTP API directly.
MIT License. Copyright (c) 2026 Michael Makarov.
See LICENSE for the full license text.
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
httpxEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | httpx>=0.28.1 | runtime |
mcpEnvironment{
"extras": "cli",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | mcp[cli]>=1.13.1 | runtime |
pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pydantic>=2.9.0 | runtime |
python-dotenvEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | python-dotenv>=1.0.1 | runtime |
pyyamlEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pyyaml>=6.0.2 | runtime |
typerEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | typer>=0.21.0 | runtime |
bdist_wheel · 28.23 KB · Python py3
sdist · 1,279.81 KB · Python source
Observed since 20 Oct, 23:27 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:815c804a39ca757e1d569b25213ad292b4e9d3de0a925ac7e162c19011e39778