MCP协议工具集

提供连接LLM/MCP客户端与外部系统的即用型服务和可重用工具包,支持GitHub、Outlook、Slack等平台集成。

  • by viant
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 viant/mcp-toolbox

使用说明

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,以及 uuid
  • GET /github/auth/verify 验证对回购默认分支的访问权限;接受 alias, domain, url=domain/owner/repo,以及 uuid
  • GET /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.Azure secrets(支持文件/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-mcp
    • go build ./outlook/cmd/outlook-mcp
  • 使用就地运行 go run 如快速入门所示。
  • MCP HTTP服务器由提供 github.com/viant/mcp/server 并说出 github.com/viant/mcp-protocol.

贡献

欢迎投稿!请打开问题或拉取请求,并提供清晰的复制细节和拟议的更改。

许可证

源代码在Apache许可证2.0下可用。看 LICENSE 了解详情。

作者

  • 阿德里安·维塔斯
  • 有活力的贡献者