代理365 MCP客户端
PySide6桌面客户端,用于通过单个聊天UI探索和使用Agent 365 MCP服务器。
它的作用
- 连接到14个代理365 MCP服务器(邮件、日历、团队、Word、Excel、PowerPoint、OneDrive/SharePoint、文件、知识、我、搜索、数据库、复制副本)
- 通过StreamableHTTP发现工具,并通过本地代理路由工具调用
- 使用Azure OpenAI进行聊天和工具调用
- 为常见的Microsoft 365任务提供快速操作按钮
- 在侧面板中显示发现的服务器和工具
先决条件
设置
1.创建并注册Agent 365代理
a365 config init # interactive wizard → creates a365.config.json
a365 develop add-mcp-servers # adds MCP servers → generates ToolingManifest.json
a365 setup blueprint # creates Entra blueprint app
a365 setup permissions mcp # grants MCP OAuth2 permissions这将创建:
- 一 代理蓝图应用程序 进入 ID
- A.
ToolingManifest.json记录该代理的租户和MCP服务器元数据的文件
ToolingManifest.json 不是由此桌面应用程序生成的。它是由 a365 develop add-mcp-servers 然后此应用程序在启动时读取默认租户、蓝图、端点、范围和服务器元数据。
此项目使用的Entra对象:
- 代理蓝图应用程序:由创建
a365 setup blueprint;用于网关发现标头和代理范围的元数据查找 - MCP桌面客户端应用程序:在Entra中手动创建;置于
MCP_CLIENT_ID;用于互动device-code认证 - 租户:来自
MCP_TENANT_ID,或回落到ToolingManifest.json如果省略
2.创建一个专用的Entra应用程序注册,用于设备代码认证
由创建的蓝图应用程序 a365 setup blueprint 无法进行交互式(委托)身份验证——这是一种特殊的 agentIdentityBlueprint 类型。您需要一个标准的Entra应用程序注册:
- 首选 Entra ID → 应用注册 → 新注册
- 名称:任何内容(例如“MCP桌面客户端”),单租户,无重定向URI
- 在...之下 认证 → set 允许公共客户端流 到 是
- 使用以下路径之一添加代理365委派权限:
- API权限 → 添加权限 → 我的组织使用的API,搜索 Work IQ Tools (ea9ffc3e-8a23-4a7d-836d-234d7c7565c1),然后在下面添加委派范围
- 必需 委派 权限:
- McpServers.Calendar.All - McpServers.CopilotMCP.All - McpServers.DASearch.All - McpServers.Dataverse.All - McpServers.Excel.All - McpServers.Files.All - McpServers.Knowledge.All - McpServers.Mail.All - McpServers.Me.All - McpServers.OneDriveSharePoint.All - McpServers.PowerPoint.All - McpServers.SharepointLists.All - McpServers.Teams.All - McpServers.Word.All - McpServersMetadata.Read.All
- 点击 授予管理员同意\
- 复制 应用程序(客户端)ID --这是你的
MCP_CLIENT_ID
看 docs/mcp-server-access-issue.md 了解完整的身份验证故事以及为什么这是必要的。
3.配置环境
cp .env.template .env编辑 .env:
# Required for MCP auth
# Public client app registration used only for device-code sign-in
MCP_CLIENT_ID=
# Required unless you want to inherit tenantId from ToolingManifest.json
MCP_TENANT_ID=
# Recommended for full 14-server access
MCP_AUTH_MODE=device-code
# Required — Azure OpenAI
AZURE_OPENAI_ENDPOINT=https://.cognitiveservices.azure.com/
AZURE_OPENAI_AUTH_MODE=azure-cli
AZURE_OPENAI_DEPLOYMENT=gpt-5.4-mini
AZURE_OPENAI_API_VERSION=2025-04-01-preview4.安装并运行
uv sync
uv run mcp-client首次连接时,浏览器会打开以进行设备代码登录。之后,凭据会被静默缓存。
身份验证模式
| 模式 | 所有14台服务器? | 备注 |
|---|---|---|
device-code | 是 | 交互式公共客户端流——推荐 |
azure-cli | 仅3 | az login 令牌缺少大多数MCP作用域 |
a365-cli | 仅限3个 | 与azure cli相同的限制 |
client-secret | 否 | 仅应用程序令牌具有 roles,不 scp --MCP服务器拒绝它们 |
bearer | 依赖 | 传递;仅当令牌已经具有正确的作用域时才有效 |
auto | 各不相同 | 按顺序尝试:持票人→ a365气候→ 设备代码→ 回退 |
可选配置
AGENTIC_APP_ID= # Optional override for the blueprint app ID used in gateway discovery; normally inherited from ToolingManifest.json
MCP_PLATFORM_ENDPOINT= # Default: https://agent365.svc.cloud.microsoft
MCP_PLATFORM_AUTH_SCOPE= # Default: ea9ffc3e-8a23-4a7d-836d-234d7c7565c1/.default (well-known Agent 365 Tools resource)
MCP_CLIENT_SECRET= # Only for client-secret auth mode
MCP_BEARER_TOKEN= # Static token overrideVS代码调试器
在工作区中使用Python启动配置 .env 文件和项目根目录作为工作目录。
推荐 .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Agent 365 MCP Client",
"type": "debugpy",
"request": "launch",
"module": "mcp_client",
"cwd": "${workspaceFolder}",
"envFile": "${workspaceFolder}/.env",
"console": "integratedTerminal",
"justMyCode": true
},
{
"name": "Agent 365 MCP Bridge",
"type": "debugpy",
"request": "launch",
"module": "mcp_bridge",
"cwd": "${workspaceFolder}",
"envFile": "${workspaceFolder}/.env",
"console": "integratedTerminal",
"justMyCode": true
}
]
}所需调试器输入:
.env存在于工作区根目录中ToolingManifest.json存在于工作区根目录中,除非您通过环境变量完全覆盖租户、端点、范围和蓝图值- 在VS Code中选择Python环境,并通过安装项目依赖项
uv sync
入口点
| 命令 | 描述 |
|---|---|
uv run mcp-client | 桌面图形用户界面 |
uv run mcp-bridge | MCP stdio服务器(用于Claude Code、VS Code代理) |
uv run python -m mcp_client | 替代GUI启动 |
