Guides users through the Tool Executor sandbox workflow: searching tools, getting schemas, and executing code with pre-connected MCP clients. Also covers the Workspace API for file storage.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claudikins-tool-executor:te-guideThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The Tool Executor wraps 7 MCP servers into 3 context-efficient tools. Master this workflow to reduce token consumption from ~50k to ~1.1k.
The Tool Executor wraps 7 MCP servers into 3 context-efficient tools. Master this workflow to reduce token consumption from ~50k to ~1.1k.
search_tools → get_tool_schema → execute_code
Find relevant tools with semantic search:
const result = await mcp__tool-executor__search_tools({
query: "generate diagram",
limit: 5
});
// Returns: { results: [{ name, server, description }], source, has_more }
Search tips:
offset for pagination when has_more is trueBefore calling a tool, get its complete specification:
const schema = await mcp__tool-executor__get_tool_schema({
name: "gemini_generateContent"
});
// Returns: { name, server, description, inputSchema, example, notes }
Why this step matters:
inputSchema shows all parameters, types, and required fieldsexample shows working code you can adaptnotes contains gotchas and tipsRun TypeScript in the sandbox with pre-connected MCP clients:
const result = await mcp__tool-executor__execute_code({
code: `
const response = await gemini.gemini_generateContent({
prompt: "Create a flowchart description for user authentication"
});
console.log("Generated:", response._savedTo || "inline");
`,
timeout: 30000
});
All clients are pre-connected and available as globals:
| Client | Purpose |
|---|---|
serena | Semantic code search (REQUIRED - cannot be removed) |
context7 | Library documentation lookup |
gemini | AI model queries, image generation, diagrams |
notebooklm | Research and notes |
shadcn | UI component generation |
apify | Web scraping |
sequentialThinking | Reasoning chains |
// All clients use the same pattern:
const result = await clientName.tool_name({ param: value });
// Examples:
await serena.find_symbol({ name_path: "MyClass" });
await gemini.query_gemini({ prompt: "Explain this code" });
await context7.resolve_library_id({ libraryName: "react" });
Persistent file storage scoped to ./workspace/. All paths are protected against traversal.
await workspace.write("notes.txt", "Hello world");
const content = await workspace.read("notes.txt");
await workspace.append("log.txt", "New line\n");
await workspace.delete("temp.txt");
await workspace.writeJSON("data.json", { key: "value" });
const data = await workspace.readJSON("data.json");
await workspace.writeBuffer("image.png", buffer);
const buffer = await workspace.readBuffer("image.png");
const files = await workspace.list("subdir");
const matches = await workspace.glob("**/*.json");
await workspace.mkdir("nested/path");
const exists = await workspace.exists("file.txt");
const stats = await workspace.stat("file.txt");
// stats: { size: number, mtime: Date, isDir: boolean }
// Clean up auto-saved MCP responses older than 1 hour
const deleted = await workspace.cleanupMcpResults();
MCP responses over 200 characters are automatically saved to workspace:
const response = await context7.get_library_docs({
context7CompatibleLibraryID: "/react/react"
});
// If large, response becomes:
// { _savedTo: "mcp-results/1234.json", _size: 5000, _preview: "...", _hint: "..." }
// Read full result when needed:
const full = await workspace.readJSON(response._savedTo);
Total console output over 500 characters is summarised. Keep logs concise:
// Good - concise logs
console.log("Created 5 files");
console.log("Done");
// Avoid - verbose output that gets truncated
console.log(JSON.stringify(largeObject, null, 2));
Minimise round-trips by batching work:
// Good - single execution with multiple operations
await mcp__tool-executor__execute_code({
code: `
const [lib1, lib2] = await Promise.all([
context7.resolve_library_id({ libraryName: "react" }),
context7.resolve_library_id({ libraryName: "vue" })
]);
console.log("Resolved both");
`
});
const response = await gemini.gemini_generateContent({
prompt: `Create a detailed flowchart description:
- User submits request
- Search for relevant tools
- Get tool schema
- Execute code in sandbox
`
});
await workspace.write("flowchart.md", response.content[0].text);
console.log("Saved flowchart.md");
const results = await serena.find_symbol({ name_path: "executeCode" });
console.log("Found:", results.content[0].text);
const code = await workspace.read("analysis-target.ts");
const analysis = await gemini.query_gemini({
prompt: `Analyse this code for potential issues:\n\n${code}`
});
await workspace.write("analysis.md", analysis.content[0].text);
Errors in execute_code return structured results:
const result = await mcp__tool-executor__execute_code({
code: `throw new Error("Something broke")`
});
// result: { logs: [...], error: "Something broke", stack: "..." }
Common errors:
timeout parameter or chunk work./workspace/For implementation details, see:
${CLAUDE_PLUGIN_ROOT}/src/sandbox/runtime.ts - Execution engine${CLAUDE_PLUGIN_ROOT}/src/sandbox/workspace.ts - Workspace API${CLAUDE_PLUGIN_ROOT}/src/sandbox/clients.ts - MCP client management${CLAUDE_PLUGIN_ROOT}/src/search.ts - Tool search implementationnpx claudepluginhub espalier-redoubt/claudikins-tool-executorGuides Tool Executor workflow: search tools semantically, fetch schemas, execute TypeScript with MCP clients (serena, gemini, notebooklm) and workspace file API.
Guides building MCP servers in TypeScript from research to evaluation. Covers design principles, SDK usage, and hosting patterns.
Discovers and invokes MCP server capabilities on-demand using the mcp CLI tool. Useful for one-off calls, testing, and avoiding permanent integration.