Knight60

ArcGIS Pro MCP

Community Knight60
Updated

ArcGIS Pro add-in that speaks the Model Context Protocol, so an AI assistant can drive your open project in plain language — 112 tools, every geoprocessing tool, and arbitrary arcpy.

ArcGIS Pro MCP

An ArcGIS Pro add-in that lets you say what you want.

It implements the Model Context Protocolinside ArcGIS Pro itself, so an AI assistant — Claude, Codex, Antigravity, orany other MCP client — can work on the project already open in front of you.Your data, your maps, your layouts. Not a copy, not an export.

"Style the provinces by area, pastel red through green"
"Which province has the highest population? Put the answer in a new field"
"Export the current map view as a PNG and show me"

The aim is the whole of ArcGIS Pro, not a convenient corner of it. 112 namedtools cover the work of an ordinary day — layers, attributes, selections,symbology, layouts, rasters, editing. run_geoprocessing_tool reaches everyone of Pro's ~2,000 geoprocessing tools by name. execute_arcpy_code runsarbitrary arcpy inside the running application. Between them, there is littleArcGIS Pro can do that cannot be asked for in a sentence.

109 of the 112 tools execute inside ArcGIS Pro's own process, in about 9 mseach.

The MCP tab in ArcGIS Pro, with Thailand's provinces graduated by area

Install

Get it from thelatest releaseand pick one of the two files.

The add-in on its own

DownloadArcGISProMCP.esriAddinXand double-click it. ArcGIS Pro's own installer takes it from there. RestartPro and the MCP tab appears.

Or the installer, if that does not work

Install-ArcGISProMCP.cmdis one self-contained file — the add-in is inside it, so there is nothing elseto download.

Double-click it, or run it from a prompt. It is a .cmd, not a .ps1, soWindows' script execution policy never gets in the way.

Use this one when Pro loads the add-in but the MCP tab never appears: somemachines have add-in security turned on, and the add-in alone cannot say so.The installer checks, tells you which of the two states it found, and offersthe fix. Run it a second time and it offers to uninstall.

Requires ArcGIS Pro 3.3+. Nothing else — no Python, no SDK, no admin rights.

Or the build straight off main

The same two files are also committed todist/, which isthe build the current source produces. Between releases it can be ahead of thelatest release — a fix that is committed but not yet tagged will be there first.

They are committed rather than left as build output because GitHub Actions hasno ArcGIS Pro to build against: a build only exists if someone with Proinstalled produces it. Committing it keeps a download beside the source thatmade it.

Take the release unless you have a reason to want something newer than it.

Uninstalling

Run the installer again and answer yes, or:

Install-ArcGISProMCP.cmd -Uninstall

It removes every copy it finds, including the one ArcGIS Pro's own installerunpacks into a folder named after the add-in id. The .esriAddinX cannotuninstall anything — double-clicking it only ever installs. The other way isArcGIS Pro itself: Project ▸ Add-In Manager ▸ Delete this Add-In.

Connect an AI client

Open the MCP tab in ArcGIS Pro and click your assistant — the three mostused are on the ribbon, the rest are under More clients.

Icon Meaning
✓ green that client already has the server — click to remove it
⊕ grey click to add it
greyed out that client is not installed

It asks before changing anything, tells you which file it will write, and backsthat file up first.

Supported: Claude Code, Codex, Antigravity, VS Code, Cursor, Cline, GeminiCLI, Claude Desktop.

Or configure it by hand

Most clients connect over HTTP:

claude mcp add --transport http arcgis http://127.0.0.1:6520/mcp
{ "mcpServers": { "arcgis": { "type": "http", "url": "http://127.0.0.1:6520/mcp" } } }

Antigravity wants serverUrl instead of url and no type. Codex and ClaudeDesktop launch a server rather than connecting to one, so they need the Pythonrelay: pip install arcgis-pro-mcp, then point them at arcgis-pro-mcp.exe.

The bridge lives inside ArcGIS Pro, so Pro has to be open. Close it and theclient's connection goes red.

The ribbon

One button starts and stops, the way a play button does: the icon showswhat the next click will do, so it doubles as the state readout. Green ▶ meansstopped, red ⏹ means running.

Status shows a green broadcast while listening and a contained grey dotwhen not, with the port as its caption. Click it for the full report: requestsserved, which clients are connected, and the last error.

Tools

112 tools. Anything not listed is still reachable through run_geoprocessing_tool or execute_arcpy_code.

Session and project (14)

Tool What it does
ping Check that the ArcGIS Pro bridge is reachable and see which project it is attached to
get_capabilities List every command the connected bridge supports, grouped by area
diagnose Self-check the connection: ArcGIS Pro version, licence, open project, active map, open map view and write access
get_arcgis_info ArcGIS Pro version, licence level, available extensions and the current project path
get_project_info Project paths, default geodatabase and toolbox, maps, layouts, folder and database connections
save_project Save the ArcGIS Pro project (.aprx), or save a copy elsewhere
list_maps List all maps and scenes with coordinate system and layer counts
create_map Create a new map or scene in the project
remove_map ⚠️ Delete a map from the project
activate_map Open/activate a map's view in the ArcGIS Pro UI
set_map_properties Rename a map or change its coordinate system
get_map_extent The combined extent of all data layers in a map
get_environment Read the current arcpy geoprocessing environment settings
set_environment Set arcpy geoprocessing environment settings such as workspace, outputCoordinateSystem, extent, mask, cellSize, overwriteOutput or parallelProcessingFactor

Layer (19)

Tool What it does
get_layers List the layers (with draw order and group nesting) and standalone tables in a map
get_layer_info Full detail for one layer: data source, coordinate system, extent, fields, feature count, renderer and label state
add_layer Add data to a map from a path or service URL: feature class, shapefile, raster, table, .lyrx layer file or web service
add_web_layer Add a web service layer (Feature/Map/Image service, WMS, WMTS, vector tile) by URL
remove_layer ⚠️ Remove a layer or standalone table from a map
rename_layer Rename a layer in the table of contents
duplicate_layer Copy a layer within the map so it can be symbolised differently
set_layer_visibility Show or hide one layer, several layers, or every layer in the map
set_layer_transparency Set layer transparency (0 = opaque, 100 = fully transparent)
set_layer_scale_range Limit the scale range a layer draws at
set_definition_query Set a layer's definition query (SQL where clause)
move_layer Reorder a layer relative to another, or move it into a group layer
create_group_layer Create a group layer, optionally moving existing layers into it
zoom_to_layer Zoom the map view to a layer's extent
set_basemap Set the basemap: Topographic, Imagery, Imagery Hybrid, Streets, Navigation, Light Gray Canvas, Dark Gray Canvas, Terrain, Oceans, OpenStreetMap, National Geographic Style Map
get_broken_layers List layers across all maps whose data source is missing
repair_layer_source Repoint a layer at a new workspace or dataset to fix a broken source
add_join Join a table to a layer on a common field
remove_join Remove a join from a layer

Attributes and editing (11)

Tool What it does
get_features Read attribute rows from a layer, table or dataset path, with an optional where clause, field subset, ordering and WKT geometry
count_features Count features, optionally matching a where clause
get_unique_values Distinct values of a field with the count of rows for each
get_field_statistics min / max / mean / median / sum / standard deviation of a numeric field
summarize_features Group rows by one or more fields and aggregate -- the fast way to answer 'how many / how much per category' without geoprocessing
insert_features Insert new rows into a layer or table
update_features ⚠️ Update attributes and/or geometry of rows matching a where clause
delete_features ⚠️ Delete rows matching a where clause
save_edits Commit pending edits
discard_edits Throw away pending edits
calculate_field Calculate field values across a layer, e.g

Selection (6)

Tool What it does
select_features Select features by SQL where clause
select_by_location Select features by spatial relationship to another layer
get_selection Report what is currently selected, per layer, with ObjectIDs and optionally the attribute rows
set_selection Select specific features by ObjectID
clear_selection Clear the selection on one layer, or on every layer in the map
zoom_to_selection Zoom the map view to the currently selected features

Schema and dataset creation (11)

Tool What it does
list_fields List a layer's fields with type, alias, length and domain
add_field Add a field to a layer or table
add_fields Add several fields in one call
delete_field ⚠️ Delete one or more fields
alter_field Rename a field or change its alias/length
create_feature_class Create an empty feature class, by default in the project's default geodatabase, and add it to the map
create_table Create an empty standalone table
create_file_geodatabase Create a new file geodatabase
truncate_table ⚠️ Delete every row from a table or feature class, keeping the schema
delete_dataset ⚠️ Delete a dataset from disk or a geodatabase
export_features Export a layer -- honouring its current selection and definition query -- to a new dataset

Geoprocessing (7)

Tool What it does
run_geoprocessing_tool Run any arcpy geoprocessing tool -- the universal escape hatch for analysis
list_geoprocessing_tools Search the available geoprocessing tools by name
list_toolboxes List the arcpy toolbox modules and any toolboxes in the project
describe_geoprocessing_tool Get a tool's parameters, data types, defaults and usage text before running it
run_python_toolbox_tool Run a tool from a custom .pyt / .atbx / .tbx toolbox on disk
check_extension Check, and optionally check out, an ArcGIS extension licence
get_messages Messages from the most recent geoprocessing operation

Symbology and labels (6)

Tool What it does
set_layer_renderer Change a layer's symbology: a single symbol, unique values by category, or a classified/continuous colour scheme by numeric field
get_layer_symbology Inspect a layer's current renderer, class breaks, unique values and label settings
list_color_ramps List the colour ramps available in the project
set_layer_labeling Turn labels on or off and set the expression, font and halo
apply_symbology_from_layer Copy symbology from a .lyrx file or another layer
save_layer_file Save a layer with its symbology to a .lyrx file for reuse

Map view and bookmarks (7)

Tool What it does
get_map_view Current camera position: centre, scale, rotation and visible extent
set_map_view Move the map view: set an extent, a centre point, a scale and/or a rotation
export_map_view 🖼️ Render the map view to PNG and return the image so it can be looked at -- the way to visually check a map
list_bookmarks List the spatial bookmarks defined on a map
create_bookmark Save the current view, or a given extent, as a named bookmark
apply_bookmark Zoom the map view to a bookmark
delete_bookmark ⚠️ Delete a bookmark from a map

Layouts and printing (16)

Tool What it does
list_layouts List the print layouts with page size and element counts
get_layout_info Inspect a layout: page setup and every element with position and size
create_layout Create a new layout page, by default with a map frame filling it
delete_layout ⚠️ Delete a layout from the project
add_map_frame Add a map frame to a layout at a page position
set_map_frame_extent Point a layout's map frame at a layer, an extent or a scale
add_layout_text Add a text element such as a title or credits to a layout
add_layout_legend Add a legend tied to a layout's map frame
add_layout_scale_bar Add a scale bar tied to a layout's map frame
add_layout_north_arrow Add a north arrow tied to a layout's map frame
add_layout_picture Place an image such as a logo on a layout
set_layout_element Move, resize, rename, hide or change the text of any layout element
delete_layout_element ⚠️ Remove an element from a layout
export_layout 🖼️ Export a layout to PDF / PNG / JPEG / SVG / TIFF
preview_layout 🖼️ Render a layout to a temporary image and return it, without writing a file -- use it to visually check a layout while building it
export_map_series Export a layout's map series (map book) to a multi-page PDF

Raster (5)

Tool What it does
get_raster_info Raster detail: bands, size, cell size, pixel type, statistics and CRS
set_raster_symbology Set a raster layer's colorizer and colour ramp
raster_calculator Map algebra
sample_raster_values Read raster cell values at map coordinates or at a point layer's features
zonal_statistics Summarise raster values inside zone polygons and return the table

Finding and inspecting data (6)

Tool What it does
list_workspace_contents List the datasets inside a geodatabase or folder
list_folder List GIS files and subfolders on disk
describe_dataset Describe any dataset by path -- type, geometry, CRS, extent, fields and row count -- without adding it to a map
search_data Find datasets by name across the project's geodatabase, home folder and folder connections
get_project_items Folder connections, database connections and toolboxes registered in the project
add_folder_connection Register a folder with the project so its data is easy to browse

Escape hatch (4)

Tool What it does
execute_arcpy_code Run Python inside ArcGIS Pro
get_pump_status Whether the main-thread dispatcher is installed
stop_pump Remove the main-thread dispatcher
run_batch Run several commands in one round trip -- much faster for multi-step workflows

⚠️ = changes or deletes real data    🖼️ = returns an image the AI can look at

Troubleshooting

No MCP tab after restarting Pro. Add-in security is the usual cause.Run Install-ArcGISProMCP.cmd; it will say so and offer the two ways round it.The setting itself is in ArcGIS Pro under Project ▸ Add-In Manager ▸Options:

ArcGIS Pro Add-In Manager, Options tab, showing the three add-in security settings

The middle setting is the one this add-in is signed for. The bottom one loadsanything. What each choice means.

The client shows the server in red. ArcGIS Pro is closed, or the bridge isstopped. Open Pro and check the toggle on the MCP tab shows ⏹ (running).

A command says a layer does not exist. Layers inside a group need theirfull name, "Group\Layer", for anything that runs through geoprocessing.

An edit did not appear. ArcGIS Pro holds edits open so they can be undone,which also keeps the data locked. Call save_edits.

Safety

These tools change the project you have open and the data under it. Toolsmarked ⚠️ above modify or delete real data.

The bridge binds to 127.0.0.1 only — nothing on the network can reach it —but anything that can run code on your machine can drive ArcGIS Pro through itwhile Pro is open. execute_arcpy_code runs arbitrary Python inside Pro.

Prefer non-destructive steps, use save_project deliberately, and let theassistant confirm before bulk edits.

How it works

An ArcGIS Pro add-in written in C#, running inside Pro's own process:

AI client ──MCP over HTTP :6520/mcp ─┐
                                     │
AI client ──MCP stdio──► arcgis-pro-mcp ──TCP :6510──┐
                                     │               │
                                     ▼               ▼
              ┌─ C# add-in (inside the ArcGIS Pro process) ─┐
              │   → QueuedTask.Run (Main CIM Thread)        │
              │   anything it does not implement ─┐         │
              └───────────────────────────────────┼─────────┘
                                                  ▼ :6511
                                    Python bridge (execute_arcpy_code)

Being in-process is the whole point. ArcGIS Pro will only let its own Main CIMThread touch the open project, and an outside process cannot get onto it. Anearlier all-Python version had to hand work to Pro's Python thread and wait,which took around 28 seconds per call. The add-in uses QueuedTask.Rundirectly: 9 ms.

Three of the 112 tools stay on the Python side, and belong there:execute_arcpy_code, because a compiled add-in cannot run code composed atcall time, and get_pump_status / stop_pump, which report on the Pythonbridge's own dispatcher.

More detail in docs/.

Building it yourself

You do not need to — the release is a single download. If you want to changesomething, see BUILD.md.

.\scripts\build.ps1

Everything used to produce a release is in this repository: the build, thesigning, the icon drawing, and the installer that gets packed into one file.

Author and licence

Built by Pisut Nakmuenwai (@Knight60).

Released under the MIT Licence — use it, change it, ship it insomething commercial; just keep the copyright notice.

Support this project

Built and maintained in the open, with no company behind it.

If it saves you time, sponsoring ithelps keep it working. Most of the ongoing effort is not new features butkeeping up with ArcGIS Pro: every release can move the framework it targets andshift the parameter order of its two thousand geoprocessing tools, and each onemeans regenerating that table and testing the whole surface again.

Starring the repository costs nothing and helps other people find it. So doestelling me what broke — a clearissue is worth a greatdeal.

Disclaimer

This software is provided "as is", without warranty of any kind, express orimplied, including but not limited to the warranties of merchantability,fitness for a particular purpose, and non-infringement. In no event shall theauthor or copyright holder be liable for any claim, damages, or otherliability, whether in an action of contract, tort, or otherwise, arising fromor in connection with the software or its use. The full terms are inLICENSE.

Two properties of this software deserve stating plainly rather than being leftto the licence, because they are what it is for rather than defects in it:

  • It executes commands against a live ArcGIS Pro session, includingoperations that permanently alter or delete datasets, project files, andgeodatabase contents. The tools marked ⚠️ in the table above are the onesthat do so.
  • Those commands are issued by an AI assistant, whose output is notdeterministic and is not reviewed before it runs. execute_arcpy_codeexecutes arbitrary Python inside ArcGIS Pro with the privileges of thesigned-in user.

You remain responsible for your data and for the consequences of any operationperformed through this software. Back up anything you cannot afford to lose,work on copies where practical, and verify results before relying on them. Useagainst production data, or against data you cannot restore, is entirely atyour own risk.

This project is an independent work. It is not affiliated with, endorsed by,sponsored by, or supported by Esri, and it is not a supported ArcGIS product.ArcGIS and ArcGIS Pro are trademarks of Esri. Your use of ArcGIS Pro remainsgoverned by your own licence agreement with Esri, and nothing here modifies it.

MCP Server · Populars

MCP Server · New

    ocm-mcp-server

    🛡️ ocm-mcp-server

    An MCP server that lets AI agents operate a multi-cluster Kubernetes fleet through an Open Cluster Management hub, with policy, approval, and audit between the model and your clusters.

    Community ocm-mcp-server
    M4F-S

    Gomaa 🧠

    Gomaa — Autonomous Agent Memory OS. Persistent memory system for AI agents with Obsidian vault integration, hybrid RRF search, knowledge graphs, security gates, and MCP server.

    Community M4F-S
    chatmcp

    3802

    directory for Awesome MCP Servers

    Community chatmcp
    Morningstar202604

    AgentSeed

    Anti-hallucination gate for AI coding agents — 8 MCP tools catch invented APIs (17 languages), fake "all tests pass" claims, and slopsquatting packages before they ship. Zero-dependency Agent Plugins 1.0.0 plugin (Skill + MCP server + CLI + CI gate) for Claude Code, Cursor, VS Code, Copilot.

    Community Morningstar202604
    skarn-security

    Skarn guard: agent plugins

    Skarn plugins for Claude Code, Codex CLI, Gemini CLI, Grok Build, and Antigravity: audit skills, guard hooks, and MCP declarations that find leaked secrets and credentials in AI coding sessions, locally and redacted.

    Community skarn-security