mcpField
P
plugged.in MCP Proxy Server

plugged.in MCP Proxy Server

本地服务
github.com/VeriTeknikAI 与智能体13829 周前更新

关于 plugged.in MCP Proxy Server

plugged.in MCP Proxy Server 是一个 MCP 中间件,将多个 MCP 服务聚合为单一接口,并从 plugged.in App 获取工具、提示词和资源配置。它面向需要统一管理多个 MCP 服务的用户,并提供知识库检索与持久记忆等功能。

主要功能

  1. 01聚合多个下游 MCP 服务的工具、提示词和资源
  2. 02支持 STDIO 与 Streamable HTTP 两种传输模式
  3. 03内置知识库检索(RAG v2)与文档创建
  4. 04提供剪贴板式持久记忆工具
  5. 05工具发现结果缓存,可按需刷新

适用场景

  1. 01通过单一连接在 Claude Desktop、Cursor 等客户端中使用多个 MCP 服务
  2. 02为 AI 模型检索并引用已上传或生成的文档
  3. 03在多次会话之间保存和读取上下文数据

MCP 相关

该项目是 MCP 代理服务,作为客户端的统一入口,连接并管理下游 MCP 服务,并向 MCP 客户端暴露聚合后的工具、提示词和资源。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"pluggedin-mcp-proxy": {
"command": "npx",
"args": [
"-y",
"@pluggedin/pluggedin-mcp-proxy"
]
}
}
}
启动命令npx -y @pluggedin/pluggedin-mcp-proxy

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@pluggedin/pluggedin-mcp-proxy

工具

23

收录的工具列表 · 更新于 3 周前

参数类型必填说明
topicenum否要了解的具体设置主题。选项:getting_started(默认)、api_key、configuration、troubleshootinggetting_started | api_key | configuration | troubleshooting

详细介绍

plugged.in MCP 中枢 — 代理 · 知识 · 记忆 · 工具

plugged.in 标志
AI 数据交换的交汇点

统一的 MCP 中枢,为 AI 提供知识、记忆和工具——而不只是代理。通过单个连接管理和测试所有 MCP 服务,同时为各个客户端提供文档感知型和记忆增强型工作流。

smithery badge Version GitHub Stars License TypeScript MCP MCP Badge

📋 概述

plugged.in MCP 代理服务是一个强大的中间件,可将多个模型上下文协议(MCP)服务聚合到统一接口中。它从 plugged.in App 获取工具、提示词和资源配置,并将请求智能路由至相应的底层 MCP 服务。

此代理可与任何 MCP 客户端(Claude、Cline、Cursor 等)无缝集成,同时通过 plugged.in 生态系统提供高级管理功能。

中枢支柱:知识 · 记忆 · 工具 · 代理

知识(RAG v2 / AI 文档交换)
通过统一且可追溯来源的文档检索,搜索内容并为模型输出提供依据。MCP 服务可在你的资料库中创建和管理文档,并支持版本控制、可见性控制和模型来源归属。使用内置 RAG 搜索所有已连接来源,并返回相关片段和元数据。

记忆(持久化 AI 记忆)
长期记忆,按工作区/配置文件划分,并可跨会话保留。中枢集成了 plugged.in App 的持久化记忆,因此 Agent 的操作和洞察可以跨任务存储和调用。内置记忆工具已列入路线图,将在相同的身份验证模型下提供便捷的 get/put/search 模式。

工具
将内置功能与下游 MCP 服务(STDIO、SSE、Streamable HTTP)聚合。工具发现结果会缓存,也可以按需刷新;中枢级发现会为任何 MCP 客户端返回统一目录。中枢支持工具、资源、资源模板和提示词。

代理
一个连接即可服务所有客户端。可作为 STDIO(默认)运行,也可使用 Streamable HTTP,并可选启用 API 身份验证和无状态模式。兼容 Claude Desktop、Cline、Cursor、MCP Inspector 等;保留现有客户端配置,同时集中管理策略和遥测数据。

⭐ 如果你觉得这个项目有用,请考虑在 GitHub 上为它点个星! 这有助于让更多开发者了解我们,并激励我们持续改进。

✨ 主要功能

🚀 核心能力
  • 内置 AI 试用场:无需配置客户端,即可使用 Claude、Gemini、OpenAI 和 xAI 即时测试 MCP
  • 通用 MCP 兼容性:支持任何 MCP 客户端,包括 Claude Desktop、Cline 和 Cursor
  • 多服务支持:连接 STDIO、SSE 和 Streamable HTTP MCP 服务
  • 双传输模式:以 STDIO(默认)或 Streamable HTTP 服务模式运行代理
  • 统一文档搜索:借助内置 RAG 能力,搜索所有已连接的服务
  • AI 文档交换(RAG v2):MCP 服务可在你的文档库中创建和管理文档,并完整记录归属信息
  • 接收任意模型的通知:实时接收通知,并可选择通过电子邮件送达
  • 多工作区层:一键切换不同的 MCP 配置集
  • API 驱动的代理:从 plugged.in App API 获取功能,而非直接发现
  • 完整 MCP 支持:支持工具、资源、资源模板和提示词
  • 自定义指令:支持以 MCP 提示词格式编写的特定服务指令
🎯 v1.5.0 新增功能(RAG v2 - AI 文档交换)
  • AI 文档创建:MCP 服务现在可以直接在你的文档库中创建文档
    • 完整记录模型归属信息(哪个 AI 创建或更新了文档)
    • 提供变更追踪的版本历史
    • 通过 SHA-256 哈希进行内容去重
    • 支持多种格式:MD、TXT、JSON、HTML、PDF 等
  • 高级文档搜索:增强 RAG 查询,支持 AI 筛选
    • 按 AI 模型、提供方、日期范围、标签和来源类型筛选
    • 支持相关性评分的语义搜索
    • 自动生成片段并突出显示关键词
    • 支持筛选 ai_generated、upload 或 api 来源
  • 通过 MCP 管理文档:
    • 设置文档可见性:私有、工作区或公开
    • 为文档版本建立父子关系
    • 支持基于配置文件的组织方式,并与基于项目的范围设定并行使用
    • 实时追踪文档处理进度
🎯 v1.4.0 新增功能(Registry v2 支持)
  • OAuth 令牌管理:无缝处理 Streamable HTTP MCP 服务的 OAuth 身份验证
    • 自动从 plugged.in App 获取令牌
    • 安全存储和刷新令牌
    • 无需客户端进行身份验证
  • 增强的通知系统:支持双向通知
    • 向 plugged.in App 发送通知
    • 接收来自 MCP 服务的通知
    • 将通知标记为已读或未读
    • 以编程方式删除通知
  • 趋势分析:实时活动追踪
    • 记录并追踪每次工具调用
    • 为热门服务计算提供数据
    • 提供使用指标和热度分析
  • Registry 集成:全面支持 Registry v2 功能
    • 从 Registry 自动发现服务
    • 追踪安装情况和指标
    • 支持社区服务
📦 v1.1.0 新增功能
  • Streamable HTTP 支持:全面支持使用 Streamable HTTP 传输的下游 MCP 服务
  • HTTP 服务模式:以 HTTP 服务模式运行代理,并可配置端口
  • 灵活的身份验证:可选的 HTTP 端点 Bearer 令牌身份验证
  • 会话管理:可选择有状态(基于会话)或无状态的运行模式
🎯 v1.0.0 核心功能
  • 实时通知:全面支持通知,追踪所有 MCP 活动
  • RAG 集成:支持通过 plugged.in App 进行文档增强查询
  • 检查器脚本:用于调试和开发的自动化测试工具
  • 运行状况监控:内置 ping 端点,用于连接监控

🔧 工具类别

该代理提供两种不同类别的工具:

🔧 静态内置工具(始终可用)

这些工具内置于代理中,无需配置任何服务即可使用:

  • pluggedin_discover_tools - 通过缓存进行智能发现,快速返回结果
  • pluggedin_ask_knowledge_base - 跨文档进行 RAG 搜索,并支持 AI 筛选
  • pluggedin_send_notification - 发送通知,可选择通过电子邮件投递
  • pluggedin_create_document - 在资料库中创建 AI 生成的文档
  • pluggedin_list_documents - 列出文档并提供筛选选项
  • pluggedin_search_documents - 按查询搜索特定文档
  • pluggedin_get_document - 按 ID 获取特定文档的完整内容
  • pluggedin_update_document - 更新现有文档或在其后追加内容
📋 剪贴板工具(记忆系统)
  • pluggedin_clipboard_set - 按名称(语义键)或索引设置剪贴板条目
  • pluggedin_clipboard_get - 按名称或索引获取剪贴板条目,也可列出所有条目
  • pluggedin_clipboard_delete - 按名称或索引删除剪贴板条目,也可清空所有条目
  • pluggedin_clipboard_list - 列出所有剪贴板条目及其元数据
  • pluggedin_clipboard_push - 推入一个值并自动递增索引(栈推入)
  • pluggedin_clipboard_pop - 弹出索引最高的条目(后进先出行为)
⚡ 动态 MCP 工具(来自已连接的服务)

这些工具来自您配置的 MCP 服务,可以启用或关闭:

  • 数据库工具(PostgreSQL、SQLite 等)
  • 文件系统工具
  • API 集成工具
  • 来自任何 MCP 服务的自定义工具

发现工具会智能显示这两类工具,让 AI 模型立即使用所有可用功能。

🚀 发现工具用法
# Quick discovery - returns cached data instantly
pluggedin_discover_tools()

# Force refresh - shows current tools + runs background discovery  
pluggedin_discover_tools({"force_refresh": true})

# Discover specific server
pluggedin_discover_tools({"server_uuid": "uuid-here"})

示例响应:

## 🔧 Static Built-in Tools (Always Available):
1. **pluggedin_discover_tools** - Smart discovery with caching
2. **pluggedin_rag_query** - RAG v2 search across documents with AI filtering  
3. **pluggedin_send_notification** - Send notifications
4. **pluggedin_create_document** - (Coming Soon) Create AI-generated documents

## ⚡ Dynamic MCP Tools (8) - From Connected Servers:
1. **query** - Run read-only SQL queries
2. **generate_random_integer** - Generate secure random integers
...
📋 剪贴板用法示例

剪贴板系统为 AI 工作流提供持久记忆:

# Store a named entry (upserts if exists)
pluggedin_clipboard_set({
  "name": "customer_context",
  "value": "{\"name\": \"John Doe\", \"account_id\": \"12345\"}",
  "contentType": "application/json"
})

# Store an indexed entry for ordered pipelines
pluggedin_clipboard_set({
  "idx": 0,
  "value": "First pipeline step result",
  "createdByTool": "data_processor"
})

# Push to stack (auto-incrementing index)
pluggedin_clipboard_push({
  "value": "Analysis result from step 1",
  "contentType": "text/plain"
})

# Get a specific entry by name
pluggedin_clipboard_get({"name": "customer_context"})

# Pop from stack (LIFO - returns and removes highest index)
pluggedin_clipboard_pop()

# List all entries with metadata
pluggedin_clipboard_list({"limit": 20})

# Delete specific entry
pluggedin_clipboard_delete({"name": "customer_context"})

# Clear all clipboard entries
pluggedin_clipboard_delete({"clearAll": true})
📚 RAG v2 用法示例

增强版 RAG v2 系统允许 MCP 服务创建和搜索文档,并提供完整的 AI 归属信息:

# Search for documents created by specific AI models
pluggedin_rag_query({
  "query": "system architecture",
  "filters": {
    "modelName": "Claude 3 Opus",
    "source": "ai_generated",
    "tags": ["technical"]
  }
})

# Search across all document sources
pluggedin_rag_query({
  "query": "deployment guide",
  "filters": {
    "dateFrom": "2024-01-01",
    "visibility": "workspace"
  }
})

# Future: Create AI-generated documents (Coming Soon)
pluggedin_create_document({
  "title": "Analysis Report",
  "content": "# Market Analysis\n\nDetailed findings...",
  "format": "md",
  "tags": ["analysis", "market"],
  "metadata": {
    "model": {
      "name": "Claude 3 Opus",
      "provider": "Anthropic"
    }
  }
})

🚀 快速开始

先决条件
  • Node.js 18+(推荐 v20+)
  • 来自 plugged.in App 的 API 密钥(在 plugged.in/api-keys 获取)
安装
# Install and run with npx (latest v1.0.0)
npx -y @pluggedin/pluggedin-mcp-proxy@latest --pluggedin-api-key YOUR_API_KEY
🔄 升级到 v1.0.0

对于现有安装,请参阅迁移指南了解详细的升级说明。

# Quick upgrade
npx -y @pluggedin/[email protected] --pluggedin-api-key YOUR_API_KEY
MCP 客户端配置
Claude Desktop

将以下内容添加到 Claude Desktop 配置中:

{
  "mcpServers": {
    "pluggedin": {
      "command": "npx",
      "args": ["-y", "@pluggedin/pluggedin-mcp-proxy@latest"],
      "env": {
        "PLUGGEDIN_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}
Cline

将以下内容添加到 Cline 配置中:

{
  "mcpServers": {
    "pluggedin": {
      "command": "npx",
      "args": ["-y", "@pluggedin/pluggedin-mcp-proxy@latest"],
      "env": {
        "PLUGGEDIN_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}
Cursor

对于 Cursor,您可以使用命令行参数,而不是环境变量:

npx -y @pluggedin/pluggedin-mcp-proxy@latest --pluggedin-api-key YOUR_API_KEY

⚙️ 配置选项

环境变量
变量描述必填默认值
PLUGGEDIN_API_KEY来自 plugged.in App 的 API 密钥是-
PLUGGEDIN_API_BASE_URLplugged.in App 的基础 URL否https://plugged.in
命令行参数

命令行参数的优先级高于环境变量:

npx -y @pluggedin/pluggedin-mcp-proxy@latest --pluggedin-api-key YOUR_API_KEY --pluggedin-api-base-url https://your-custom-url.com
传输选项
选项描述默认值
--transport <type>传输类型:stdio 或 streamable-httpstdio
--port <number>Streamable HTTP 服务的端口12006
--stateless为 Streamable HTTP 启用无状态模式false
--require-api-auth要求 Streamable HTTP 请求提供 API 密钥false

查看完整选项列表:

npx -y @pluggedin/pluggedin-mcp-proxy@latest --help

🌐 Streamable HTTP 模式

代理可以作为 HTTP 服务运行,而非 STDIO,从而支持基于 Web 的访问和远程连接。

基本用法
# Run as HTTP server on default port (12006)
npx -y @pluggedin/pluggedin-mcp-proxy@latest --transport streamable-http --pluggedin-api-key YOUR_API_KEY

# Custom port
npx -y @pluggedin/pluggedin-mcp-proxy@latest --transport streamable-http --port 8080 --pluggedin-api-key YOUR_API_KEY

# With authentication required
npx -y @pluggedin/pluggedin-mcp-proxy@latest --transport streamable-http --require-api-auth --pluggedin-api-key YOUR_API_KEY

# Stateless mode (new session per request)
npx -y @pluggedin/pluggedin-mcp-proxy@latest --transport streamable-http --stateless --pluggedin-api-key YOUR_API_KEY
HTTP 端点
  • POST /mcp - 发送 MCP 消息
  • GET /mcp - 服务器发送事件流(可选)
  • DELETE /mcp - 终止会话
  • GET /health - 健康检查端点
会话管理

在有状态模式(默认)下,使用 mcp-session-id 标头来维持会话:

# First request creates a session
curl -X POST http://localhost:12006/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'

# Subsequent requests use the same session
curl -X POST http://localhost:12006/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "mcp-session-id: YOUR_SESSION_ID" \
  -d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"tool_name"},"id":2}'
身份验证

使用 --require-api-auth 时,请将 API 密钥作为 Bearer 令牌传入:

curl -X POST http://localhost:12006/mcp \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","method":"ping","id":1}'

🐳 Docker 用法

你也可以使用 Docker 构建并运行代理服务。

构建镜像

确保已安装并运行 Docker。进入 pluggedin-mcp 目录并运行:

docker build -t pluggedin-mcp-proxy:latest .

其中包含一个 .dockerignore 文件,用于优化构建上下文。

运行容器
STDIO 模式(默认)

以 STDIO 模式运行容器,用于测试 MCP Inspector:

docker run -it --rm \
  -e PLUGGEDIN_API_KEY="YOUR_API_KEY" \
  -e PLUGGEDIN_API_BASE_URL="YOUR_API_BASE_URL" \
  --name pluggedin-mcp-container \
  pluggedin-mcp-proxy:latest
Streamable HTTP 模式

将容器作为 HTTP 服务运行:

docker run -d --rm \
  -e PLUGGEDIN_API_KEY="YOUR_API_KEY" \
  -e PLUGGEDIN_API_BASE_URL="YOUR_API_BASE_URL" \
  -p 12006:12006 \
  --name pluggedin-mcp-http \
  pluggedin-mcp-proxy:latest \
  --transport streamable-http --port 12006

替换 YOUR_API_KEY 和 YOUR_API_BASE_URL(如果不使用默认值 https://plugged.in)。

使用 MCP Inspector 进行测试

容器运行期间,你可以使用 MCP Inspector 连接到它:

npx @modelcontextprotocol/inspector docker://pluggedin-mcp-container

这会连接到正在运行的容器的标准输入/输出。

停止容器

在执行 docker run 的终端中按 Ctrl+C。--rm 标志可确保容器停止后自动移除。

☁️ Smithery Cloud 部署

将 plugged.in MCP Proxy 部署到 Smithery Cloud,即可托管 MCP 服务并随时访问。

快速入门
  1. 访问 smithery.ai 并登录
  2. 连接你的 GitHub 账户并选择 pluggedin-mcp 仓库
  3. 在 Smithery UI 中配置你的 Plugged.in API 密钥
  4. 部署并获取 HTTPS 终端节点
优势
  • 全天候可用:你的代理始终运行
  • 零配置:Smithery 会从 smithery.yaml 自动检测设置
  • 自动扩缩:处理多个并发连接
  • Web 访问:非常适合 Web 应用和远程客户端
文档

有关完整的部署说明、配置选项、故障排除和技术细节,请参阅:

📖 Smithery 部署指南

自主 Agent(预览版)

该中心旨在端到端支持 Agent 工作循环:

MCP Client  →  plugged.in MCP Hub  →  (Plan → Act → Reflect)
                                ↘  Knowledge  ↘  Memory  ↘  Tools
  • 规划 — 推导目标和约束条件,构建任务图。
  • 执行 — 调用统一目录中的工具;安全地路由到 STDIO/SSE/HTTP 服务。
  • 反思 — 将结果持久化到 Memory 和 Knowledge(文档、笔记、制品)中,以改进后续步骤。

安全与运维
在 Streamable HTTP 模式下启用 --require-api-auth;对命令、参数和环境变量使用允许列表。将服务级验证与经过加固、可抵御提示词注入的客户端提示词相结合。利用现有日志记录和遥测来跟踪工具使用情况和文档变更。

🏗️ 系统架构

plugged.in MCP 代理服务充当 MCP 客户端与多个底层 MCP 服务之间的桥梁:

sequenceDiagram
    participant MCPClient as MCP Client (e.g. Claude Desktop)
    participant PluggedinMCP as plugged.in MCP Proxy
    participant PluggedinApp as plugged.in App
    participant MCPServers as Underlying MCP Servers

    MCPClient ->> PluggedinMCP: Request list tools/resources/prompts
    PluggedinMCP ->> PluggedinApp: Get capabilities via API
    PluggedinApp ->> PluggedinMCP: Return capabilities (prefixed)

    MCPClient ->> PluggedinMCP: Call tool/read resource/get prompt
    alt Standard capability
        PluggedinMCP ->> PluggedinApp: Resolve capability to server
        PluggedinApp ->> PluggedinMCP: Return server details
        PluggedinMCP ->> MCPServers: Forward request to target server
        MCPServers ->> PluggedinMCP: Return response
    else Custom instruction
        PluggedinMCP ->> PluggedinApp: Get custom instruction
        PluggedinApp ->> PluggedinMCP: Return formatted messages
    end
    PluggedinMCP ->> MCPClient: Return response

    alt Discovery tool (Smart Caching)
        MCPClient ->> PluggedinMCP: Call pluggedin_discover_tools
        alt Cached data available
            PluggedinMCP ->> PluggedinApp: Check cached capabilities
            PluggedinApp ->> PluggedinMCP: Return cached tools/resources/prompts
            PluggedinMCP ->> MCPClient: Return instant results (static + dynamic)
        else Force refresh or no cache
            PluggedinMCP ->> PluggedinApp: Trigger background discovery
            PluggedinMCP ->> MCPClient: Return current tools + "discovery running"
            PluggedinApp ->> MCPServers: Connect and discover capabilities (background)
            MCPServers ->> PluggedinApp: Return fresh capabilities
        end
    end

🔄 工作流

  1. 配置:代理从 plugged.in App 获取服务配置
  2. 智能发现(pluggedin_discover_tools):
    • 检查缓存:首先检查是否存在缓存数据(< 1 秒)
    • 即时响应:立即返回静态工具和缓存的动态工具
    • 后台刷新:对于 force_refresh=true,在显示当前工具的同时于后台运行发现
    • 全新发现:仅在不存在缓存数据时运行完整发现
  3. 能力列表:代理从 plugged.in App API 获取已发现的能力
    • tools/list:从 /api/tools 获取(包含静态工具和动态工具)
    • resources/list:从 /api/resources 获取
    • resource-templates/list:从 /api/resource-templates 获取
    • prompts/list:从 /api/prompts 和 /api/custom-instructions 获取并合并结果
  4. 能力解析:代理将能力解析到目标服务
    • tools/call:从工具名称中解析前缀,并在内部映射中查找服务
    • resources/read:调用 /api/resolve/resource?uri=... 获取服务详情
    • prompts/get:检查是否具有自定义指令前缀,或调用 /api/resolve/prompt?name=...
  5. 请求路由:将请求路由到相应的底层 MCP 服务
  6. 响应处理:将底层服务的响应返回给客户端

🔒 安全功能

plugged.in MCP Proxy 实施了全面的安全措施,以保护您的系统和数据:

输入验证与清理
  • 防止命令注入:执行前,根据允许列表验证所有命令和参数
  • 环境变量安全:安全解析 .env 文件,并正确处理引号和多行值
  • 令牌验证:使用严格的正则表达式模式验证 API 密钥和身份验证令牌(32-64 个十六进制字符)
网络安全
  • SSRF 防护:URL 验证会阻止访问:
    • 本地主机和环回地址(127.0.0.1、::1)
    • 私有 IP 地址范围(10.x、172.16-31.x、192.168.x)
    • 链路本地地址(169.254.x)
    • 多播地址和保留地址范围
    • 常见内部服务端口(SSH、数据库等)
  • 请求头验证:通过以下措施防止请求头注入:
    • 阻止危险请求头
    • 符合 RFC 7230 的请求头名称验证
    • 检测控制字符
    • 请求头大小限制(最大 8KB)
  • 速率限制:
    • 工具调用:每分钟 60 个请求
    • API 调用:每分钟 100 个请求
  • 错误信息清理:通过清理错误消息,防止信息泄露
进程安全
  • 安全执行命令:使用 execFile() 而非 exec(),以防止 Shell 注入
  • 命令允许列表:仅允许执行以下命令:
    • node、npx - Node.js 命令
    • python、python3 - Python 命令
    • uv、uvx、uvenv - UV Python 工具
  • 参数清理:从所有参数中移除 Shell 元字符和控制字符
  • 环境变量验证:仅允许包含字母数字字符和下划线的键
Streamable HTTP 安全性
  • 延迟身份验证:工具发现无需身份验证,从而提高兼容性
  • 会话安全:以加密安全的方式生成会话 ID
  • CORS 防护:可配置用于 Web 访问的 CORS 请求头
  • 请求大小限制:防止通过大型负载发动 DoS 攻击
安全实用工具

专用的 security-utils.ts 模块提供:

  • Bearer 令牌验证
  • 带 SSRF 防护的 URL 验证
  • 命令参数清理
  • 环境变量验证
  • 速率限制实现
  • 错误消息清理

有关安全实现的详细信息,请参阅 SECURITY.md。

🧩 与 plugged.in App 集成

plugged.in MCP Proxy Server 专为与 plugged.in App 无缝协作而设计,该应用提供:

  • 用于管理 MCP 服务配置的 Web 界面
  • 集中式能力发现(工具、资源、模板、提示词)
  • RAG v2 文档库:上传文档,并启用带有完整归属信息的 AI 生成内容
  • 自定义指令管理
  • 支持多个工作区,以使用不同的配置集
  • 交互式试验场,可使用任意 AI 模型测试 MCP 工具
  • 用户身份验证和 API 密钥管理
  • AI 文档交换:创建、搜索和管理文档,并追踪模型归属信息

📚 相关资源

🤝 参与贡献

欢迎贡献!请随时提交 Pull Request。

📝 近期更新

Version 1.9.0(2025 年 9 月)- 安全增强
🔒 增强 HTML 清理
  • 行业标准清理:使用 sanitize-html 库替换自定义的基于正则表达式的 HTML 清理方案
  • 防止 XSS:全面防护跨站脚本攻击
  • HTML 属性安全:增强针对 HTML 属性上下文(引号、与号)的清理
  • 格式字符串注入:修复日志记录中的格式字符串注入漏洞
  • 安全测试:为所有清理函数提供全面的测试覆盖
🛡️ 安全改进
  • 符合 CodeQL 要求:解决 GitHub CodeQL 分析发现的所有安全漏洞
  • 输入验证:加强所有函数中的输入验证和清理
  • 依赖更新:添加 sanitize-html,以稳健地过滤 HTML 内容
  • 测试覆盖:增强安全测试套件,验证 XSS 攻击防护
Version 1.5.0(2025 年 1 月)- RAG v2
🤖 AI 文档交换
  • AI 生成文档:MCP 服务现在可以在你的库中创建文档,并附带完整的 AI 归属信息
  • 模型归属追踪:完整记录各文档由哪些 AI 模型创建或更新
  • 高级文档搜索:按 AI 模型、提供方、日期、标签和来源类型筛选
  • 文档版本控制:追踪变更,并维护 AI 生成内容的版本历史
  • 多来源支持:支持来自上传、AI 生成或 API 集成的文档
🔍 增强 RAG 能力
  • 语义搜索:通过 PostgreSQL 全文搜索提升相关性评分
  • 智能筛选:按可见性、模型归属和文档来源筛选结果
  • 摘要片段生成:自动提取摘要片段并突出显示关键词
  • 性能优化:通过优化索引加快查询速度
Version 1.2.0(2025 年 1 月)
🔒 安全增强
  • URL 验证:全面防护 SSRF,拦截私有 IP、localhost 和危险端口
  • 命令白名单:仅允许执行获批的命令(node、npx、python 等)
  • 请求头清理:防止请求头注入攻击
  • 惰性身份验证:改进与 Smithery 的兼容性,无需身份验证即可发现工具
🚀 性能改进
  • 优化 Docker 构建:采用多阶段构建,尽可能减小容器体积
  • 仅包含生产依赖:从 Docker 镜像中排除测试文件和开发依赖
  • 资源效率:专为部署到资源受限的环境而设计
🔧 技术改进
  • 增强 Streamable HTTP 传输中的错误处理
  • 改进会话清理和内存管理
  • 改进 TypeScript 类型和代码组织
Version 1.1.0(2024 年 12 月)
🚀 新功能
  • 可流式传输的 HTTP 支持:使用现代可流式传输的 HTTP 传输方式连接下游 MCP 服务
  • HTTP 服务模式:将代理作为 HTTP 服务运行,以便通过 Web 访问
  • 灵活的会话管理:可选择无状态或有状态模式
  • 身份验证选项:可选的 HTTP 端点 Bearer 令牌身份验证
  • 运行状况监控:用于服务监控的 /health 端点
🔧 技术改进
  • 将 MCP SDK 更新至 v1.13.1,以支持最新协议
  • 添加 Express.js 集成,支持 HTTP 服务功能
  • 增强 TypeScript 类型,提升开发体验
版本 1.0.0(2025 年 6 月)
🎯 主要功能
  • 实时通知系统:通过全面的通知支持跟踪所有 MCP 活动
  • RAG 集成:支持通过 plugged.in App 进行文档增强查询
  • 检查器脚本:用于调试和开发的全新自动化测试工具
  • 运行状况监控:内置 ping 端点,用于连接监控
🔒 安全增强
  • 输入验证:对所有输入进行符合行业标准的验证和清理
  • URL 安全性:增强 URL 验证,并提供 SSRF 防护
  • 环境安全性:使用 dotenv 安全解析环境变量
  • 错误清理:防止错误响应泄露信息
🐛 Bug 修复
  • 修复 JSON-RPC 协议干扰问题(分离 stdout 和 stderr)
  • 解决开发环境中的 localhost URL 验证问题
  • 修复检查器脚本中的 API 密钥处理
  • 改进连接稳定性和内存管理
🔧 开发者工具
  • 新增用于自动化测试的检查器脚本
  • 改进错误消息和调试能力
  • 使用 stderr 实现结构化日志记录
  • 增强 TypeScript 类型安全性

完整详情请参阅发行说明。

🧪 测试与开发

本地开发

项目包含用于开发的测试,但在 Docker 构建时会排除,以尽量减小容器体积。

# Run tests locally
npm test
# or
./scripts/test-local.sh

# Run tests in watch mode
npm run test:watch

# Run tests with UI
npm run test:ui
轻量级 Docker 构建

Docker 镜像经过优化,以尽量减小体积:

  • 多阶段构建流程
  • 最终镜像中仅包含生产依赖
  • 排除测试文件和开发依赖
  • 针对资源受限环境进行优化
# Build optimized Docker image
docker build -t pluggedin-mcp .

# Check image size
docker images pluggedin-mcp

📄 许可证

本项目采用 MIT 许可证授权,详情请参阅 LICENSE 文件。

🙏 致谢

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。