Bernerspace
一台MCP服务器·您的所有集成·零麻烦
](https://github.com/bernerspace/bernerspace/stargazers)    
🚀 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文档中找到:
文档会定期更新:
- 新集成的快速入门指南
- 分步安装说明
- 每种工具的使用示例
- 路线图和贡献指南
快速启动
- 环境
创建一个 .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_SECRET=
SLACK_REDIRECT_URI=http://localhost:8000/slack/oauth/callback
# Optional: encrypt tokens at rest (comma-separated MultiFernet keys)
# TOKEN_ENCRYPTION_KEYS=- 安装依赖项(选择一个)
- 使用pip
- python3-m venv.venv&&source.venv/bin/activate - pip安装-e。
- 使用紫外线
- uv-ven&&来源.venv/bin/activate - 紫外线管道安装-e。
- 运行服务器
- 使用Python
- python服务器.py - 服务器将继续监听
- 使用Docker
- docker构建-t bernerspace mcp。 - docker run--env文件.env-p 8000:8000 bernerspace mcp - 服务器将继续监听
- 使用Docker Compose
- docker组成-up-d
- 创建一个JWT来调用MCP服务器
- python generate_jwt.py--用户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。
比分咬的很紧
- 📧 给我发电子邮件 ranga.sumit1999@gmail.com
- 🐦 在推特上关注&DM(X): @SumitSandbox
无论您是首次贡献者还是经验丰富的开发人员,我们都很乐意听取您的意见并与您合作!
许可证
该项目根据 MIT许可证.
