使用说明
mcp工具箱-模型上下文协议服务和工具
此存储库提供即用型MCP服务和可重用包,将LLM/MCP客户端连接到外部系统。它目前包括GitHub和Microsoft Outlook服务,以及一个小型身份验证助手。
- 动机
- 包括什么
- 快速开始
- 配置
- 发展
- 贡献
- 许可证
- 作者
动机
该项目的目标是使向MCP兼容客户端公开常见的开发人员和生产力系统变得简单。每项服务:
- 实现具有紧凑HTTP端点的MCP服务器。
- 通过清晰、用户友好的提示处理OAuth/设备登录流。
- 展示针对目标系统量身定制的实用工具和操作。
包括什么
-
GitHub MCP
- 二元的:
github/cmd/github-mcp - 服务包:
github/service - MCP工具:
github/mcp
- 二元的:
-
Outlook MCP
- 二元的:
outlook/cmd/outlook-mcp - 服务+工具:
outlook/mcp,outlook/service,outlook/graph
- 二元的:
-
松弛MCP
- 二元的:
slack/cmd/slack-mcp - 服务+工具:
slack/mcp,slack/service
- 二元的:
-
浏览器MCP
- 二元的:
browser/cmd/browser-mcp - 服务+工具:
browser/mcp,browser/service
- 二元的:
-
桌面MCP
- 二元的:
desktop/cmd/desktop-mcp - 服务+工具:
desktop/mcp,desktop/service
- 二元的:
-
共享
- 身份验证助手:
auth(从上下文中的JWT派生调用者命名空间)
- 身份验证助手:
注意:存储库中可能存在一些本地或实验模块,但它们有意不属于本发行版概述的一部分。
快速开始
先决条件:
- 转到1.25+
GitHub MCP
运行一个带有GitHub操作端点和使用GitHub设备代码的身份验证流的MCP服务器。客户端ID是可选的;如果省略,您仍然可以通过HTTP POST令牌。
运行:
go run ./github/cmd/github-mcp \
-a :7789 \
-o "ipd_xxx.enc|blowfish://default" -i
端点(已选择):
GET /–根重定向/信息POST /mcp/call–MCP RPC端点POST /github/auth/start–启动设备代码流(返回验证URL+代码)GET /github/auth/oob-带外UI,用于粘贴令牌、基本凭据或启动设备流;接受alias,可选domain,可选url=domain/owner/repo,以及uuid绑定到命名空间POST /github/auth/token-摄入个人访问令牌或基本凭据;接受alias,domain,可选owner,repo,以及uuid(推荐)绑定到命名空间GET /github/auth/check-检查令牌是否存在;接受alias,domain,可选owner,repo,以及uuidGET /github/auth/verify验证对回购默认分支的访问权限;接受alias,domain,url=domain/owner/repo,以及uuidGET /github/auth/pending–列出当前命名空间的待定设备代码POST /github/auth/pending/clear–清除当前命名空间的挂起设备代码
服务器注册的常用工具包括列出存储库、问题/PR、创建问题/PR,评论、搜索问题、签出存储库、列出存储库路径和读取文件。
Outlook MCP
使用设备代码流运行与Microsoft Graph集成的MCP服务器。您可以直接传递Azure客户端详细信息,也可以通过 scy 编码资源。
带着旗帜奔跑:
go run ./outlook/cmd/outlook-mcp \
--addr :7788 \
--azure-ref "azure-cred|blowfish://default" \
--oauth2config "idp_xxx.enc|blowfish://default" \
--use-id-token
或环境变量:
export OUTLOOK_CLIENT_ID=00000000-0000-0000-0000-000000000000
# Optional: OUTLOOK_TENANT_ID defaults to "organizations" if not set.
# export OUTLOOK_TENANT_ID=organizations
export OUTLOOK_AZURE_REF='gcp://secretmanager/projects/myproj/secrets/azure-cred|blowfish://default'
go run ./outlook/cmd/outlook-mcp \
-addr :7788 \
--secretsBase mem://localhost/mcp-outlook \
--allow-unverified-bearer-context
有关Outlook配置的详细信息,请参阅 outlook/mcp/README.md.
松弛MCP
运行一个MCP服务器,该服务器使用机器人程序令牌调用Slack Web API。作为代理客户端时,不需要最终用户OAuth。
运行:
go run ./slack/cmd/slack-mcp \
-a :7791 \
--secretsBase mem://localhost/mcp-slack \
--token-ref "file://~/.secret/slack-bot-token|blowfish://default"
工具:
slackListChannels–列出带分页的频道。slackPostMessage–将文本或Block Kit JSON发布到通道或线程。
秘密:
--token-ref通过scy Encoded Resource加载机器人令牌(纯字符串或{token:"xoxb-..."}).- 您还可以将每个别名的机密存储在
<secretsBase>/slack/<namespace>/<alias>/token(任何AFS/scy URL)。别名机密优先于--token-ref.
配置
两台服务器都从以下位置导出公共回调基URL -addr 自动地(例如。, http://localhost:7789).你可以用以下命令覆盖它 --public-base-url 使用非本地主机(在代理后面或集群服务中很有用),例如 --public-base-url http://mcp-toolbox-github.agently.svc.cluster.local:7789.
存储目录默认为用户配置目录中的子文件夹。
-
GitHub
- 旗帜:
-addr,--public-base-url,-client-id,-storage,-o/--oauth2config,-i/--use-id-token,--secretsBase,--wait-secs,--elicit-cooldown-secs - 笔记:
--wait-secs:通话期间等待凭据的最大时间(默认值300)--elicit-cooldown-secs:在每个命名空间+别名+域的重复凭据提示之间冷却(默认值60)
- 旗帜:
-
展望
- 旗帜:
-addr,--public-base-url,-client-id,-tenant-id,-azure-ref,-o/--oauth2config,-i/--use-id-token,--secretsBase,--allow-unverified-bearer-context,--namespace-claim-keys - 环境:
OUTLOOK_CLIENT_ID,OUTLOOK_TENANT_ID,OUTLOOK_AZURE_REF -azure-ref/OUTLOOK_AZURE_REF用途scy要加载的编码资源cred.Azuresecrets(支持文件/GCP/AWS后端和KMS,如blowfish://default).
- 旗帜:
命名空间隔离
Outlook MCP请求和存储的Graph凭据由严格的标识命名空间隔离。默认索赔顺序为 email,sub,仅可配置 --namespace-claim-keys第一个配置的非空声明在未经验证的JWT解析后使用。丢失、格式错误、默认和令牌哈希结果将被拒绝;此流没有静态或共享命名空间回退。
- 启用服务器身份验证(
-o/--oauth2config),现有的OAuth/BFF授权器分支提供请求令牌。不要将此选项与--allow-unverified-bearer-context. - 对于本地直接承载HTTP,显式传递
--allow-unverified-bearer-context。然后,被动网桥只复制一个非空的Authorization: Bearer ...将标头插入请求上下文。它不会验证JWT签名。 - Active Outlook HTTP需要这两种模式之一。一个空
--addr保持有效并禁用HTTP。
此仓库中的每个命名空间分隔:
- GitHub:令牌、等待/唤醒键和repo树缓存按名称空间键控。每个会话和每个命名空间都会重复引用(没有跨命名空间抑制)。带外流量包括
uuid它将UI绑定到原始名称空间,以便令牌在正确的范围内节省空间。 - Outlook:身份验证记录(磁盘/AFS)、挂起的登录、草稿栏附件和内存中的客户端/凭据使用相同的严格身份。并发获取按身份+别名序列化,以避免重复提示。
对于远程部署很重要:
- 对于远程部署,请使用
-o以及适当的令牌模式(通常-i用于携带配置的身份声明的ID令牌),并确保客户端完成BFF/auth流程。 --allow-unverified-bearer-context是已控制直接承载标头的部署的显式信任边界选项。它不执行JWT验证。
HTTP身份验证端点和BFF:
- JSON-RPC(
/mcp)在以下情况下,电话由授权人调解-o已设置。 - 展望
/outlook/auth/start,/check,/reset,/pending,以及/pending/clear要求持有身份声明的直接持有人JWT;一namespace查询参数不能覆盖它。/outlook/auth/device/{uuid}OAuth回调不需要Bearer,因为它们在开始时使用挂起的登录中存储的身份。GitHub的OOB行为没有改变。
GitHub结账目的地:
- 当
destDir如果不提供,签出将写在命名空间路径下以避免冲突:- 起源:
storageDir如果已设置,否则操作系统临时目录 - 最终路径:
<parent>/<namespace>__<alias>/gh_<owner>_<repo> - 例子:
/tmp/alex@example.com__work/gh_viant_mdp
- 起源:
Secrets存储后端
GitHub和Outlook都可以通过以下方式将凭据持久化到存储后端 --secretsBase (AFS/scy URL):
- mem://-进程生命周期内的内存存储(非常适合本地开发/测试)
- 例子:
--secretsBase mem://localhost/mcp-github - 例子:
--secretsBase mem://localhost/mcp-outlook
- 例子:
- file://–本地文件系统路径
- 例子:
--secretsBase file://~/.mcp/github - 例子:
--secretsBase file://~/.mcp/outlook
- 例子:
- Cloud/KMS–使用scy Encoded Resource模式加载机密并与AFS URL配对存储
- 例子:
-o gcp://secretmanager/projects/<proj>/secrets/idp|blowfish://default
- 例子:
布局是命名空间的,以强制用户隔离:
- GitHub代币:
<secretsBase>/github/<ns>/<alias>/<domain>[/<owner>/<repo>]/token - Outlook身份验证记录:
<secretsBase>/outlook/<ns>/<alias>/auth_record.json
BFF注释
- 服务器使用默认的后端-前端(BFF)标头(
X-Authorization-Exchange)和饼干(BFF-Auth-Session)就像mcpsqlkit一样。不需要自定义重定向URI;客户应遵循最初的401挑战,完成交换,并保留cookie以备后续使用/mcp电话。
发展
- 构建服务器:
go build ./github/cmd/github-mcpgo build ./outlook/cmd/outlook-mcp
- 使用就地运行
go run如快速入门所示。 - MCP HTTP服务器由提供
github.com/viant/mcp/server并说出github.com/viant/mcp-protocol.
贡献
欢迎投稿!请打开问题或拉取请求,并提供清晰的复制细节和拟议的更改。
许可证
源代码在Apache许可证2.0下可用。看 LICENSE 了解详情。
作者
- 阿德里安·维塔斯
- 有活力的贡献者