使用说明

项目简介

Ithena MCP Governance SDK ('@ithena-one/mcp-governance') 是一个开源的SDK,旨在为基于 Model Context Protocol (MCP) 构建的服务器应用增加关键的治理功能。它构建在 '@modelcontextprotocol/typescript-sdk' 之上,通过插件式的架构,帮助开发者轻松集成身份验证、授权 (RBAC)、凭据管理、审计日志和追踪等企业级特性,从而构建安全、合规且可观测的 MCP 应用。

该 SDK 提供了两种使用方式:开源 SDK 自托管和 Ithena 托管平台(即将推出,需加入候补名单)。您可以选择最适合您需求的方式来增强您的 MCP 服务器。

主要功能点

  • 身份验证 (Identity Resolution): 可插拔的身份解析器 ('IdentityResolver'),用于确定请求的调用者身份。
  • 授权 (Role-Based Access Control, RBAC): 灵活的角色和权限管理系统 ('RoleStore', 'PermissionStore'),控制用户对资源和工具的访问权限。
  • 凭据管理 (Credential Resolution): 安全的凭据注入机制 ('CredentialResolver'),允许处理程序安全地访问所需的密钥和凭据。
  • 审计日志 (Auditing): 全面的审计日志记录 ('AuditLogStore'),满足合规性要求,追踪用户操作。
  • 请求作用域日志 (Request-Scoped Logging): 结构化日志记录 ('Logger'),方便监控和调试。
  • 追踪上下文传播 (Trace Context Propagation): 支持 W3C Trace Context ('TraceContextProvider'),便于分布式追踪。
  • 可配置的治理管道 (Configurable Governance Pipeline): 请求和通知处理流程可定制,易于集成到现有系统。

安装步骤

  1. 确保已安装 Node.js 和 npm (或 yarn, pnpm)。

  2. 在您的 MCP 服务器项目目录中,使用 npm, yarn 或 pnpm 安装 '@ithena-one/mcp-governance', '@modelcontextprotocol/sdk' 和 'zod':

    npm install @ithena-one/mcp-governance @modelcontextprotocol/sdk zod
    # 或使用 yarn
    yarn add @ithena-one/mcp-governance @modelcontextprotocol/sdk zod
    # 或使用 pnpm
    pnpm add @ithena-one/mcp-governance @modelcontextprotocol/sdk zod

服务器配置

MCP 客户端需要配置 MCP 服务器的启动命令 (command) 及其参数 (args) 才能与之建立连接。对于使用 '@ithena-one/mcp-governance' SDK 构建的 MCP 服务器,其核心是您基于 '@modelcontextprotocol/sdk' 实现的服务器应用,SDK 仅作为增强治理能力的中间件。

因此,MCP 客户端的服务器配置与您原有的基于 '@modelcontextprotocol/sdk' 的服务器启动方式基本一致。您需要配置的是如何启动您的 MCP 服务器应用程序,而不是 SDK 本身。

以下是一个通用的 JSON 格式配置示例,您需要根据您的实际服务器应用进行调整:

{
  "serverName": "MyGovernedMCPServer",
  "command": "node",
  "args": [
    "dist/index.js",  //  <--  指向您的服务器应用入口文件 (例如,编译后的 JavaScript 文件)
    "--config",       //  <--  可选:传递配置文件路径的参数
    "config/server-config.json" // <-- 可选:配置文件路径
  ],
  "transport": "stdio" //  <--  通常 MCP 客户端使用 stdio, SSE 或 WebSocket 连接
}

参数注释:

  • 'serverName': MCP 服务器的名称,自定义即可。
  • 'command': 启动服务器应用的命令。通常是 'node' (如果您的服务器是 Node.js 应用)。
  • 'args': 传递给启动命令的参数数组。
    • 'dist/index.js': 请替换为您实际的 MCP 服务器应用入口文件路径。这通常是您使用 '@modelcontextprotocol/sdk' 和 '@ithena-one/mcp-governance' SDK 构建的应用的编译输出文件。
    • '--config config/server-config.json': 可选。如果您的服务器应用需要配置文件,您可以通过参数传递配置文件路径。参数名称 ('--config') 和文件路径 ('config/server-config.json') 需要根据您的应用实际情况调整。
  • 'transport': MCP 客户端与服务器建立连接的传输协议。常用的有 'stdio', 'sse', 'websocket',根据您的服务器配置选择。

关键点:

  • 入口文件路径: 'args' 数组中的第一个元素 ('dist/index.js' 示例) 至关重要。请务必将其替换为您实际的服务器应用入口文件路径,确保 MCP 客户端能够正确启动您的服务器。
  • 配置文件参数: 如果您的服务器应用依赖配置文件,请在 'args' 数组中添加相应的参数和配置文件路径。
  • 传输协议: 'transport' 字段需要与您的 MCP 服务器配置的传输协议一致。

基本使用方法

  1. 创建一个基于 '@modelcontextprotocol/sdk' 的 MCP 服务器。

  2. 引入 '@ithena-one/mcp-governance' SDK,并使用 'GovernedServer' 类包装您的 'Server' 实例。

    import { Server } from '@modelcontextprotocol/sdk/server';
    import { GovernedServer } from '@ithena-one/mcp-governance';
    
    const baseServer = new Server({ name: 'MyBaseServer', version: '1.0' });
    const governedServer = new GovernedServer(baseServer, {
        // 配置 governance options,例如 IdentityResolver, AuditStore 等
        // ...
    });
    
    // 注册请求和通知处理程序 (使用 governedServer 而不是 baseServer)
    // governedServer.setRequestHandler(...)
    // governedServer.setNotificationHandler(...)
    
    // ... 启动服务器 ...
  3. 配置 Governance Options: 在 'GovernedServer' 的构造函数中,您可以配置各种治理选项,例如:

    • 'identityResolver': 自定义身份解析器实例。
    • 'roleStore', 'permissionStore': RBAC 角色和权限存储实例。
    • 'credentialResolver': 凭据解析器实例。
    • 'auditStore': 审计日志存储实例。
    • 'logger': 自定义日志记录器实例。
    • 'enableRbac': 启用或禁用 RBAC 功能。
    • 'failOnCredentialResolutionError': 配置凭据解析失败时是否终止请求。
    • 'auditDeniedRequests', 'auditNotifications': 配置是否审计被拒绝的请求和通知。
    • 'derivePermission', 'sanitizeForAudit', 'postAuthorizationHook': 自定义权限派生、审计日志脱敏和后授权钩子函数。
  4. 注册处理程序: 使用 'governedServer.setRequestHandler()' 和 'governedServer.setNotificationHandler()' 注册您的请求和通知处理程序,而不是 'baseServer'

  5. 连接和启动服务器: 使用 'governedServer.connect(transport)' 连接到指定的传输协议,并启动服务器。

    import { StdioTransport } from '@modelcontextprotocol/sdk/stdio';
    
    const transport = new StdioTransport();
    governedServer.connect(transport).then(() => {
        console.log('GovernedServer connected');
    });
  6. 实现接口: 根据您的需求,实现 SDK 提供的接口,例如 'IdentityResolver', 'RoleStore', 'PermissionStore', 'CredentialResolver', 'AuditLogStore' 和 'Logger',以便与您的基础设施集成。

请参考仓库中的 'README.md' 和 'docs' 目录下的文档,获取更详细的配置和使用说明。

信息

分类

开发者工具