Skip to main content
Glama
IngKevinDavid

arcgis-pro-mcp-free

MCP Free Bridge for ArcGIS Pro

Versión en español: README.es.md

A free, local bridge between Model Context Protocol (MCP) and ArcGIS Pro 3.5 or newer: 68 commands (reading, geometry, editing, symbology, layouts, geoprocessing and arcpy code execution) that any MCP-capable assistant can use directly on your open project.

No paid licenses, no cloud: the Add-In listens on 127.0.0.1:PORT (your PC only) and the launcher exposes the 167 MCP tools.

Architecture

Assistant (opencode, Claude, ...)  <--stdio JSON-RPC-->  tcp_bridge.py
        <--TCP 127.0.0.1:PORT, length-prefixed JSON-->  Add-In (Pro)

Piece

What it is

ArcGisProMcpFree.esriAddinX (package/)

Compiled Add-In: 68 commands + manual control window (EN/ES)

py-server/tcp_bridge.py

MCP launcher: reuses the 167 tools from arcgis-mcp-server, swapping only the transport to TCP

*.cs, Config.daml

Add-In sources (C# .NET 8)

tests/

Maintainer verification suites

Related MCP server: CLI-Anything · ArcGIS Pro

Requirements

  • ArcGIS Pro 3.5 or newer (tested on 3.5.4; desktopVersion: 3.5 loads forward).

  • Python 3.12+ with pip install -r requirements.txt.

  • To compile the Add-In (optional): .NET 8 SDK.

Install (5 minutes)

1. Install the Add-In

Double-click package/ArcGisProMcpFree.esriAddinX — it installs itself. Or copy it to Documents\ArcGIS\AddIns\ArcGISPro\.

2. Install the MCP launcher — option A: uvx (no manual install)

"arcgis_mcp_addin": {
  "type": "local",
  "command": [
    "uvx",
    "--from",
    "git+https://github.com/IngKevinDavid/ArcGis-Pro-MCP-Free",
    "arcgis-pro-mcp-free"
  ],
  "environment": {}
}

uvx fetches the launcher from this repo on first use (the pinned tool wheel comes from the Release assets). Nothing to download by hand besides the Add-In.

2b. Option B: global Python

cd <repo>
py -m pip install -r requirements.txt   # vendored wheel, no venv needed
"arcgis_mcp_addin": {
  "type": "local",
  "command": [
    "C:\\Users\\YOU\\AppData\\Local\\Programs\\Python\\Python313\\python.exe",
    "PATH\\TO\\py-server\\tcp_bridge.py"
  ],
  "environment": {}
}

3. Port selection

Without PORT, everything uses port 5876. For another port (e.g. 8791): type it in the Add-In window and add "environment": {"PORT": "8791"} to the MCP entry (reload the client so it picks it up).

Use

  1. Open your project in Pro. Nothing listens on its own: tab MCP Free Bridge → button MCP Free BridgeStart (shows RUNNING 127.0.0.1:5876). The ribbon icon is red while stopped, green while running. UI in English, Español button switches to Spanish.

  2. Use the tools from your assistant: list_layers, query_layer, run_gp_tool, label_layer, apply_graduated_symbology, geometry_area, create_feature, export_layout, ...

  3. Arbitrary arcpy code via the run_gp_tool tool with the bundled ArcPyExec.pytExecPython.

  4. When done: Stop in the window.

MCP tools (167)

Coverage: 165 of 167 tools run against the Add-in — 68 dedicated commands plus client-side wrappers that delegate to the tested generic run_gp_tool. publish_web_layer and stage_service_definition need a staged server connection and answer a clean error until implemented.

Core (3)

Tool

Description

check_license

Returns the current ArcGIS Pro license level and the list of licensed extensions.

get_capabilities

Lists available Add-in command capabilities.

health_check

Checks MCP/Add-in/ArcGIS Pro pipe health and active project state.

Project & maps (7)

Tool

Description

consolidate_project

Consolidates a project and its data into a folder (no compression).

get_active_map

Returns the name of the active map and scene view in ArcGIS Pro.

list_maps

Lists maps in the current ArcGIS Pro project.

list_project_items

Lists main project items in the current ArcGIS Pro project.

open_map

Opens a map in ArcGIS Pro by name.

save_project

Saves the current ArcGIS Pro project.

save_project_as

Saves the current ArcGIS Pro project to a new APRX path.

Layers (29)

Tool

Description

add_layer_to_group

Moves existing layers into an existing group layer in the active map.

add_layer_to_map

Adds a dataset, layer file, or service URL to the active map.

add_subtypes

Adds a subtype to a subtype definition.

apply_graduated_symbology

Applies graduated color symbology to a feature layer.

apply_raster_colorizer

Applies raster symbology from a layer file or existing layer.

apply_symbology_from_layer

Applies symbology from an existing layer or .lyrx file.

apply_unique_value_symbology

Applies unique value symbology to a feature layer.

clear_selection

Clears selection in one feature layer or in the whole active map.

count_features

Counts the number of features in a specified layer. Optional SQL filter (e.g. "POPULATION > 100000").

create_group_layer

Creates a group layer in the active map, optionally moving existing layers into it.

export_layer

Exports a feature layer to a dataset path.

get_count

Returns the total number of rows for a feature class, table or layer.

get_layer_fields

Gets the schema/fields of a layer, listing names, aliases, and data types of all attributes.

get_layer_symbology

Returns renderer metadata for a layer.

get_selected_features

Retrieves the attribute records for the currently selected features in a layer.

label_layer

Enables labels on a feature layer using a field-based expression. Optionally applies a text halo.

list_layers

Lists all layers in the active map, showing names, types, visibility, and total features.

load_layer_file

Loads a .lyrx file into the active map.

query_layer

Queries attribute rows from an active-map feature layer.

remove_layer

Removes a layer from the active map.

save_layer_file

Saves an active-map layer to a .lyrx file.

select_features

Selects features in a layer using a SQL attribute query. combination: NEW, ADD, REMOVE, SUBTRACT, XOR.

set_definition_query

Sets or clears a definition query on a feature layer.

set_layer_symbol

Sets the color (RGB 0-255) and optionally the width of a feature layer's simple renderer via direct CIM manipulation.

set_layer_transparency

Sets layer transparency from 0 to 100.

set_map_extent

Sets the active map view extent to the specified bounding box coordinates (default WKID 4326).

toggle_layer_visibility

Toggles the visibility of a layer in the active map by name.

update_class_breaks

Rebuilds graduated class breaks for a feature layer.

zoom_to_layer

Zooms the active map view to the spatial extent of a specific layer by name.

Bookmarks (4)

Tool

Description

create_bookmark

Creates a spatial bookmark from the current active map view extent.

delete_bookmark

Deletes a bookmark by name from the active map.

list_bookmarks

Lists bookmarks for the active map or a named map.

zoom_to_bookmark

Zooms the active map to a named bookmark.

Layouts (9)

Tool

Description

add_dynamic_text

Adds a text element to a layout. ArcGIS dynamic text tags are accepted.

create_basic_layout

Creates a basic layout from the active map with map frame and cartographic surrounds.

create_map_series

Creates a spatial map series for a layout.

export_active_map

Exports the active map view to an image file.

export_all_layouts

Exports every layout in the active ArcGIS Pro project to one output directory.

export_layout

Exports a print layout to the specified output file path. format_type: PDF, PNG, JPEG. Resolution in DPI.

export_map_series

Exports a configured map series.

list_layouts

Lists all the layouts (print layouts/map layouts) defined in the current ArcGIS Pro project.

update_layout_element

Updates text or visibility of a layout element.

Editing (7)

Tool

Description

create_feature

Creates a point feature in a feature layer.

delete_features

Deletes features identified by the given ObjectIDs.

delete_selected_features

Deletes selected features from a feature layer.

insert_features

Inserts multiple point features in a single edit operation (arcpy.da-style batch).

undo_last_edit

Undoes the last MCP edit operation.

update_attributes

Updates attributes for a feature by ObjectID.

update_features

Updates multiple features by ObjectID in a single edit operation.

Data access (12)

Tool

Description

add_join

Joins a table to a layer or table view based on a common field.

copy_features

Copies features to a new feature class.

copy_rows

Copies the rows of a table, table view or feature class to a new table.

export_features

Exports a feature class or layer to a new feature class (shapefile, file geodatabase, etc.).

export_table

Exports a table or attribute table to a new standalone table.

frequency

Reads a table and produces a new table containing unique field values and their counts.

make_feature_layer

Creates a feature layer from an input feature class or layer file.

make_table_view

Creates a table view from an input table or feature class.

remove_join

Removes a join from a feature layer or table view.

select

Extracts features from input based on a SQL expression.

summary_statistics

Computes summary statistics for fields in a table.

table_select

Extracts rows from a table based on an expression.

Data management & analysis (27)

Tool

Description

add_field

Adds a new field to a table or feature class. field_type: TEXT, LONG, SHORT, DOUBLE, FLOAT, DATE, BLOB.

append

Appends multiple input datasets into an existing target dataset. schema_type: TEST or NO_TEST.

buffer_analysis

Creates buffer polygons around input features to a specified distance. Example: "100 Meters".

calculate_field

Performs field calculations on feature classes or tables. expression_type: PYTHON3, ARCADE, SQL, VB.

check_geometry

Produces a report of geometry problems in a feature class.

clip_analysis

Clips/extracts input features that overlay clip features.

create_feature_class

Creates an empty feature class in a geodatabase or folder. geometry_type: POINT, MULTIPOINT, POLYLINE, POLYGON.

create_file_gdb

Creates a file geodatabase in the specified folder.

create_table

Creates an empty table in a geodatabase or dBASE workspace.

define_projection

Defines the projection of a dataset without transforming its coordinates.

delete

Permanently deletes a dataset.

delete_field

Deletes one or more fields from a table or feature class.

dissolve

Aggregates features based on specified attributes.

erase

Removes features (and portions of features) that overlap the erase features.

find_identical

Reports records with identical values in a list of fields.

generate_near_table

Produces a table of distances between input and near features.

intersect

Computes the geometric intersection of feature classes. output_type: INPUT, LINE, POINT.

merge

Combines multiple input datasets into a new output dataset.

multiple_ring_buffer

Creates multiple buffers at specified distances around inputs.

near

Adds distance, location and angle from in_features to the nearest near_features.

project

Projects spatial data from one coordinate system to another.

rename

Renames a dataset.

repair_geometry

Repairs problematic geometry errors in a feature class.

select_layer_by_location

Selects features in a layer based on their spatial relationship to features in another layer.

spatial_join

Joins attributes from one feature class to another based on spatial relationship.

split

Splits input features into many feature classes by the unique values of a split field.

union

Computes the geometric union of polygon feature classes.

Conversion (12)

Tool

Description

bim_to_geodatabase

Converts Revit/BIM data (.rvt/.ifc/.dgn) into feature classes.

cad_to_geodatabase

Converts CAD data (.dwg/.dgn/.dxf) into feature classes in a geodatabase.

excel_to_table

Imports an Excel workbook (.xlsx/.xls) into a geodatabase table or dBASE.

feature_class_to_shapefile

Converts one or more feature classes to shapefiles in a folder.

features_to_json

Converts features to ArcGIS JSON or GeoJSON.

json_to_features

Creates a feature class from Esri JSON or GeoJSON.

kml_to_layer

Converts a KML/KMZ file into a feature class and layer file in a file geodatabase.

layer_to_kml

Converts a map layer, layer file or feature class to a KMZ file.

point_to_raster

Converts point features to a raster dataset.

polygon_to_raster

Converts polygon features to a raster dataset.

raster_to_polygon

Converts a raster dataset to polygon features.

table_to_excel

Exports a table or feature class attribute table to Excel (.xlsx).

Network analysis (4)

Tool

Description

find_closest_facilities

Finds the closest facility(ies) for each incident. Requires Network Analyst extension.

find_routes

Finds the best route through ordered stops (Network Analyst). Requires Network Analyst extension.

generate_od_cost_matrix

Generates an Origin-Destination cost matrix. Requires Network Analyst extension.

generate_service_areas

Generates travel-time/distance service areas (isochrones). Requires Network Analyst extension.

Spatial Analyst (raster) (8)

Tool

Description

aspect

Derives aspect (compass direction of slope) from a surface raster. Requires Spatial Analyst extension.

extract_by_mask

Extracts the cells of a raster corresponding to mask features. Requires Spatial Analyst extension.

hillshade

Generates a hillshade from a surface raster. Requires Spatial Analyst extension.

kernel_density

Calculates kernel density from point/polyline features. Requires Spatial Analyst extension.

raster_calculator

Builds and executes a Map Algebra expression (Raster Calculator). Requires Spatial Analyst extension.

reclassify

Reclassifies values in a raster. Requires Spatial Analyst extension.

slope

Derives slope from a surface raster. Requires Spatial Analyst extension.

weighted_overlay

Overlays several rasters using a common scale and weights. Requires Spatial Analyst extension.

Spatial statistics (7)

Tool

Description

cluster_and_outlier_analysis

Identifies clusters and outliers using Anselin Local Moran's I.

emerging_hot_spot_analysis

Identifies trends in spatial clustering from a space-time cube.

generalized_linear_regression

Performs Generalized Linear Regression (GLR). model_type: CONTINUOUS, BINARY, COUNT.

geographically_weighted_regression

Performs Geographically Weighted Regression (GWR) to model spatially varying relationships.

hot_spot_analysis

Identifies statistically significant hot/cold spots using Getis-Ord Gi*.

optimized_hot_spot_analysis

Creates a map of statistically significant hot/cold trends, choosing parameters automatically.

spatial_autocorrelation

Measures spatial autocorrelation (Global Moran's I).

Geometry (7)

Tool

Description

geometry_area

Returns the area of the first selected polygon feature in the layer.

geometry_contains

Returns True if the selected feature of layer_a contains that of layer_b.

geometry_intersects

Returns True if the two selected geometries intersect.

geometry_length

Returns the length of the first selected polyline feature in the layer.

geometry_within_distance

Returns True if the two selected geometries are within a distance of each other.

measure_distance

Geodesic distance (meters) between the first selected feature of each layer.

set_camera_3d

Sets the camera orientation of the active view (3D scenes). heading 0-360, pitch -90 to 90.

Geocoding (4)

Tool

Description

create_locator

Creates a geocoding locator from reference data.

geocode_addresses

Geocodes a table of addresses using a locator.

rematch_addresses

Re-matches addresses in a geocoded feature class.

reverse_geocode

Creates addresses from point locations (reverse geocoding).

Geodatabase & topology (8)

Tool

Description

add_feature_class_to_topology

Adds a feature class to a topology.

add_rule_to_topology

Adds a rule to a topology. rule_type: e.g. "Must Not Overlap", "Must Be Inside".

create_domain

Creates a geodatabase domain.

create_topology

Creates a new topology in a feature dataset.

describe_dataset

Describes an active-map layer or geodatabase dataset.

list_domains

Lists geodatabase domains.

list_feature_classes

Lists feature classes in a file geodatabase.

validate_topology

Validates the specified topology.

Packaging & sharing (9)

Tool

Description

create_mobile_map_package

Packages maps for offline use in Field Maps / Navigator apps into a .mmpk file.

create_vector_tile_package

Creates a vector tile package (.vtpk) from a map.

package_layer

Packages a layer and its data into a single compressed .lpkx file.

package_map

Consolidates a map and all referenced data sources into a .mpkx package.

package_project

Consolidates a project (.aprx) and its data into a portable .ppkx package.

publish_web_layer

Publishes an ArcGIS .sd file or stages and publishes an .sddraft file.

replace_web_layer

Replaces the layers and data of an existing web layer with an updated .sd file.

share_package

Shares a package (.mpkx, .lpkx, .ppkx, .mmpk, .vtpk) to ArcGIS Online or Enterprise.

stage_service_definition

Stages an ArcGIS service definition draft (.sddraft) into a service definition (.sd).

Portal & services (8)

Tool

Description

connect_portal

Sets the MCP REST portal URL and optional token.

describe_portal_item

Describes an ArcGIS portal item.

export_service_geojson

Exports a REST feature layer query result to GeoJSON.

get_active_portal

Returns the active ArcGIS Pro portal and MCP REST portal.

get_layer_schema

Returns schema metadata for a REST feature layer.

get_service_layers

Lists layers and tables exposed by a REST service.

query_feature_service

Queries a REST feature layer.

search_portal_items

Searches ArcGIS Online or ArcGIS Enterprise portal items.

Geoprocessing & docs (2)

Tool

Description

run_gp_tool

Executes any ArcGIS Pro geoprocessing tool by name with list of parameters.

search_arcgis_docs

Searches local SDK docs and returns official online documentation links.

Verify (maintainer)

$V = "py-server\.venv\Scripts\python.exe"
& $V tests\contract_check.py   # 67 raw checks over TCP
& $V tests\mcp_suite.py        # 15 checks through the real MCP path

Tests use ARCGIS_TEST_GDB (a file GDB with fixture data) and PORT; defaults run in the author's environment.

Troubleshooting

Symptom

Typical cause

No ribbon tab

BlockAddins=1 policy at HKCU\SOFTWARE\ESRI\ArcGISPro\Settings → set it to 0

ConnectionRefused

Bridge not started (window → Start) or PORT mismatch on both sides

Port busy on Start

Another process owns it; pick another port in the window

allow_delete

Destructive tools require explicit "allow_delete": true (safety)

Technical notes

  • Honest limits: no online portal (3 commands fail cleanly).

  • count_features counts the source and ignores definition queries (queries honor them).

  • Deleting a GDB in Explorer while Pro holds it leaves it locked; use the Delete tool with allow_delete.

License

MIT — see LICENSE. Protocol compatible with the arcgis-mcp project (MIT); clean implementation without its code or binaries.

Credits

Ing. Kevin David Condori Q. 📧 ingkevindavid@gmail.com 💼 LinkedIn

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Drive Esri's ArcGIS Pro from an AI agent — the ArcGIS Pro counterpart to QGIS MCP. A headless ArcPy CLI plus an in-process .NET 8 add-in that exposes the live Pro session as MCP tools (ping, zoom_to, query, run_gp, export_layout) so an agent drives the running project while you watch.
    4
    6
    59
    PolyForm Noncommercial 1.0.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables natural language control of live ArcGIS Pro sessions through the Model Context Protocol, allowing inspection of projects, layers, and attributes, and execution of geoprocessing tasks.
    25
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/IngKevinDavid/ArcGis-Pro-MCP-Free'

If you have feedback or need assistance with the MCP directory API, please join our Discord server