内容
# ArcGIS MCP - 服务器统一版
ArcGIS Online 和 ArcGIS Enterprise 的 MCP 服务器,结合了:
- ✅ 用户、组和共享管理
- ✅ 完整的项目管理(发布、导出、移动、克隆)
- ✅ 动态地理处理
- ✅ Feature Layers、Tables 和 FeatureCollections 的查询和编辑
- ✅ ArcGIS Server 管理(服务、日志、机器)— Enterprise
- ✅ 带有高级过滤器的门户日志 — Enterprise
- ✅ **152 个 MCP 工具**,按模块组织
> **注意**: 适用于 ArcGIS Online 和 ArcGIS Enterprise。某些特定功能(webhooks、notebooks、联合服务器)仅在 Enterprise 中可用。
## 快速入门
**3 步开始:**
1. **下载或克隆** 此文件夹(`arcgis-mcp`)
2. **运行安装程序** — 右键单击 `install.ps1` → *用 PowerShell 运行*
自动检测 Python(ArcGIS Pro、系统、Miniconda/Anaconda 或通过 `winget` 安装)。安装依赖项并配置已安装的 IDE(VS Code、Claude Desktop、Cursor、Claude Code、Codex、OpenCode、OpenClaw)。
3. **配置身份验证** 并重启 IDE:
- **使用 ArcGIS Pro**:打开 Pro,连接到您的门户 — 完成。
- **无需 ArcGIS Pro**:使用首选方法编辑 `.env`(OAuth2、API 密钥、配置文件或用户名/密码)。参见 [身份验证](#身份验证) 部分。
试试:“我当前连接的用户是谁?”
> 无 ArcGIS Pro:`python test_oauth.py` 验证连接。
> 使用 ArcGIS Pro:`python test_pro.py`。
---
## 身份验证
服务器按以下顺序尝试连接:
1. **活动 ArcGIS Pro** (`GIS("Pro")`)
- 使用 ArcGIS Pro 中已验证的会话
- 用户必须已在 Pro 中登录
- 如果 Pro 已打开并连接,则不需要 `.env`
- **理想选择**:使用 Pro 进行本地开发
2. **交互式 OAuth2** (打开浏览器)
- 变量:`ARCGIS_USE_OAUTH=true`
- 打开浏览器让用户验证
- 用户在 ArcGIS 门户中输入凭据
- 成功验证后自动生成令牌
- **理想选择**:生产环境、最终用户、分布式应用
- 示例:
```env
ARCGIS_USE_OAUTH=true
ARCGIS_URL=https://www.arcgis.com # 或您的门户
ARCGIS_CLIENT_ID=您的应用 ID # 可选
```
3. **命名配置文件** - 变量 `ARCGIS_PROFILE`(推荐用于开发)
- 使用系统密钥环中保存的凭据
- 比在 `.env` 中使用用户名/密码更安全
4. **API 密钥** - 变量 `ARCGIS_API_KEY`(Enterprise 11.4+ 或 AGOL)
- 长期令牌(最长 1 年)
5. **令牌** - 变量 `ARCGIS_TOKEN`(临时)
- 用于外部生成的令牌
6. **用户名/密码** - 变量 `ARCGIS_URL`、`ARCGIS_USER`、`ARCGIS_PASS`
- 安全性较低,仅适用于本地开发
## 📦 安装
### 选项 1:自动设置(推荐)
```bash
python setup.py
```
该脚本自动执行智能安装 + 验证。
### 选项 2:手动安装
```bash
# 仅安装缺少的包(不会重新安装现有的包)
python install_requirements.py
# 验证所有内容是否正常
python verify_installation.py
```
### 选项 3:传统 pip(安装所有必需包)
```bash
pip install -r requirements.txt
```
## ⚙️ 配置
### 🖥️ 模式 1:ArcGIS Pro(无需配置)
如果您有打开并连接的 ArcGIS Pro,**则不需要 `.env`**。服务器将自动检测您的活动会话。
```bash
# 1. 打开 ArcGIS Pro 并连接到您的门户
# 2. 运行服务器
python arcgis_mcp.py
```
### 🌐 模式 2:交互式 OAuth2(推荐用于生产)
创建 `.env` 文件:
```env
ARCGIS_USE_OAUTH=true
ARCGIS_URL=https://www.arcgis.com # 或您的 Enterprise 门户
# 可选:自定义客户端 ID(如果您有注册的应用)
# ARCGIS_CLIENT_ID=您的客户端 ID
```
运行服务器时,将自动打开浏览器让用户验证。令牌将自动生成并存储。
### 🔑 模式 3:命名配置文件(开发)
首先,使用凭据创建配置文件:
```python
from arcgis.gis import GIS
gis = GIS("https://您的门户.com/portal", username="您的用户名")
# 输入密码时
gis.users.me.username # 验证其是否有效
# 凭据存储在系统密钥环中
```
然后在 `.env` 中:
```env
ARCGIS_PROFILE=您的配置文件
```
### 📋 其他选项
**API 密钥:**
```env
ARCGIS_URL=https://您的门户.com/portal
ARCGIS_API_KEY=您的 API 密钥
```
**用户名/密码:**
```env
ARCGIS_URL=https://您的门户.com/portal
ARCGIS_USER=您的用户名
ARCGIS_PASS=您的密码
```
**安全防护措施:**
```env
# 启用写入操作(创建、编辑、删除)
ARCGIS_WRITE_ENABLED=true # 默认情况下为 false
```
## 🎯 推荐用法:纯 MCP
**服务器设计用于直接从任何兼容的客户端作为纯 MCP(无 HTTP)使用:**
> 在所有情况下,请用您的 ArcGIS Pro 环境可执行文件路径替换 `PYTHON_PATH_EXE`(例如 `C:\...\arcgispro-py3-clone\python.exe`),用 `arcgis_mcp.py` 文件路径替换 `REPO_PATH`。
---
### Claude Desktop
配置文件:
- **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"arcgis-mcp": {
"command": "PYTHON_PATH_EXE",
"args": ["REPO_PATH\\arcgis_mcp.py"],
"env": {
"ARCGIS_WRITE_ENABLED": "true"
}
}
}
}
```
重启 Claude Desktop 后生效。
---
### Claude Code(CLI)
Claude Code 处理三个范围。最实用的是 `user`(在您的所有项目中可用):
```bash
claude mcp add --scope user --env ARCGIS_WRITE_ENABLED=true --transport stdio arcgis-mcp -- "PYTHON_PATH_EXE" "REPO_PATH/arcgis_mcp.py"
```
Claude Code 自动写入配置 — 无需手动编辑 JSON。
| 范围 | 文件 | 可用性 |
|---|---|---|
| `local`(默认) | `~/.claude.json` | 仅限当前项目 |
| `project` | `.mcp.json`(在根目录) | 整个团队通过 git |
| `user` | `~/.claude.json` | 仅限您,所有项目 |
要查看已配置的服务器:`claude mcp list`
---
### Cursor
文件:`~/.cursor/mcp.json`(全局)或 `.cursor/mcp.json`(仅限当前项目)。
```json
{
"mcpServers": {
"arcgis-mcp": {
"command": "PYTHON_PATH_EXE",
"args": ["REPO_PATH\\arcgis_mcp.py"],
"env": {
"ARCGIS_WRITE_ENABLED": "true"
}
}
}
}
```
Cursor 自动重新加载配置;无需重启。
---
### OpenCode
全局文件:`~/.config/opencode/opencode.json`
项目文件:`opencode.json`(在项目根目录)。
```json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"arcgis-mcp": {
"type": "local",
"command": ["PYTHON_PATH_EXE", "REPO_PATH/arcgis_mcp.py"],
"environment": {
"ARCGIS_WRITE_ENABLED": "true"
}
}
}
}
```
> **注意:** 正确的键是 `"environment"`(不是 `"env"`)。OpenCode 静默忽略 `"env"`。
---

您可以使用 **pro** 方法。如果不是,您可以使用此方法,但必须在 `.env` 文件中填写变量:**ARCGIS_URL, ARCGIS_CLIENT_ID**
### Codex CLI(OpenAI)
全局文件:`~/.codex/config.toml`
项目文件:`.codex/config.toml`(在项目根目录)。
> **注意:** Codex 使用 **TOML**,而非 JSON。
```toml
[mcp_servers.arcgis-mcp]
command = "PYTHON_PATH_EXE"
args = ["REPO_PATH/arcgis_mcp.py"]
[mcp_servers.arcgis-mcp.env]
ARCGIS_WRITE_ENABLED = "true"
ARCGIS_PROFILE = "Pro"
```
或通过 CLI(自动写入 `config.toml`):
```bash
codex mcp add arcgis-mcp --env ARCGIS_WRITE_ENABLED=true -- PYTHON_PATH_EXE REPO_PATH/arcgis_mcp.py
```
---
### Kiro(AWS)
文件:`.kiro/settings/mcp.json`(在工作区内)。
```json
{
"mcpServers": {
"arcgis-mcp": {
"command": "PYTHON_PATH_EXE",
"args": ["REPO_PATH\\arcgis_mcp.py"],
"env": {
"ARCGIS_WRITE_ENABLED": "true"
},
"autoApprove": ["whoami", "content_search", "user_list", "group_list"]
}
}
}
```
`autoApprove` 字段是可选的 — 列出 Kiro 在不请求用户确认的情况下执行的工具。
---
**copilot:**

📖 **完整指南:** 本 README 中的相同文档。
---
## 🚀 执行
### 模式 1:纯 MCP(推荐) ✅


**从 Claude Desktop 或 VS Code 使用:**
- 不要手动执行
- MCP 客户端(Claude/VS Code)自动启动和管理服务器
- 参见上一节中的配置
**用于本地测试:**
```powershell
cd D:\Dev\IA\MCPs\arcgis-mcp
python arcgis_mcp.py
```
服务器等待来自标准输入/标准输出的 JSON-RPC 消息。
### 模式 2:HTTP 服务器(仅用于测试/开发) 🧪
```powershell
python arcgis_mcp.py --http
```
**Swagger UI:** http://localhost:8080/docs
**ReDoc:** http://localhost:8080/redoc
> ⚠️ 仅限开发模式。不要在生产环境中使用。
### 模式 3:SSE(适用于远程客户端的 HTTP+SSE)
```powershell
python arcgis_mcp.py --sse
python arcgis_mcp.py --sse --port 9090 # 自定义端口
```
在 `http://0.0.0.0:8080/sse` 上公开 MCP 以支持 HTTP+SSE。需要配置 Entra ID 以验证 Bearer 令牌(变量 `AZURE_TENANT_ID` 和 `AZURE_CLIENT_ID_MCP`)。如果这些变量不存在,则启动时不进行身份验证(适用于内部测试)。
### 初始设置(首次)
**Windows:**
```powershell
cd D:\Dev\IA\MCPs\arcgis-mcp
.\setup.ps1
```
**Linux/Mac:**
```bash
cd ~/arcgis-mcp
python setup.py
```
## 🧪 身份验证测试
在运行完整的服务器之前,您可以测试您的身份验证配置:
### 使用 ArcGIS Pro 测试连接
```bash
python test_pro.py
```
验证您的 Pro 会话是否活动且功能正常。
### 测试交互式 OAuth2
```bash
# ArcGIS Online
python test_oauth.py
# 自定义 Enterprise 门户
python test_oauth.py --url https://您的门户.com/portal
# 使用自定义客户端 ID
python test_oauth.py --url https://您的门户.com/portal --client-id 您的应用 ID
```
这些脚本帮助您在运行完整的 MCP 服务器之前诊断身份验证问题。
## 🧪 与 AI 代理一起使用
此 MCP 设计用于被以下代理使用:
- GitHub Copilot
- Cursor
- Claude Code
- VS Code
- OpenCode
- 任何兼容的 MCP 客户端
### 专用代理:`arcgis-apyt-dev`
存储库包括一个 ArcGIS API for Python 专家代理,该代理通过 `install.ps1` 自动安装在每个检测到的 IDE 上。
#### 功能
代理作为具有 4 个升级级别的编排器运行:
```
1. 直接使用 MCP 工具(如果适用)
2. 如果 MCP 不够用 → 在 API 中搜索正确的路径并执行 Python
3. 如果操作通用且可重用 → 编写新的 @mcp.tool() 在 tools/*.py 中
4. 仅当所有前 3 个路径都失败时,才返回“无法执行”
```
#### 手动安装(如果您未使用 `install.ps1`)
| IDE | 源文件 | 目标 |
|-----|---------------|---------|
| VS Code / Copilot | `agents/arcgis-apyt-dev.vscode.agent.md` | `%APPDATA%\Code\User\prompts\` |
| Claude Code | `agents/arcgis-apyt-dev.claude.md` | `~/.claude/agents/` |
| Cursor | `agents/arcgis-apyt-dev.cursor.mdc` | `~/.cursor/rules/` |
| Codex CLI | `agents/arcgis-apyt-dev.codex.md` | 追加到 `~/.codex/AGENTS.md` |
#### 代理使用示例
```
"下载检查 Feature Layer 的所有附件"
→ 不存在 MCP 工具 → 代理搜索 FeatureLayer.attachments.get_list() 并执行 Python 代码
"我需要一个 MCP 工具来克隆门户之间的组"
→ 代理验证 API,编写 @mcp.tool() 在 tools/users_groups.py 中,并注册它
"列出 Enterprise 中的所有图像服务"
→ server_services_list(service_type="ImageServer") — 直接使用 MCP 工具
```
### 提示示例
#### 🔍 GIS / 门户
```
"我当前连接的用户是谁,拥有什么权限?"
→ whoami()
"显示门户属性(版本、语言、区域)"
→ gis_properties()
"此 ArcGIS Enterprise 使用什么版本?"
→ gis_version()
```
#### 📦 内容 — ContentManager
```
"搜索所有包含 'catastro' 的 Feature Layers"
→ content_search(query="catastro", item_type="Feature Layer", max_items=50)
"哪些项目占用的空间超过 500 MB?"
→ content_find_large(min_mb=500)
```
#### 📄 项目 — 项目
```
"显示 ID 为 abc123 的项目的所有详细信息"
→ item_get(item_id="abc123")
"将该项目导出为 Shapefile 格式"
→ item_export(item_id="abc123", export_format="Shapefile", title="catastro_shp")
"将项目 abc123 移至 '2024 项目' 文件夹"
→ item_move(item_id="abc123", folder="2024 项目")
"将项目 abc123 克隆到用户 jperez 的帐户中"
→ item_clone(item_id="abc123", owner="jperez")
"检查项目 abc123 依赖哪些其他项目"
→ item_dependent_upon(item_id="abc123")
"保护项目 abc123 以防止删除"
→ item_protect(item_id="abc123")
"下载项目 abc123 的缩略图"
→ item_thumbnail(item_id="abc123", save_path="C:/tmp/thumb.png")
```
#### 👤 用户 — UserManager / 用户
```
"列出门户中的所有用户"
→ user_list(query="*", max_users=200)
"显示用户 jperez 的个人资料和角色"
→ user_get(username="jperez")
"禁用用户 jperez 的帐户"
→ user_disable(username="jperez")
"将用户 jperez 的角色更改为 'publisher'"
→ user_set_role(username="jperez", role="publisher")
"用户 jperez 发布了什么内容?"
→ user_content(username="jperez")
```
#### 👥 组 — GroupManager / 组
```
"列出门户中的所有组"
→ group_list(query="*", max_groups=100)
"组 grp456 的成员是谁?"
→ group_members(group_id="grp456")
"将用户 jperez 和 mgarcia 添加到组 grp456"
→ group_add_users(group_id="grp456", usernames=["jperez", "mgarcia"])
"组 grp456 中共享了哪些项目?"
→ group_content(group_id="grp456", max_items=100)
"创建一个名为 '制图' 的组,标签为 gis、地图"
→ group_create(title="制图", description="制图组", tags=["gis", "mapas"])
```
#### 🔗 共享 — 共享管理器
```
"谁有权访问项目 abc123?"
→ share_get_access(item_id="abc123")
"将项目 abc123 设置为公共"
→ share_set_access(item_id="abc123", access="public")
"与组 grp456 和 grp789 共享项目 abc123"
→ share_group_add(item_id="abc123", group_ids=["grp456", "grp789"])
"用户 jperez 的公共项目是什么?"
→ share_audit_by_owner(username="jperez")
"批量将这些项目设为私有:abc123、def456、ghi789"
→ share_bulk_set_access(item_ids=["abc123", "def456", "ghi789"], access="private")
```
#### ⚙️ 地理处理
```
"此 URL 的 GP 服务公开了哪些工具?"
→ gp_discover(gp_url_or_item="https://您的服务器/arcgis/rest/services/Recorte/GPServer")
"使用输入图层执行 '剪切' 工具"
→ gp_run(gp_url_or_item="https://…/Recorte/GPServer", tool_name="Clip",
params={"input_features": "https://…/FeatureServer/0", "clip_features": "https://…/FeatureServer/1"})
"在门户中搜索与 'buffer' 相关的 GP 服务"
→ gp_search_services(keywords="buffer", max_results=10)
"显示 '缓冲区' 工具的参数和描述"
→ gp_tool_help(gp_url_or_item="https://…/GPServer", tool_name="Buffer")
```
#### 🗂️ 要素 — FeatureLayer
```
"此 URL 的 Feature Layer 有哪些字段?”
→ fl_fields(layer_ref="https://您的服务器/arcgis/rest/services/Catastro/FeatureServer/0")
"查询大于 5000 平方米的地块"
→ fl_query_advanced(layer_ref="https://…/FeatureServer/0",
where="AREA > 5000", out_fields=["OBJECTID", "PROPIETARIO", "AREA"],
return_geometry=True)
"此图层支持哪些操作(编辑、查询等)?"
→ fl_capabilities(layer_ref="https://…/FeatureServer/0")
"将 '状态' 字段计算为所有要素的 '活动'"
→ fl_calculate(layer_ref="https://…/FeatureServer/0",
where="1=1", calc_expression=[{"field": "ESTADO", "value": "Activo"}])
```
#### 🗂️ 要素 — 要素 / 表 / FLC / 要素集 / 要素集合
```
"给我 URL 中图层的 OBJECTID=42 的要素"
→ feature_get(layer_ref="https://…/FeatureServer/0", object_id=42)
"查询事件表,返回最近 50 条记录"
→ table_query(layer_ref="https://…/FeatureServer/1",
where="1=1", max_records=50)
"此表的字段是什么?”
→ table_fields(layer_ref="https://…/FeatureServer/1")
"描述 FeatureLayer 集合的结构"
→ flc_describe(layer_ref="https://…/FeatureServer")
"计算此查询的统计数据(计数,平均值 AREA)"
→ fset_statistics(layer_ref="https://…/FeatureServer/0",
where="MUNICIPIO = 'Bogotá'",
stat_fields=[{"statisticType": "avg", "onStatisticField": "AREA", "outStatisticFieldName": "avg_area"}])
"将此查询结果转换为 GeoJSON"
→ fset_to_geojson(layer_ref="https://…/FeatureServer/0", where="STATUS = 'Active'")
```
#### 📋 日志门户 — Enterprise
```
"显示门户日志的最新 WARNING"
→ portal_logs_query(level="WARNING", page_size=200)
"获取门户在 6 月 1 日至 7 日之间的错误"
→ portal_logs_query(start_time="2025-06-01T00:00:00", end_time="2025-06-07T23:59:59",
level="SEVERE", page_size=500)
"获取门户日志的当前保留配置"
→ portal_logs_settings()
"将门户日志级别更改为 WARNING"
→ portal_logs_settings_update(log_level="WARNING", dry_run=False)
```
#### 🔧 企业管理 — misc
```
"ArcGIS Pro 中有哪些可用的许可证?"
→ admin_licenses()
"当前有哪些停止或出错的服务?"
→ admin_services_health()
"列出所有与门户联合的服务器"
→ admin_servers_list()
```
#### 🖥️ ArcGIS Server — Enterprise
```
"列出托管服务器上的所有服务"
→ server_services_list(server_role="HOSTING_SERVER")
"获取 'Catastro/MapServer' 服务的状态和指标"
→ server_service_status(service_name="Catastro/MapServer", server_role="HOSTING_SERVER")
"重启 'Catastro/MapServer' 服务(首先进行 dry-run)"
→ server_service_restart(service_name="Catastro/MapServer", dry_run=True)
→ server_service_restart(service_name="Catastro/MapServer", dry_run=False)
"显示服务器日志中的错误"
→ server_logs_query(log_level="SEVERE", num_messages=200, server_role="HOSTING_SERVER")
"集群中有哪些机器?"
→ server_machines_list(server_role="HOSTING_SERVER")
"获取 ARCGIS-SRV01 机器的硬件信息(CPU、RAM、磁盘)"
→ server_machine_hardware(machine_name="ARCGIS-SRV01", server_role="HOSTING_SERVER")
"列出服务器服务目录中的可用文件夹"
→ server_services_folders(server_role="HOSTING_SERVER")
"服务器上 'Utilities' 文件夹中有哪些服务?"
→ server_services_directory_list(folder="Utilities", server_role="HOSTING_SERVER")
```
## 🛠️ 可用工具
> **总共:105 个 MCP 工具**,按 ArcGIS Python API 模块组织
### 🔍 GIS / 门户(3)
- `whoami()` — 当前会话的身份、平台、权限
- `gis_properties()` — 门户属性(GIS.properties)
- `gis_version()` — 门户或 ArcGIS Enterprise 版本
### 📦 内容 — ContentManager(2)
- `content_search(query, item_type, max_items)` — 在门户中搜索项目
- `content_find_large(min_mb)` — 识别超过 MB 大小的项目
### 📄 项目 — 项目(21)
- `item_get(item_id)` — 项目的完整详细信息
- `item_update(item_id, ...)` — 更新元数据(WRITE)
- `item_protect(item_id)` / `item_unprotect(item_id)` — 防止删除(WRITE)
- `item_metadata(item_id, format)` — JSON 或 XML 格式的元数据
- `item_download(item_id, save_path)` — 下载项目数据
- `item_delete(item_id)` — 删除项目(WRITE)
- `item_move(item_id, folder)` — 移动到文件夹(WRITE)
- `item_clone(item_id, ...)` — 克隆项目(WRITE)
- `item_publish(item_id, ...)` — 发布为服务(WRITE)
- `item_export(item_id, ...)` — 导出为格式(WRITE)
- `item_share(item_id, ...)` — 与组/公众共享(WRITE)
- `item_layers(item_id)` — 服务项目的图层
- `item_dependent_upon(item_id)` — 项目依赖的项目
- `item_dependent_to(item_id)` — 依赖于该项目的项目
- `item_related_items(item_id, rel_type)` — 相关项目
- `item_reassign(item_id, target_owner)` — 重新分配所有者(WRITE)
- `item_get_data(item_id)` — 项目内部数据/JSON
- `item_thumbnail(item_id, save_path)` — 下载缩略图
- `item_add_comment(item_id, comment)` — 添加评论(WRITE)
- `item_resources(item_id)` — 项目附件资源
### 👤 用户 — UserManager / 用户(8)
- `user_list(query, max_users)` — 列出门户用户
- `user_create(username, ...)` — 创建用户(WRITE,企业)
- `user_get(username)` — 用户详细信息
- `user_update(username, ...)` — 更新用户信息(WRITE)
- `user_disable(username)` — 禁用账户(WRITE)
- `user_enable(username)` — 启用账户(WRITE)
- `user_set_role(username, role)` — 更改角色(WRITE)
- `user_content(username)` — 用户项目
### 👥 组 — GroupManager / 组(8)
- `group_list(query, max_groups)` — 列出组
- `group_create(title, description, tags)` — 创建组(WRITE)
- `group_get(group_id)` — 组详细信息
- `group_update(group_id, ...)` — 更新组(WRITE)
- `group_add_users(group_id, usernames)` — 添加成员(WRITE)
- `group_remove_users(group_id, usernames)` — 删除成员(WRITE)
- `group_content(group_id, max_items)` — 组共享项目
- `group_members(group_id)` — 组成员
### 🔗 共享 — SharingManager(12)
- `share_get_access(item_id)` / `share_set_access(...)` / `share_status(item_id)` — 项目访问权限
- `share_bulk_set_access(item_ids, access)` — 批量更改访问权限(WRITE)
- `share_audit_public()` / `share_audit_by_owner(username)` — 公共项目审计
- `share_group_add(item_id, group_ids)` / `share_group_remove(...)` / `share_group_list(item_id)` — 项目组
- `share_group_replace(...)` / `share_group_copy(...)` / `share_group_audit(group_id)` — 高级组操作
### ⚙️ 地理处理(10)
- `gp_discover(gp_url_or_item)` — 发现 GP 服务工具
- `gp_run(...)` — 同步运行工具
- `gp_run_async(...)` — 运行工具并等待结果
- `gp_tool_help(gp_url_or_item, tool_name)` — 工具参数和文档字符串
- `gp_search_services(keywords, max_results)` — 在门户中搜索 GP 服务
- `gp_service_info(gp_url_or_item)` — 服务 REST 信息
- `gp_linear_unit(distance, units)` — 构建 LinearUnit
- `gp_data_file(url, item_id)` — 构建 DataFile
- `gp_raster_data(url, item_id, format)` — 构建 RasterData
- `gp_run_with_env(...)` — 使用 arcgis.env 运行(空间参考,范围等)
### 🗂️ 要素 — FeatureLayer(6)
- `fl_fields(layer_ref)` — 图层字段
- `fl_query_advanced(...)` — 使用 SQL 和空间过滤器查询
- `fl_edit(...)` — 添加/更新/删除要素(WRITE)
- `fl_delete_by_query(...)` — 按查询删除要素(WRITE)
- `fl_calculate(...)` — 计算字段(WRITE)
- `fl_capabilities(layer_ref)` — 图层能力
### 🗂️ 要素 — 要素 / 表 / FeatureLayerCollection / FeatureSet / FeatureCollection(15)
- **要素(3):** `feature_get`,`feature_get_value`,`feature_update`
- **表(3):** `table_query`,`table_edit`,`table_fields`
- **FeatureLayerCollection(3):** `flc_describe`,`flc_update_definition`,`flc_truncate`
- **FeatureSet(3):** `fset_from_query`,`fset_statistics`,`fset_to_geojson`
- **FeatureCollection(3):** `fc_describe`,`fc_query`,`fc_to_feature_layer`
### 📋 门户日志 — 企业(4)
*仅在具有管理员凭证的 ArcGIS Enterprise 中可用。*
- `portal_logs_query(start_time, end_time, level, query_filter, ...)` — 查询日志并过滤
- `portal_logs_clean()` — 清理所有日志(WRITE,不可逆)
- `portal_logs_settings()` — 当前配置(logLevel,logDir,保留)
- `portal_logs_settings_update(...)` — 更新日志配置(WRITE)
### 🔧 企业管理 — misc(3)
*仅在 ArcGIS Enterprise 中可用。*
- `admin_licenses()` — 可用的 ArcGIS Pro 许可证
- `admin_services_health()` — 停止或出错的服务
- `admin_servers_list()` — 与门户联合的服务器
### 🖥️ ArcGIS Server — 企业(13)
*仅在 ArcGIS Enterprise 中可用。 前缀:`server_`。*
- `server_list()` — 列出所有联合服务器
- `server_services_list(folder, server_role)` — 服务器服务
- `server_service_status(service_name, folder, server_role)` — 状态和指标
- `server_service_start(...)` / `server_service_stop(...)` / `server_service_restart(...)` — 控制(WRITE)
- `server_logs_query(...)` — 服务器日志并过滤
- `server_logs_clean(server_role)` — 清理服务器日志(WRITE)
- `server_machines_list(server_role)` — 集群机器
- `server_machine_hardware(machine_name, server_role)` — CPU,RAM,磁盘,操作系统
- `server_service_manifest(...)` — 服务资源清单
- `server_services_directory_list(folder, server_role)` / `server_services_folders(server_role)` — 服务目录 REST
---
## 📚 Python 示例(HTTP 模式)
```python
import requests
BASE = "http://localhost:8080/tools"
# 获取身份
resp = requests.post(f"{BASE}/whoami", json={})
print(resp.json())
# 搜索内容
resp = requests.post(
f"{BASE}/content_search",
json={"query": "population", "item_type": "Feature Layer", "max_items": 10}
)
print(resp.json())
# 大型项目(> 200 MB)
resp = requests.post(f"{BASE}/content_find_large", json={"min_mb": 200})
print(resp.json())
# 组员
resp = requests.post(f"{BASE}/group_members", json={"group_id": "abc123"})
print(resp.json())
# 门户日志(最新的 WARNING)
resp = requests.post(
f"{BASE}/portal_logs_query",
json={"level": "WARNING", "page_size": 100}
)
print(resp.json())
```
## 🐛 故障排除
**错误: "无法连接到 ArcGIS"**
- 验证您至少有一个凭证已配置
- 如果您使用 Pro,请验证它是否打开并已连接
- 如果您使用 .env,请验证变量是否正确
**错误: "写入禁用"**
- 启用 `ARCGIS_WRITE_ENABLED=true` 在 .env 中
- 写入工具默认情况下 `dry_run=True` 作为保护
**错误: "仅在 ArcGIS Enterprise 上可用"**
- 一些工具(Webhook、Notebook、服务器)仅在 Enterprise 上运行
- 使用 `whoami()` 验证您的平台
## 使用 HTTP 的 Python 示例(FastAPI + MCP)
HTTP 服务器在 http://localhost:8080 运行(`--http` 模式)。
### Python
```python
import requests
# 列出用户
resp = requests.post("http://localhost:8080/tools/user_list", json={"max_users": 50})
print(resp.json())
# 用户项目
resp = requests.post("http://localhost:8080/tools/user_content", json={"username": "jsmith"})
print(resp.json())
# 服务状态
resp = requests.post(
"http://localhost:8080/tools/server_service_status",
json={"service_name": "MyMapService", "server_role": "HOSTING_SERVER"}
)
print(resp.json())
```
### curl
```bash
curl -X POST http://localhost:8080/tools/whoami -H "Content-Type: application/json" -d '{}'
```
### 交互式文档
在浏览器中打开:
- Swagger UI: http://localhost:8080/docs
- ReDoc: http://localhost:8080/redoc
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器