arcgis-pro-mcp
基于 Model Context Protocol 的 ArcGIS Pro MCP 服务。
它通过 arcpy.mp、arcpy.da 和受约束的 arcpy 地理处理能力,为模型或 MCP 客户端提供 ArcGIS Pro 工程、地图、图层、布局、导出、表数据读写和部分 GP 自动化能力。
这个项目的目标不是覆盖 ArcGIS Pro 全部 UI 和全部 ArcPy 能力,而是提供一个更安全、更容易集成的能力子集。实际可用能力请始终以 arcgis_pro_server_capabilities 返回结果为准。
适用场景
- 读取
.aprx中的地图、布局、图层、书签、表和工程连接信息 - 导出布局 PDF、布局图片、地图图片、报表 PDF
- 控制图层可见性、透明度、定义查询、选择集、标签、部分符号化
- 执行白名单 GP 工具,或在服务端显式开启并 allowlist 后,通过通用 GP 入口运行少量已知工具箱工具
- 对表或要素类进行只读抽样、去重值扫描、条件查询
- 创建临时 feature layer / table view 供后续会话内工具链继续使用
- 创建、重命名、删除部分工程对象,如 map、layout、group layer;standalone table 目前支持添加与移除
不在当前范围内
- 完整替代 ArcGIS Pro 桌面 UI
- Portal/发布/共享工作流
- 深度学习相关工具链
- Utility Network 全量操作
- 完整编辑会话管理和复杂事务控制
- 任意不受约束的 ArcPy 执行
环境要求
- Windows
- 已安装 ArcGIS Pro
- 使用 ArcGIS Pro 自带 Python 运行
常见 Python 路径示例:
C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\python.exe安装与运行
pip install -e .
python -m arcgis_pro_mcp安全与路径策略
服务内置了写入开关和路径约束,避免模型直接对任意路径和任意数据进行破坏性操作。
环境变量
| 变量 | 作用 |
|---|---|
ARCGIS_PRO_MCP_ALLOW_WRITE | 设置为 1 / true / yes / on 后,才允许保存工程、修改图层、做选择、写表、执行写入型 GP、修改布局等操作。 |
ARCGIS_PRO_MCP_EXPORT_ROOT | 如果设置,所有导出文件和 saveACopy 输出路径必须落在该目录下。 |
ARCGIS_PRO_MCP_GP_OUTPUT_ROOT | 写入型 GP 的输出根目录。很多 GP 输出要素类、表、栅格前都要求设置它。 |
ARCGIS_PRO_MCP_INPUT_ROOTS | 可选输入根目录列表,多个路径使用 Windows 的 ; 分隔。若设置,很多输入路径都必须位于这些根目录之一。 |
ARCGIS_PRO_MCP_PROJECT_ROOTS | 可选工程根目录列表。若设置,.aprx 只能位于这些目录下;若未设置,则回退使用 ARCGIS_PRO_MCP_INPUT_ROOTS。 |
ARCGIS_PRO_MCP_ENABLE_GENERIC_GP | 设置为 1 后才允许使用 arcgis_pro_gp_run_tool。 |
ARCGIS_PRO_MCP_GENERIC_GP_ALLOWLIST | 通用 GP 精确 allowlist,多个工具名可用逗号或分号分隔,如 management.CopyFeatures,analysis.Buffer。 |
ARCGIS_PRO_MCP_ALLOW_INLINE_DB_PASSWORD | 默认禁止在 MCP 参数中直接传数据库密码;仅在受控环境下显式设置后才允许。 |
设计原则
- 默认尽量只读
- 写入必须显式开启
- 导出路径可限制到固定目录
- GP 输出可限制到固定目录
- 输入路径可限制到固定目录集合
- 工程路径可限制到固定目录集合
- 通用 GP 必须显式开启并 allowlist
启动后先做什么
建议客户端连接成功后,先调用这两个工具:
arcgis_pro_environment_infoarcgis_pro_server_capabilities
这样可以立刻知道:
- 当前是否真的运行在 ArcGIS Pro 自带 Python 中
- 是否允许写入
- 导出根目录是否配置
- GP 输出根目录是否配置
- 工程根目录是否配置
- 通用 GP 是否开启及 allowlist
- 当前服务暴露了哪些工具类别
Codex Skill
本仓库包含一个项目内 Codex skill:skills/arcgis-pro-mcp/SKILL.md。
该 skill 面向使用本 MCP 服务的 Agent,覆盖 ArcGIS Pro Python 运行要求、启动探测顺序、写入开关、路径根目录、导出/GP 输出约束、通用 GP allowlist 规则,以及 skills/arcgis-pro-mcp/references/ 下的工具分组与开发说明。
工具概览
下面是当前服务的高层分类。完整工具名请以 arcgis_pro_server_capabilities 为准。
1. 基础与能力探测
arcgis_pro_environment_infoarcgis_pro_server_capabilitiesarcgis_pro_list_projects
2. 工程、地图、图层、布局只读
arcgis_pro_list_mapsarcgis_pro_list_layoutsarcgis_pro_list_reportsarcgis_pro_project_connectionsarcgis_pro_project_summaryarcgis_pro_list_layersarcgis_pro_list_tablesarcgis_pro_list_bookmarksarcgis_pro_map_spatial_referencearcgis_pro_map_cameraarcgis_pro_mapframe_extentarcgis_pro_layer_propertiesarcgis_pro_list_layout_elementsarcgis_pro_list_layout_map_framesarcgis_pro_list_broken_sources
3. 数据集与工作空间只读
arcgis_pro_describearcgis_pro_list_fieldsarcgis_pro_workspace_list_feature_classesarcgis_pro_workspace_list_rastersarcgis_pro_workspace_list_tablesarcgis_pro_workspace_list_datasetsarcgis_pro_workspace_list_feature_datasetsarcgis_pro_workspace_list_domainsarcgis_pro_list_sde_datasets
4. arcpy.da 读写
只读:
arcgis_pro_da_table_samplearcgis_pro_da_query_rowsarcgis_pro_da_distinct_values
写入:
arcgis_pro_da_update_field_constantarcgis_pro_da_insert_featuresarcgis_pro_da_update_featuresarcgis_pro_da_delete_selected
5. 地图与图层写操作
arcgis_pro_save_projectarcgis_pro_save_project_copyarcgis_pro_set_layer_visiblearcgis_pro_set_layer_transparencyarcgis_pro_set_definition_queryarcgis_pro_select_layer_by_attributearcgis_pro_select_layer_by_locationarcgis_pro_clear_map_selectionarcgis_pro_layer_selection_countarcgis_pro_layer_selection_fidsarcgis_pro_add_layer_from_patharcgis_pro_remove_layerarcgis_pro_add_table_from_patharcgis_pro_remove_tablearcgis_pro_make_feature_layerarcgis_pro_make_table_viewarcgis_pro_create_group_layerarcgis_pro_move_layerarcgis_pro_rename_layerarcgis_pro_set_map_reference_scalearcgis_pro_set_map_default_cameraarcgis_pro_create_maparcgis_pro_duplicate_maparcgis_pro_remove_maparcgis_pro_rename_maparcgis_pro_add_basemap
6. 布局、地图框、导出
arcgis_pro_export_layout_pdfarcgis_pro_export_layout_imagearcgis_pro_export_report_pdfarcgis_pro_export_map_to_imagearcgis_pro_update_layout_text_elementarcgis_pro_set_mapframe_extentarcgis_pro_mapframe_zoom_to_bookmarkarcgis_pro_map_pan_to_extentarcgis_pro_create_layoutarcgis_pro_rename_layoutarcgis_pro_remove_layoutarcgis_pro_set_layout_element_positionarcgis_pro_set_layout_element_visiblearcgis_pro_update_legend_items
7. 数据源、元数据、连接
arcgis_pro_layer_replace_data_sourcearcgis_pro_repair_layer_sourcearcgis_pro_create_db_connectionarcgis_pro_get_metadataarcgis_pro_set_metadata
8. 符号化与标签
arcgis_pro_apply_symbology_from_layerarcgis_pro_set_unique_value_rendererarcgis_pro_set_graduated_colors_rendererarcgis_pro_set_graduated_symbols_rendererarcgis_pro_set_simple_rendererarcgis_pro_set_heatmap_rendererarcgis_pro_update_label_expressionarcgis_pro_set_label_fontarcgis_pro_toggle_layer_labelsarcgis_pro_list_layer_renderersarcgis_pro_update_layer_cim
9. GP 工具
白名单与查询类:
arcgis_pro_gp_list_registeredarcgis_pro_gp_get_countarcgis_pro_gp_get_raster_propertyarcgis_pro_gp_get_cell_valuearcgis_pro_gp_test_schema_lock
常用矢量、表、转换、栅格、网络分析:
arcgis_pro_gp_bufferarcgis_pro_gp_cliparcgis_pro_gp_analysis_selectarcgis_pro_gp_copy_featuresarcgis_pro_gp_table_to_tablearcgis_pro_gp_export_featuresarcgis_pro_gp_export_tablearcgis_pro_gp_mergearcgis_pro_gp_projectarcgis_pro_gp_dissolvearcgis_pro_gp_intersectarcgis_pro_gp_unionarcgis_pro_gp_erasearcgis_pro_gp_spatial_joinarcgis_pro_gp_statisticsarcgis_pro_gp_frequencyarcgis_pro_gp_table_selectarcgis_pro_gp_add_fieldarcgis_pro_gp_delete_fieldarcgis_pro_gp_alter_fieldarcgis_pro_gp_calculate_fieldarcgis_pro_gp_calculate_geometryarcgis_pro_gp_appendarcgis_pro_gp_delete_featuresarcgis_pro_gp_truncate_tablearcgis_pro_gp_create_feature_classarcgis_pro_gp_create_tablearcgis_pro_gp_create_file_gdbarcgis_pro_gp_create_feature_datasetarcgis_pro_gp_import_csv_to_tablearcgis_pro_gp_excel_to_tablearcgis_pro_gp_table_to_excelarcgis_pro_gp_xy_table_to_pointarcgis_pro_gp_json_to_featuresarcgis_pro_gp_features_to_jsonarcgis_pro_gp_kml_to_layerarcgis_pro_gp_feature_class_to_shapefilearcgis_pro_gp_slopearcgis_pro_gp_aspectarcgis_pro_gp_hillshadearcgis_pro_gp_reclassifyarcgis_pro_gp_extract_by_maskarcgis_pro_gp_extract_by_attributesarcgis_pro_gp_raster_calculatorarcgis_pro_gp_project_rasterarcgis_pro_gp_validate_topology
通用 GP 入口:
arcgis_pro_gp_run_toolarcgis_pro_gp_get_messagesarcgis_pro_gp_list_toolboxesarcgis_pro_gp_list_tools_in_toolbox
注意:
arcgis_pro_gp_run_tool默认禁用- 必须同时设置
ARCGIS_PRO_MCP_ENABLE_GENERIC_GP=1 - 且将具体工具名加入
ARCGIS_PRO_MCP_GENERIC_GP_ALLOWLIST - 路径型参数仍会按输入根目录和 GP 输出根目录策略校验
网络分析:
arcgis_pro_na_create_route_layerarcgis_pro_na_add_locationsarcgis_pro_na_solvearcgis_pro_na_service_areaarcgis_pro_na_od_matrix
推荐使用顺序
只读分析
arcgis_pro_environment_infoarcgis_pro_server_capabilitiesarcgis_pro_list_projectsarcgis_pro_project_summaryarcgis_pro_list_mapsarcgis_pro_list_layersarcgis_pro_describe/arcgis_pro_list_fieldsarcgis_pro_da_query_rows
安全写入
- 打开
ARCGIS_PRO_MCP_ALLOW_WRITE - 如涉及导出,设置
ARCGIS_PRO_MCP_EXPORT_ROOT - 如涉及写入型 GP,设置
ARCGIS_PRO_MCP_GP_OUTPUT_ROOT - 先用只读工具确认对象存在
- 再执行写入工具
- 最后调用
arcgis_pro_save_project
临时视图工作流
arcgis_pro_make_feature_layer或arcgis_pro_make_table_view- 对临时层/视图继续做选择或 GP
- 如需永久化结果,输出到受控目录
Cursor / MCP 客户端配置示例
{
"mcpServers": {
"arcgis-pro": {
"command": "C:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\arcgispro-py3\\python.exe",
"args": ["-m", "arcgis_pro_mcp"],
"cwd": "C:\\absolute\\path\\to\\arcgis-mcp-service-main",
"env": {
"ARCGIS_PRO_MCP_ALLOW_WRITE": "1",
"ARCGIS_PRO_MCP_EXPORT_ROOT": "C:\\ArcGISMCP_Outputs",
"ARCGIS_PRO_MCP_GP_OUTPUT_ROOT": "C:\\ArcGISMCP_GP",
"ARCGIS_PRO_MCP_INPUT_ROOTS": "C:\\GIS_Data;D:\\EnterpriseGDB",
"ARCGIS_PRO_MCP_PROJECT_ROOTS": "C:\\GIS_Projects",
"ARCGIS_PRO_MCP_ENABLE_GENERIC_GP": "0"
}
}
}
}版本与兼容性
- 当前包版本见
pyproject.toml - README 只提供高层说明,不保证逐项穷举所有工具
- 工具面会随版本继续扩展,客户端不要把 README 当成唯一事实来源
- 可靠做法是运行时调用
arcgis_pro_server_capabilities
开发说明
pip install -e .
python -m compileall arcgis_pro_mcp
python -m unittest discover -s tests -p "test_*.py"项目 CI 目前会做基础安装、整包语法编译和无 arcpy 依赖的单元测试,但仍不会在无 ArcGIS Pro 的环境中真正加载 arcpy。
