远程MCP服务器

一个使用Google作为身份提供商的远程MCP服务器,用于身份验证和资源管理。

  • by kym6464
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 kym6464/mcp-server-remote

使用说明

mcp服务器远程

这个存储库是一个远程MCP服务器的演示,它使用谷歌作为身份提供者,用TypeScript编写。看这个 2分钟视频 查看概述。

入门指南

  1. 第一步是通过以下步骤获取OAuth客户端ID和客户端密钥 本指南建议使用以下授权重定向URI:

    • http://localhost:6274/oauth/callback/debug-由MCP检查员授权流程使用,如 测试区 在......下面
    • http://localhost:6274/oauth/callback-由MCP检查员使用
    • https://developers.google.com/oauthplayground-由谷歌使用 OAuth 2.0游乐场 如果你 使用您自己的凭据.
  2. 一旦你有了客户端ID和客户端密码,复制 .env.示例 到 .env.local 并替换假值。

  3. 跑 pnpm install 随后 pnpm run dev。您应该在终端中看到以下输出:

    Authorization Server listening on port 3001
    MCP Streamable HTTP Server listening on port 3000
    
  4. 跟随 测试区 下面测试您的MCP服务器。

(OPTIONAL) Claude Code setup
  1. 这 阻止env文件挂钩 要求你有 jq 安装在您的系统上。

  2. CLAUDE.md 希望你有https://github.com/modelcontextprotocol/typescript-sdk克隆到 ../mcp-typescript-sdk这使得Claude更容易引用SDK源代码,而不必深入node_modules。

  3. 创建 .claude/settings.local.json 基于以下内容:

    {
      "permissions": {
        "additionalDirectories": [
          "/path/to/mcp-typescript-sdk" // TODO
        ]
      },
      "hooks": {
        "PreToolUse": [
          {
            "matcher": "Read",
            "hooks": [
              {
                "type": "command",
                "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-env-files.sh"
              }
            ]
          }
        ]
      }
    }
    

测试

  1. 通过启动服务器 pnpm run dev
  2. 启动 MCP检查员 通过 npx @modelcontextprotocol/inspector 并在左侧窗格中设置以下选项:
    • 传输类型:流式HTTP
    • 网址:http://localhost:3000/mcp
    • 连接类型:直接
  3. 要测试身份验证,请执行以下操作 不 单击“连接”按钮。相反,
    • 单击“打开身份验证设置”按钮
    • 在OAuth身份验证卡中,单击引导令牌刷新
    • 使用“继续”按钮单击
  4. 要测试MCP服务器,请单击连接按钮。

发展

编码结构

授权方式

由于谷歌不支持动态客户端注册(DCR),我们需要在使用我们预先注册的谷歌OAuth客户端凭据的同时,向MCP客户端提供符合DCR的接口,从而弥合这一差距。这种方法的灵感来自 FastMCP的OAuthProxy.

优雅关闭

这 断开模块 充当中央注册表,其他模块可以在其中注册其清理方法。这对于创建有状态资源(例如数据库连接、HTTP服务器)的模块非常有用,这些资源需要在Node.js退出之前进行适当的清理。

如果没有中央注册表,我们需要:

  • 跟踪所有有状态的资源
  • 记得给每个人打电话进行清理
  • 分别处理每次清理中的错误
  • 呼叫 进程退出 这是不推荐的

使用此模块,我们只需要调用一个 disconnect() 功能正常,一切正常关闭。

历史

此代码是从以下位置初始化的 simple无状态流Http.ts MCP TypeScript SDK中的示例。