Why
The Noxus MCP server advertises its full tool list on connect: 113 tools whose schemas come to roughly 23,000 tokens. Your client pays that in every conversation, whether or not it ever calls a Noxus tool. It also makes the model chain one tool call per step, each result travelling back through the context. Code mode is the other way round. Connect to/mcp/code and you are offered
two tools and about 3,300 tokens.
Most of that is the catalog, and the catalog is only names: every tool, with
one line saying what it does. Naming all of them is cheaper than hiding any of
them, and it means a tool can never be missed by a search that guessed the
wrong word. What each tool takes and returns is the expensive part, so that
stays in the sandbox and search hands you the few you ask for.
Connecting
Same server, same credentials, different path — append/code to the URL you
already use:
/mcp endpoint is unchanged. Use it when your client already has
its own code-execution layer, or when you want the model to see the tools
directly.
Finding a tool’s arguments and types
Pick the names you want out ofexecute’s catalog and name them to search,
separated by commas:
search takes Python and spec() is the
whole catalog as a dict. It stays in the sandbox, so only what your code
returns comes back:
spec() is a plain call, with no await.
One search should be enough: ask for everything the job needs in a single
call, then do the whole job in a single execute. search cannot call a Noxus
tool, so it has no side effects.
Running code
Every tool the catalog names is a pre-bound async function. There is no module to reach through — just the name. The last expression is the result:What the sandbox allows
- Tools are the only way out. No filesystem, no network, no environment variables. The bound functions are the entire surface.
- Nothing is pre-imported.
import asynciobefore you use it. Thejsonandremodules are subsets of the standard library’s. - Keyword arguments only:
await workflows_get(workflow_id=...). asyncio.gatherfans out, but there is noreturn_exceptions=, and one raise loses every sibling result. Wrap an uncertain call intry/except.- At most 50 tool calls per script, and a result over 20,000 characters is truncated. Filter and aggregate inside the script.