Skip to main content
Glama
Jasper0122

CLI-Anything · ArcGIS Pro

by Jasper0122

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:

Listed in the official CLI-Anything registry (PR #318, merged) and on the Glama MCP registry.

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

Related MCP server: ARCclaude

🎬 Demo

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

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

map add-data / symbology graduated / symbology unique

Author the map: add layers, apply graduated-color / unique-value renderers.

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"

:: close the loop: add the result to a map and symbolize it — no GUI clicks
cli-anything-arcgis-pro --json map add-data C:\proj\city.aprx C:\d.gdb\tracts
cli-anything-arcgis-pro --json map symbology graduated C:\proj\city.aprx tracts --field MEDINCOME --classes 5 --ramp Viridis

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 (listed in its registry, merged in #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/

Where to help: see the Roadmap — it maps every planned command to its ArcPy / Pro SDK API and marks tasks that need no ArcGIS license (🐍, e.g. the MCP server, tests, docs) and good first issues (🟢). The biggest open frontier is cartographic authoring (symbology, layout, layer management) — the part that makes ArcGIS Pro beat QGIS.

📄 License

Source-available, not OSI open-source. Licensed under the PolyForm Noncommercial License 1.0.0:

  • 🟢 Free for noncommercial use — personal projects, study, research, evaluation, and nonprofit / educational / government organizations.

  • 💼 Commercial use requires a paid license — see LICENSE-COMMERCIAL.md.

This is an independent downstream project; upstream CLI-Anything is separately licensed under Apache-2.0.

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

Available Tools

6 tools
arcgis_export_layoutA

把活着的 ArcGIS Pro 工程里的某个布局导出为 PDF。导出在用户正开着的 Pro 实例内执行(用户能看到),返回输出路径与文件大小。

ParametersJSON Schema
NameRequiredDescriptionDefault
outYes输出 PDF 的绝对路径,例如 C:\temp\map.pdf
layoutNo布局名(可选;缺省用活动布局,否则用第一个布局)。
dpiNo分辨率 DPI(默认 300)。

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behaviors: the export runs in the user's open Pro instance, is visible to the user, and returns output path and file size. No annotations exist, so the description carries the burden and does so well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with purpose, and contains no superfluous information. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the execution context (live Pro instance, user visibility) and return values, which compensates for the lack of output schema. It is complete for a simple export tool, though prerequisites could be mentioned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with each parameter described. The description does not add new parameter-level details beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool exports a layout from a live ArcGIS Pro project to PDF, distinguishing it from sibling tools that perform other tasks like pinging, querying, or running geoprocessing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for exporting layouts when a Pro instance is open, but does not explicitly state when to use it versus alternatives or provide exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

arcgis_pingA

读取当前打开的 ArcGIS Pro 工程状态:工程名、所有地图、所有布局、以及当前活动的地图/布局。发其它命令前先用它了解打开的是什么工程。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It implies a safe read operation but does not clarify edge cases (e.g., no project open, network requirements) or side effects. Minimal transparency beyond stated purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single, well-structured sentence in Chinese that front-loads the purpose and expected outputs. No waste, every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 0-parameter tool with no output schema, the description covers purpose, return types, and usage context. Lacks details on error conditions or output format, but sufficient for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (no parameters), baseline is 3. Description adds no parameter info but correctly reflects the lack of parameters. No extra semantics needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'read' and resource 'ArcGIS Pro project status', listing specific return fields (project name, maps, layouts, active map/layout). It distinguishes from sibling tools which are action-oriented (export, query, run, symbology, zoom).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to use this tool before other commands to understand the open project. It could be improved by noting when not to use it or mentioning it is safe/read-only, but the guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

arcgis_queryA

查询活工程里某要素图层的属性,返回结构化的行(不含几何)。可按 where 过滤、限制行数。

ParametersJSON Schema
NameRequiredDescriptionDefault
layerYes要素图层名。
whereNo可选 SQL where 条件。
mapNo可选地图名(缺省用活动/第一个地图)。
limitNo最多返回多少行(默认 50,0=不限)。

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It states the tool returns structured rows without geometry and can filter/limit, but does not disclose side effects, permission requirements, error handling, or read-only nature. Adds some context beyond schema but lacks comprehensive behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with clear front-loading of purpose, followed by key features (filtering, limiting). No redundant words; every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, description partially explains return structure (structured rows, no geometry) but lacks details on row format, field selection, error handling, or pagination. Adequate for a simple query tool but could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with adequate descriptions. The tool description adds minor value by mentioning geometry exclusion, but mostly rephrases schema info. Baseline 3 applies as schema already provides sufficient parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb (query), resource (feature layer attributes), and outcome (structured rows without geometry). It distinguishes from sibling tools like arcgis_run_gp and arcgis_export_layout by focusing on attribute queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description mentions filtering with 'where' and limiting rows, implying when to use options. However, it does not explicitly state when to use this tool versus siblings, though sibling tools are distinct enough to avoid confusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

arcgis_run_gpA

在活工程上运行任意 ArcGIS 地理处理工具(整个 ArcToolbox:分析/管理/转换/栅格…)。输出图层会自动加到当前地图(用户能看到)。tool 用点号写法如 'analysis.Buffer'、'management.Clip';params 是按工具签名顺序排列的位置参数字符串数组。例:tool='analysis.Buffer',params=['roads','roads_buf','100 Meters']。

ParametersJSON Schema
NameRequiredDescriptionDefault
toolYes工具名,点号写法,如 analysis.Buffer / management.Dissolve / sa.Slope。
paramsYes按工具参数顺序的位置参数(字符串)。输入/输出强烈建议用数据集全路径(如 C:\...\x.gdb\fc),图层名在后台 GP 里解析不可靠。距离等参数如 '500 Meters'。
allow_deleteNoSafety opt-in. Destructive tools (Delete*/Truncate*) are BLOCKED by default to protect shapefiles, feature classes and geodatabases. Set true ONLY when you intend to delete or truncate data.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that output layers are automatically added to the map, warns that layer names are unreliable and recommends full paths, and explains the allow_delete safety mechanism. It does not cover error handling or performance, but is still quite transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph that efficiently conveys the main purpose first, then details. Every sentence adds value, though a more structured format (e.g., bullet points) could improve readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately covers what the tool does and how to use it. It mentions output visibility and parameter format. It does not describe return values, but the tool's side effect (adding layers to map) is clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, but the description adds value beyond the schema by providing examples (e.g., 'analysis.Buffer'), explaining that params are positional strings, and giving formatting hints like '500 Meters' for distances.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool runs any ArcGIS geoprocessing tool (entire ArcToolbox) and that output layers are added to the current map. It distinguishes itself from siblings like arcgis_query or arcgis_symbology by focusing on arbitrary GP tool execution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides examples of tool naming and parameters, and includes a safety opt-in for destructive tools. However, it does not explicitly state when not to use this tool or mention alternatives, which would strengthen guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

arcgis_symbologyA

给活工程里某要素图层套用渲染器,让地图会说话——用户能在 Pro 窗口里立刻看到变色。renderer='graduated' 用数值字段做分级配色(专题图主力);'unique' 用分类字段每个值一种颜色。例:layer='tracts', renderer='graduated', field='MEDINCOME', classes=5, ramp='Viridis'。

ParametersJSON Schema
NameRequiredDescriptionDefault
layerYes要渲染的要素图层名。
rendererYesgraduated=数值字段分级色;unique=分类字段唯一值色。
fieldYes用于渲染的字段。graduated 需数值字段;unique 用分类字段。
classesNograduated 的分级数(默认 5;unique 忽略)。
methodNograduated 的分类方法(默认 NaturalBreaks;unique 忽略)。
rampNo色带名,如 'Viridis'(可选)。
mapNo可选地图名(缺省用活动/第一个地图)。

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that changes appear immediately in the Pro window, and explains parameter behavior (e.g., 'classes' only for graduated). However, it doesn't mention error handling or permanence of changes, but the main behavioral traits are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three sentences: first states purpose, second explains renderer types, third gives an example. No fluff, front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters and no output schema, the description covers the tool's purpose and parameter usage well, including an example. It lacks details on potential errors or prerequisites (e.g., field must exist), but overall it is sufficient for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds significant value beyond schema descriptions: it explains the purpose of 'renderer' with examples, clarifies that 'classes' and 'method' apply only to 'graduated', and gives a concrete example. This enhances understanding beyond the parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('套用渲染器' apply renderer) and the resource ('要素图层' feature layer), with immediate visual feedback. It distinguishes between two renderer types ('graduated' and 'unique'), making the purpose precise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use each renderer: 'graduated' for numeric fields and 'unique' for categorical fields. While it doesn't explicitly exclude siblings, the sibling tools (e.g., export, query) are clearly different, so usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

arcgis_zoom_toA

把活动地图视图缩放到某个要素图层(用户能在窗口里看到地图动)。可选 where 条件:会先选中匹配要素再缩放到选集。需要 Pro 当前处于地图视图(非布局)。

ParametersJSON Schema
NameRequiredDescriptionDefault
layerYes要缩放到的要素图层名。
whereNo可选 SQL 条件,如 "POP > 1000";给了就缩放到选中要素。

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that the tool causes visual map movement and can optionally select features first. Without annotations, description carries full burden and adequately covers the visible effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences covering main action, optional behavior, and prerequisite. No wasted words, front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given simple tool (2 params, no output schema), description adequately explains both usage modes and a key prerequisite. Could mention error cases but not necessary for a zoom tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3), but description adds extra detail: explains the where behavior as 'first selects matching features then zooms to the selection', which adds semantic value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb ('zoom to') and resource ('active map view to a feature layer'). It distinguishes from sibling tools which have different purposes (export, query, run geoprocessing, etc.).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit prerequisite ('requires Pro to be in map view, not layout') and explains the optional where condition behavior. Does not explicitly contrast with siblings but contextually differentiation is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a distinct purpose: status checking, layout export, attribute query, geoprocessing, symbology application, and view zooming. No overlap in functionality.

Naming Consistency4/5

All tools start with 'arcgis_' and follow a verb-noun pattern (e.g., arcgis_export_layout, arcgis_zoom_to). Minor abbreviation in 'run_gp' and phrasal verb 'zoom_to' are acceptable but not perfectly uniform.

Tool Count5/5

Six tools is well-scoped for interacting with an active ArcGIS Pro session, covering essential operations without being overwhelming or too sparse.

Completeness3/5

Covers core workflows like export, query, symbology, and running any geoprocessing tool. Missing direct data editing (create/update/delete features) and layer management, but the GP tool can indirectly cover some gaps.

Maintenance

ActivityStale
ResponsivenessSyncing

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

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/Jasper0122/CLI-Anything-Arcgis-Pro'

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