Use this skill when users ask "add MCP server", "remove MCP", "configure tool executor", "add new tool", "environment variables for tool executor", "regenerate registry", or need to modify which MCP...
Configure which MCP servers are available in the Tool Executor sandbox. Serena is mandatory and cannot be removed.
tool-executor.config.json ā clients.ts loads configs ā Sandbox exposes clients
ā
npm run extract ā registry/ YAML files
Create tool-executor.config.json in the project root:
{
"$schema": "./tool-executor.config.schema.json",
"servers": [
{
"name": "serena",
"displayName": "Serena",
"command": "uvx",
"args": ["--from", "git+https://github.com/oraios/serena", "serena", "start-mcp-server"]
},
{
"name": "gemini",
"displayName": "Gemini",
"command": "npx",
"args": ["-y", "@rlabs-inc/gemini-mcp"],
"env": {
"GEMINI_API_KEY": "${GEMINI_API_KEY}"
}
}
]
}
tool-executor.config.jsontool-executor.config.js.tool-executorrc.json{
"servers": [
// ... existing servers ...
{
"name": "newServer",
"displayName": "New Server",
"command": "npx",
"args": ["-y", "@example/new-mcp-server"],
"env": {
"API_KEY": "${NEW_SERVER_API_KEY}"
}
}
]
}
Edit src/types.ts to add the client type:
export interface MCPClients {
serena: Client | null;
// ... existing clients ...
newServer: Client | null; // Add this
}
npm run extract
This connects to all configured MCP servers and generates YAML files in registry/.
npm run build
# Restart Claude Code to pick up new MCP server
WARNING: Serena cannot be removed - it powers both search_tools and is available in the sandbox.
Delete the server entry from tool-executor.config.json.
Remove from src/types.ts MCPClients interface.
rm -rf registry/{category}/{serverName}/
npm run extract # Regenerate remaining
npm run build
Environment variables use ${VAR_NAME} syntax in config:
{
"env": {
"GEMINI_API_KEY": "${GEMINI_API_KEY}",
"CUSTOM_VAR": "${MY_CUSTOM_VAR}"
}
}
| Server | Variable | Purpose |
|---|---|---|
| gemini | GEMINI_API_KEY |
Google AI API key |
| apify | APIFY_TOKEN |
Apify platform token |
In Claude Code config (~/.claude.json):
{
"mcpServers": {
"tool-executor": {
"env": {
"GEMINI_API_KEY": "your-key-here",
"APIFY_TOKEN": "your-token-here"
}
}
}
}
Or in shell:
export GEMINI_API_KEY="your-key-here"
registry/
āāā ai-models/gemini/ # Gemini tools (AI queries, images, diagrams)
āāā code-nav/serena/ # Serena tools
āāā knowledge/context7/ # Context7 tools
āāā knowledge/notebooklm/ # NotebookLM tools
āāā reasoning/sequentialThinking/
āāā ui/shadcn/ # shadcn tools
āāā web/apify/ # Apify tools
name: tool_name
server: serverName
category: category-folder
description: >-
What the tool does. Can be multi-line.
inputSchema:
type: object
properties:
param1:
type: string
description: Parameter description
required:
- param1
example: |
const result = await serverName.tool_name({ param1: "value" });
console.log(result);
notes: |
- Optional tips
- Gotchas to be aware of
If npm run extract fails for a server, create YAML files manually:
mkdir -p registry/{category}/{serverName}
Then create registry/{category}/{serverName}/{tool-name}.yaml with the format above.
Serena indexes the registry for semantic search. If search results seem stale:
# Re-run extraction to refresh YAML files
npm run extract
# Rebuild to pick up changes
npm run build
These are the built-in defaults if no config file exists:
| Name | Command | Package |
|---|---|---|
| serena | uvx | git+https://github.com/oraios/serena |
| context7 | npx | @upstash/context7-mcp |
| gemini | npx | @rlabs-inc/gemini-mcp |
| notebooklm | npx | notebooklm-mcp |
| shadcn | npx | shadcn-ui-mcp-server |
| apify | npx | @apify/actors-mcp-server |
| sequentialThinking | npx | @modelcontextprotocol/server-sequential-thinking |
${CLAUDE_PLUGIN_ROOT}/src/sandbox/clients.ts - Client configuration and lifecycle${CLAUDE_PLUGIN_ROOT}/src/config.ts - Config file loading${CLAUDE_PLUGIN_ROOT}/src/types.ts - Type definitions${CLAUDE_PLUGIN_ROOT}/scripts/extract-schemas.ts - Registry generation