抱脸部署 MCPO

介绍

MCPO 是一个基于Python的MCP代理服务,支持以下功能:

  • MCP协议代理转发
  • 支持fetch服务请求
  • 可配置多个后端MCP服务器
  • 提供健康检查接口

本篇教程提供了以下服务

  • 绘图(grok2_images)
  • 搜索(tavily-mcp)
  • 天气地图 (baidu-map)
  • GitHub仓库 (github)
  • 文件操作 (filesystem)
  • HTML预览 (edgeone-pages-mcp-server)

你也可以修改 entrypoint.sh自行添加或替换服务

准备

  • 注册 x.ai 开发者账号并创建 API_KEY:点击前往,充值5刀后, 同意数据共享 赠额150刀每月

  • 注册 tavily 并创建 API_KEY:点击前往,免费调用1000次每月

  • 注册 baidu 地图开放平台并创建 API_KEY:点击前往,普通功能 0.5w次/天

  • 注册 github 账号并创建 AccessToken:点击前往 ,需要 Repo 权限

配置

点击这里 创建空间,Space 名称建议使用随机字符,选择 Docker,然后在 Files 便签页添加或者修改下述文件

  • 环境变量
变量名 示例值 描述
XAIAPI_KEY xai-1234567890abcdef xai 密钥
XAIAPI_BASE_URL https://api.xai.ai/v1 xai 基础URL
TAVILY_API_KEY tavily-9876543210fedcba tavily 密钥
BAIDU_MAP_API_KEY 9876543210fedcba baidu 开发者 密钥
GITHUB_PERSONAL_ACCESS_TOKEN ghp_9876543210fedcba gitHub 密钥
  • Dockerfile
FROM python:3.11-slim

RUN useradd -ms /bin/bash mcp

WORKDIR /app

RUN apt-get update && \
    apt-get install -y curl unzip && \
    curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \
    apt-get install -y nodejs && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

COPY entrypoint.sh /app/
RUN chmod +x /app/entrypoint.sh

USER mcp
RUN curl -fsSL https://bun.sh/install | bash

ENV BUN_INSTALL="/home/mcp/.bun"
ENV PATH="${BUN_INSTALL}/bin:${PATH}"

USER root
RUN pip install --no-cache-dir mcpo uv

RUN mkdir -p /app/.cache/uv && chown -R mcp:mcp /app

ENV XDG_CACHE_HOME="/app/.cache"

USER mcp

EXPOSE 8000

ENTRYPOINT ["/app/entrypoint.sh"]
  • entrypoint.sh
#!/bin/bash

cat <<EOF > /app/config.json
{
  "mcpServers": {
    "grok2_images": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "XAIAPI_KEY": "${XAIAPI_KEY}",
        "XAIAPI_BASE_URL": "${XAIAPI_BASE_URL}"
      }
    },
    "tavily-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "TAVILY_API_KEY": "${TAVILY_API_KEY}"
      }
    },
    "baidu-map": {
      "command": "npx",
      "args": [
          "-y",
          "@baidumap/mcp-server-baidu-map"
      ],
      "env": {
          "BAIDU_MAP_API_KEY": "${BAIDU_MAP_API_KEY}"
      }
    },
    "github": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-github"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}"
      }
    },
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/home/mcp"
      ]
    },
    "edgeone-pages-mcp-server": {
      "command": "npx",
      "args": ["edgeone-pages-mcp"]
    }    
  }
}
EOF

exec mcpo --config /app/config.json
  • README.md
---
title: mcp
emoji: 💻
colorFrom: pink
colorTo: indigo
sdk: docker
pinned: false
app_port: 8000
---

使用

这里以 Open-WebUI 为例,版本要求 v0.6.0+,建议更行到最新版本

  1. 使用管理员账号登录,左下角点击头像 - 管理员面板 - 设置 - 工具,点击 + 添加一个连接

  2. URI 输入 https://xxx-xxx.hf.space/grok2_images,密匙留空即可,点击保存,类似的,替换 grok2_images 添加其他服务

  3. 全部添加成功后先后点击右下角 保存和左上角 新对话,接着点击输入框的 + 号可以查看并开关已添加的MCP,建议需要时再打开

参考链接

81 个赞

牛哇!!!

5 个赞

紧跟大佬步伐,一步步长进

5 个赞

Reno 佬 :bili_019: :bili_019: :bili_019:

5 个赞

终于等到了,太强了reno佬 :tieba_087:

6 个赞

reno佬! :face_savoring_food:

5 个赞

抓住了!

6 个赞

厉害了啊

4 个赞

牛牛Reno佬,你的名字老是让我想起oppo的reno系列的广告哈哈哈 :heart_eyes:

4 个赞

佬太强了 :bili_081:

3 个赞

太强了reno佬 :tieba_087:

6 个赞

佬,弱弱问一句具体是咋部署的呢

2 个赞

太强 了

1 个赞

遇到个问题,跑通了但没图标
image


v0.6.2

2 个赞

我用的v0.6.0 :grin:

3 个赞

原来跑这来了

2 个赞

大佬太强了

1 个赞

谢谢你 好心人 我决定不升了 :yum:

不对,他这个调用逻辑有点坑,还是需要升级滴 :rofl:

3 个赞

刚发布我就跑了,可用程度属于是我有这个东西,肯定是能用,但是难用

1 个赞

太强了,reno佬!

1 个赞