使用说明
MCP服务器中心
此存储库将多个模型上下文协议(MCP)服务器打包在一个单独的存储库中 Python项目,并将它们部署到一个具有基于路径的路由的Azure容器应用程序中。 每台服务器都安装在自己的路径上:
| 服务器 | 路径 | 描述 |
|---|---|---|
| TaskServer | /taskserver/mcp |
跨所有系统的统一任务/审批聚合 |
| 工作日 | /workday/mcp |
员工简介、休假、薪酬、学习 |
| 立即服务 | /servicenow/mcp |
事件、批准、服务目录 |
| Salesforce | /salesforce/mcp |
客户关系管理、合规案例、管道管理 |
| 吉拉 | /jira/mcp |
问题、项目、董事会 |
A共享 /healthz 端点返回 200 OK 对于所有活性探针。
目录
服务器和工具
TaskServer(6个工具)
整合任务、审批和学习任务的统一编排器 Workday、ServiceNow、Salesforce和Jira集成到一个带有随机数门控的单一视图中 批准决定。
| 工具 | 类型 | 描述 |
|---|---|---|
list_items |
read | 汇总所有连接系统中的任务/批准/学习 |
prepare_approval_review |
read | 获取审批详细信息并发布一次性随机数以供审核 |
execute_approval_decision |
write | 使用随机数验证批准或拒绝 |
get_item_detail |
read | 任务或案例的完整细节、注释和转换 |
add_item_comment |
write | 内联添加评论(Salesforce/Jira) |
execute_item_transition |
write | 内联更新状态 |
工作日(12个工具)
人力资源和员工管理——员工档案、休假申请、工资单、学习、, 以及企业名称的变更。支持匿名模式进行本地测试。
| 工具 | 类型 | 描述 |
|---|---|---|
get_worker |
read | 当前员工资料 |
get_leave_balances |
read | 假期余额、符合条件的缺勤类型和预订的休假时间 |
get_direct_reports |
read | 列出直接下属 |
get_inbox_tasks |
read | 收件箱任务(批准和不批准) |
get_learning_assignments |
阅读 | 所需学习作业 |
get_pay_slips |
read | 最近的工资单 |
get_time_off_entries |
read | 休假条目 |
prepare_request_leave |
阅读 | 准备请假申请表 |
book_leave |
写 | 提交休假申请 |
prepare_change_business_title |
阅读 | 准备企业名称变更表 |
change_business_title |
write | 提交标题更改 |
search_learning_content |
阅读 | 按技能或主题搜索学习目录 |
ServiceNow(25工具)
IT服务管理——事件生命周期、任务和审批管理,以及完整的 支持购物车的服务目录订购。
事件管理
| 工具 | 类型 | 描述 |
|---|---|---|
list_incidents |
read | 按编号、文本、类别、状态、优先级、受让人搜索 |
show_create_incident_form |
read | 填写创建事件表单 |
create_incident |
write | 创建事件 |
show_update_incident_form |
read | 加载更新表单的当前值 |
get_incident |
阅读 | 完整的日志事件(评论和工作笔记) |
update_incident |
write | 更新字段,添加注释或工作笔记 |
任务与审批管理
| 工具 | 类型 | 描述 |
|---|---|---|
list_tasks |
read | 任务表中的活动任务 |
list_approvals |
read | 待批准 |
get_approval |
阅读 | 完整的审批细节和源文档 |
approve_reject |
write | 批准或拒绝批准 |
服务目录
| 工具 | 类型 | 描述 |
|---|---|---|
list_catalog_items |
read | 使用筛选器按名称/描述搜索目录项 |
list_catalog_categories |
read | 浏览目录类别 |
get_catalog_item |
read | 包含动态订单变量的完整项目 |
order_catalog_item |
write | 提交一次性订单 |
add_to_cart |
write | 将商品添加到购物车 |
get_cart |
read | 查看购物车内容和价格 |
checkout_cart |
write | 提交购物车订单 |
delete_cart |
write | 清空购物车 |
remove_cart_item |
write | 从购物车中删除一行 |
list_my_requests |
read | 用户的服务请求和状态 |
search_reference_values |
read | 查找引用字段值(例如cmdb_ci、sys_user) |
Salesforce(20个工具)
客户关系管理和合规案例管理——客户、联系人、机会、渠道 仪表板、14种合规案例类型和审批工作流。
任务管理
| 工具 | 类型 | 描述 |
|---|---|---|
list_tasks |
read | 按状态、优先级、所有者筛选 |
get_task |
read | 完整任务详细信息 |
update_task |
write | 更新状态、优先级、描述、主题 |
审批
| 工具 | 类型 | 描述 |
|---|---|---|
list_approvals |
read | 待审批工作项 |
approve_reject |
wrote | 批准或拒绝 |
合规案例
| 工具 | 类型 | 描述 |
|---|---|---|
list_cases |
read | 按状态、优先级、合规类型、搜索文本筛选 |
get_case |
阅读 | 完整案例及评论 |
show_compliance_case_form |
read | 创建表单预填充 |
create_case |
write | 创建合规案例(支持14种类型) |
update_case |
write | 更新字段并添加注释 |
客户关系管理
| 工具 | 类型 | 描述 |
|---|---|---|
list_accounts |
read | 按搜索、行业、所有者筛选 |
list_contacts |
read | 适用于帐户或自由文本搜索 |
list_opportunities |
read | 带阶段、所有者、帐户筛选器的管道视图 |
get_account_360 |
read | 帐户的联系人、机会、事件、任务和案例 |
get_pipeline_dashboard |
阅读 | 漏斗分析的阶段汇总和机会列表 |
show_create_opportunity_form |
阅读 | 填写机会表 |
create_opportunity |
写 | 创造机会 |
create_opportunity_task |
write | 将任务链接到商机 |
show_create_event_form |
read | 事件表单预填 |
create_event |
编写 | 创建活动(会议) |
Jira(12工具)
问题跟踪和项目管理——JQL搜索、问题CRUD、转换、, 注释(自动转换为Atlassian文档格式)和项目创建。
| 工具 | 类型 | 描述 |
|---|---|---|
list_issues |
read | JQL查询或按项目、状态、受让人筛选 |
get_issue |
阅读 | 完整的问题,包括评论和可用的转换 |
show_create_issue_form |
read | 创建问题表单 |
create_issue |
写 | 在项目中创建(任务、bug、故事、史诗) |
add_comment |
写 | 添加评论 |
transition_issue |
write | 移动到新状态 |
update_issue |
write | 更新字段并添加注释 |
show_create_project_form |
read | 项目表格 |
create_project |
编写 | 创建软件或商业项目 |
1.准备一台清洁显影机
- Python 3.11 和pip(需要
pyproject.toml).证实python --version. - Git 用于克隆存储库。
- Docker 桌面版 用于本地容器构建和部署。Azure容器注册表 (ACR)远程构建可以在Docker不可用时使用。
- Azure命令行界面 使用容器应用程序扩展:
winget install -e --id Microsoft.AzureCLI az extension add --name containerapp
安装先决条件后:
-
克隆项目并进入工作区:
git clone <repo-url> Set-Location MCPServers\mcp_servers -
创建并激活虚拟环境,然后安装依赖项:
python -m venv .venv .venv\Scripts\Activate.ps1 pip install -e .[dev] -
通过复制示例环境文件来提供本地机密:
Copy-Item env\workday.example.env env\workday.local.env Copy-Item env\servicenow.example.env env\servicenow.local.env Copy-Item env\salesforce.example.env env\salesforce.local.env Copy-Item env\jira.example.env env\jira.local.env用租户特定的值更新每个文件(没有提交到源代码管理)。
工作日:
变量 目的 WORKDAY_CLIENT_ID工作日OAuth客户端ID WORKDAY_CLIENT_SECRETWorkday OAuth客户端密钥 WORKDAY_REFRESH_TOKENWorkday OAuth刷新令牌 WORKDAY_CLIENT_CREDENTIALS可选组合凭据blob WORKDAY_TOKEN_URLWorkday OAuth令牌端点 WORKDAY_WORKERS_API_URL上班族API基本URL WORKDAY_ANONYMOUS_EMPLOYEE_ID(可选) 跳过Entra身份验证;将此员工ID用于所有请求 微软Entra/Graph(共享):
变量 目的 AAD_APP_CLIENT_IDMicrosoft Entra应用程序ID AAD_APP_TENANT_IDMicrosoft Entra租户ID GRAPH_CLIENT_IDMicrosoft Graph客户端ID GRAPH_CLIENT_SECRETMicrosoft Graph客户端机密 GRAPH_TENANT_IDMicrosoft Graph租户ID 服务现在:
变量 目的 SERVICENOW_INSTANCE_URLServiceNow实例(例如。 https://dev12345.service-now.com)SERVICENOW_CLIENT_IDServiceNow OAuth客户端ID SERVICENOW_CLIENT_SECRETServiceNow OAuth客户端密钥 Salesforce:
变量 目的 SALESFORCE_DOMAINSalesforce组织域 SALESFORCE_CLIENT_IDSalesforce OAuth客户端ID SALESFORCE_CLIENT_SECRETSalesforce OAuth客户端密钥 吉拉:
变量 目的 JIRA_BASE_URLJira实例URL(例如。 https://org.atlassian.net)JIRA_EMAILJira帐户电子邮件 JIRA_API_TOKENJira API代币 JIRA_PROJECT_KEY(可选) 默认项目密钥
2.本地运行和测试
2.1启动所有服务器
最快的方法是使用run脚本,该脚本加载您的env文件并启动每个 单个端口上的服务器:
scripts\run-mcp.ps1 # defaults: all servers, port 8080
scripts\run-mcp.ps1 -Server workday -Port 9000 # single server on a custom port
在Linux/macOS上:
scripts/run-mcp.sh # defaults: all servers, port 8080
scripts/run-mcp.sh ../env/workday.local.env workday 9000 # single server
运行所有服务器时,以下端点可用:
| 端点 | URL |
|---|---|
| TaskServer MCP | http://localhost:8080/taskserver/mcp |
| 工作日MCP | http://localhost:8080/workday/mcp |
| ServiceNow MCP | http://localhost:8080/servicenow/mcp |
| Salesforce MCP | http://localhost:8080/salesforce/mcp |
| Jira MCP | http://localhost:8080/jira/mcp |
| 健康检查 | http://localhost:8080/healthz |
2.2直接启动服务器(无需脚本)
python -m mcp_servers.cli all --transport http --host 0.0.0.0 --port 8080
替换 all 随着 taskserver, workday, servicenow, salesforce,或 jira 到
启动单个服务器。
2.3 MCP检验员测试
- 启动检查器并创建新的Streamable HTTP连接。
- 将URL设置为
http://localhost:8080/workday/mcp. - 提供一个
Authorization: Bearer <Entra access token>标题(在以下情况下不需要WORKDAY_ANONYMOUS_EMPLOYEE_ID已设置)。 - 调用以下工具
get_worker或get_leave_balances以确认响应。
2.4匿名模式
集 WORKDAY_ANONYMOUS_EMPLOYEE_ID 在env文件中绕过Entra令牌验证
以及Microsoft Graph员工ID查找。所有请求都将使用配置的员工ID
直接。这对于Entra身份验证的本地测试或单用户部署非常有用
不需要。
3.部署到Azure容器应用程序
3.1一次性Azure设置
登录并创建所需资源:
az login
az account set --subscription <subscription-id>
$resourceGroup = "rg-m365copilot-mcp"
$location = "eastus"
$registry = "m365copilotmcpacr"
az group create --name $resourceGroup --location $location
az acr create --name $registry --resource-group $resourceGroup --sku Standard
3.2使用二头肌提供基础设施
使用提供的二头肌模板部署容器应用程序环境和容器应用程序:
az deployment group create `
--name m365copilot-mcp `
--resource-group $resourceGroup `
--template-file infra/azure/containerapp.bicep `
--parameters @infra/azure/parameters.m365copilot.json
首先预览更改 az deployment group what-if 使用相同的论点。
3.3配置机密
在首次部署之前在容器应用程序上设置机密(来自vault的值):
az containerapp secret set `
--resource-group $resourceGroup `
--name <container-app-name> `
--secrets `
workday-client-id=<value> `
workday-client-secret=<value> `
workday-refresh-token=<value> `
workday-client-credentials=<value> `
aad-app-client-id=<value> `
aad-app-tenant-id=<value> `
graph-client-id=<value> `
graph-client-secret=<value> `
graph-tenant-id=<value> `
servicenow-client-id=<value> `
servicenow-client-secret=<value>
3.4使用部署脚本进行部署
这 scripts\deploy-mcp.ps1 脚本在一个程序中处理构建、推送和更新
命令:
scripts\deploy-mcp.ps1 `
-ResourceGroup rg-m365copilot-mcp `
-ContainerApp m365copilot-mcp-app `
-Registry m365copilotmcpacr.azurecr.io
脚本:
- 登录ACR并在本地构建Docker镜像。
- 使用自动生成的时间戳标签推送图像。
- 从以下位置读取环境变量定义
infra/azure/envars.json. - 使用新映像和环境变量更新容器应用程序。
- 完成后打印所有实时端点。
| 参数 | 必填 | 默认 | 说明 |
|---|---|---|---|
-ResourceGroup |
是 | -- | Azure资源组 |
-ContainerApp |
是 | -- | 容器应用程序名称 |
-Registry |
是 | -- | ACR登录服务器(例如。 myacr.azurecr.io) |
-ImageName |
没有 | mcp-servers |
Docker镜像名称(无标签) |
-Tag |
否 | 时间戳 | 图像标签 |
-SkipBuild |
没有 | $false |
跳过构建/推送;仅更新配置 |
3.5验证部署
# List revisions
az containerapp revision list `
--resource-group $resourceGroup `
--name <container-app-name> `
--output table
# Stream logs
az containerapp logs show `
--resource-group $resourceGroup `
--name <container-app-name> `
--follow
# Quick health check
Invoke-WebRequest https://<fqdn>/healthz
3.6连接副驾驶室
- 使用容器应用程序FQDN在Copilot Studio中添加MCP连接,例如。
https://<fqdn>/workday/mcp(或/servicenow/mcp,/salesforce/mcp,/jira/mcp). - 供应
Authorization: Bearer <token>指向检索到的OAuth访问令牌。 - 绑定
mcp-session-id任何非空字符串。 - 监控时触发工具调用
az containerapp logs show用于验证。
4.部署到Azure功能(备选方案)
Azure Functions包装器可在 azure_function/ 对于以下部署
功能应用程序已设置。请参阅该目录中的文件以了解设置。这
第3节中的容器应用程序方法是推荐的部署模型。
5.项目结构
mcp_servers/
├── Dockerfile # Multi-stage Docker build
├── pyproject.toml # Dependencies and project metadata
├── azure_function/ # Azure Functions wrapper (alternative deployment)
├── env/ # Example environment files per server
├── infra/azure/ # Bicep templates and deployment parameters
├── scripts/ # Run and deploy scripts
├── src/mcp_servers/
│ ├── cli.py # CLI entry point & multi-server ASGI builder
│ ├── settings.py # Pydantic-settings configuration
│ ├── auth/ # Shared Entra & token helpers
│ ├── http/ # HTTP client & retry logic
│ ├── ui/widget/ # Skybridge HTML widgets
│ ├── taskserver/ # TaskServer – unified task/approval aggregation
│ ├── workday/ # Workday – worker profiles, leave, compensation
│ ├── servicenow/ # ServiceNow – incidents, approvals, catalog
│ ├── salesforce/ # Salesforce – CRM, compliance, pipeline
│ └── jira/ # Jira – issues, projects, boards
└── tests/ # Test suites per server
6.添加新服务器
- 在下创建新包
src/mcp_servers/<system>/至少server.py和__init__.py. - 在
server.py,定义abuild_<system>_server()返回a的函数FastMCP使用已注册的工具创建实例。 - 在
SERVER_BUILDERSdict incli.py. - 服务器将自动安装在
/<system>/mcp跑步时all模式。 - 在中重用共享模块
auth/和http/用于一致的令牌处理和重试。
