SubMCP
Enables delegating bounded subtasks to sub-agents running on NVIDIA NIM, with parallel fan-out, file/shell sandboxing, and configurable profiles.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SubMCPTrace how authentication flows through the codebase and summarize the key components."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SubMCP
An MCP server that gives Claude Code, Cursor, Codex, Windsurf, or Zed the ability to delegate bounded subtasks to sub-agents running on your own NVIDIA NIM account.
Default model: stepfun-ai/step-3.7-flash.
Why
Two reasons, both about your context window.
Context offload. "Trace how auth flows through this service" costs twenty file reads. Do it in your main session and those twenty files sit in your context for the rest of the conversation. Delegate it and the sub-agent burns NIM tokens reading them — you get back a report. The expensive part happens somewhere else, on a model you pay NVIDIA for, and your assistant's context stays clean for the work that actually needs it.
Parallel fan-out. Four independent questions become four sub-agents running at once on
one connection, instead of four sequential round trips through your main model. One
delegate_parallel call, one answer, every report in it.
Sub-agents are read-only and sandboxed by default. You opt into writes and shell.
Related MCP server: Claude Team MCP
Quickstart — Claude Code plugin (recommended)
/plugin install Animuni-Express/submcpClaude Code prompts you once for your NVIDIA NIM API key (get one at
https://build.nvidia.com) and stores it securely (OS keychain, or
~/.claude/.credentials.json where no keychain is available) — no plaintext .env
needed. The server runs via uvx straight from this repo, so there's no local clone or
venv to manage. Ask your assistant to call list_agents after installing to confirm the
key and sandbox are wired up.
Everything below is for manual setup: other MCP clients (Cursor, Codex, Windsurf, Zed), or running from a local clone instead of the plugin.
Quickstart — manual clone
git clone https://github.com/Animuni-Express/submcp.git && cd submcp
python -m venv .venv
.venv\Scripts\python.exe -m pip install -e . # Windows
# .venv/bin/python -m pip install -e . # macOS / Linux
cp .env.example .env # then put your key in it, or set it in the client config belowGet a key at https://build.nvidia.com. Then wire the server into your client (next
section) and ask your assistant to call list_agents — it needs no API key and will tell
you straight away whether the key, the sandbox root, and the gates are what you expect.
MCP client configuration
Every example runs the venv interpreter directly. Don't use a bare python — the
client won't have your venv activated, and submcp won't be importable.
Replace <path-to-submcp> with the absolute path to your own checkout. Windows paths in
JSON need doubled backslashes.
Claude Code
CLI (project scope — writes .mcp.json for you):
claude mcp add submcp --scope project \
--env NVIDIA_API_KEY=nvapi-... \
-- "<path-to-submcp>/.venv/Scripts/python.exe" -m submcpUse --scope user instead to make it available in every project.
Or write .mcp.json in the repo root by hand:
{
"mcpServers": {
"submcp": {
"command": "<path-to-submcp>\\.venv\\Scripts\\python.exe",
"args": ["-m", "submcp"],
"env": {
"NVIDIA_API_KEY": "nvapi-..."
}
}
}
}Check it with claude mcp list, or /mcp inside a session.
Cursor
.cursor/mcp.json in the project (or ~/.cursor/mcp.json globally) — same shape:
{
"mcpServers": {
"submcp": {
"command": "<path-to-submcp>\\.venv\\Scripts\\python.exe",
"args": ["-m", "submcp"],
"env": {
"NVIDIA_API_KEY": "nvapi-..."
}
}
}
}Then enable submcp under Settings → MCP.
Codex
~/.codex/config.toml — TOML, and the table is mcp_servers (underscore):
[mcp_servers.submcp]
command = "<path-to-submcp>/.venv/Scripts/python.exe"
args = ["-m", "submcp"]
[mcp_servers.submcp.env]
NVIDIA_API_KEY = "nvapi-..."Windsurf / Zed / anything else
Any client that speaks stdio MCP takes the same three things: the command
(<venv>/Scripts/python.exe), the args (["-m", "submcp"]), and an env block with
NVIDIA_API_KEY.
Timeouts
A delegation is a whole agent loop — up to SUBMCP_MAX_STEPS model calls. SubMCP's own
ceiling is SUBMCP_TIMEOUT (240s default). If your host kills the tool call first
you lose the report even though the sub-agent finished, so raise the host's limit above
SubMCP's. In Claude Code that's MCP_TOOL_TIMEOUT (milliseconds), set in the client
environment, e.g. MCP_TOOL_TIMEOUT=300000 for a 240s SubMCP timeout. Other clients have
an equivalent setting; give it headroom over SUBMCP_TIMEOUT, never less.
Tools
delegate
One sub-agent, one report.
param | type | default | meaning |
| string | required | Self-contained instructions, including the output format you want. |
| string |
|
|
| string[] |
| Paths handed over up front so the sub-agent doesn't hunt. |
| bool |
| Allow edits. Ignored unless |
| string |
| Override the NIM model for this run. |
| int |
| Tool-call budget for this run (falls back to |
Returns markdown: the report, then a footer with the model, step count, tool calls, and any files changed.
delegate_parallel
Several independent sub-agents at once, capped at SUBMCP_MAX_PARALLEL, sharing one
connection.
param | type | default | meaning |
| string[] | required | One self-contained task string per sub-agent. |
| string |
| Applies to all of them. |
| string[] |
| Handed to every sub-agent. |
| string |
| Override the NIM model. |
Returns one document with a ## Task N section per input, in order. A task that fails
gets a section marked FAILED with the reason; the others still come back. There is
deliberately no write here — concurrent edits to one working tree is how you lose work.
list_agents
No parameters, no API key needed. Reports the profiles, the model, the sandbox root, the budgets, and which capability gates are open. Use it as a setup check.
Writing a good task
The sub-agent starts cold. It cannot see your conversation, your open files, the user's last message, or anything you already worked out. Everything it needs goes in the string.
Good: "Find every call site of
load_configundersubmcp/and list each aspath:linewith one line on how the result is used. Answer as a markdown list."
Bad: "look into that config thing"
Say what to look at, what to produce, and what "done" means.
Profiles
profile | for |
| Default. One bounded task, fewest tool calls that actually settle it, reports what's true rather than what's likely. |
| Tracing how something really works — entry points, call paths, data flow, config. Never answers from a filename or a guess. Modifies nothing. |
| The smallest change that satisfies the task, matching the style already in the file. Never invents an API it hasn't seen. |
| Correctness bugs, unhandled failure paths, security holes, convention violations — worst first, each with the exact line. Reports; doesn't rewrite. |
Environment variables
Every knob is an env var, so the whole server is tunable from your client's env block
without touching code. See .env.example.
variable | default | meaning |
| (required) | Your NIM key. Without it the server still starts; |
|
| Model for sub-agents. |
|
| OpenAI-compatible endpoint. Point it at a self-hosted NIM if you have one. |
| server cwd | Sandbox root. Every sub-agent file operation is confined here. |
|
| Tool-call budget per delegation. |
|
| Wall-clock ceiling per delegation, seconds. |
|
| Concurrency cap for |
|
| Truncation limit on any single tool result fed back to the sub-agent. |
|
| Sampling temperature. |
|
| Nucleus sampling. |
|
| Max tokens per NIM completion. |
|
| step-3.7-flash reasons by default; off is faster and cheaper for delegated grunt work. |
|
| Global kill switch for file edits. Off. |
|
| Global kill switch for shell commands. Off. |
Booleans accept 1, true, yes, on.
Security model
Sandbox root. Every sub-agent file operation resolves under SUBMCP_ROOT (default:
the server's working directory). Escapes via .., absolute paths, and symlinks are
rejected after Path.resolve(), not before — a symlink pointing out of the tree is
refused.
Secret denylist. Refused by exact filename (.env, .env.local, id_rsa,
id_ed25519, credentials, .npmrc, .pypirc, .netrc) and by suffix (.pem, .key,
.pfx, .p12), for reads and writes. .env.example stays readable.
Two gates, both off by default.
SUBMCP_ALLOW_WRITE=0— sub-agents get nowrite_file/edit_filetools at all.delegate(write=True)is ignored while this is off; the gate is the operator's, not the model's.SUBMCP_ALLOW_SHELL=0— noruntool. Turning this on lets a sub-agent execute arbitrary commands in the sandbox root. Only do that in a repo you'd let a stranger run a script in.
With both off, the worst a sub-agent can do is read non-secret files inside one directory and tell you about them.
Key handling. Your API key never leaves the server process. Every string headed back to the host — reports, tool results, error messages, HTTP failures — goes through a redaction pass first.
When NOT to delegate
Delegation costs a cold start and a NIM round trip. It's a loss when:
It's one file and you know which one. Just read it. Delegating a single
Readis slower and worse.The task depends on this conversation. The sub-agent can't see it. If explaining the context takes longer than doing the work, do the work.
It's a judgement call the user is waiting on. Architecture decisions, ambiguous requirements, anything where the answer is "it depends" — that's your job, not a sub-agent's.
The subtasks are sequential.
delegate_parallelis for independent work. Chained steps needdelegateone at a time, or just do them yourself.You need the intermediate detail. You get the report, not the files it read. If you need the actual code in your context to edit it next, read it yourself.
Delegate when the work is bulky and separable: many files, mechanical, and the answer compresses to a paragraph.
Development
& ".venv\Scripts\python.exe" -m pytest -q.venv\Scripts\python.exe -m submcp starts the server on stdio; it will sit there waiting
for JSON-RPC on stdin, which is what a client does to it.
Layout
file | what |
| Env-driven |
| Path resolution, escape checks, secret denylist, truncation. |
| The tools a sub-agent gets, and their execution. |
| NVIDIA NIM chat client — retries, redaction, injectable transport. |
| Profile personas and the composed sub-agent system prompt. |
| The agent loop: chat → tool calls → repeat → report. |
| The MCP surface: |
| Claude Code plugin manifest — MCP server wiring and the |
| Skill teaching an assistant when and how to call these tools. |
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server that spawns autonomous Claude Code agents in GitHub repos, enabling task delegation with persistent state, multi-step workflows, and job monitoring.Last updated473162Apache 2.0
- Alicense-qualityBmaintenanceA Model Context Protocol (MCP) server that turns multiple AI coding agents into a coordinated team that chats, debates, remembers, audits security, and works in parallel on the same project.Last updatedMIT
- Flicense-qualityAmaintenanceA local MCP server that connects AI coding agents like Claude, Codex, and Gemini, enabling task routing, cross-model debates, and token-efficient context sharing without external APIs.Last updated8
- AlicenseAqualityFmaintenanceMCP server for running external coding agents as background tasks inside Claude Code. Supports multiple backends including Codex, Grok, GLM, DeepSeek, and more.Last updated7MIT
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Animuni-Express/SubMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server