动态MCP服务器代理

MCP Proxy是一个支持动态加载和管理MCP服务器的工具,无需重启即可热重载服务器,适用于开发工作流和程序化编排。

  • by lizTheDeveloper
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 lizTheDeveloper/mcp_proxy

使用说明

MCP代理-动态MCP服务器加载

热重新加载MCP服务器,而无需重新启动Claude Code。

一键安装

光标

VS Code

克劳德代码

# Clone the repo first
git clone https://github.com/lizTheDeveloper/mcp_proxy.git
cd mcp_proxy
pip install -r requirements.txt

# Then add to Claude Code (run from parent directory of mcp_proxy)
claude mcp add mcp-proxy -- python -m mcp_proxy.servers.proxy_server
Manual Installation

步骤1:克隆存储库

git clone https://github.com/lizTheDeveloper/mcp_proxy.git
pip install -r mcp_proxy/requirements.txt

步骤2:添加到MCP配置

克劳德代码 (~/.claude.json 或项目 .mcp.json):

{
  "mcpServers": {
    "mcp-proxy": {
      "command": "python",
      "args": ["-m", "mcp_proxy.servers.proxy_server"],
      "cwd": "/path/to/mcp_proxy",
      "env": {
        "PYTHONPATH": "/path/to/parent/of/mcp_proxy"
      }
    }
  }
}

光标 (~/.cursor/mcp.json):

{
  "mcpServers": {
    "mcp-proxy": {
      "command": "python",
      "args": ["-m", "mcp_proxy.servers.proxy_server"],
      "cwd": "/path/to/mcp_proxy",
      "env": {
        "PYTHONPATH": "/path/to/parent/of/mcp_proxy"
      }
    }
  }
}

备注:替换 /path/to/parent/of/mcp_proxy 与实际的父目录。例如,如果您克隆到 /Users/me/src/mcp_proxy,使用 /Users/me/src.

特性

  • 热重新加载:无需重新启动即可加载和重新加载MCP服务器
  • 动态安装:从git存储库安装服务器
  • 程序化编排:在循环和工作流中动态调用工具
  • 上下文节省:仅加载所需的工具

快速开始

1.安装

git clone https://github.com/lizTheDeveloper/mcp_proxy.git
cd mcp_proxy
pip install -r requirements.txt

2.配置

添加到您的项目 .mcp.json:

{
  "mcpServers": {
    "mcp-proxy": {
      "command": "python",
      "args": ["-m", "mcp_proxy.servers.proxy_server"],
      "cwd": "/path/to/mcp_proxy",
      "env": {
        "PYTHONPATH": "/path/to/parent/of/mcp_proxy"
      }
    }
  }
}

重要: PYTHONPATH 应该指向 父目录 你克隆的地方 mcp_proxy,而不是mcp_proxy目录本身。例如,如果您克隆到 /Users/me/src/mcp_proxy,set PYTHONPATH 到 /Users/me/src.

3.使用

重新启动Claude Code一次以加载代理后,您可以:

# Load any MCP server dynamically (no restart!)
load_mcp_server_dynamically("my-server")

# Call tools on loaded servers
call_dynamic_server_tool("my-server", "tool_name", {"param": "value"})

# Install and load from git in one step
install_and_load_mcp_server("https://github.com/user/mcp-server")

可用工具(共13个)

工具 说明
动态加载
load_mcp_server_dynamically 从.mcp.json加载服务器
call_dynamic_server_tool 调用已加载服务器上的任何工具
get_loaded_servers 列出当前加载的服务器
reload_mcp_server 重新加载服务器以获取更改
unload_mcp_server 停止并卸载服务器
list_available_servers 列出所有已配置的服务器
安装
install_mcp_server_from_git 从git仓库安装
install_and_load_mcp_server 一步完成安装和装载
list_installed_mcp_servers 列出所有已安装的服务器
uninstall_mcp_server 删除服务器
工具搜索
search_tools 跨加载服务器的自然语言搜索
list_all_tools 列出所有已加载服务器中的所有工具
get_tool_info 获取特定工具的详细信息

运作原理

Claude Code
    |
    v
MCP Proxy Server (meta-tools)
    |
    v
Dynamic Server Loader (subprocess manager)
    |
    v
Individual MCP Servers (spawned on-demand)

代理将MCP服务器作为子进程生成,并通过stdin/stdout使用MCP JSON-RPC协议与它们通信。

使用模式

开发过程中的热重载

# Load your server
load_mcp_server_dynamically("my-dev-server")

# Test it
call_dynamic_server_tool("my-dev-server", "my_feature", {})

# Make code changes...

# Reload with new code
reload_mcp_server("my-dev-server")

# Test again - no restart needed!
call_dynamic_server_tool("my-dev-server", "my_feature", {})

程序化工作流程

# Load the server
load_mcp_server_dynamically("user-management")

# Programmatic workflow
users = call_dynamic_server_tool("user-management", "list_users", {"limit": 100})

for user in users["data"]:
    if user["needs_activation"]:
        call_dynamic_server_tool("user-management", "activate_user", {
            "user_id": user["id"]
        })

多服务器编排

# Load multiple servers
for server in ["database", "stripe", "email"]:
    load_mcp_server_dynamically(server)

# Orchestrate across servers
customer = call_dynamic_server_tool("database", "get_customer", {"id": 123})
payment = call_dynamic_server_tool("stripe", "charge", {"amount": 2999})
call_dynamic_server_tool("email", "send_receipt", {"to": customer["email"]})

创建自定义服务器

创建FastMCP服务器并将其添加到 .mcp.json:

# my_server.py
from fastmcp import FastMCP

mcp = FastMCP("my-server")

@mcp.tool()
def my_tool(param: str) -> dict:
    """Tool description"""
    return {"success": True, "result": param}

if __name__ == "__main__":
    mcp.run()
{
  "mcpServers": {
    "my-server": {
      "command": "python",
      "args": ["my_server.py"],
      "cwd": "/path/to/server"
    }
  }
}

然后动态加载:

load_mcp_server_dynamically("my-server")
call_dynamic_server_tool("my-server", "my_tool", {"param": "hello"})

许可证

麻省理工学院