CodeCall ships as part of @frontmcp/plugins. Add it to your project:
npm install @frontmcp/plugins
This includes CodeCallPlugin along with all official FrontMCP plugins.
2
Create Tools with CodeCall Metadata
Mark each tool with the codecall metadata object. Setting enabledInCodeCall: true makes the tool
available inside CodeCall scripts, while visibleInListTools: false hides it from the standard
tools/list response so the LLM only sees the 4 meta-tools.
{ "tools": [ { "name": "users:list", "description": "List users with optional filtering by status and role", "relevanceScore": 0.92 }, { "name": "users:get", "description": "Get a single user by ID", "relevanceScore": 0.87 } ], "totalAvailableTools": 2}
Instead of exposing users:list and users:get directly in tools/list, CodeCall replaced them
with 4 meta-tools. When a client calls tools/list, it sees:
{ "tools": [ { "name": "codecall:search", "description": "Search for tools by natural language query" }, { "name": "codecall:describe", "description": "Get detailed schemas for selected tools" }, { "name": "codecall:execute", "description": "Execute an AgentScript that orchestrates tools" }, { "name": "codecall:invoke", "description": "Direct single-tool invocation without VM overhead" } ]}
The LLM only needs to understand these 4 tools, no matter how many underlying tools your server
has. When it needs a specific capability, it searches, reads the schema on demand, and writes a
short script to get the job done.
The real power of CodeCall is combining multiple tool calls with server-side logic in a single
round-trip. Here is a script that finds all admin users from the active user list:
Key takeaway: one round-trip to the server, data filtered server-side, minimal tokens returned
to the LLM. Without CodeCall, this would require fetching all users into context, burning tokens on
the full payload, and relying on the model to filter correctly.