公司远程MCP
这是一个概念验证,展示了如何让AI代理远程访问由Git存储库支持的Firm工作区。它将工具从 firm_mcp crate并在上面添加了基于Git的持久性和OAuth身份验证。它不适用于生产用途或更大的团队。把它看作是你可以适应的起点。
运作原理
服务器使用Git存储库作为其数据层:
- 启动时,服务器克隆存储库并签出一个专用分支(默认:
mcp),合并到最新的main. - 读取操作 (列表、获取、查询、搜索等)在不修改任何内容的情况下对本地克隆进行操作。
- 写入操作 (添加实体,写入/替换/删除源代码)验证更改,应用更改,并创建推送到的原子提交
mcp支。 - 在一段时间的不活动之后,Cloud Run将实例缩放为零。下一个请求从一个新的克隆开始将其带回。
这意味着您的代理可以安全地读取和修改您的工作区:更改会落在一个单独的分支上,您可以按照自己的节奏进行查看和合并。
局限性
- 单用户。 没有冲突处理。如果本地状态与远程状态不同,服务器将重置以匹配源。不适合多人同时使用。
- 无状态的基础设施。 身份验证码和会话状态存在于内存中。当实例缩放到零时,它们就会丢失。JWT之所以能够生存,是因为它们是自给自足的。
- 没有动态客户端注册。 服务器使用预先配置的OAuth凭据。必须直接向您的MCP客户端提供客户端ID和密钥。
- 基本安全强化。 恒定时间凭证比较、PKCE强制、重定向URI验证、JWT签名。适合个人/小团队使用,不适合高安全环境。
设置
先决条件
- 启用计费的GCP项目
gcloudCLI已安装并经过身份验证- 包含贵公司工作区的GitHub存储库
- 具有repo访问权限的GitHub个人访问令牌
配置
复制 .env.example 到 .env 并填写以下值:
cp .env.example .env| 变量 | 描述 |
|---|---|
PROJECT_ID | 您的GCP项目ID |
REGION | GCP区域(默认值: europe-west1) |
SERVER_URL | 服务器的公共URL(如果省略,我们会首先尝试检测它的部署) |
REPO_URL | 贵公司工作空间存储库的HTTPS URL |
BRANCH | MCP提交的分支(默认值: mcp) |
GITHUB_TOKEN | 具有仓库访问权限的GitHub PAT |
OAUTH_CLIENT_ID | 您选择此选项,然后将其交给您的MCP客户端 |
OAUTH_CLIENT_SECRET | 您选择此选项,然后将其交给您的MCP客户端 |
JWT_SIGNING_KEY | 用于签名令牌的密钥(如果省略,则在首次部署时自动生成) |
ALLOWED_REDIRECT_URIS | MCP客户端的逗号分隔的OAuth回调URL |
WORKSPACE_SUBDIR | 存储库中包含工作区的子目录(可选) |
对于Claude,将重定向URI设置为:
ALLOWED_REDIRECT_URIS=https://claude.ai/api/mcp/auth_callback,https://claude.com/api/mcp/auth_callback部署
./deploy.sh脚本:
- 启用云运行、云构建和密钥管理器API
- 商店
GITHUB_TOKEN和OAUTH_CLIENT_SECRET秘密经理 - 生成一个
JWT_SIGNING_KEY如果秘密管理器不存在 - 构建容器并将其部署到Cloud Run
完成后,它会打印服务器URL和MCP客户端所需的凭据。
连接您的MCP客户端
在Claude(或另一个支持OAuth远程服务器的MCP客户端)中,添加一个自定义连接器:
| 设置 | 值 |
|---|---|
| 服务器URL | https://.run.app/mcp |
| 客户端ID | OAUTH_CLIENT_ID 您已配置 |
客户秘密 OAUTH_CLIENT_SECRET 您已配置 |
服务器使用PKCE实现OAuth 2.0授权代码流。在第一次连接时,您的客户端将自动完成OAuth握手。
许可证
AGPL-3.0
