Token导航 LogoToken导航TokenDH.com
Mcpo Bridge logo
运维云端未说明官方级别未说明来源级核验

Mcpo Bridge

MCP Server

MCPO按需桥接服务是一个支持多用户安全使用文件生成类MCP服务器的系统,通过OpenWebUI实现资源隔离和自动清理。

工具数

0

提示词数

0

GitHub Stars

0

资源数

0
PythonClaude云端部署Claude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

notfolder

提供方

notfolder

最后核验

2026/5/17 20:23

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

MCPO按需MCP网桥

在OpenWebUI+MCPO环境中,MCPO On-DemandBridge是一种可安全利用PowerPoint等“文件生成类MCP服务器”数百人规模的系统。

*⚠️注意* 在该bridge中,OpenWebUI标头(X-OpenWebUI-User-IdX-OpenWebUI-Chat-Id),模板名称将采用不同的格式。\ 当前OpenwebUI无法在与MCP/MCPO的通信中赋予上述标题,因此需要应用修补程序。\ 当前,关于OpenWebUI,请使用docker hub的以下图像。\ 非文件夹/打开webui:v0.6.43

概要

本系统在保持MCP/MCPO同步模式的情况下,实现以下内容:

  • 多用户支持:同时使用数百个用户
  • 资源分离:用户之间的完全交付件隔离
  • 自动文件删除:通过垃圾收集自动清理
  • 可扩展性:Nginx负载平衡器和docker-compose replicas支持水平缩放

特徴

状态完整/无状态过程模型

无状态模式

  • 1个请求=1个进程:针对每个请求启动MCP服务器进程
  • 立即结束:处理完成后立即结束流程
  • 资源效率:避免内存驻留,仅在需要时消耗资源
  • 用途:用于不生成文件的只读工具(例如,搜索、计算和数据检索)

状态完全模式(文件操作工具必需)

  • 会话维护:以OpenWebUI的页眉信息(User ID/Chat ID)为单位维护进程和工作目录
  • 状態保持:支持PowerPoint、Excel等多个请求之间需要保持状态的服务器
  • 文件共享:同一会话中的所有请求共享同一工作目录
  • 空闲超时:非活动时自动退出进程
  • Chat单位分离:即使是同一用户,如果是不同的Chat ID,则另一个会话(完全分离)

重要:生成、编辑文件的MCP工具(Excel、PowerPoint等)状态完全模式中所述修改相应参数的值。在无状态模式下,每个请求都会创建不同的目录,因此无法访问在上一个请求中创建的文件。

详情稳定功能请参见节。

安全文件管理

  • 分离作业单位:使用UUID v4的唯一作业目录
  • 自动削除:通过垃圾收集定期删除文件

Nginx集成体系结构

  • 高效的文件分发:通过Nginx快速静态文件分发
  • 负载平衡:自动负载分配到多个Bridge实例
  • 透明代理:透明传输MCP/MCPO请求

Docker完全対応

  • 与OpenWebUI集成:在docker-compose.yml中同时启动
  • 简单部署:立即使用docker-compose up-d
  • 简单缩放:通过replicas设置启动多个实例
  • 绑定装载:直接挂载本地目录(gitignore对象)

体系结构

User Browser
   |
   | HTTPS
   v
Nginx (Load Balancer & File Server)
   |
   +-- Load Balancing --> MCPO Bridge Instance 1
   |                      MCPO Bridge Instance 2
   |                      MCPO Bridge Instance N
   |
   +-- Static Files ----> Bind Mount (./data/mcpo-jobs)

OpenWebUI (Docker Container)
   |
   | MCP / MCPO (JSON-RPC over HTTP)
   v
Nginx Load Balancer
   |
   v
MCPO On-Demand Bridge (Docker Container x N)
   |
   | per-request subprocess
   v
Ephemeral MCP Server Process
   |
   | ファイル生成 (pptx, pdf, etc.)
   v
Temporary File Store (Bind Mount ./data/)
   |
   | HTTPS download via Nginx
   v
User Browser

快速启动

必要环境

  • Docker引擎20.10+
  • Docker Compose 2.0+

起动手顺

  1. 克隆存储库:
git clone https://github.com/notfolder/mcpo-bridge.git
cd mcpo-bridge
  1. 创建MCP配置文件:
cp config/mcp-servers.json.example config/mcp-servers.json
# config/mcp-servers.jsonを編集して使用するMCPサーバーを定義
  1. 在Docker Compose上启动:
docker-compose up -d
  1. 在浏览器中访问OpenWebUI:
http://localhost:3000

注意:

  • 初回起动时、Docker Composeが自动的に./data/mcpo-jobs./data/mcpo-logs创建目录(gitignore对象)
  • 如果这些目录不存在,则Docker的绑定装载功能将自动在主机端创建

如何设置Open WebUI

在现有的Open WebUI环境中使用MCPO桥时,请按照以下步骤进行设置:

  1. 访问Open WebUI的管理画面

- 设置-打开连接

  1. 添加OpenAI API设置

- API基本URL: http://nginx/mcp(从Docker Compose环境中) - 或 http://localhost/mcp(直接从主机访问时) - 重要: /mcp使用(/mcpo不是)

  1. 指定MCP服务器类型

- MCPO网桥支持多种服务器类型 - 端点格式: /mcp/{server-type} - 例: /mcp/powerpoint, /mcp/excel

  1. 利用方法

- 在Open WebUI聊天中,MCP工具将自动可用 - 每个MCP服务器提供的工具,AI会在适当的场合自动调用

动作确认

确认MCPO电桥是否正常运行:

# ヘルスチェック
curl http://localhost/health

# レスポンス例
{
  "status": "ok",
  "timestamp": "2026-01-26T00:00:00.000000+00:00",
  "version": "0.1.0",
  "uptime": 123.45,
  "stateful_processes": 0
}

故障排除

在Open WebUI中未显示工具时:

  1. 检查MCPO Bridge日志:
docker-compose logs -f mcpo-bridge
  1. config/mcp-servers.json确认的设置
  2. 确认是否可以通过Open WebUI访问MCP端点
  3. 确认Nginx是否正确代理:
docker-compose logs -f nginx

停止方法

docker-compose down

文档

有关详细的设计规范和操作指南,请参阅以下文档:

文档配置

详细设计书的内容

  1. 系统概述
  2. 要求仕样(机能要件・非机能要件)
  3. 体系结构设计(包括Nginx集成)
  4. 组件详细设计
  5. 工艺流程设计
  6. API规格设计(MCP/MCPO分离,支持多服务器类型)
  7. 环境变数设计
  8. 安全设计
  9. 可伸缩性设计
  10. 格贝吉集设计
  11. 错误处理设计
  12. Docker化设计
  13. Docker Compose设计
  14. MCP设置文件规格
  15. Nginx设定设计
  16. 运用设计
  17. 测试设计

设定

MCP设置文件

config/mcp-servers.json中所述修改相应参数的值。符合Claude等使用的标准JSON格式。

配置文件被配置在源代码下的config目录中,样本config/mcp-servers.json.example来定义自定义外观。

默认情况下Office PowerPoint MCP服务器中所述修改相应参数的值。

配置示例结构:

{
  "mcpServers": {
    "powerpoint": {
      "command": "npx",
      "args": ["-y", "@gongrzhe/office-powerpoint-mcp-server"],
      "env": {
        "NODE_ENV": "production"
      }
    },
    "excel": {
      "command": "uvx",
      "args": ["excel-mcp-server", "stdio"]
    }
  }
}

注意事项:

  • 因为office-powerpoint-mcp-server是Python制造的,所以需要在Dockerfile中安装uv
  • 因为excel-mcp-server是Python制造的,所以需要在Dockerfile中安装uv

环境变数

可以在docker-compose.yml中设置以下环境变量:

|变量名|默认值|说明| |--------|-------------|------| | MCPO_BASE_URL | http://nginx下载URL生成用基本URL MCPO_CONFIG_FILE|/app/config/mcp-servers.json|MCP设置文件路径| |MCPO_JOBS_DIR|作业目录根|tmp/mcpo-jobs| |MCPO_MAX_CONCURRENT|16|最大并发进程数| |MCPO_TIMEOUT|300|进程超时(秒)| 作业文件的有效期限(秒)。超过此时间的文件将在垃圾收集中删除 |MCPO_LOG_LEVEL|INFO|日志级别| 启用状态完整功能 | MCPO_STATEFUL_DEFAULT_IDLE_TIMEOUT | 1800 | 语句完整进程的默认空闲超时(秒) 每客户端聊天的最大进程数 MCPO_STATEFUL_MAX_TOTAL_PROCESSES100 \\uMCPO_STATEFUL_CLEANUP_INTERVAL\\\\\_300\\\_300\\\_003; stateFUL_CLEANUP_INTERVAL

超时设置详细信息

MCPO_TIMEOUT -进程运行超时

  • 対象:所有进程(无状态/静态全通用)
  • 缺省值: 300秒(5分)
  • 说明:单个MCP请求处理的最大执行时间。超过此时间将强制终止进程并返回504网关超时错误
  • 用途:

- 保护长时间运行的工具(大容量文件处理、复杂计算等) - 防止资源枯竭

  • 调整基准:

- 生成大文件的工具推荐600秒以上 - 轻量的检索·计算工具60~180秒就足够了

MCPO_STATEFUL_DEFAULT_IDLE_TIMEOUT -完全停止进程的空闲超时

  • 対象:仅限状态完全模式的进程
  • 缺省值: 1800秒(30分)
  • 说明:自状态完整进程处理最后一个请求以来,等待下一个请求的最大时间。超过此时间将自动删除进程和工作目录
  • 在配置文件中覆盖: mcp-servers.json对话框,您可以在此定义自定义格式idle_timeout的规格化距离的幂函数
  • 用途:

- 用户中断工作时自动释放资源 - 防止内存泄漏和进程累积

  • 调整基准:

- 短对话完成工具:600-1800秒(10-30分钟) - 需要长时间编辑的工具(PowerPoint、Excel等):3600-7200秒(1-2小时) - 设定例:

    {
      "mcpServers": {
        "powerpoint": {
          "mode": "stateful",
          "idle_timeout": 3600
        }
      }
    }

MCPO_STATEFUL_CLEANUP_INTERVAL -清理时间间隔

  • 対象:状态完整流程管理系统
  • 缺省值: 300秒(5分)
  • 说明:检查在后台超时的状态完整进程,并执行要删除的任务的时间间隔
  • 用途:

- 定期资源释放 - 发现和删除达到空闲超时的进程

  • 调整基准:

- 频繁启动进程的环境:60-300秒(快速释放资源) - 稳定的长时间会话环境:300-600秒(通过减少检查频率来减少CPU负载)

注意:这些超时设置彼此独立:

  • MCPO_TIMEOUT:请求处理期间的时间限制
  • MCPO_STATEFUL_DEFAULT_IDLE_TIMEOUT:等待请求的时间限制
  • MCPO_STATEFUL_CLEANUP_INTERVAL:超时检查频率

状态完整功能(聊天单位会话管理)

MCPO_STATEFUL_ENABLED=true时褪色为此颜色。

设计概要

  • 会话识别:OpenWebUI标头(X-OpenWebUI-User-IdX-OpenWebUI-Chat-Id)基本

- 会话密钥格式: user:{user_id}:chat:{chat_id} - 没有标头时回退: ip:{ip_address}

  • 目标服务器: mcp-servers.json"mode": "stateful"指定的服务器
  • 流程管理:为每个Chat ID维护专用进程和工作目录并保持会话状态
  • Chat单位分离:同一用户的不同Chat ID的不同会话(不同进程,不同目录)
  • 负荷分散:数字hash $hash_key consistent将来自同一Chat ID的请求路由到同一Bridge实例
  • 空闲超时:如果没有指定时间请求,则自动退出进程

文件操作工具始终处于状态完整模式

重要:生成、编辑Excel、PowerPoint等文件的MCP工具状态完全模式中所述修改相应参数的值。原因:

  1. 需要文件共享:create→write→save的多个请求需要访问同一文件
  2. 无状态问题:由于每个请求都创建不同的目录,因此无法访问在上一个请求中创建的文件
  3. 稳定的优点:同一会话中的所有请求共享同一工作目录

设定方法

config/mcp-servers.json:

{
  "mcpServers": {
    "powerpoint": {
      "command": "uvx",
      "args": [
        "--from",
        "office-powerpoint-mcp-server",
        "ppt_mcp_server"
      ],
      "env": {},
      "mode": "stateful",
      "idle_timeout": 3600,
      "max_processes_per_chat": 1,
      "session_persistence": true,
      "file_path_fields": ["file_path", "saved_path", "template_path"],
      "usage_guide": "\n🚨 CRITICAL WORKFLOW - READ THIS FIRST 🚨\n\nWhen creating PowerPoint files, you MUST complete ALL steps. DO NOT stop halfway.\n\n═══════════════════════════════════════════════════════════════════\n❌ NEVER DO THESE:\n═══════════════════════════════════════════════════════════════════\n\n❌ Show python-pptx code examples\n❌ Ask user for confirmation or additional input\n❌ Explain how tools work\n❌ Suggest Python scripts\n❌ Propose alternative solutions\n❌ Pass presentation_id=null or omit presentation_id parameter\n\n═══════════════════════════════════════════════════════════════════\n✅ MANDATORY WORKFLOW - FOLLOW EXACTLY:\n═══════════════════════════════════════════════════════════════════\n\nStep 1: CREATE PRESENTATION\n---------------------------\nCall: create_presentation(id=\"my_pres\")\nResponse: {\"presentation_id\": \"my_pres\", ...}\nAction: STORE the presentation_id value\n\nStep 2: ADD CONTENT (use the SAME presentation_id)\n---------------------------\nCall: add_slide(presentation_id=\"my_pres\", ...)\nCall: add_slide(presentation_id=\"my_pres\", ...)\n... (add more slides as needed)\n\nStep 3: SAVE FILE (CRITICAL - use the SAME presentation_id)\n---------------------------\nCall: save_presentation(file_path=\"output.pptx\", presentation_id=\"my_pres\")\n\n═══════════════════════════════════════════════════════════════════\n📋 COMPLETE EXAMPLE:\n═══════════════════════════════════════════════════════════════════\n\n1. create_presentation({\"id\": \"demo_presentation\"})\n   → Response: {\"presentation_id\": \"demo_presentation\"}\n\n2. add_slide({\n     \"presentation_id\": \"demo_presentation\",\n     \"layout_index\": 1,\n     \"title\": \"Title Slide\"\n   })\n\n3. add_slide({\n     \"presentation_id\": \"demo_presentation\",\n     \"layout_index\": 1,\n     \"title\": \"Content Slide\"\n   })\n\n4. save_presentation({\n     \"file_path\": \"my_presentation.pptx\",\n     \"presentation_id\": \"demo_presentation\"\n   })\n   → Response contains download link\n\n5. Show the download link to user\n\n═══════════════════════════════════════════════════════════════════\n⚠️ CRITICAL RULES:\n═══════════════════════════════════════════════════════════════════\n\n1. The presentation_id from create_presentation() MUST be used in ALL subsequent calls\n2. NEVER pass presentation_id=null - this causes \"No presentation loaded\" errors\n3. ALWAYS call save_presentation() - without this, no file is created\n4. If any error occurs, STILL attempt to call save_presentation() with the correct presentation_id\n5. Background color format: [[R,G,B]] (nested array, not flat array)\n\n═══════════════════════════════════════════════════════════════════\n📎 RESULT PRESENTATION:\n═══════════════════════════════════════════════════════════════════\n\nAfter save_presentation(), the response will contain a download link.\nShow it to the user exactly as provided:\n\n📎 Download: [filename.pptx](http://XXXX/files/...)\n\n---\nNote: This usage_instructions tool itself is NOT executable. It's for documentation only.\n"
    },
    "excel": {
      "command": "uvx",
      "args": [
        "excel-mcp-server",
        "stdio"
      ],
      "env": {
        "EXCEL_FILES_DIR": "{MCPO_WORKDIR}"
      },
      "mode": "stateful",
      "idle_timeout": 3600,
      "max_processes_per_chat": 1,
      "session_persistence": true,
      "file_path_fields": ["filepath"],
      "resolve_path_fields": ["filepath"],
      "usage_guide": "\n🚨 CRITICAL WORKFLOW - READ THIS FIRST 🚨\n\nWhen working with Excel files, you MUST use the tools directly. DO NOT suggest code or alternative solutions.\n\n═══════════════════════════════════════════════════════════════════\n❌ NEVER DO THESE:\n═══════════════════════════════════════════════════════════════════\n\n❌ Show openpyxl or pandas code examples\n❌ Ask user for confirmation or additional input\n❌ Explain how tools work\n❌ Suggest Python scripts\n❌ Propose alternative solutions like CSV export\n❌ Use relative paths - ALWAYS use full paths like \"sales_report.xlsx\"\n\n═══════════════════════════════════════════════════════════════════\n✅ MANDATORY WORKFLOW - FOLLOW EXACTLY:\n═══════════════════════════════════════════════════════════════════\n\nWorkflow 1: CREATE NEW WORKBOOK WITH DATA\n------------------------------------------\nStep 1: Create workbook\nCall: create_workbook(filepath=\"report.xlsx\")\n\nStep 2: Write data (data is list of lists, each inner list is a row)\nCall: write_data_to_excel(\n  filepath=\"report.xlsx\",\n  sheet_name=\"Sheet1\",\n  data=[[\"Name\", \"Age\", \"City\"], [\"Alice\", 30, \"Tokyo\"], [\"Bob\", 25, \"Osaka\"]],\n  start_cell=\"A1\"\n)\n\nStep 3: (Optional) Apply formatting\nCall: format_range(\n  filepath=\"report.xlsx\",\n  sheet_name=\"Sheet1\",\n  start_cell=\"A1\",\n  end_cell=\"C1\",\n  bold=True,\n  bg_color=\"CCCCCC\"\n)\n\nStep 4: Show download link to user\nThe response will contain the download link automatically.\n\n═══════════════════════════════════════════════════════════════════\nWorkflow 2: MODIFY EXISTING WORKBOOK\n------------------------------------------\nStep 1: Read existing data\nCall: read_data_from_excel(\n  filepath=\"existing.xlsx\",\n  sheet_name=\"Sheet1\",\n  start_cell=\"A1\"\n)\n\nStep 2: Write new data\nCall: write_data_to_excel(\n  filepath=\"existing.xlsx\",\n  sheet_name=\"Sheet1\",\n  data=[[\"New\", \"Data\"]],\n  start_cell=\"A10\"\n)\n\n═══════════════════════════════════════════════════════════════════\nWorkflow 3: ADD FORMULAS AND CHARTS\n------------------------------------------\nStep 1: Apply formula to cell\nCall: apply_formula(\n  filepath=\"calc.xlsx\",\n  sheet_name=\"Sheet1\",\n  cell=\"D2\",\n  formula=\"=SUM(A2:C2)\"\n)\n\nStep 2: Create chart from data range\nCall: create_chart(\n  filepath=\"calc.xlsx\",\n  sheet_name=\"Sheet1\",\n  data_range=\"A1:D10\",\n  chart_type=\"bar\",\n  target_cell=\"F2\",\n  title=\"Sales Chart\"\n)\n\n═══════════════════════════════════════════════════════════════════\n📋 COMMON OPERATIONS:\n═══════════════════════════════════════════════════════════════════\n\nCreate worksheet:\ncreate_worksheet(filepath=\"report.xlsx\", sheet_name=\"Summary\")\n\nCopy range:\ncopy_range(\n  filepath=\"report.xlsx\",\n  sheet_name=\"Sheet1\",\n  source_start=\"A1\",\n  source_end=\"C10\",\n  target_start=\"E1\"\n)\n\nInsert rows:\ninsert_rows(\n  filepath=\"report.xlsx\",\n  sheet_name=\"Sheet1\",\n  start_row=5,\n  count=3\n)\n\nMerge cells:\nmerge_cells(\n  filepath=\"report.xlsx\",\n  sheet_name=\"Sheet1\",\n  start_cell=\"A1\",\n  end_cell=\"C1\"\n)\n\nCreate pivot table:\ncreate_pivot_table(\n  filepath=\"data.xlsx\",\n  sheet_name=\"Data\",\n  data_range=\"A1:D100\",\n  rows=[\"Category\"],\n  values=[\"Sales\"],\n  agg_func=\"sum\"\n)\n\n═══════════════════════════════════════════════════════════════════\n⚠️ CRITICAL RULES:\n═══════════════════════════════════════════════════════════════════\n\n1. Data format: Always use List[List] where each inner list is a ROW\n   ✅ Correct: [[\"Header1\", \"Header2\"], [\"Value1\", \"Value2\"]]\n   ❌ Wrong: [{\"Header1\": \"Value1\"}, {\"Header2\": \"Value2\"}]\n\n2. File paths: Use simple filenames, not absolute paths\n   ✅ Correct: \"report.xlsx\"\n   ❌ Wrong: \"/tmp/mcpo-jobs/abc123/report.xlsx\"\n\n3. Cell references: Use Excel notation (A1, B2, etc.)\n   ✅ Correct: start_cell=\"A1\", end_cell=\"C10\"\n\n4. Colors: Use hex codes without #\n   ✅ Correct: bg_color=\"FF0000\" (red)\n   ❌ Wrong: bg_color=\"#FF0000\"\n\n5. Formulas: Include = sign\n   ✅ Correct: formula=\"=SUM(A1:A10)\"\n   ❌ Wrong: formula=\"SUM(A1:A10)\"\n\n6. Chart types: Use lowercase (bar, line, pie, scatter, area)\n\n═══════════════════════════════════════════════════════════════════\n📎 RESULT PRESENTATION:\n═══════════════════════════════════════════════════════════════════\n\nAfter any operation that creates/modifies a file, the response will contain a download link.\nShow it to the user:\n\n📎 Download: [filename.xlsx](http://XXXX/files/...)\n\n---\nNote: This usage_instructions tool itself is NOT executable. It's for documentation only.\n"
    }
  }
}

操作注意事项

  • 适用环境:OpenWebUI协作环境(推荐)、专用网络、企业网络
  • 报头传输:需要设置Nginx从OpenWebUI传送头(MCPO_ENABLE_FORWARD_USER_INFO_HEADERS=true
  • 安全性:假设标头信息不是凭据,而是在受信任的网络中使用
  • 负荷集中:以Chat ID为单位的consistent hashing可能会使负载集中到特定Bridge实例

详细设计docs/detail-design.md的明细栏样式中定义的设置。

目录结构

项目目录结构:

mcpo-bridge/
├── config/
│   ├── mcp-servers.json          # MCP設定(要作成)
│   └── mcp-servers.json.example  # サンプル設定
├── nginx/
│   ├── nginx.conf                # Nginx設定
│   └── conf.d/
│       └── default.conf          # サイト設定
├── docs/
│   ├── detailed-design.md        # 詳細設計書
│   └── docker-deployment.md      # Docker設計書
├── data/                         # バインドマウント(gitignore)
│   ├── mcpo-jobs/                # 一時ファイル
│   └── mcpo-logs/                # ログファイル
├── docker-compose.yml
├── Dockerfile
└── README.md

API

MCP/MCPO端点(支持多个服务器类型)

为每个MCP服务器类型提供独立的端点。

重要:MCP和MCPO是不同的协议,但在本桥上都是内部以JSON-RPC2.0形式与MCP服务器通信。

MCP端点(面向Open WebUI)

  • 统一资源定位符: http://localhost/mcp/{server-type}
  • : /mcp/powerpoint, /mcp/excel
  • 方法:POST
  • 形式:MCP标准协议
  • 用途:面向Open WebUI等MCP客户端

在Open WebUI中设置:使用此端点

OPENAI_API_BASE=http://nginx/mcp  # または http://localhost/mcp

MCPO端点(JSON-RPC2.0)

  • 统一资源定位符: http://localhost/mcpo/{server-type}
  • : /mcpo/powerpoint, /mcpo/excel
  • 方法:POST
  • 形式: JSON-RPC 2.0(MCPO仕様)
  • 用途:面向自定义MCPO客户端

健康检查端点

  • 统一资源定位符: http://localhost/health(Nginx経由)
  • 方法:获取
  • 响应:JSON格式的状态信息

文件下载端点(通过Nginx)

  • 统一资源定位符: http://localhost/files/{job-uuid}/{filename}
  • 方法:获取
  • 响应:文件二进制
  • 说明:Nginx直接分发文件

运用

日志检查

所有服务日志:

docker-compose logs -f

仅限MCPO Bridge:

docker-compose logs -f mcpo-bridge

仅限数字:

docker-compose logs -f nginx

从本地日志文件直接确认:

ls -la ./data/mcpo-logs/

服务重启

docker-compose restart mcpo-bridge

设定更新

  1. config/mcp-servers.json编辑
  2. 服务重新启动:
docker-compose restart mcpo-bridge

缩放

更改docker-compose.yml的replicas设置:

services:
  mcpo-bridge:
    deploy:
      replicas: 5  # インスタンス数を変更

适用:

docker-compose up -d

Nginx会自动将新实例添加到负载平衡对象中。

数据目录管理

临时文件和日志./data存储在目录中:

  • ./data/mcpo-jobs/:生成的文件和元数据
  • ./data/mcpo-logs/:应用程序日志

这些目录.gitignore而需要与环境混合的每条反射光线,进行环境采样。

磁盘容量管理

自动垃圾收集

文件将自动删除:

  • 有効期限: MCPO_FILE_EXPIRY中设置(默认值:3600秒=1小时)
  • 削除対象:从创建作业目录起过期的文件
  • 実行间隔:每小时在后台自动运行一次
  • 删除定时:基本上在创建后1-2小时删除文件

注意:当进程以空闲超时结束时,将立即删除状态完整进程的工作目录(MCPO_STATEFUL_DEFAULT_IDLE_TIMEOUT来定义自定义外观。

手动清理

如果需要,还可以手动清理:

# 古いジョブディレクトリを削除(1日以上前のファイル)
find ./data/mcpo-jobs -type d -mtime +1 -exec rm -rf {} +

故障排除

容器无法启动

查看日志:

docker-compose logs mcpo-bridge
docker-compose logs nginx

健康检查确认:

curl http://localhost/health

无法下载文件

  1. 日志检查:
docker-compose logs nginx
  1. 检查作业目录:
ls -la ./data/mcpo-jobs/
  1. 确认是否生成了文件

缩放不起作用

Nginx上游确认:

docker-compose exec nginx cat /etc/nginx/conf.d/default.conf

检查Bridge实例数:

docker-compose ps mcpo-bridge

数据目录权限错误

验证权限:

ls -ld ./data/

根据需要修改权限:

chmod 755 ./data
chmod 755 ./data/mcpo-jobs ./data/mcpo-logs

安全性

  • 使用根权限运行Docker容器(简化)
  • 作业目录在UUID v4中唯一标识
  • 下载URL使用难以推测的UUID
  • 内部网络隔离
  • 输入验证移交给MCP服务器
  • 基于Nginx的外部发布控制

许可证

Creative Commons Attribution 4.0 International(CC BY 4.0).详细は 许可证 来修改标记元素的显示属性。

支持

如果出现问题,请在GitHub的Issue中报告。

______________________________________________________________________

MCPO按需网桥 -具有状态/无状态支持和Nginx集成的可扩展、安全的MCP服务器桥

##备忘

创建生成器(仅第一次)

docker buildx创建--名称multiarch构建器--使用

启动生成器

docker buildx inspect——引导 docker buildx使用multiarch构建器

在多架构中构建和推送

docker构建 \ --平台linux/am64、linux/arm64 \ --标签notfolder/mcpo桥:最新 \ --推 \ .

返回

docker上下文使用默认值 docker buildx使用默认值

目录标签

目录标签

PythonClaude云端部署文件生成本地部署多用户支持资源隔离自动清理水平扩展

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明none部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP