Agent 365 MCP客户端

一个基于PySide6的桌面客户端,用于通过单一聊天界面探索和使用Agent 365 MCP服务器。

  • by kimtth
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 kimtth/mcp-client-a365-mcp-servers

使用说明

代理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 <name>      # 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应用程序注册:

  1. 首选 Entra ID → 应用注册 → 新注册
  2. 名称:任何内容(例如“MCP桌面客户端”),单租户,无重定向URI
  3. 在...之下 认证 → set 允许公共客户端流 到 是
  4. 使用以下路径之一添加代理365委派权限:
    • API权限 → 添加权限 → 我的组织使用的API,搜索 Work IQ Tools (ea9ffc3e-8a23-4a7d-836d-234d7c7565c1),然后在下面添加委派范围
  5. 必需 委派 权限:
    • 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
  6. 点击 授予管理员同意
  7. 复制 应用程序(客户端)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=<your-mcp-desktop-client-app-id>

# Required unless you want to inherit tenantId from ToolingManifest.json
MCP_TENANT_ID=<your-azure-tenant-id>

# Recommended for full 14-server access
MCP_AUTH_MODE=device-code

# Required — Azure OpenAI
AZURE_OPENAI_ENDPOINT=https://<your-resource>.cognitiveservices.azure.com/
AZURE_OPENAI_AUTH_MODE=azure-cli
AZURE_OPENAI_DEPLOYMENT=gpt-5.4-mini
AZURE_OPENAI_API_VERSION=2025-04-01-preview

4.安装并运行

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 override

VS代码调试器

在工作区中使用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启动