Meta-MCP Server
A Model Context Protocol server that wraps multiple backend servers for token-efficient tool discovery via lazy loading. It enables AI models to browse available servers and fetch specific tool schemas on-demand, significantly reducing initial context overhead.
README
Meta-MCP Server

A Model Context Protocol (MCP) server that wraps multiple backend MCP servers for token-efficient tool discovery via lazy loading.
Monorepo Structure
This project is organized as a monorepo with the following packages:
packages/
├── core/ # @justanothermldude/meta-mcp-core - Shared utilities, types, pool, and registry
├── meta-mcp/ # @justanothermldude/meta-mcp-server - Main MCP server with 3 meta-tools
└── mcp-exec/ # @justanothermldude/mcp-exec - Sandboxed code execution with typed wrappers
| Package | Description | Install |
|---|---|---|
@justanothermldude/meta-mcp-core |
Core utilities: types, connection pool, registry, tool cache | npm i @justanothermldude/meta-mcp-core |
@justanothermldude/meta-mcp-server |
MCP server exposing 3 meta-tools for token optimization | npm i -g @justanothermldude/meta-mcp-server |
@justanothermldude/mcp-exec |
Sandboxed code execution with MCP tool access via typed wrappers | npm i -g @justanothermldude/mcp-exec |
Problem
When Claude/Droid connects to many MCP servers, it loads all tool schemas upfront - potentially 100+ tools consuming significant context tokens before any work begins.
Solution
Meta-MCP exposes only 3 tools to the AI:
| Tool | Purpose |
|---|---|
list_servers |
List available backend servers (lightweight, no schemas) |
get_server_tools |
Fetch tools from a server. Supports summary_only for names/descriptions, tools for specific schemas |
call_tool |
Execute a tool on a backend server |
Backend servers are spawned lazily on first access and managed via a connection pool.
Features
- Lazy Loading: Servers spawn only when first accessed
- Two-Tier Tool Discovery: Fetch summaries first (~100 tokens), then specific schemas on-demand
- Connection Pool: LRU eviction (max 20 connections) with idle cleanup (5 min)
- Multi-Transport: Supports Node, Docker, and uvx/npx spawn types
- Tool Caching: Tool definitions cached per-server for session duration
- VS Code Extension: Visual UI for managing servers and configuring AI tools
- Sandboxed Execution: Execute code in isolated environments with MCP tool access
Quick Start
Option 1: VS Code/Cursor Extension (Recommended)
The Meta-MCP extension provides a visual interface for configuration:
- Install the extension from
extension/meta-mcp-configurator-0.1.2.vsix - Open the Meta-MCP panel - click the Meta-MCP icon in the activity bar (left sidebar)
- Go to the Setup tab and complete the setup wizard:
Step 1: Install meta-mcp-server
- Click Install via npm (opens terminal with
npm install -g @justanothermldude/meta-mcp-server) - Or run manually:
npm install -g @justanothermldude/meta-mcp-server
Step 1b: Install mcp-exec (Optional)
- Click Install next to mcp-exec for sandboxed code execution with MCP tool access
- Or run manually:
npm install -g @justanothermldude/mcp-exec
mcp-exec enables AI to execute TypeScript/JavaScript code with typed wrappers for your MCP servers.
Step 2: Configure Your AI Tools
The extension auto-detects installed AI tools and shows their status:
| Tool | Config Location | Detection |
|---|---|---|
| Claude | ~/.claude.json |
~/.claude.json exists |
| Cursor | ~/.cursor/mcp.json |
~/.cursor/ exists |
| Droid (Factory) | ~/.factory/mcp.json |
~/.factory/ exists |
| VS Code | ~/.vscode/mcp.json |
~/.vscode/ exists |
For each detected tool, use these buttons:
| Button | Action |
|---|---|
| Configure | Auto-configures the tool: adds meta-mcp and mcp-exec (if installed globally), migrates existing servers to servers.json, creates backup first |
| Copy Snippet | Copies JSON config to clipboard for manual setup |
The Configure button intelligently:
- Detects which packages are installed (
npm list -g) - Adds only installed packages to the tool config
- Migrates any existing MCP servers to
~/.meta-mcp/servers.json - Shows migration count in success message
Other Platforms (Windsurf, Augment, etc.)
For tools not auto-detected, copy and adapt this snippet:
{
"mcpServers": {
"meta-mcp": {
"command": "npx",
"args": ["-y", "@justanothermldude/meta-mcp-server"],
"env": {
"SERVERS_CONFIG": "~/.meta-mcp/servers.json"
}
},
"mcp-exec": {
"command": "npx",
"args": ["-y", "@justanothermldude/mcp-exec"],
"env": {
"SERVERS_CONFIG": "~/.meta-mcp/servers.json"
}
}
}
}
- Restart your AI tool to load the new configuration
- Add servers from the Catalog tab or Servers tab manually
Option 2: npm Package
npm install -g @justanothermldude/meta-mcp-server
Then add to your AI tool config (see Configuration below).
Option 3: Build from Source
cd projects/meta-mcp-server
npm install
npm run build
Configuration
servers.json
All MCP servers are configured in ~/.meta-mcp/servers.json:
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "your-token"
}
},
"filesystem": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-server-filesystem", "/path/to/allowed/dir"]
},
"corp-jira": {
"command": "node",
"args": ["/path/to/adobe-mcp-servers/servers/corp-jira/dist/index.js"],
"env": {
"JIRA_URL": "https://jira.example.com",
"JIRA_TOKEN": "your-token"
},
"timeout": 120000
}
}
}
Note: The optional
timeoutfield sets per-server timeout in milliseconds. This overridesMCP_DEFAULT_TIMEOUT.
Internal MCP Servers
For internal/corporate MCP servers (like corp-jira), the extension handles setup automatically:
- Click Add on an Internal server in the Catalog
- If not found locally, choose Clone Repository - the extension opens a terminal and runs:
git clone https://github.com/Adobe-AIFoundations/adobe-mcp-servers.git cd adobe-mcp-servers && npm install && npm run build - Once built, click Add again - the server will be auto-detected via Spotlight (macOS)
Manual setup (if needed):
{
"mcpServers": {
"corp-jira": {
"command": "node",
"args": ["/path/to/adobe-mcp-servers/servers/corp-jira/dist/index.js"],
"env": {
"JIRA_URL": "https://jira.example.com",
"JIRA_TOKEN": "your-token"
}
}
}
}
AI Tool Configuration
Add meta-mcp to your AI tool's config file:
Claude (~/.claude.json):
{
"mcpServers": {
"meta-mcp": {
"command": "npx",
"args": ["-y", "@justanothermldude/meta-mcp-server"],
"env": {
"SERVERS_CONFIG": "/Users/yourname/.meta-mcp/servers.json"
}
}
}
}
Droid (~/.factory/mcp.json):
{
"mcpServers": {
"meta-mcp": {
"command": "npx",
"args": ["-y", "@justanothermldude/meta-mcp-server"],
"env": {
"SERVERS_CONFIG": "/Users/yourname/.meta-mcp/servers.json"
}
}
}
}
Using local build (instead of npx):
{
"mcpServers": {
"meta-mcp": {
"command": "node",
"args": ["/path/to/meta-mcp-server/dist/index.js"],
"env": {
"SERVERS_CONFIG": "/Users/yourname/.meta-mcp/servers.json"
}
}
}
}
Restart your AI tool
Restart Claude or Droid to load the new configuration.
Usage
Once configured, the AI will see only 3 tools instead of all backend tools:
# AI discovers available servers
list_servers()
→ [{name: "corp-jira", description: "JIRA integration"}, ...]
# AI fetches tool summaries (lightweight, ~100 tokens for 25 tools)
get_server_tools({server_name: "corp-jira", summary_only: true})
→ [{name: "search_issues", description: "Search JIRA issues"}, ...]
# AI fetches specific tool schemas (on-demand)
get_server_tools({server_name: "corp-jira", tools: ["search_issues", "create_issue"]})
→ [{name: "search_issues", inputSchema: {...}}, ...]
# AI fetches all tools (backward compatible, ~16k tokens for 25 tools)
get_server_tools({server_name: "corp-jira"})
→ [{name: "search_issues", inputSchema: {...}}, ...]
# AI calls a tool
call_tool({server_name: "corp-jira", tool_name: "search_issues", arguments: {jql: "..."}})
→ {content: [...]}
Two-Tier Lazy Loading
See Token Economics for detailed analysis of 87-91% token savings across different workflow patterns.
Development
Monorepo Commands
# Install all dependencies
npm install
# Build all packages
npm run build --workspaces
# Build specific package
npm run build -w @justanothermldude/meta-mcp-core
# Run all tests
npm test --workspaces
# Run tests for specific package
npm test -w @justanothermldude/mcp-exec
# Type check all packages
npx tsc --noEmit --workspaces
# Clean all build artifacts
npm run clean --workspaces
Package-Specific Development
# Core package
cd packages/core
npm run build
npm run dev # watch mode
# Meta-MCP server
cd packages/meta-mcp
npm run build
npm test
# MCP-Exec package
cd packages/mcp-exec
npm run build
npm test
npm run test:integration # Full integration tests
Testing
# Run all tests
npm test --workspaces
# Run with vitest (full suite)
npx vitest run
# Run real MCP integration tests
RUN_REAL_MCP_TESTS=true npm test -w @meta-mcp/exec
Architecture
For detailed architecture documentation with diagrams, see:
- Architecture Guide - Complete narrative guide with all concepts explained
- Diagram Index - Visual diagrams organized by topic
- Core Mechanics - Pool, connections, caching, tool system
- Token Economics - 87-91% savings, ROI analysis
Monorepo Package Structure
packages/
├── core/ # @justanothermldude/meta-mcp-core - Shared utilities
│ └── src/
│ ├── types/ # TypeScript interfaces (connection, server-config, tool-definition)
│ ├── registry/ # Server manifest loading (loader.ts, manifest.ts)
│ ├── pool/ # Connection pool with LRU eviction
│ │ ├── server-pool.ts
│ │ ├── connection.ts
│ │ └── stdio-transport.ts
│ └── tools/ # Tool caching utilities (tool-cache.ts)
│
├── meta-mcp/ # @justanothermldude/meta-mcp-server - Main MCP server
│ └── src/
│ ├── index.ts # Entry point with stdio transport
│ ├── server.ts # MCP server setup
│ ├── transport.ts # Transport layer abstraction
│ ├── http-server.ts # HTTP/Streamable transport support
│ └── tools/ # Meta-tool implementations
│ ├── list-servers.ts
│ ├── get-server-tools.ts
│ └── call-tool.ts
│
└── mcp-exec/ # @justanothermldude/mcp-exec - Code execution
└── src/
├── index.ts # Entry point and public API
├── server.ts # MCP server for execute_code tools
├── sandbox/ # Sandbox executor with OS-level isolation
├── bridge/ # HTTP bridge for MCP access
├── codegen/ # Typed wrapper generator
├── types/ # TypeScript interfaces
└── tools/ # Tool implementations
├── list-servers.ts
├── get-tool-schema.ts
└── execute-with-wrappers.ts
Configuration Options
| Environment Variable | Default | Description |
|---|---|---|
SERVERS_CONFIG |
~/.meta-mcp/servers.json |
Path to backends configuration |
MAX_CONNECTIONS |
20 |
Maximum concurrent server connections |
IDLE_TIMEOUT_MS |
300000 |
Idle connection cleanup timeout (5 min) |
MCP_DEFAULT_TIMEOUT |
none | Global timeout for MCP tool calls (ms). Per-server timeout takes precedence. |
Test Results
- 341 tests passing (unit + integration across all packages)
- 48 integration tests skipped by default (require
RUN_REAL_MCP_TESTS=true) - Tested with Node, Docker, and uvx/npx spawn types
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.