统一MCP服务器

Bernerspace是一个统一的MCP服务器,提供OAuth中间件和统一的JWT认证,支持多种集成工具,适用于开发效率提升和多工具整合场景。

  • by bernerspace
  • Python
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 bernerspace/bernerspace

使用说明

Bernerspace

一台MCP服务器·您的所有集成·零麻烦

🚀 Unified MCP server for all OAuth-enabled integrations
One server · One JWT · Many tools

✅ Current Live Integration: Slack — 47 tools tested & available
🔜 Coming Soon: Gmail · Google Calendar · Notion
🎯 Goal: 100+ integrations

为什么

现在使用或集成MCP服务器很痛苦,因为:

  • 大多数MCP服务器缺乏OAuth功能,限制了用户体验。
  • 每个MCP服务器都需要单独的部署和管理,增加了运营开销。
  • 集成混乱:MCP服务器上不同的身份验证层使得统一集成几乎不可能。

所得

  • 通过中间件跨服务的单个JWT(通过JWKS的HS256或RS256;发布者/受众验证)。
  • OAuth中间件与数据库支持的令牌存储的每次集成(Slack live;更多即将推出)。
  • 每个服务的MCP工具接口一致。
  • 您可以自托管的统一端点,例如:

当前状态

  • 当前实时集成: Slack 有47个经过充分测试的工具可供使用。
    → 了解有关Slack工具的更多信息: docs/lack/tools.md
  • 马上就来: Gmail, 谷歌日历,以及 概念.

📖 文档

所有设置说明、集成指南和示例都可以在我们的Notion文档中找到:

🔗 Bernerspace快速入门文档

文档会定期更新:

  • 新集成的快速入门指南
  • 分步安装说明
  • 每种工具的使用示例
  • 路线图和贡献指南

快速启动

  1. 环境

创建一个 .env (参见 .env.example)具有以下变量:

# Database
DATABASE_URL=postgresql://localhost:5432/mcp_server

# Auth (choose one)
# Option A: HS256
JWT_SECRET=your-jwt-signing-secret
# Option B: RS256 via JWKS
# JWT_JWKS_URL=https://your-auth-domain/.well-known/jwks.json
# JWT_ISSUER=https://your-auth-domain/
# JWT_AUDIENCE=my-api

# Slack OAuth
SLACK_CLIENT_ID=<slack_client_id>
SLACK_CLIENT_SECRET=<slack_client_secret>
SLACK_REDIRECT_URI=http://localhost:8000/slack/oauth/callback

# Optional: encrypt tokens at rest (comma-separated MultiFernet keys)
# TOKEN_ENCRYPTION_KEYS=
  1. 安装依赖项(选择一个)
  • 使用pip
    • python3-m venv.venv&&source.venv/bin/activate
    • pip安装-e。
  • 使用紫外线
    • uv-ven&&来源.venv/bin/activate
    • 紫外线管道安装-e。
  1. 运行服务器
  • 使用Python
  • 使用Docker
    • docker构建-t bernerspace mcp。
    • docker run--env文件.env-p 8000:8000 bernerspace mcp
    • 服务器将继续监听 http://localhost:8000
  • 使用Docker Compose
    • docker组成-up-d
  1. 创建一个JWT来调用MCP服务器
  • python generate_jwt.py--用户id<your_user_id>
  • 将打印的令牌用作:授权:持票人令牌

OAuth流(Slack)

  • GET/松弛退货 oauth_url 以及授权工作空间的指令。
  • Slack重定向到 SLACK_REDIRECT_URI (默认为 /slack/oauth/callback).
  • 服务器交换代码,丰富令牌细节,并将其持久化在Postgres中。
  • 令牌存储在表中 oauth_tokens 带复合钥匙 (client_id, integration_type) 哪里 client_id =您的JWT主题(sub).

数据库

  • 使用Alembic管理架构(包括迁移)。
  • 表: oauth_tokens(client_id, integration_type, token_json, stored_at).
  • 通过以下方式配置Postgres DATABASE_URL.
  • 令牌可以在静止时加密 TOKEN_ENCRYPTION_KEYS 已设置。

MCP客户端配置

示例客户端条目(mcp.json):

{
  "servers": {
    "slack": {
      "url": "http://localhost:8000/mcp/slack",
      "type": "http",
      "headers": {
        "Authorization": "Bearer YOUR_JWT"
      }
    }
  }
}

如果用户尚未完成OAuth,工具调用将返回一个对象 requires_auth: true 和a oauth_url 您可以打开以完成授权。

VS代码MCP客户端设置

用这个 mcp.json 在VS Code用户设置中(替换 JWT 使用您生成的令牌):

{
  "servers": {
    "slack": {
      "url": "http://localhost:8000/mcp/slack",
      "type": "http",
      "headers": {
        "Authorization": "Bearer JWT"
      }
    }
  },
  "inputs": []
}

LangChain示例

from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent

client = MultiServerMCPClient(
    {
        "slack": {
            "transport": "streamable_http",
            "url": "http://localhost:8000/mcp/slack",
            "headers": {
                "Authorization": "Bearer YOUR_TOKEN"
            },
        }
    }
)

tools = await client.get_tools()
agent = create_react_agent("openai:gpt-4.1", tools)
response = await agent.ainvoke({"messages": "Can you send hello message to my #general groups?"})

码头工人

你可以在Docker中运行Bernerspace MCP:

docker build -t bernerspace-mcp .
docker run --env-file .env -p 8000:8000 bernerspace-mcp

🚀 路线图

我们才刚刚开始。我们的目标是支持 100+集成 因此,您可以轻松地将任何第三方服务连接到MCP服务器。

即将推出

  • 📧 Gmail
  • 📅 谷歌日历
  • 📂 Google 云端硬盘
  • 🗂️ 概念
  • 💻 GitHub
  • 💬 Discord 的中文翻译是“不和谐”或“纷争”。
  • 📊 气垫桌
  • 🔍 弹性搜索
  • 📝 汇流

…还有几十辆在路上。

🤝 贡献

我们欢迎各种各样的贡献——无论是修复错误、建议功能、改进文档,还是只是分享反馈。

贡献方式

  • ⭐ 标记回购 以表示您的支持并帮助他人发现Bernerspace。
  • 🐛 报告错误 所以我们可以快速修复它。
  • 💡 请求功能 或提出改进建议。
  • 🛠️ 提交包含代码更改、文档更新或测试的Pull Request。

比分咬的很紧

无论您是首次贡献者还是经验丰富的开发人员,我们都很乐意听取您的意见并与您合作!

许可证

该项目根据 MIT许可证.