mcp-tool-search
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
mcp-tool-search
A standalone MCP (Model Context Protocol) gateway/proxy server that lets any MCP-compatible client (Cursor, Claude Code, Codex, VSCode, Windsurf, Claude Desktop, Pi) search and call tools across multiple downstream MCP servers through a single mcp proxy tool.
Features
Single
mcpproxy tool (~200 tokens) for on-demand tool search/describe/callConnects to multiple downstream MCP servers (stdio, HTTP, SSE, StreamableHTTP)
Direct tool mode: expose individual MCP tools as native tools
Metadata caching with content-based invalidation
OAuth authentication support (authorization_code + client_credentials)
npx resolution (skip ~143MB npm parent process)
Output guarding (50KiB / 2000 line truncation)
Config compatible with standard MCP
mcpServersformatstdio transport only (all clients supported)
Windows installer, standalone
.exe(no Node.js), and portable zipBuilds with tsup (esbuild) — keeps
.tsimport extensions in source, compiles to single-file.jsbundle
Related MCP server: mcp-server-metatool
Quick Start
Installation
Windows, no Node.js (recommended) — standalone executable from GitHub Releases:
irm https://github.com/ericnunes30/mcp-gateway-proxy/releases/latest/download/install.ps1 | iexThis installs to %LOCALAPPDATA%\mcp-tool-search\, creates
%USERPROFILE%\.config\mcp-tool-search\mcp.json if it does not exist, and prints ready-to-paste
client snippets. It does not modify existing MCP client configs.
Portable zip, Node.js >= 20 — download mcp-tool-search.zip from
Releases and run the setup once:
node dist/cli.cjs setupFrom source:
git clone https://github.com/ericnunes30/mcp-gateway-proxy.git
cd mcp-gateway-proxy
npm install
npm run build # dist/cli.js (needs node_modules)
npm run dist:win # release/ (standalone exe + zip + install.ps1)The
mcp-tool-searchpackage on npm is a different project. Install this repository from Releases or build it from source.
See INSTALL.md for config locations, client snippets, update and uninstall.
Configuration
Create ~/.config/mcp-tool-search/mcp.json (the tool default; setup creates it for you):
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
},
"github": {
"url": "https://api.github.com/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}--mcp-config <path> overrides this default. Multiple sources are merged — see
INSTALL.md.
CLI Usage
# Standalone executable (installed by setup; not added to PATH)
& "$env:LOCALAPPDATA\mcp-tool-search\mcp-tool-search.exe" --version
& "$env:LOCALAPPDATA\mcp-tool-search\mcp-tool-search.exe" setup --print
& "$env:LOCALAPPDATA\mcp-tool-search\mcp-tool-search.exe" --mcp-config "$env:USERPROFILE\.config\mcp-tool-search\mcp.json"# From source
node dist/cli.js --mcp-config ~/.config/mcp-tool-search/mcp.json
# From the zip bundle
node dist/cli.cjs --mcp-config ~/.config/mcp-tool-search/mcp.json
# --config also works as an alias
node dist/cli.js --config ~/.config/mcp-tool-search/mcp.jsonUpdate / Uninstall
# update: re-run the installer (replaces the exe, keeps the config)
irm https://github.com/ericnunes30/mcp-gateway-proxy/releases/latest/download/install.ps1 | iex
# uninstall (keeps ~/.config/mcp-tool-search)
& "$env:LOCALAPPDATA\mcp-tool-search\mcp-tool-search.exe" uninstall
# uninstall and remove the config directory too
& "$env:LOCALAPPDATA\mcp-tool-search\mcp-tool-search.exe" uninstall --purgeClient Configuration
setup installs the executable at
%LOCALAPPDATA%\mcp-tool-search\mcp-tool-search.exe and creates
%USERPROFILE%\.config\mcp-tool-search\mcp.json. It prints a ready-to-paste block for the clients
below (setup --print shows them again without changing anything).
Replace C:\Users\YOU with your user folder. Restart the client (or start a new session) after
editing.
Claude Code — %USERPROFILE%\.claude.json
Add under "mcpServers":
{
"mcpServers": {
"mcp-tool-search": {
"type": "stdio",
"command": "C:\\Users\\YOU\\AppData\\Local\\mcp-tool-search\\mcp-tool-search.exe",
"args": ["--mcp-config", "C:\\Users\\YOU\\.config\\mcp-tool-search\\mcp.json"]
}
}
}Claude Desktop — %APPDATA%\Claude\claude_desktop_config.json
Same mcpServers block as Claude Code.
Cursor — %USERPROFILE%\.cursor\mcp.json
Same mcpServers block as Claude Code.
OpenCode — %USERPROFILE%\.config\opencode\opencode.json
OpenCode uses "mcp" (not "mcpServers") and "type": "local":
{
"mcp": {
"mcp-tool-search": {
"type": "local",
"command": [
"C:\\Users\\YOU\\AppData\\Local\\mcp-tool-search\\mcp-tool-search.exe",
"--mcp-config",
"C:\\Users\\YOU\\.config\\mcp-tool-search\\mcp.json"
],
"enabled": true
}
}
}Codex — %USERPROFILE%\.codex\config.toml
[mcp_servers.mcp-tool-search]
command = "C:/Users/YOU/AppData/Local/mcp-tool-search/mcp-tool-search.exe"
args = [ "--mcp-config", "C:/Users/YOU/.config/mcp-tool-search/mcp.json" ]Forward slashes work in the TOML variant.
Pi (with pi-mcp-extension) — %USERPROFILE%\.pi\agent\mcp.json
Same mcpServers block as Claude Code.
Portable zip / Node.js variant
For the zip bundle, replace the command/args with Node.js:
{
"command": "node",
"args": [
"C:\\path\\to\\mcp-tool-search\\dist\\cli.cjs",
"--mcp-config",
"C:\\Users\\YOU\\.config\\mcp-tool-search\\mcp.json"
]
}The proxy connects to all your downstream MCP servers. The client only needs to know about the proxy — no duplication of tools.
Client → mcp-tool-search (proxy) → N downstream serversProxy Tool Usage
The mcp tool accepts these parameters:
Parameter | Type | Description |
| string | Tool name to call |
| string | Arguments as JSON string |
| string | Server name to connect |
| string | Tool name to describe |
| string | Search query |
| boolean | Treat search as regex |
| boolean | Include schemas in search |
| string | Filter to server |
| string | "ui-messages", "auth-start", "auth-complete" |
Examples
mcp({}) → Show server status
mcp({ server: "filesystem" }) → List tools from server
mcp({ search: "file" }) → Search tools
mcp({ describe: "read_file" }) → Show tool details
mcp({ connect: "github" }) → Connect to server
mcp({ tool: "read_file", args: '{"path":"/foo"}' }) → Call a tool
mcp({ action: "auth-start", server: "linear" }) → Start OAuth
mcp({ action: "auth-complete", server: "linear", args: '{"redirectUrl":"..."}' }) → Complete OAuthExample Output
mcp({}) →
MCP: 2/5 servers, 38 tools
✓ chrome-devtools (29 tools)
✓ pencil (9 tools)
○ stitch (not connected)
○ tavily (not connected)
○ computer-use (not connected)mcp({ search: "screenshot" }) →
Found 3 tools matching "screenshot":
chrome_devtools_take_screenshot
Take a screenshot of the page or element.
Parameters: format, quality, uid, fullPage, filePath
pencil_get_screenshot
Returns a screenshot of a node in a .pen file.
Parameters: filePath, nodeIdConfiguration Reference
Server Entry
Field | Type | Description |
| string | Command to run (stdio) |
| string[] | Arguments for command |
| Record<string,string> | Environment variables |
| string | HTTP/SSE/StreamableHTTP URL |
| Record<string,string> | HTTP headers |
| "stdio" | "http" | "sse" | "streamable-http" | Transport type |
| "http" | Alias for transport (standard MCP compatibility) |
| object | OAuth configuration |
| "lazy" | "eager" | "keep-alive" | Connection mode |
| number | Idle timeout (seconds) |
| boolean | string[] | Expose as direct tools |
| string[] | Tools to exclude |
| boolean | Expose resources as tools |
| "server" | "short" | "none" | Tool name prefix |
| number | Request timeout |
| boolean | Auto-start OAuth |
| string | Bearer token |
| string | Env var name for bearer token |
Settings (top-level)
Field | Type | Description |
| "server" | "short" | "none" | Global tool prefix |
| boolean | string[] | Global direct tools |
| boolean | Global auto-auth |
| number | Global idle timeout |
| number | Global request timeout |
| boolean | Disable proxy tool |
| string | Custom auth message |
Environment Variables
Variable | Description |
| Enable debug logging to stderr |
| Data directory override (default: |
| Direct tools filter (comma-separated, |
| npx cache TTL in ms (default: 24h) |
Architecture
┌──────────────────┐ stdio ┌──────────────────┐
│ MCP Client │◄──────────────►│ mcp-tool-search │
│ (Cursor, etc.) │ JSON-RPC │ (this server) │
└──────────────────┘ └────────┬─────────┘
│
┌──────────────────────────┼──────────────────────────┐
│ │ │
┌─────┴─────┐ ┌──────┴──────┐ ┌──────┴──────┐
│ stdio │ │ HTTP/SSE │ │ Streamable │
│ server │ │ server │ │ HTTP │
└───────────┘ └─────────────┘ └─────────────┘Development
npm install # Install dependencies
npm run build # Build with tsup → dist/cli.js
npm run typecheck # Type-check with tsc (no emit)
npm test # Run vitest test suite (89 tests)
npm run dist:win # Build release/ (standalone exe, zip, install.ps1, checksums)Build System
The project uses tsup (powered by esbuild) for compilation:
Source code uses
.tsimport extensions (e.g.,import { foo } from "./types.ts")tsconfig.json has
noEmit: truefor type-checking onlytsup bundles everything into a single
dist/cli.jsfile (~150KB)Dependencies (
@modelcontextprotocol/sdk,open,recheck,typebox,zod) are externalized in the normal buildtsup.sea.config.tsproduces a self-contained CommonJS bundle (dist-sea/cli.cjs, nonode_modules) used by the portable zip and the Windows executablescripts/build-release.mjswraps the SEA bundle into a Node single executable (node --experimental-sea-config+postject) and assemblesrelease/
Release
Push a v* tag to run .github/workflows/release.yml, which builds and attaches to the GitHub
release:
Asset | Description |
| Standalone executable (Node SEA, no Node.js required) |
| Self-contained CJS bundle + launcher (Node.js >= 20) |
| One-liner installer used by |
| Checksums for the artifacts |
Project Structure
src/
├── cli.ts # CLI entry point (server + setup/uninstall commands)
├── server.ts # MCP server setup + stdio transport
├── state.ts # Gateway state factory
├── version.ts # Runtime version
├── install/
│ └── setup.ts # Installer commands (setup/uninstall, client snippets)
├── config/
│ ├── types.ts # Config types (McpConfig, ServerEntry, etc.)
│ ├── config.ts # Config loader + merge logic
│ ├── imports.ts # Config imports/expand logic
│ └── paths.ts # Config path resolution
├── cache/
│ ├── metadata-cache.ts # Metadata cache (hash-based invalidation)
│ └── tool-metadata.ts # Tool metadata builder + search
├── auth/
│ ├── auth-store.ts # Token storage (secure file permissions)
│ ├── oauth-provider.ts # OAuth client provider
│ ├── oauth-flow.ts # OAuth flow (start, complete, authenticate)
│ └── callback-server.ts # OAuth callback HTTP server
├── mcp/
│ ├── server-manager.ts # MCP server connection manager
│ ├── transport.ts # Transport creation (stdio/HTTP/SSE/StreamableHTTP)
│ └── npx-resolver.ts # npx package resolution (skip npm parent)
├── lifecycle/
│ ├── lifecycle.ts # Lifecycle manager (lazy/eager/keep-alive)
│ └── lazy-connect.ts # Lazy connect with 60s failure backoff
├── guard/
│ └── output-guard.ts # Output truncation (50KiB / 2000 lines)
├── tools/
│ ├── proxy.ts # Proxy tool definition + dispatch
│ ├── proxy-actions.ts # Proxy action handlers (search/describe/call/etc.)
│ ├── direct-tools.ts # Direct tool resolution + executor
│ └── tool-registrar.ts # MCP content transformation
├── handlers/
│ ├── list-tools.ts # ListToolsRequest handler
│ └── call-tool.ts # CallToolRequest handler
└── utils/
├── abort.ts # AbortSignal utilities
├── logger.ts # stderr-only logger
├── env.ts # Environment variable interpolation
└── utils.ts # General utilities (parallelLimit, etc.)License
MIT
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Single-connection MCP gateway discovering and executing 490+ verified MCP & A2A tools.
Toolstile is a managed MCP gateway that connects remote MCP servers behind one endpoint, with per-agent permissions, shared accounts and activity logs. Connect at https://mcp.toolstile.com/mcp over Streamable HTTP with OAuth; sign in at https://toolstile.com, select a workspace and connect your upstream servers. Available tools, resources and prompts depend on that workspace and the agent's granted access.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
MCP federation gateway: route, govern and observe agent tools across clouds and MCP servers.
Related MCP Servers
- AlicenseBqualityBmaintenanceA flexible proxy server that aggregates multiple backend MCP servers into a single interface using STDIO or SSE transports. It supports dynamic server management via an HTTP API and utilizes namespacing to prevent tool conflicts across connected services.31MIT

mcp-server-metatoolofficial
AlicenseNot gradedqualityDmaintenanceA proxy MCP server that aggregates tools from multiple MCP servers and forwards calls to the appropriate server, used with the Metatool App for GUI tool management.5Apache 2.0- AlicenseNot gradedqualityDmaintenanceA flexible MCP proxy server that connects to and routes between multiple backend MCP servers over STDIO or SSE, enabling dynamic management and namespacing of tools.111MIT
- FlicenseAqualityDmaintenanceUniversal MCP proxy server that discovers, searches, and executes tools across all configured MCP servers from a single entry point.7-