Sitecore MCP外部身份验证示例
此存储库演示了如何使用OAuth 2.1身份验证和PKCE与Sitecore的模型上下文协议(MCP)服务器集成,展示了Python和。NET实现。
概述
这些示例展示了如何使用Microsoft Agent Framework和Azure OpenAI构建可以通过MCP工具与Sitecore内容管理交互的AI代理。
📁 项目结构
SCMP_AI_Foundry_App/
├── python_example/ # Python implementation (fully automated)
│ ├── agent_with_mcp.py # Main chat app with MCP tools
│ ├── mcp_compliant_auth.py # OAuth 2.1 + PKCE authentication
│ ├── instructions.md # Agent behavior configuration
│ ├── mcp.json # MCP server configuration
│ └── README.md # Python-specific documentation
│
├── dotnet_example/ # .NET implementation (using MCP SDK)
│ └── SitecoreMcpChat/
│ ├── Program.cs # Main chat application
│ ├── McpOAuthClient.cs # OAuth 2.1 + PKCE
│ ├── instructions.md # Agent behavior configuration
│ ├── mcp.json # MCP server configuration
│ └── README.md # .NET-specific documentation
│
└── README.md # This file🚀 快速开始
Python(推荐)
cd python_example
pip install -r requirements.txt
cp .env.example .env # Configure Azure OpenAI credentials
python agent_with_mcp.py特征:
- ✅ 流式响应(逐字输出)
- ✅ 自动MCP工具集成
- ✅ 39+Sitecore工具自动可用
- ✅ 工具调用指示器(🔧 表情符号
- ✅ OAuth 2.1,带PKCE和令牌缓存
.NET
cd dotnet_example/SitecoreMcpChat
cp appsettings.example.json appsettings.json # Configure Azure OpenAI
dotnet run特征:
- ✅ 官方ModelContextProtocol C#SDK(v0.4.0-review.3)
- ✅
HttpClientTransport用于HTTP/SSE连接 - ✅ OAuth 2.1,带PKCE和令牌缓存
- ✅ 通过SDK发现MCP工具(39多种工具)
- ✅ 通过代理框架集成本地MCP工具
- ✅ 自动函数调用-代理根据需要调用工具
- ✅ 工具调用可见性-显示正在调用哪些工具
- ⚠️ 无流媒体(预览限制)
🔐 认证
两种实现都使用 OAuth 2.1与PKCE 对于安全身份验证:
- 元数据发现:从以下位置读取OAuth端点
.well-known/oauth-authorization-server - 动态客户端注册:在MCP服务器上注册OAuth客户端
- PKCE流程:使用代码质询/验证器增强安全性
- 浏览器身份验证:打开浏览器以供用户登录
- 本地回拨:在上运行HTTP服务器
localhost:3000接收身份验证码 - 代币交换:交换访问令牌的授权码
- 令牌缓存:缓存令牌24小时(仅限开发)
⚠️ 安全警告-令牌缓存
当前实施(仅限开发):
- 缓存在中的令牌
.mcp_token_cache.json - 24小时到期,5分钟安全缓冲
- 纯文本存储
- 无加密
- 无审核日志记录
生产要求:
- ✅ 使用 Azure密钥库 或类似的安全凭证存储
- ✅ 实施 管理身份 在可能的情况下
- ✅ 启用 代币轮换 以及刷新机制
- ✅ 集 令牌寿命更短 (最多1小时)
- ✅ 启用 全面审计日志
- ✅ 使用 加密存储 用于缓存凭据
- ❌ 切勿将令牌缓存文件提交到源代码管理
- ❌ 切勿在生产环境中使用纯文本文件存储
🛠️ 可用的MCP工具
这两种实现都提供了对39多种Sitecore MCP工具的访问:
站点管理
- 列出站点、获取站点信息、管理站点配置
内容管理
- 创建/更新/删除页面和内容项
- 搜索内容、获取页面详细信息、管理页面模板
组件管理
- 列出组件,在页面中添加/删除组件
- 管理组件数据源,设置个性化
语言和本地化
- 获取可用语言,向页面添加语言版本
资产管理
- 搜索资产、上传文件、更新资产元数据
市场营销运营
- 创建个性化版本,管理目标规则
📝 配置
代理说明
两种实现都使用外部 instructions.md 代理行为文件:
python: python_example/instructions.md
- 何时使用MCP工具的简单指南
- Python代理框架自动处理工具集成
Dotnet: dotnet_example/SitecoreMcpChat/instructions.md
- 何时使用MCP工具的简单指南
- .NET代理框架自动处理工具集成
- 与Python相同的自动方法
MCP服务器配置
两者都使用 mcp.json 对于MCP服务器设置:
{
"mcpServers": {
"marketer": {
"url": "https://edge-platform.sitecorecloud.io/mcp/marketer-mcp-prod",
"auth": {
"type": "external"
}
}
}
}Azure OpenAI配置
python: .env 文件
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com
AZURE_OPENAI_DEPLOYMENT=gpt-5.1-chat
AZURE_OPENAI_API_KEY=your-api-key
AZURE_OPENAI_API_VERSION=2025-01-01-preview.NET: appsettings.json 文件
{
"AZURE_OPENAI_ENDPOINT": "https://your-resource.openai.azure.com",
"AZURE_OPENAI_DEPLOYMENT": "gpt-5.1-chat",
"AZURE_OPENAI_API_KEY": "your-api-key"
}🔄 实施比较
| 特性 | Python | 。NET |
|---|---|---|
| OAuth 2.1+PKCE | ✅ | ✅ |
| 令牌缓存 | ✅ (24小时)✅ (24小时) | |
| MCP SDK使用情况 | ✅ (MCPStreamableHTTPTool) | ✅ (HttpClientTransport) |
| 工具发现 | ✅ (自动) | ✅ (通过SDK自动) |
| 工具执行 | ✅ (自动) | ✅ (通过框架自动) |
| 工具编排 | ✅ (自动) | ✅ (自动) |
| 流媒体响应 | ✅ (单词级) | ❌ (预览限制) |
| 工具调用可见性 | ✅ | ✅ |
| 对话历史 | ✅ | ✅ |
| 说明文件 | ✅ (instructions.md) | ✅ (instructions.md) |
这两种实现都使用本机MCP集成:
- python:用途
MCPStreamableHTTPTool用于自动工具编排 - .NET:通过将工具传递给代理
tools: [.. mcpTools.Cast()]用于自动编排 - 两者 遵循Microsoft Agent Framework官方文档模式
- 两者 是否已准备好进行自动功能调用
根据您的堆栈进行选择: 这两种实现都提供了相同的自动工具调用功能。
🎯 用例
- 内容管理:创建、更新和管理Sitecore内容项
- 网站管理:管理网站、页面和模板
- 市场营销运营:设置个性化和目标
- 资产管理:上传和组织媒体文件
- 多语言支持:跨多种语言管理内容
- 组件管理:配置页面布局和组件
📚 文档
- Python示例:参见 python_example.README.md
- .net示例:参见 dotnet_example.README.md
- Microsoft代理框架: https://learn.microsoft.com/agent-framework/
- 模型上下文协议: https://modelcontextprotocol.io/
- Sitecore MCP文档: https://doc.sitecore.com/mp/en/developers/sdk/0/sitecore-marketplace-sdk/developer-guides.html
🔧 先决条件
python
- Python 3.13+
- Azure OpenAI资源
- Sitecore MCP服务器访问
.NET
- .NET 9.0 SDK+
- Azure OpenAI资源
- Sitecore MCP服务器访问
🤝 贡献
这是用于学习目的的示例代码。您可以根据自己的用例自由调整和扩展。
⚠️ 重要说明
- 令牌缓存:目前的实施仅用于发展。使用安全的凭据存储进行生产。
- 错误处理示例包括基本错误处理。生产代码应该更健壮。
- 代理框架版本:Python使用
agent-framework包装。NET使用微软。代理人。AI预览包。 - MCP SDK集成:
- python:通过本地集成 MCPStreamableHTTPTool -全自动编排 - .NET:通过代理框架进行本地集成-将工具直接传递给代理进行自动编排 - 两者都使用具有自动函数调用功能的官方SDK
- 生产使用Python和。NET已经为生产做好了准备,可以自动调用工具。根据您喜欢的技术栈进行选择。
📄 许可证
这是用于教育目的的示例代码。
