Skip to content

AutoGeoAI4Sci/CLI-Anything-Arcgis-Pro

 
 

Repository files navigation

CLI-Anything · ArcGIS Pro — an AI agent driving ArcGIS Pro to make maps

CLI-Anything · ArcGIS Pro

Make ArcGIS Pro agent-native.
An AI agent drives ArcGIS Pro end to end — data → clip → analysis → publication-ready map — and you watch it happen.

License: Apache 2.0 Python 3.9+ .NET 8 ArcGIS Pro 3.4 MCP ready Upstream PR #318 Stars

Demo · Features · Quickstart · Commands · MCP tools · Architecture


The closed-source counterpart to CLI-Anything's QGIS harness. ArcGIS Pro is Esri's commercial GIS desktop app, so it can't be auto-generated from source — this wraps its official ArcPy / ArcGIS Pro SDK instead, in two complementary modes:

Mode What it drives How
Headless CLI .aprx projects & geodatabases on disk pip package over arcpy
Live bridge + MCP the open ArcGIS Pro session (you watch it work) in-process .NET add-in + MCP server

✨ Features

  • 🗺️ Professional cartography — export layouts and Map Series / map books (ArcGIS Pro's edge over QGIS).
  • 🧰 The whole ArcToolbox — run any geoprocessing tool (buffer, clip, intersect, dissolve, …) via one command.
  • 🔌 Drive the live session — an agent operates the open project over MCP; results appear in the map as you watch.
  • 🤖 Agent-native I/O — every command speaks JSON: { "ok": …, "data" | "error": … }.
  • 🧠 Self-healing install — the CLI re-dispatches into ArcGIS Pro's Python automatically, so it works no matter where it's installed.
  • Testedtest_core (no backend) + test_full_e2e (needs ArcGIS Pro).

🎬 Demo

A complete workflow driven live by an agent — data → clip → analysis → finished map — inside ArcGIS Pro through the MCP bridge:

CLI-Anything-Arcgis-Pro-demo-v2.mp4

🚀 Quickstart

Install into ArcGIS Pro's bundled Python (arcgispro-py3), which provides ArcPy:

"C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\python.exe" -m pip install ^
  git+https://github.com/Jasper0122/CLI-Anything-Arcgis-Pro.git
cli-anything-arcgis-pro --json info

Installed into a different Python? (e.g. via the CLI-Hub, which uses its own interpreter.) That's fine — the command self-dispatches into ArcGIS Pro's arcgispro-py3 interpreter when ArcPy isn't present. It locates Pro via common install paths, the SOFTWARE\ESRI\ArcGISPro registry key, or the CLI_ANYTHING_ARCGIS_PYTHON environment variable.

Requires a licensed ArcGIS Pro install (provides ArcPy). Verified on ArcGIS Pro 3.4 / ArcPy 3.4.3 / .NET 8.

For the live bridge, build & install the add-in and register the MCP server — see live-bridge/README.md.

🧰 Commands

Headless CLI (every command takes --json before the subcommand):

Command What it does
info ArcPy version, license level, extension availability.
project inspect / layers Maps, layouts, layers, data sources of an .aprx.
layout list / export / mapseries ★ Professional export: layouts + Map Series / map books.
data describe / fields / count / query / calc Inspect & edit feature classes and tables.
gp <tool> -a … --kw k=v Run any geoprocessing tool (the whole ArcToolbox).
batch export-layouts Export every layout in a project.
:: print-quality A0 map at 300 DPI
cli-anything-arcgis-pro --json layout export C:\proj\city.aprx --layout "Poster" --out C:\out\poster.pdf --dpi 300

:: buffer roads by 100 m
cli-anything-arcgis-pro --json gp analysis.Buffer -a C:\d.gdb\roads -a C:\d.gdb\roads_buf --kw buffer_distance_or_field="100 Meters"

See SKILL.md for the full agent guide, and demos/ for runnable end-to-end demos.

🔌 MCP tools

With the live bridge registered, an agent can drive the open project:

MCP tool Action on the live project
arcgis_ping Read the open project: maps, layouts, active view.
arcgis_zoom_to Zoom the active map to a layer (optionally a selection).
arcgis_query Query a layer's attributes → structured rows.
arcgis_run_gp Run any geoprocessing tool; outputs are added to the live map.
arcgis_export_layout Export a layout to PDF.

🧭 Architecture

Agent ──MCP──► mcp_server.py ──HTTP─► in-Pro add-in ──QueuedTask─► LIVE project
                                                                     (you watch)

ArcPy can't attach to a running ArcGIS Pro from an external process (Esri limitation). The live bridge sidesteps this by running an in-process add-in that exposes the open project over a local socket, wrapped as MCP tools — while the headless CLI stays perfect for batch/automation with no GUI.

Full code-implementation flow:

Implementation flow

Source: docs/implementation-flow.canvas (JSON Canvas / Obsidian).

📁 Repository layout

cli_anything_arcgis_pro/   headless ArcPy CLI (pip package)
tests/                     test_core.py (no backend) + test_full_e2e.py (needs Pro)
demos/                     runnable demos (headless, live bridge, full region workflow)
live-bridge/
  mcp_server.py            stdlib-only MCP server → in-Pro bridge
  ProSimpleMapExport/      ArcGIS Pro .NET add-in (bridge server + export button)
docs/                      hero image, architecture diagram (.png + .canvas)
SKILL.md                   canonical agent skill definition

🤝 Contributing

This is a standalone harness for CLI-Anything (registry PR #318). Issues and PRs welcome — run the tests with ArcGIS Pro's Python:

"C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\python.exe" -m pytest tests/

📄 License

Apache-2.0, matching upstream CLI-Anything.

🙏 Acknowledgements

Built as a contribution to HKUDS/CLI-Anything"Making ALL Software Agent-Native." ArcGIS, ArcGIS Pro and ArcPy are trademarks of Esri; this project is an independent integration and is not affiliated with Esri.

About

Agent-native CLI + live-Pro MCP bridge for ArcGIS Pro — the closed-source counterpart to CLI-Anything's QGIS harness

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 64.7%
  • C# 35.3%