项目简介

本项目是一个演示如何为Model Context Protocol (MCP) 服务器实现强大的认证和授权机制的示例。它结合使用了AWS Cognito进行用户身份验证和客户端认证,以及AWS Verified Permissions (AVP) 实现基于策略的细粒度访问控制,特别是对服务器提供的工具进行权限管理。

主要功能点

  • 实现一个符合MCP协议规范的基础服务器。
  • 通过OAuth2和AWS Cognito实现客户端(如Agent应用)对MCP服务器的认证。
  • 使用AWS Verified Permissions (AVP) 定义和 enforcing 访问策略。
  • 基于客户端的Scopes和AVP策略,过滤 MCP 服务器返回的工具列表,确保客户端只能看到其被授权使用的工具。
  • 允许工具根据经过认证的用户身份获取临时AWS凭证, enabling 用户级别的资源访问控制(例如,S3和DynamoDB操作)。
  • 提供一个简单的客户端应用来演示不同的权限如何影响可用的工具。

安装步骤

  1. 克隆仓库并安装依赖:
    git clone https://github.com/birenderpal/mcp-authentication-demo.git
    cd mcp-authentication-demo
    npm run install:all
  2. 部署AWS Amplify后端:
    cd client
    npx amplify deploy # 或者使用 npx ampx sandbox 进行本地测试
    这将创建Cognito用户池、身份池等资源。
  3. 手动配置AWS资源: 根据README中的指示,您需要在AWS控制台中手动配置Amazon Verified Permissions (AVP) 策略存储、Schema和策略,以及配置Cognito身份池的角色映射。这些是实现细粒度授权的关键步骤。
  4. 更新服务器配置:根据Amplify部署输出(位于 'client/amplify_outputs.json')以及您的手动AWS配置,更新服务器的环境变量或配置文件(通常是 '.env' 或类似的机制),提供Cognito用户池ID、身份池ID、AVP策略存储ID和AWS区域。

服务器配置

MCP客户端需要知道如何连接到此服务器。以下是基于项目代码和结构推断出的MCP服务器配置信息(JSON格式),您可以将其提供给您的MCP客户端:

{
  "name": "demoserver",
  "command": "node",
  "args": [
    "server/src/index.js"
  ],
  "url": "http://localhost:3001/mcp",
  "capabilities": {}
}
  • 'name': MCP服务器的唯一名称,用于标识。
  • 'command': 启动MCP服务器进程的命令(例如,'node')。
  • 'args': 传递给启动命令的参数,这里是服务器的入口文件路径。
  • 'url': MCP服务器监听的HTTP URL,客户端通过此URL发送JSON-RPC请求。
  • 'capabilities': 服务器声明支持的MCP协议能力,具体内容取决于服务器实现。

请注意,上述 'url' 是本地开发环境的默认设置。在生产环境中,您需要将其替换为实际部署后服务器的公共可访问URL。

基本使用方法

  1. 确保您已完成所有安装和配置步骤(包括手动配置AWS)。
  2. 启动客户端和服务器:
    npm run dev
    或者分别启动:
    npm run server:dev
    npm run client:dev
  3. 通过浏览器访问客户端应用(通常是 'http://localhost:3000')。
  4. 客户端应用将引导您完成认证流程,并连接到MCP服务器。
  5. 根据您使用的客户端身份和AWS中配置的AVP策略,客户端将只能看到并调用其被授权使用的工具。例如,某些客户端可能只能列出S3存储桶,而其他客户端可能还能列出DynamoDB表。

信息

分类

开发者工具