CLI-Anything · ArcGIS Pro
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.
README
<p align="center"> <img src="docs/hero.png" alt="CLI-Anything · ArcGIS Pro — an AI agent driving ArcGIS Pro to make maps" width="100%"> </p>
<h1 align="center">CLI-Anything · ArcGIS Pro</h1>
<p align="center"> <b>Make ArcGIS Pro agent-native.</b><br> An AI agent drives ArcGIS Pro end to end — <i>data → clip → analysis → publication-ready map</i> — and you watch it happen. </p>
<p align="center"> <a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache_2.0-blue.svg" alt="License: Apache 2.0"></a> <img src="https://img.shields.io/badge/python-3.9+-3776AB?logo=python&logoColor=white" alt="Python 3.9+"> <img src="https://img.shields.io/badge/.NET-8.0-512BD4?logo=dotnet&logoColor=white" alt=".NET 8"> <img src="https://img.shields.io/badge/ArcGIS_Pro-3.4-2C7FB8" alt="ArcGIS Pro 3.4"> <img src="https://img.shields.io/badge/MCP-ready-1f9d55" alt="MCP ready"> <a href="https://github.com/HKUDS/CLI-Anything/pull/318"><img src="https://img.shields.io/badge/CLI--Anything-PR%20%23318-orange" alt="Upstream PR #318"></a> <a href="https://github.com/Jasper0122/CLI-Anything-Arcgis-Pro/stargazers"><img src="https://img.shields.io/github/stars/Jasper0122/CLI-Anything-Arcgis-Pro?style=social" alt="Stars"></a> </p>
<p align="center"> <a href="#-demo">Demo</a> · <a href="#-features">Features</a> · <a href="#-quickstart">Quickstart</a> · <a href="#-commands">Commands</a> · <a href="#-mcp-tools">MCP tools</a> · <a href="#-architecture">Architecture</a> </p>
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.
- ✅ Tested —
test_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:
<video src="https://github.com/user-attachments/assets/c1416209-f2bc-4d14-83a4-0d1f37b8f24c" controls muted width="100%" style="max-height:360px"></video>
🚀 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-py3interpreter when ArcPy isn't present. It locates Pro via common install paths, theSOFTWARE\ESRI\ArcGISProregistry key, or theCLI_ANYTHING_ARCGIS_PYTHONenvironment 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:

<sub>Source: <a href="docs/implementation-flow.canvas"><code>docs/implementation-flow.canvas</code></a> (JSON Canvas / Obsidian).</sub>
📁 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.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.