An MCP (Model Context Protocol) server that chains calls to other MCP tools, reducing token usage by allowing sequential tool execution with result passing. Designed to solve modelcontextprotocol/modelcontextprotocol#215
Step function like JSON paths:
- Chain multiple MCP tools together in sequence
- Pass results from one tool as input to another tool using
CHAIN_RESULT
placeholder - Filter and extract specific data using JsonPath with
inputPath
andoutputPath
parameters - Automatic tool discovery from configured MCP servers
- Minimal token usage compared to individual tool calls
This server implements the following MCP tools:
mcp_chain
- Chain together multiple MCP serverschainable_tools
- Discover tools from all MCP servers so the mcp_chain tool can be useddiscover_tools
- Rediscover tools from all MCP servers
- Node.js (v16 or later)
- npm
# Install
npm install @thirdstrandstudio/mcp-tool-chainer
# Or use with npx directly
npx -y @thirdstrandstudio/mcp-tool-chainer
# Clone the repository
git clone https://github.com/thirdstrandstudio/mcp-tool-chainer.git
cd mcp-tool-chainer
# Install dependencies
npm install
# Build the package
npm run build
ENSURE IT IS THE LAST MCP TO RUN OTHERWISE IT WILL HAVE TO RUN DISCOVERY AGAIN
Add the following to your claude_desktop_config.json
or mcp.json
:
{
"mcpServers": {
"mcp_tool_chainer": {
"command": "npx",
"args": ["-y", "@thirdstrandstudio/mcp-tool-chainer", "`claude_desktop_config.json` or `mcp.json`"],
"env": {}
}
}
}
{
"mcpServers": {
"mcp_tool_chainer": {
"command": "node",
"args": ["/path/to/mcp-tool-chainer/dist/index.js", "`claude_desktop_config.json` or `mcp.json`"],
"env": {}
}
}
}
Replace /path/to/mcp-tool-chainer
with the actual path to your repository.
// Fetch a webpage and then extract specific content with XPath
const result = await callTool("mcp_chain", {
"mcpPath": [
{
"toolName": "mcp_browser_mcp_fetch_url",
"toolArgs": "{\"url\": \"https://example.com\"}"
},
{
"toolName": "mcp_xpath_xpath",
"toolArgs": "{\"xml\": CHAIN_RESULT, \"query\": \"//h1\"}"
}
]
});
// Fetch a webpage, extract specific content with XPath, then extract part of the result
const result = await callTool("mcp_chain", {
"mcpPath": [
{
"toolName": "mcp_fetch_fetch",
"toolArgs": "{\"url\": \"https://api.example.com/data\"}"
},
{
"toolName": "web_search",
"toolArgs": "{\"search_term\": CHAIN_RESULT}",
"inputPath": "$.results[0].title", // Extract only the first result's title from previous output
"outputPath": "$.snippets[*].text" // Extract only the text snippets from the search results
},
{
"toolName": "another_tool",
"toolArgs": "{\"content\": CHAIN_RESULT}"
}
]
});
MCP Tool Chainer now supports AWS Step Functions-style InputPath and OutputPath features:
- inputPath: JsonPath expression to extract specific portions of the input before passing to a tool
- outputPath: JsonPath expression to extract specific portions of the output before passing to the next tool
These features work only when the input/output is valid JSON. If JsonPath extraction fails, the original input/output is used.
For JsonPath syntax reference, see JsonPath Syntax.
- Reduced Token Usage: By chaining tools together, you avoid sending large intermediate results back to the LLM
- Simplified Workflows: Create complex data processing pipelines with a single tool call
- Improved Performance: Reduce latency by minimizing round-trips between the LLM and tools
- Precise Data Flow Control: Extract only the data you need with JsonPath expressions
# Install dependencies
npm install
# Start the server
node dist/index.js config.json
# List available tools
node dist/index.js config.json discover_tools
This MCP server is licensed under the MIT License.
Created by Third Strand Studio