MCP服务器OAuth2认证

一个安全的模型上下文协议(MCP)服务器,提供OAuth 2.1认证,并通过Tavily API实现网页搜索功能。

  • by Govindmallurwar
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 govindmallurwar/mcp-oauth2-server

使用说明

🔐 MCP服务器的OAuth2身份验证

安全 模型上下文协议(MCP)服务器 随着 OAuth 2.1身份验证 通过Tavily API提供网络搜索功能。采用FastAPI构建,专为企业级安全而设计。

🚀 特性

  • 🔐 OAuth 2.1身份验证 -使用Scalekit授权服务器的企业级安全
  • 🌐 Web搜索集成 -由Tavily API提供实时网络搜索功能
  • ⚡ FastAPI性能 -具有自动API文档的高性能异步服务器
  • 🛡️ MCP合规性 -完全符合模型上下文协议授权规范
  • 🎯 基于范围的授权 -具有自定义作用域的细粒度访问控制
  • 📊 令牌验证 -具有受众检查功能的强大令牌验证
  • 🔒 安全最佳实践 -PKCE支持、正确的错误处理和安全默认值

🏗️ 建筑

此MCP服务器采用以下安全架构:

  • OAuth 2.1流程:使用Scalekit完成授权流程
  • MCP协议:LLM和工具之间的标准化沟通
  • 网络搜索工具:Tavily驱动的搜索功能
  • 中间件安全:请求级身份验证和授权

📋 先决条件

🛠️ 安装

1.克隆存储库

git clone https://github.dev/Govindmallurwar/mcp-oauth2-server.git
cd mcp-oauth2-server

2.安装依赖项

# Using pip
pip install -e .

# Or using uv (recommended)
uv sync

3.环境配置

创建一个 .env 使用您的配置文件:

# Scalekit Configuration
SCALEKIT_ENVIRONMENT_URL=https://your-company.scalekit.com
SCALEKIT_CLIENT_ID=your_client_id
SCALEKIT_CLIENT_SECRET=your_client_secret
SCALEKIT_AUDIENCE_NAME=your_audience_name

# Server Configuration
PORT=10000

# Tavily API Configuration
TAVILY_API_KEY=your_tavily_api_key_here

4.Scalekit设置

  1. 引导到 MCP服务器 在Scalekit仪表板中
  2. 点击 添加MCP服务器
  3. 配置:
    • 服务器名称:“Web搜索MCP服务器”
    • 资源标识符:您的服务器URL
    • 允许动态客户端注册: ✅ 启用
    • 访问令牌寿命:300-3600秒
    • 范围: search:read

🚀 快速开始

运行服务器

python src/server.py

服务器将于启动 http://localhost:10001

📚 API文档

OAuth发现端点

  • GET /.well-known/oauth-protected-resource/mcp -MCP资源元数据

MCP端点

  • POST /tools/call -执行web搜索工具(需要身份验证)

身份验证流程

  1. 发现:客户端通过元数据端点发现授权服务器
  2. 注册:使用Scalekit进行动态客户端注册
  3. 授权OAuth 2.1 流程与 PKCE
  4. 令牌使用情况:授权标头中的承载令牌
  5. 验证:服务器验证令牌并检查作用域

🔧 配置

环境变量

变量 描述 必填
SCALEKIT_ENVIRONMENT_URL 您的Scalekit环境URL ✅
SCALEKIT_CLIENT_ID Scalekit客户端ID ✅
SCALEKIT_CLIENT_SECRET Scalekit客户端机密 ✅
SCALEKIT_AUDIENCE_NAME 令牌受众标识符 ✅
PORT 服务器端口(默认值:10001) ❌
TAVILY_API_KEY Tavilly API网络搜索密钥 ✅

安全设置

服务器实现了几个安全功能:

  • 令牌受众验证:确保为此特定服务器颁发令牌
  • 基于范围的授权:控制对网络搜索功能的访问
  • PKCE 支持:防止授权码被拦截
  • 正确的错误响应:根据MCP规范返回WWW-Authenticate标头

🔍 故障排除

常见问题

问题 解决方案
令牌验证失败 检查 SCALEKIT_AUDIENCE_NAME 匹配Scalekit配置
客户端注册失败 验证Scalekit环境URL和凭据
Web搜索无效 确保Tavily API密钥有效且具有配额
CORS错误 配置 allow_origins 生产中

调试模式

启用调试日志记录:

import logging
logging.basicConfig(level=logging.DEBUG)

健康检查

# Check OAuth metadata
curl http://localhost:10000/.well-known/oauth-protected-resource/mcp

📁 项目结构

mcp-oauth2-server/
├── src/
│   ├── server.py          # Main FastAPI server
│   ├── auth.py            # OAuth middleware
│   ├── tavily_mcp.py      # MCP server implementation
│   └── config.py          # Configuration management
├── docs/
├── pyproject.toml         # Project dependencies
├── .env                   # Environment with placeholder
└── README.md              # This file

📄 许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。