Token导航 LogoToken导航TokenDH.com
MCP Client Dynamic logo
安全风控stdio官方级别未说明来源级核验

MCP Client Dynamic

MCP Server

一个支持动态客户端注册的MCP(模型上下文协议)客户端实现,提供OAuth 2.0授权、自动令牌刷新和多服务器会话管理功能。

工具数

0

提示词数

0

GitHub Stars

0

资源数

0
Python安全开发工具

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

uhussain

提供方

uhussain

最后核验

2026/5/17 20:22

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

python3 -m venv grounded

详细介绍

具有动态注册功能的MCP客户端

MCP(模型上下文协议)客户端的概念验证实现,支持根据 MCP授权规范.

特性

动态客户端注册 (RFC 7591)

  • 首次使用时自动向MCP服务器注册
  • 无需预先配置

OAuth 2.0的资源指标 (RFC 8707)

  • 包含 resource 所有OAuth请求中的参数
  • 自动规范URI规范化
  • 零配置资源URI提取

延迟注册

  • 仅在实际访问资源时注册
  • 高效的多服务器管理

OAuth 2.0与PKCE (RFC 7636)

  • 安全授权码流
  • 支持PKCE以增强安全性

自动令牌刷新

  • 检测过期令牌
  • 使用刷新令牌自动刷新
  • 如果刷新失败,则返回完整的OAuth流

授权服务器发现

  • 获取用于授权服务器发现的受保护资源元数据(RFC 9728)
  • 获取授权服务器元数据(RFC 8414)
  • 解析 WWW-Authenticate 401错误处理的标头

多服务器会话管理

  • 每台服务器独立的令牌管理
  • 线程安全的内存令牌存储
  • 自动范围检测和持久性

建筑

┌─────────────────────┐
│   MCP Client        │
│   (mcp_client.py)   │
└──────────┬──────────┘
           │
           ├─→ Registration Client
           │   ├─ Parse WWW-Authenticate
           │   ├─ Fetch server metadata
           │   └─ Dynamic registration
           │
           ├─→ OAuth Client
           │   ├─ PKCE generation
           │   ├─ Authorization code flow
           │   └─ Token refresh
           │
           └─→ Token Store
               └─ In-memory token management

文件结构

mcp-client-dynamic/
├── mcp_client.py               # Main MCP client orchestrator
├── registration_client.py      # Dynamic client registration (RFC 7591)
├── oauth_client.py             # OAuth 2.0 + PKCE client (RFC 7636)
├── token_store.py              # Thread-safe token management
├── resource_utils.py           # RFC 8707 resource URI utilities
├── scopes.py                   # Scope configuration per server type
├── mock_auth_server.py         # Mock OAuth authorization server
├── mock_resource_server.py     # Mock MCP resource server
├── test_flow.py                # End-to-end test suite (5 tests)
├── README.md                   # This file

安装

需求

python3 -m venv grounded
source grounded/bin/activate
pip install flask requests

Python 版本

  • Python 3.9+

快速开始

1.启动模拟授权服务器

1号航站楼:

python mock_auth_server.py

这将在上启动OAuth服务器 http://localhost:5000 与:

  • 服务器元数据端点
  • 动态客户端注册
  • 令牌端点(支持刷新)

2.启动模拟资源服务器

2号航站楼(Slack):

python mock_resource_server.py slack 5001

3号航站楼(Jira):

python mock_resource_server.py jira 5002

4号航站楼(GitHub):

python mock_resource_server.py github 5003

3.运行测试

5号航站楼:

python test_flow.py

这将运行5个综合测试:

  1. 基本流程:动态注册→ OAuth→ 资源访问
  2. 延迟注册:按需注册多个服务器
  3. 令牌重用:用于后续请求的缓存令牌
  4. 令牌刷新:过期令牌自动刷新
  5. 多服务器独立性:每个服务器单独管理的令牌

工作原理:流程图

1. Client calls resource
   ↓
2. No credentials? → Register dynamically
   ├─ Fetch Protected Resource Metadata (RFC 9728)
   ├─ Discover authorization server from metadata
   ├─ Fetch Authorization Server Metadata (RFC 8414)
   └─ Register client dynamically (RFC 7591)
   ↓
3. No token? → OAuth flow with PKCE
   ├─ Generate PKCE code verifier/challenge (RFC 7636)
   ├─ Get authorization code with state (CSRF protection)
   ├─ Exchange code for tokens (includes resource parameter)
   └─ Store tokens
   ↓
4. Token expired? → Refresh
   ├─ Use refresh_token (with resource parameter)
   └─ Get new access_token
   ↓
5. Make authenticated request
   └─ Include Bearer token in Authorization header

关键组件

1.MCPClient (mcp_client.py)

  • 协调整个流程
  • 具有自动服务器类型检测的延迟注册
  • 自动令牌刷新
  • 多服务器管理

2.注册客户 (registration_client.py)

  • 获取用于授权服务器发现的受保护资源元数据(RFC 9728)
  • 获取授权服务器元数据(RFC 8414)
  • 动态注册客户端(RFC 7591)
  • 解析 WWW-Authenticate 401错误处理的标头

3.OAuthClient (oauth_client.py)

  • 生成PKCE代码验证器/质询(RFC 7636)
  • 完成授权码流
  • 使用资源参数处理令牌刷新

4.资源工具 (resource_utils.py)

  • 根据RFC 8707规范化URI
  • 从服务器URL中自动提取资源URI
  • 验证并格式化资源参数

5.代币被销毁 (token_store.py)

  • 线程安全内存存储
  • 使用60秒缓冲区跟踪令牌过期
  • 使用每台服务器的作用域管理客户端凭据
  • 每个服务器URL独立存储令牌

使用Stytch和Cloudflare进行真实世界测试

为了根据生产OAuth提供程序验证MCP客户端,使用Stytch进行身份验证,将一个真正的MCP资源服务器部署到Cloudflare Workers。

设置

MCP资源服务器 (stytch-mcp-server/)

  • 部署到Cloudflare Workers: https://stytch-mcp-server.usama-mcp.workers.dev
  • 实现MCP资源端点(/mcp/tools, /mcp/resources)
  • 返回RFC 9728受保护资源元数据
  • 使用Stytch(https://six-acoustic-0961.customers.stytch.dev)作为OAuth提供者

基于浏览器的OAuth流

  • 自动检测生产服务器与模拟服务器(通过检查身份验证端点是否为localhost)
  • 模拟服务器:使用程序化POST流进行自动化测试
  • 生产服务器:启动浏览器,在上启动本地回调服务器 localhost:8080
  • 实现具有状态验证的完整PKCE流

结果

动态注册已验证

📝 Registering new client at https://six-acoustic-0961.customers.stytch.dev/v1/oauth2/register
   Requested scope: openid profile email offline_access
✅ Client registered successfully
   Client ID: connected-app-test-809b099f-ae04-4b8b-a331-00a84b7dd79a

发现和元数据工作

  • 已成功获取受保护资源元数据(RFC 9728)
  • 发现Stytch为授权服务器
  • 已检索OAuth元数据(RFC 8414)
  • 已验证所有必需的端点

浏览器流已实现

  • 本地HTTP服务器接收OAuth回调
  • 浏览器自动打开以进行用户授权
  • CSRF保护状态参数验证
  • 从回调中提取授权码

⚠️ 发现限制

  • Stytch测试项目需要自定义授权端点实现吗?
  • 动态注册成功,但完整的OAuth流程需要生产OAuth提供者
  • TODO:使用生产OAuth提供程序(Auth0、Okta等)或实现自定义身份验证UI

使用Stytch OAuth使用Cloudflare部署的MCP服务器测试MCP客户端

python test_stytch_production.py # Test script for production validation

目录标签

目录标签

Python安全开发工具OAuth2.0本地部署动态注册令牌管理多服务器支持PKCE

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

oauth

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiooauth部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP