Skip to main content
Glama

Meta-MCP Server

Meta-MCP

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

The Meta-MCP extension provides a visual interface for configuration:

  1. Install the extension from extension/meta-mcp-configurator-0.1.2.vsix

  2. Open the Meta-MCP panel - click the Meta-MCP icon in the activity bar (left sidebar)

  3. 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"
      }
    }
  }
}
  1. Restart your AI tool to load the new configuration

  2. 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 timeout field sets per-server timeout in milliseconds. This overrides MCP_DEFAULT_TIMEOUT.

Internal MCP Servers

For internal/corporate MCP servers (like corp-jira), the extension handles setup automatically:

  1. Click Add on an Internal server in the Catalog

  2. 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
  3. 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:

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

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/blueman82/meta-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server