CLI-Anything · ArcGIS Pro

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.

Category
Visit Server

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.
  • 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:

<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-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

<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

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured