Mcp Server Arcgis Pro Addin

Mcp Server Arcgis Pro Addin

🚀 带有ArcGIS Pro插件的MCP服务器 (C# .NET 8)

本仓库展示了如何将模型上下文协议(MCP)服务器ArcGIS Pro插件集成。目标是将ArcGIS Pro的功能作为MCP工具公开,以便GitHub Copilot(代理模式)或任何MCP客户端能够与您的GIS环境进行交互。

🚀 快速开始

本项目可让Copilot(代理模式)直接在ArcGIS Pro中查询地图、列出图层、统计要素数量、缩放至图层等。要使用该项目,需要完成以下步骤:

  1. 确保满足先决条件。
  2. 了解解决方案结构。
  3. 按照在Visual Studio中运行的步骤操作。

✨ 主要特性

  • ArcGIS Pro插件(使用ArcGIS Pro SDK的C#):与ArcGIS Pro 同进程运行,并通过本地IPC通道(命名管道)公开GIS操作。
  • MCP服务器(.NET 8控制台应用程序):定义MCP工具,通过命名管道与插件通信,并通过.mcp.json在Visual Studio中配置为MCP服务器。

📦 安装指南

先决条件

  • Visual Studio 2022 17.14或更高版本(支持MCP代理模式)
  • .NET版ArcGIS Pro SDK
  • 已安装ArcGIS Pro(同一台机器)
  • .NET 8 SDK

💻 使用示例

解决方案结构

ArcGisProMcpSample/
+- ArcGisProBridgeAddIn/           # ArcGIS Pro插件项目(同进程)
¦  +- Config.daml
¦  +- Module.cs
¦  +- ProBridgeService.cs          # 命名管道服务器 + 命令处理程序
¦  +- IpcModels.cs                 # IPC请求/响应数据传输对象
+- ArcGisMcpServer/                # MCP服务器项目(.NET 8)
¦  +- Program.cs
¦  +- Tools/ProTools.cs            # MCP工具定义(桥接客户端)
¦  +- Ipc/BridgeClient.cs          # 命名管道客户端
¦  +- Ipc/IpcModels.cs             # 共享IPC数据传输对象
+- .mcp.json                       # VS Copilot的MCP服务器清单

ArcGIS Pro插件

插件在ArcGIS Pro启动时启动一个命名管道服务器。它处理以下操作:

  • pro.getActiveMapName
  • pro.listLayers
  • pro.countFeatures
  • pro.zoomToLayer

基础用法

以下是Module.cs(示例中在一个按钮中)的代码:

protected override bool Initialize()
{
_service = new ProBridgeService("ArcGisProBridgePipe");
_service.Start();
return true; // 初始化成功
}

protected override bool CanUnload()
{
_service?.Dispose();
return true;
}

高级用法

以下是ProBridgeService处理程序的代码:

case "pro.countFeatures":
{
if (req.Args == null ||
!req.Args.TryGetValue("layer", out string? layerName) ||
string.IsNullOrWhiteSpace(layerName))
return new(false, "参数 'layer' 是必需的", null);

int count = await QueuedTask.Run(() =>
{
var fl = MapView.Active?.Map?.Layers
.OfType()
.FirstOrDefault(l => l.Name.Equals(layerName, StringComparison.OrdinalIgnoreCase));
if (fl == null) return 0;
using var fc = fl.GetFeatureClass();
return (int)fc.GetCount();
});

return new(true, null, new { count });
}

MCP服务器(.NET 8)

MCP服务器使用官方的ModelContextProtocol NuGet包。

基础用法

以下是Program.cs的代码:

await Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddSingleton(new BridgeClient("ArcGisProBridgePipe"));
services.AddMcpServer()
.WithStdioServerTransport()
.WithToolsFromAssembly(typeof(ProTools).Assembly);
})
.RunConsoleAsync();

高级用法

以下是示例工具的代码:

[McpServerToolType]
public static class ProTools
{
private static BridgeClient _client;
public static void Configure(BridgeClient client) => _client = client;

[McpServerTool(Title = "统计图层中的要素数量", Name = "pro.countFeatures")]
public static async Task<object> CountFeatures(string layer)
{
var r = await _client.OpAsync("pro.countFeatures", new() { ["layer"] = layer });
if (!r.Ok) throw new Exception(r.Error);
var count = ((System.Text.Json.JsonElement)r.Data).GetProperty("count").GetInt32();
return new { layer, count };
}
}

.mcp.json清单

将以下内容放在解决方案根目录(.mcp.json)中:

{
"servers": {
"arcgis": {
"type": "stdio",
"command": "dotnet",
"args": [
"run",
"--project",
"McpServer/ArcGisMcpServer/ArcGisMcpServer.csproj"
]
}
}
}

在Visual Studio中运行

  1. Visual Studio 2022(=17.14) 中打开解决方案。
  2. 确保ArcGIS Pro已加载插件并正在运行(以便命名管道存在)。
  3. 在VS中,打开Copilot聊天代理模式
  4. Copilot读取.mcp.json并启动MCP服务器。
  5. 在聊天中输入:
    • pro.listLayers ?返回活动地图中的图层
    • pro.countFeatures layer=Buildings ?返回要素数量

📚 详细文档

下一步计划

  • 使用pro.selectByAttributepro.getCurrentExtentpro.exportLayer等操作扩展工具。
  • 为IPC通信添加重试/超时逻辑。
  • 将MCP服务器容器化以进行部署。 ...

  • 0 关注
  • 0 收藏,20 浏览
  • system 提出于 2025-09-20 16:06

相似服务问题

相关AI产品