mcpField
M
MCP Server Demo: OAuth, TypeScript & Firestore Patterns

MCP Server Demo: OAuth, TypeScript & Firestore Patterns

本地服务
portal.one开发工具1073 周前更新

关于 MCP Server Demo: OAuth, TypeScript & Firestore Patterns

这是一个用于学习的 TypeScript MCP 服务示例,展示 OAuth 2.0 令牌验证、Firestore 交互和多租户工作区访问模式。它面向构建 MCP 服务的开发者,不是可直接投入生产的完整方案。

主要功能

  1. 01OAuth 2.0 Bearer 令牌验证
  2. 02工作区访问控制
  3. 03Firestore 数据交互
  4. 04Zod 输入校验
  5. 05TypeScript 类型安全

适用场景

  1. 01参考安全 MCP 服务的架构
  2. 02学习多租户工作区授权
  3. 03探索 Firestore 模拟器开发

MCP 相关

实现 MCP Resource Server,注册工具并处理客户端请求;验证由独立 OAuth 2.0 授权服务器签发的令牌。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

MCP 服务演示:OAuth、TypeScript 与 Firestore 模式

许可证:MIT

此代码仓库提供了一个精简的示例实现,用于演示模型上下文协议(MCP)服务。它展示了随附文章中详细介绍的架构模式、安全注意事项(OAuth 2.0)和开发实践(TypeScript、Firestore、Zod):

➡️ 阅读完整文章:《使用 OAuth、TypeScript 和实战经验构建可用于生产环境的 MCP 服务》

此演示聚焦于 MCP 资源服务 组件,并假设你已另行部署 OAuth 2.0 授权服务。

更新:MCP SDK 1.12.0 版本引入了授权服务元数据(/.well-known/oauth-authorization-server)支持,因此不再需要通过 MCP 资源服务代理 OAuth 调用。

用途

此代码仓库旨在作为学习资源,用于:

  • 演示如何使用 TypeScript MCP SDK 实际实现 MCP 服务。
  • 说明如何集成 OAuth 2.0 来保护工具调用。
  • 展示管理工作区上下文和多租户的模式。
  • 提供使用 Zod 定义和验证架构的示例。
  • 介绍如何组织工具、使用高阶组件(HOC)处理通用逻辑,以及与 Firestore 交互。

这并不是一个适用于所有用例、可直接部署到生产环境的服务。 它省略了特定业务逻辑,并假设已有 OAuth 授权服务。

演示的主要功能和模式

  • MCP TypeScript SDK 集成: 核心服务设置和工具注册。
  • OAuth 2.0 令牌验证: 安全处理 Bearer 令牌(通过 SDK 中间件)。
  • 工作区上下文管理:
    • 在工具参数中显式指定 workspace_id。
    • 使用 withWorkspaceAccess 高阶组件(HOC)进行身份验证和工作区授权。
  • Firestore 集成:
    • 获取用户数据、OAuth 令牌信息(概念性)和特定于工具的数据。
    • 使用 Firestore 模拟器进行本地开发和测试。
  • 使用 Zod 定义架构和进行验证: 为工具定义输入架构,并利用 Zod 进行运行时验证。
  • 类型安全开发: 利用 TypeScript 编写健壮的代码。
  • 实用函数: 使用 fetchResourceList 获取数据的 DRY 示例。
  • 标准化错误处理: 使用 throw new Error() 清晰地传递错误。
  • 工具结构示例: 展示上述模式的基本工具定义。
  • 环境变量配置: 配置数据库和 OAuth 设置。

架构概述

此演示代表 MCP 资源服务。它需要由单独的 OAuth 授权服务颁发的 OAuth 2.0 Bearer 令牌。

[Client / LLM with MCP Client SDK]
       |
       | (HTTPS Request with Bearer Token)
       v
[This MCP Resource Server (Node.js / TypeScript)]
       |  1. MCP SDK Middleware (parses request, extracts token)
       |  2. `withWorkspaceAccess` HOC
       |     a. Using the userId associated with the token
       |     b. Validates the user can access the workspace_id in the request
       |  3. Tool Handler Execution (interacts with Firestore based on validated context)
       |
       v
[Google Firestore (Database)]

OAuth 授权服务(由你提供或使用已有服务)负责:

  • 对用户进行身份验证。
  • 颁发 OAuth 令牌(访问令牌、刷新令牌)。
  • 管理 OAuth 客户端(动态发现)。

然后,此资源服务会验证从客户端收到的令牌。

前置条件

  • Node.js(建议使用 v18.x 或更高版本)
  • npm 或 yarn
  • 可访问已启用 Firestore 的 Google Cloud 项目,或已配置用于 Firestore 模拟器的 Google Cloud SDK。
  • 已有 OAuth 2.0 授权服务。

快速入门

  1. 克隆仓库:

    git clone https://github.com/portal-labs-infrastructure/mcp-server-blog
    cd mcp-server-blog
    
  2. 安装依赖:

    npm install
    # or
    yarn install
    
  3. 设置环境变量: 将 .env.example 文件复制为名为 .env 的新文件:

    cp .env.example .env
    

    然后,编辑 .env 并填写所需的配置值:

    # Firestore Configuration
    # If using Firestore Emulator, these might not all be strictly needed,
    # but ensure your gcloud CLI is configured or provide necessary emulator host.
    PROJECT_ID="your-gcp-project-id"
    # FIRESTORE_EMULATOR_HOST="localhost:8081" # Uncomment if using emulator and not relying on gcloud config
    
    # OAuth 2.0 Configuration (for this Resource Server to validate tokens)
    # This depends on your OAuth Authorization Server's setup.
    OAUTH_ISSUER_URL="https_your_auth_server_com"
    
    # MCP Server Configuration
    BASE_URL="http://localhost:8080" # URL this server is accessible at
    

    重要: OAuth 配置至关重要。此服务需要知道如何验证由授权服务颁发的令牌。请查阅授权服务的文档。

  4. (可选)填充 Firestore 数据: 如果你有数据填充脚本,或者想要手动向 Firestore 实例/模拟器添加一些示例用户、OAuth 令牌(需与授权服务颁发的令牌相符)和工作区数据,请现在进行。这会让工具测试更有意义。

运行服务

  • 开发模式(使用 Nodemon 自动重启):
    npm run dev
    
  • 生产模式: bash npm run build npm start 服务通常会在 http://localhost:8080 启动(或在 .env 中指定的端口启动)。

使用 Firestore 模拟器运行

  1. 确保已安装并配置 Google Cloud SDK。
  2. 在单独的终端中启动 Firestore 模拟器:
    gcloud emulators firestore start --host-port=localhost:8081
    
    (如有需要,请调整端口并更新 .env 中的 FIRESTORE_EMULATOR_HOST,或者确保应用能够通过 gcloud 环境变量自动检测到它。)
  3. 按照上述说明运行 MCP 服务。它应会连接到模拟器。

代码中展示的关键模式与概念

请在 src 目录中查看以下模式:

  • src/index.ts: MCP 服务的主要设置。
  • src/controllers/mcpController.ts: 工具注册和处理传入请求的 MCP 控制器。
  • src/services/: 处理 Firestore 交互的服务层。
  • src/tools/: 示例工具定义。
    • 每个工具都有一个 inputSchema(Zod)和一个 handler。
    • 处理程序可能会使用 withWorkspaceAccess 封装。
  • src/utils/withWorkspaceAccess.ts: 用于检查工作区的高阶组件。
  • src/utils/fetchResourceList.ts: 可复用数据获取工具的示例。
  • src/utils/types.ts: 共享的 TypeScript 类型和 Zod 模式(例如,EntityType、ResourceType)。

目录结构

.
├── src/
│   ├── tools/                # Tool definitions
│   │   ├── getAgentTool.ts
│   │   └── ...
│   ├── utils/                # Shared utilities, HOCs, types
│   │   ├── withWorkspaceAccess.ts
│   │   ├── types.ts
│   │   └── ...
│   ├── services/             # Interaction logic
│   │   ├── firestoreService.ts    # Firestore interaction logic
│   │   └── ...
│   ├── config/               # Configuration loading
│   └── index.ts              # Main server setup
├── .env.example              # Example environment variables
├── .env                      # Your local environment variables (ignored by git)
├── package.json
├── tsconfig.json
└── ...

此演示的内容与非内容

  • 是: 展示用于构建安全、多租户 MCP 资源服务的服务端模式。
  • 是: 展示如何在 MCP 环境中应用 TypeScript、Zod、Firestore 和 OAuth 概念。
  • 不是: 完整的生产级 OAuth 授权服务(你需要自行提供)。
  • 不是: 可直接使用的库或 SDK(这是一个示例应用)。
  • 不是: 包含复杂的业务逻辑(工具仅用于示例说明)。

贡献

这主要是一个演示仓库。不过,如果你发现错误,或对如何让所展示的模式更加清晰有建议,欢迎提交 issue 或拉取请求。

许可证

本项目采用 MIT License 许可,详情请参阅 LICENSE 文件。

致谢

本演示深受文章中分享的经验和模式启发:“使用 OAuth、TypeScript 和我们的实战经验构建生产就绪的 MCP 服务”。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。