使用说明
TomTom MCP服务器——微软365和团队的交互式地图
概念验证 --连接托管 模型上下文协议(MCP) Azure上的服务器连接到Copilot Studio、Power Automation和Microsoft 365 Copilot,具有由TomTom Orbis Maps提供支持的交互式地图可视化功能。
v2.0中的新增功能
| 功能 | 详细信息 |
|---|---|
| TomTom奥比斯地图后端 | 升级自 tomtom-maps 到 tomtom-orbis-maps --更丰富的图块、矢量渲染和5个额外的地理空间工具 |
| 16个MCP工具(共11个) | 新工具:电动汽车路线、区域搜索、沿线搜索、电动汽车充电搜索、数据可视化 |
| 交互式地图网络应用程序 | Azure静态Web应用程序,具有完全缩放、平移、单击、标记、路由和流量覆盖功能 |
| 自适应卡集成 | 在Microsoft Teams对话中本机呈现的丰富地图卡 |
| 映射代理Azure功能 | 连接MCP服务器和Teams/Copilot Studio,生成自适应卡并通过URL提供地图图像 |
| 奥比斯测试套件 | 专用的18个测试套件,涵盖所有16个奥比斯工具以及安全和性能检查 |
| 电动汽车充电图索引 | Graph Connector现在可以将电动汽车充电站数据索引到Microsoft Search中 |
v3.0的新增功能——微软Copilot Cowork插件
| 功能 | 详细信息 |
|---|---|
Copilot Cowork自定义插件 新 cowork-plugin/ 软件包(M365清单v1.28),带有6个相关的代理技能+一个MCP连接器,可通过以下方式部署 M365管理中心→ 副驾驶→ 代理→ 所有代理商→ 添加代理. |
|
MCP网关 新 POST /api/mcp 地图代理上的路线(map-proxy-api/src/lib/mcpGateway.ts)将Cowork与官方TomTom MCP联系起来,注入 tomtom-api-key 服务器端(Cowork连接器身份验证= None). |
|
render_live_map 工具 |
合成网关工具返回内联地图图像 和 实时交互式地图链接(平移/缩放/交通),因此地图可以直接在Cowork中渲染 |
| 相关技能 | 位置搜索、路线规划、实时交通、电动汽车行程、实时地图和(可选)MOVE交通分析——每一项都交给 tomtom-live-map. |
| 钥匙泄漏硬化 | 网关过滤上游 tomtom-get-api-key 工具无法发现并阻止对它的调用 |
| 在Cowork中渲染实时地图(MCP Apps/SEP-1865) | 网关提供自己的独立服务 MCP应用程序小部件 并将服务器渲染的地图图像烘焙到其中(通过 Mcp-Session-Id),所以动态的实时TomTom地图在Cowork中渲染。请参阅 docs/COWORK-MCP-APPS-ADAPTATION.md. |
看 cowork插件/README.md,the 部署指南,设计 计划,以及 实施日志.
MCP服务器如何适应Cowork(实时地图): docs/COWORK-MCP-APPS-ADAPTATION.md.
建筑
Azure
+-----------------------------------------------------------------+
| |
| Azure Container Apps Azure Static Web App |
| +---------------------------+ +-------------------------+ |
| | TomTom MCP Server | | Interactive Map App | |
| | (Orbis Maps backend) | | (TomTom Maps SDK + | |
| | | | MapLibre GL JS) | |
| | Image: ghcr.io/tomtom- | | | |
| | international/ | | Renders markers, routes,| |
| | tomtom-mcp:latest | | polygons, traffic via | |
| | | | URL query parameters | |
| | MAPS=tomtom-orbis-maps | +-------------------------+ |
| | 16 tools | Port 3000 | ^ |
| | 1.5 CPU, 3Gi RAM | | |
| | Replicas: 1-3 | "Open Interactive Map" |
| | | | |
| | Endpoints: | +-------------------------+ |
| | GET /health | | Azure Function App | |
| | POST /mcp +--->| Map Proxy API | |
| +---------------------------+ | | |
| | POST /api/generate- | |
| | map-card | |
| | GET /api/get-map-image | |
| | | |
| | Returns Adaptive Cards | |
| | + image URLs | |
| +------------+------------+ |
| | |
+-----------------------------------------------------------------+
|
HTTPS + API Key header |
+------------------------------+|
| | ||
Copilot Studio Power Automate Graph Connector
(Native MCP + (Custom (.NET 9 console)
Adaptive Cards) Connector)
| | |
+--------------+----------------+
|
M365 Copilot
(answers location queries)
可用的MCP工具(16)
| # | 工具 | 描述 | 状态 |
|---|---|---|---|
| 1 | tomtom-geocode |
将地址转换为坐标 | |
| 2 | tomtom-reverse-geocode |
将坐标转换为地址 | |
| 3 | tomtom-fuzzy-search |
具有拼写容错功能的智能搜索 | |
| 4 | tomtom-poi-search |
查找特定业务类别 | |
| 5 | tomtom-nearby |
发现半径范围内的服务 | |
| 6 | tomtom-routing |
计算位置之间的最佳路线 | |
| 7 | tomtom-waypoint-routing |
具有可选最佳顺序的多站路线规划 | |
| 8 | tomtom-reachable-range |
按时间或距离确定可到达的覆盖区域 | |
| 9 | tomtom-traffic |
实时交通事故数据 | |
| 10 | tomtom-dynamic-map |
使用标记、路线、多边形进行高级地图渲染 | |
| 11 | tomtom-static-map |
生成自定义地图图像 | |
| 12 | tomtom-ev-routing |
具有电池/充电参数的电动汽车路线规划 | 新 |
| 13 | tomtom-search-along-route |
在具有最大绕行限制的给定路线上查找POI | 新 |
| 14 | tomtom-area-search |
在地理边界框内搜索 | 新 |
| 15 | tomtom-ev-search |
按位置和半径查找电动汽车充电站 | 新 |
| 16 | tomtom-data-viz |
在地图上可视化GeoJSON特征集合 | 新 |
注: 测试套件还验证
tomtom-waypoint-optimization作为路由变体。
先决条件
- 一 Azure订阅
- A. TomTom开发人员API密钥 (免费版可用)
- Azure命令行界面 已安装
- .NET 9 SDK (适用于图形连接器)
- Node.js 18+ (适用于地图代理Azure功能)
- Azure功能核心工具v4 (用于本地功能应用程序开发)
- Azure静态Web应用CLI (可选,用于本地交互式地图开发)
- A. Microsoft 365租户 具有Copilot Studio访问权限
快速开始
1.部署MCP服务器(奥比斯)
使用奥比斯地图后端部署新的MCP服务器:
.\deploy\Deploy-TomTomMCP.ps1 -TomTomApiKey "<YOUR_KEY>" `
-SubscriptionId "<YOUR_SUB>" -TenantId "<YOUR_TENANT>"
或者将现有部署升级到奥比斯:
.\deploy\Deploy-OrbisUpgrade.ps1
.\deploy\Deploy-OrbisUpgrade.ps1 -TomTomApiKey "<YOUR_NEW_KEY>"
这两个脚本都通过运行健康检查并确认所有16个工具都可用来验证部署。
2.部署交互式地图Web应用程序
创建一个Azure静态Web应用程序来托管交互式地图前端:
.\deploy\Deploy-InteractiveMap.ps1 -ResourceGroupName "rg-tomtom-mcp" -Location "uksouth"
然后使用GitHub Actions或SWA CLI部署应用程序内容:
# Option: Manual deploy via SWA CLI
npm install -g @azure/static-web-apps-cli
cd interactive-map-app
swa deploy . --deployment-token <TOKEN>
交互式地图接受标记、路线、中心、缩放和覆盖的URL查询参数,允许自适应卡按钮直接深度链接到配置的地图视图。
3.部署地图代理功能
部署连接MCP服务器和Teams/Copilot Studio的Azure功能应用程序:
.\deploy\Deploy-MapProxy.ps1 `
-TomTomApiKey "<YOUR_KEY>" `
-McpServerUrl "https://ca-tomtom-mcp.azurecontainerapps.io" `
-InteractiveMapUrl "https://swa-tomtom-map.azurestaticapps.net"
然后部署函数代码:
cd map-proxy-api
npm install && npm run build
func azure functionapp publish func-tomtom-map-proxy
代理暴露了两个端点:
| 端点 | 方法 | 目的 |
|---|---|---|
/api/generate-map-card |
POST | 调用MCP工具,返回自适应卡JSON+摘要文本 |
/api/get-map-image |
GET | 调用地图工具,直接返回PNG图像(URL可寻址) |
4.连接到Copilot工作室
- 打开 Copilot工作室 并选择您的代理
- 首选 行动 > +添加操作 > MCP服务器
- 输入部署的服务器URL:
https://<your-app>.azurecontainerapps.io/mcp - 身份验证:标头中的API密钥
tomtom-api-key - 所有16个工具都是使用键入的参数自动发现的
- 配置代理以调用地图代理,以便在团队中进行自适应卡响应
看 动力平台/COPILOT-AGENT-GUIDE.md 用于代理指令、示例提示和JSON正文示例。
5.通过Power Automation连接
- 导入
power-platform/TomTomMCP-connector.swagger.json作为自定义连接器 - 配置API密钥身份验证
- 使用
CallMcpTool行动在你的流动
看 电动平台/SETUP-GUIDE.md 获取分步说明。
6.将数据索引到Microsoft Graph中
# Create the Entra ID app registration
.\graph-connector\Setup-AppRegistration.ps1 -TenantId "<YOUR_TENANT_ID>"
# Copy the template and fill in your credentials
cp graph-connector/appsettings.template.json graph-connector/appsettings.json
# Edit appsettings.json with your tenantId, clientId, clientSecret, tomTomApiKey, mcpBaseUrl
# Run the connector to index location data
dotnet run --project graph-connector
这将创建一个Microsoft Graph外部连接,注册一个搜索模式,抓取TomTom数据(办公室、附近的POI、地标、电动汽车充电站),并将项目推送到Microsoft搜索中。M365 Copilot可以原生回答以下问题 “伦敦办公室附近有什么餐馆?” 或 “最近的电动汽车充电器在哪里?”.
看 图形连接器/DEPLOYMENT-GUIDE.md 了解完整的演练和故障排除。
7.运行测试
原始烟雾测试 (11个工具,基本验证):
.\tests\Invoke-SmokeTests.ps1 -BaseUrl "https://<your-app>.azurecontainerapps.io" -ApiKey "<YOUR_KEY>"
奥比斯测试套件 (16个工具,完整的奥比斯验证):
.\tests\Invoke-OrbisTests.ps1 -BaseUrl "https://<your-app>.azurecontainerapps.io"
# Run a subset of tests
.\tests\Invoke-OrbisTests.ps1 -BaseUrl "https://<your-app>.azurecontainerapps.io" -TestFilter "*ev*"
Orbis套件运行18个测试:健康检查、工具/列表验证、所有16个工具调用(地理代码、反向地理代码、模糊搜索、POI搜索、附近、路线、可达范围、交通、EV路线、沿线搜索、区域搜索、EV搜索、数据即),以及无效的API密钥拒绝和响应时间验证。
Cowork插件测试 (静态包验证+可选的实时网关烟雾):
# Static only (validates manifest/skills, builds the .zip)
.\tests\Invoke-CoworkPluginTests.ps1
# With live gateway checks
.\tests\Invoke-CoworkPluginTests.ps1 -GatewayUrl "https://<map-proxy>/api/mcp"
8.构建并部署Cowork插件
# Deploy the gateway to the map-proxy Container App
.\deploy\Deploy-CoworkGateway.ps1 -TomTomApiKey "<YOUR_KEY>"
# Validate + package the plugin into an uploadable .zip
.\cowork-plugin\Build-CoworkPlugin.ps1
然后上传 cowork-plugin/dist/tomtom-cowork-plugin-1.0.0.zip 通过M365管理中心
(副驾驶→ 代理→ 所有代理商→ 添加代理).看
co-work插件/cowork-DEPLOYMENT-GUIDE.md.
项目结构
TomTom/
+-- README.md # This file
+-- .gitignore
+-- docs/
| +-- COWORK-PLUGIN-PLAN.md # Cowork plugin design plan + alignment checklist
| +-- COWORK-IMPLEMENTATION-LOG.md # Running change log + test evidence
+-- cowork-plugin/
| +-- manifest.json # M365 app manifest v1.28 (skills + connector)
| +-- color.png / outline.png # Plugin icons (192x192 / 32x32)
| +-- New-Icons.ps1 # Icon generator
| +-- Build-CoworkPlugin.ps1 # Validate + package the .zip
| +-- README.md # Plugin overview
| +-- COWORK-DEPLOYMENT-GUIDE.md # Register -> package -> upload -> enable -> test
| +-- skills/ # 6 Agent Skills (live-map, search, route, traffic, ev, analytics)
+-- deploy/
| +-- Deploy-TomTomMCP.ps1 # Full Azure deployment (Orbis by default)
| +-- Deploy-OrbisUpgrade.ps1 # Upgrade existing deployment to Orbis
| +-- Deploy-InteractiveMap.ps1 # Deploy Static Web App for interactive map
| +-- Deploy-MapProxy.ps1 # Deploy Azure Function App (map proxy)
| +-- Update-Container.ps1 # Update container to latest image
| +-- Deploy-CoworkGateway.ps1 # Redeploy map-proxy w/ Cowork MCP gateway
| +-- Remove-TomTomMCP.ps1 # Tear down all resources
+-- interactive-map-app/
| +-- index.html # Single-page interactive map (TomTom SDK + MapLibre)
| +-- package.json # App metadata and dev scripts
| +-- staticwebapp.config.json # Azure Static Web App routing and headers
+-- map-proxy-api/
| +-- package.json # Node.js 18 Azure Function project
| +-- tsconfig.json # TypeScript configuration
| +-- host.json # Azure Functions host settings
| +-- local.settings.json # Local development environment variables
| +-- src/
| +-- functions/
| | +-- generateMapCard.ts # POST endpoint: MCP tool -> Adaptive Card
| | +-- getMapImage.ts # GET endpoint: MCP tool -> PNG image
| | +-- mcpGateway.ts # POST /api/mcp -- Cowork MCP gateway route
| +-- lib/
| +-- mcpClient.ts # MCP JSON-RPC client with SSE parsing
| +-- mcpGateway.ts # Gateway logic + render_live_map tool
| +-- adaptiveCards.ts # Adaptive Card builders (search, route, traffic, map)
+-- tests/
| +-- Invoke-SmokeTests.ps1 # 13 smoke tests (original 11 tools)
| +-- Invoke-OrbisTests.ps1 # 18 Orbis tests (all 16 tools + security + perf)
| +-- Invoke-CoworkPluginTests.ps1 # Cowork package validation + live gateway smoke
+-- power-platform/
| +-- TomTomMCP-connector.swagger.json # OpenAPI definition for Power Automate
| +-- SETUP-GUIDE.md # Custom connector setup guide
| +-- COPILOT-AGENT-GUIDE.md # Agent instructions & examples
+-- graph-connector/
+-- TomTomGraphConnector.csproj # .NET 9 project
+-- Program.cs # Main entry point
+-- ConnectorConfig.cs # Configuration model
+-- GraphConnectorService.cs # Microsoft Graph external connection
+-- TomTomClient.cs # TomTom MCP API client
+-- LocationItem.cs # Data model for indexed items
+-- appsettings.template.json # Configuration template (copy to appsettings.json)
+-- Setup-AppRegistration.ps1 # Entra ID app registration script
+-- DEPLOYMENT-GUIDE.md # Full deployment & troubleshooting guide
团队中的交互式地图
该项目使用 自适应卡+静态Web应用程序 在Microsoft Teams中提供交互式地图的方法:
User asks a location question in Teams
|
v
Copilot Studio agent receives the message
|
v
Agent calls MCP tool via the MCP server
(e.g., tomtom-dynamic-map, tomtom-routing, tomtom-poi-search)
|
v
MCP server returns tool result
(JSON data, and/or base64 PNG image)
|
v
Agent calls Map Proxy POST /api/generate-map-card
with the tool name + arguments
|
v
Map Proxy calls MCP server, parses the result,
and builds a typed Adaptive Card:
- Search results card (geocode, POI, fuzzy, nearby, area, EV search)
- Route card (routing, EV routing, waypoint optimization)
- Traffic card (traffic incidents)
- Dynamic map card (map images with overlays)
- Generic fallback (any other tool)
|
v
Adaptive Card is returned to Teams with:
- A static map image (embedded or via /api/get-map-image URL)
- Result summary text (distances, addresses, counts)
- "Open Interactive Map" button linking to the Static Web App
|
v
User sees the card in Teams and can:
[View the static map inline]
[Click "Open Interactive Map" to zoom/pan/explore in the browser]
交互式地图web应用程序读取URL查询参数以配置其初始视图,因此自适应卡按钮可以深度链接到特定位置、缩放级别、标记集或路线。
部署脚本
| 脚本 | 描述 |
|---|---|
Deploy-TomTomMCP.ps1 |
完整的Azure部署:资源组、容器应用程序环境和带有奥比斯地图后端的MCP服务器容器。在完成时验证健康状况和工具数量。 |
Deploy-OrbisUpgrade.ps1 |
从以下位置对现有容器应用程序进行就地升级 tomtom-maps 到 tomtom-orbis-maps更新环境变量和映像,验证16个工具是否可用。 |
Deploy-InteractiveMap.ps1 |
创建用于托管交互式地图的Azure静态Web应用程序资源。输出GitHub Actions或SWA CLI部署的部署令牌和说明。 |
Deploy-MapProxy.ps1 |
创建存储帐户和Azure功能应用程序(Node.js 20、Linux、消费计划)。配置TomTom API密钥、MCP服务器URL、交互式地图URL和CORS的应用程序设置。 |
Update-Container.ps1 |
拉最新 ghcr.io/tomtom-international/tomtom-mcp 镜像并重新启动容器应用程序。 |
Remove-TomTomMCP.ps1 |
拆分资源组和所有关联的Azure资源。 |
认证
所有MCP请求都需要在 tomtom-api-key 头球
curl -X POST "https://<your-app>.azurecontainerapps.io/mcp" \
-H "Accept: application/json,text/event-stream" \
-H "tomtom-api-key: <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"method": "tools/call",
"params": {
"name": "tomtom-geocode",
"arguments": { "query": "Cardiff Castle, Wales" }
},
"jsonrpc": "2.0",
"id": 1
}'
地图代理功能应用程序使用功能级身份验证(authLevel: "function")并从其自身的环境变量中读取TomTom API密钥,因此调用方不需要直接传递密钥。
关键环节
- TomTom MCP服务器(官方)
- TomTom开发者门户
- TomTom奥比斯地图
- 模型上下文协议规范
- Copilot Studio文档
- Microsoft图形连接器
- 联合副驾驶连接器
- 自适应卡架构
- Azure静态Web应用程序
- Azure函数(Node.js)
贡献
这是一个概念验证项目。欢迎发布问题和PR。
许可证
本项目按原样提供,用于演示目的。TomTom MCP服务器由以下人员维护 TomTom国际 根据自己的许可。参见 TomTom的条件 API使用。