README
🚀 伯纳斯空间(Bernerspace)
伯纳斯空间是一个统一的MCP服务器,支持所有启用OAuth的集成服务。它解决了当前MCP服务器使用和集成过程中的痛点,只需一个服务器、一个JWT,就能轻松集成多种工具,为用户提供便捷的使用体验。
🚀 用于所有支持OAuth集成的统一MCP服务器
一个服务器 · 一个JWT · 多种工具
✅ 当前实时集成:Slack — 47个工具 已测试并可用
🔜 即将推出: Gmail · Google日历 · Notion
🎯 目标: 100+ 集成
🚀 快速开始
1. 环境配置
创建一个 .env 文件,并设置以下变量:
JWT_SECRET=your-jwt-signing-secret
DATABASE_URL=postgresql://localhost:5432/mcp_server
CLIENT_ID=<slack_client_id>
CLIENT_SECRET=<slack_client_secret>
SLACK_REDIRECT_URI=http://localhost:8000/mcp/slack/oauth/callback
2. 安装依赖(二选一)
- 使用pip
python3 -m venv .venv && source .venv/bin/activate pip install -e . - 使用uv
uv venv && source .venv/bin/activate uv pip install -e .
3. 运行服务器
- 使用Python
服务器将监听 http://localhost:8000。python server.py - 使用Docker
服务器将监听 http://localhost:8000。docker build -t bernerspace-mcp . docker run --env-file .env -p 8000:8000 bernerspace-mcp - 使用Docker Compose
docker compose up -d
4. 创建JWT以调用MCP服务器
python generate_jwt.py --user-id <your_user_id>
使用打印出的令牌作为:Authorization: Bearer TOKEN
✨ 主要特性
解决痛点
目前使用或集成MCP服务器存在诸多痛点,而伯纳斯空间有效解决了这些问题:
- 大多数MCP服务器缺乏OAuth功能,限制了用户体验。伯纳斯空间具备完善的OAuth中间件,为用户提供更好的使用体验。
- 每个MCP服务器都需要单独部署和管理,增加了运营成本。伯纳斯空间实现了统一部署和管理,降低了运营成本。
- 集成混乱:不同MCP服务器的认证层不同,使得统一集成几乎不可能。伯纳斯空间提供了一致的MCP工具接口,实现了统一集成。
功能优势
- 通过中间件在服务间使用单个JWT(HS256,验证发行者/受众)。
- 每个集成都有OAuth中间件(Slack已上线;更多即将推出),并使用数据库支持的令牌存储。
- 为每个服务提供一致的MCP工具接口。
- 提供可自托管的统一端点,例如:
📦 安装指南
安装步骤请参考快速开始部分。
💻 使用示例
基础用法
VS Code MCP客户端配置
示例客户端条目(mcp.json):
{
"servers": {
"slack": {
"url": "http://localhost:8000/mcp/slack",
"type": "http",
"headers": {
"Authorization": "Bearer YOUR_JWT"
}
}
}
}
如果用户尚未完成OAuth,工具调用将返回一个包含 requires_auth: true 和 oauth_url 的对象,你可以打开该URL完成授权。
VS Code MCP客户端设置
在VS Code用户设置中使用此 mcp.json(将 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?"})
📚 详细文档
所有设置说明、集成指南和示例都可以在我们的Notion文档中找到: 🔗 伯纳斯空间快速入门文档
文档会定期更新,包含以下内容:
- 新集成的快速入门指南
- 分步安装说明
- 每个工具的使用示例
- 路线图和贡献指南
🔧 技术细节
OAuth流程(Slack)
- GET
/mcp/slack返回oauth_url和授权工作区的说明。 - Slack重定向到
SLACK_REDIRECT_URI(默认为/mcp/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)。 - 通过
DATABASE_URL配置Postgres。
📄 许可证
本项目采用 MIT许可证 进行许可。
微信扫一扫