> ## Documentation Index
> Fetch the complete documentation index at: https://blog.pig4cloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 你的 MCP 调用正在成为系统的"后门"，这个解决方案刻不容缓！

在人工智能快速发展的今天，大型语言模型 (LLM) 已成为提升工作效率的重要工具。随着 MCP（Model Context Protocol）的出现，我们有了一种标准化的方式来与 AI 模型交互。然而，当需要同时使用多个 MCP 资源服务器时，管理和使用这些服务不仅变得复杂，安全问题也越发严重。[MCP Proxy](https://github.com/TBXark/mcp-proxy)正是为解决这一问题而生，它可以聚合多个 MCP 资源服务器，并通过单一 HTTP 服务器提供服务，同时加强安全管控。

## MCP 协议简介

在了解 MCP Proxy 之前，我们先简要了解一下 MCP 协议。MCP（Model Completion Protocol）是一种为大型语言模型设计的开放协议，旨在标准化 AI 模型的访问方式。它允许开发者以统一的方式与不同的 AI 模型交互，无论这些模型来自哪个提供商，从而简化了应用开发过程。

MCP 协议的核心是提供一套标准化的 API，使开发者能够发送请求到支持 MCP 的服务器，并接收模型生成的回应。这种标准化对于构建复杂的 AI 应用系统尤为重要。

### MCP 兼容性说明

在使用 MCP 时，需要注意系统环境对相关包管理工具的依赖：

1. **NPX 依赖**：当配置使用`npx`命令作为 MCP 客户端时（如`fetch-mcp`），系统需要安装 Node.js 环境并确保 NPM 可用。这是因为 MCP Proxy 会调用系统的 npx 命令来执行相关 MCP 插件。

2. **UVX 依赖**：如果配置使用了`uvx`作为包管理工具，需要在系统中预先安装[uv](https://github.com/astral-sh/uv)工具。uv 是一个更快的 Python 包管理器和解释器，在使用 Python 实现的 MCP 插件时可以提供更好的性能。

3. **客户端环境要求**：
   * 对于基于 Node.js 的 MCP 插件：确保安装了 Node.js 环境（建议 v16+）
   * 对于基于 Python 的 MCP 插件：需要安装 Python 环境（建议 3.8+）
   * 对于提供 Docker 镜像的 MCP 插件：客户端需要安装 Docker 环境
   * 对于其他语言实现的 MCP 客户端：需要安装相应的运行环境

## MCP 安全性问题

虽然 MCP 协议为 AI 模型交互提供了标准化方式，但它也带来了一些安全性挑战，MCP 客户端可能存在以下安全风险：

1. **代码执行风险**：MCP 客户端通常需要执行外部命令，这可能导致任意代码执行的风险。例如，使用`npx`或 `uv` 其他命令行工具时，如果没有适当的沙箱限制，可能会执行恶意代码。

2. **权限提升**：没有适当限制的 MCP 客户端可能访问系统敏感资源，如文件系统、网络接口或环境变量。

3. **资源耗尽**：恶意或错误配置的 MCP 客户端可能消耗过多系统资源，导致服务降级或拒绝服务。

4. **数据泄露**：如果 MCP 客户端处理敏感数据但缺乏适当的隔离措施，可能导致数据泄露。

## MCP Proxy 的主要特性

<img src="https://minio.pigx.vip/oss/202504/1745513399.png" alt="1745513399" />

MCP Proxy 是一个强大的代理服务器，具有以下核心特性：

* **代理多个 MCP 客户端**：连接到多个 MCP 资源服务器，并聚合它们的工具和功能
* **SSE 支持**：提供 SSE（Server-Sent Events）服务器，实现实时更新
* **灵活配置**：支持多种客户端类型（`stdio`、`sse`或`streamable-http`），并可自定义设置

## 安全性考量

在使用 MCP Proxy 时，安全性是一个重要考量因素。该工具提供了多层安全保障：

1. **身份验证**：通过`authTokens`配置项，可以设置身份验证令牌，确保只有授权用户才能访问服务
2. **服务隔离**：对每个 MCP 服务器可以单独配置安全选项，实现精细化的权限控制
3. **日志记录**：通过启用`logEnabled`选项，可以记录客户端请求，便于安全审计和问题排查

## 兼容性与集成

MCP Proxy 的一大优势是其出色的兼容性，支持多种类型的 MCP 客户端：

* **命令行工具（stdio）**：可通过子进程运行的命令行工具，如使用`npx -y fetch-mcp`等
* **SSE 服务器**：支持 Server-Sent Events 的服务器
* **HTTP 流式服务器**：支持 HTTP 流式传输的服务器

这种灵活性使得 MCP Proxy 能够与各种现有系统无缝集成，无论是自定义开发的 MCP 服务器还是第三方提供的服务。

## 快速部署

```bash theme={null}
docker run -d -p 9090:9090 -v /Users/lengleng/Downloads/mcp-proxy/config.json:/config/config.json ghcr.io/tbxark/mcp-proxy:latest
```

Docker 镜像默认支持两种 MCP 调用方法：`npx`和`uvx`，使得部署过程更加简单。

## 配置详解

MCP Proxy 通过 JSON 文件进行配置，包含两个主要部分：

1. **mcpProxy**：代理 HTTP 服务器配置
   * `baseURL`：服务器的公共可访问 URL
   * `addr`：服务器监听的地址
   * `name`和`version`：服务器的名称和版本
   * `options`：默认选项配置

2. **mcpServers**：MCP 服务器配置
   * 可配置多种类型的 MCP 客户端，如 stdio、sse 或 streamable-http
   * 每个客户端可以有独立的安全配置

以下是一个配置示例，以百度地图 MCP 为例

```json theme={null}
{
  "mcpProxy": {
    "baseURL": "http://localhost:9090",
    "addr": ":9090",
    "name": "MCP Proxy",
    "version": "1.0.0",
    "options": {
      "panicIfInvalid": false,
      "logEnabled": false
    }
  },
  "mcpServers": {
    "map": {
      "command": "npx",
      "args": [
          "-y",
          "@baidumap/mcp-server-baidu-map"
      ],
      "env": {
          "BAIDU_MAP_API_KEY": "XXX"
      },
      "options": {
        "panicIfInvalid": true,
        "logEnabled": true
      }
    }
  }
}
```

支持 MCP 的客户端配置 SSE 模式，直接对接 mcp proxy 的代理端点，实现 mcp 的安全性调用

<img src="https://minio.pigx.vip/oss/202504/1745516190.png" alt="1745516190" />

### 进阶配置

1. 服务器将启动并聚合所有已配置的 MCP 客户端的工具和功能
2. 可以通过 `http(s)://{baseURL}/{clientName}/sse` 访问服务器（例如，根据示例配置，访问 `https://my-mcp.example.com/map/sse`）
3. 如果 MCP 客户端不支持自定义请求头，以将 `clients` 中的键（如 `map`）更改为 `map/{apiKey}`，然后通过 `map/{apiKey}` 进行访问

## 总结

MCP Proxy 通过聚合多个 MCP 资源服务器，简化了与多个 AI 模型的交互过程。它不仅提供了灵活的配置选项，还确保了安全性和兼容性，是构建复杂 AI 应用的理想工具。无论是个人开发者还是企业用户，都可以通过 MCP Proxy 更高效地利用多种 AI 模型的能力。
