ArcGIS MCP
Provides tools for managing ArcGIS Online and ArcGIS Enterprise portals, including user and group administration, item lifecycle management (publish, export, move, clone), dynamic geoprocessing, feature layer query and editing, and ArcGIS Server administration (services, logs, machines).
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ArcGIS MCPwho am I logged in as?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ArcGIS MCP - Servidor Unificado
Servidor MCP para ArcGIS Online y ArcGIS Enterprise que combina:
✅ Administración de usuarios, grupos y compartición
✅ Gestión completa de items (publicar, exportar, mover, clonar)
✅ Geoprocesamiento dinámico
✅ Consulta y edición de Feature Layers, Tables y FeatureCollections
✅ Administración de ArcGIS Server (servicios, logs, máquinas) — Enterprise
✅ Logs del portal con filtros avanzados — Enterprise
✅ 152 tools MCP organizadas por módulo
Nota: Funciona tanto con ArcGIS Online como con ArcGIS Enterprise. Algunas funciones específicas (webhooks, notebooks, servidores federados) solo están disponibles en Enterprise.
Inicio rápido
3 pasos para empezar:
Descarga o clona esta carpeta (
arcgis-mcp)Ejecuta el instalador — clic derecho sobre
install.ps1→ Ejecutar con PowerShell
Detecta tu Python de ArcGIS Pro, instala dependencias y configura los IDEs instalados automáticamente (VS Code, Claude Desktop, Cursor, Claude Code, Codex, OpenCode, OpenClaw).Abrí ArcGIS Pro, conectate a tu portal, y reinicia el IDE.
Proba con: "¿con qué usuario estoy conectado?"
Si algo no funciona:
python test_pro.pypara diagnosticar la conexión.
Related MCP server: ArcGIS Pro Bridge MCP Server
Autenticación
El servidor intenta conectarse automáticamente en este orden:
🖥️ ArcGIS Pro activo (
GIS("Pro"))Usa la sesión ya autenticada en ArcGIS Pro
El usuario YA debe haber iniciado sesión en Pro
No requiere .env si Pro está abierto y conectado
Ideal para: Desarrollo local con Pro instalado
🌐 OAuth2 interactivo (Abre navegador)
Variables:
ARCGIS_USE_OAUTH=trueAbre el navegador para que el usuario se autentique
El usuario ingresa sus credenciales en el portal ArcGIS
Genera token automáticamente tras autenticación exitosa
Ideal para: Producción, usuarios finales, apps distribuidas
Ejemplo:
ARCGIS_USE_OAUTH=true ARCGIS_URL=https://www.arcgis.com # O tu portal ARCGIS_CLIENT_ID=mi_app_id # Opcional
🔑 Perfil nombrado - Variable
ARCGIS_PROFILE(recomendado para desarrollo)Usa credenciales guardadas en el keyring del sistema
Más seguro que usuario/contraseña en .env
🔓 API Key - Variable
ARCGIS_API_KEY(Enterprise 11.4+ o AGOL)Tokens de larga duración (hasta 1 año)
🎫 Token - Variable
ARCGIS_TOKEN(temporal)Para tokens generados externamente
👤 Usuario/Contraseña - Variables
ARCGIS_URL,ARCGIS_USER,ARCGIS_PASSMenos seguro, solo para desarrollo local
📦 Instalación
Opción 1: Setup automático (Recomendado)
python setup.pyEste script ejecuta instalación inteligente + verificación automáticamente.
Opción 2: Instalación manual
# Solo instala paquetes faltantes (no reinstala los existentes)
python install_requirements.py
# Verificar que todo quedó bien
python verify_installation.pyOpción 3: pip tradicional (Instala todos los paquetes requeridos)
pip install -r requirements.txt⚙️ Configuración
🖥️ Modo 1: ArcGIS Pro (Sin configuración)
Si tienes ArcGIS Pro abierto y conectado, no necesitas .env. El servidor detectará automáticamente tu sesión activa.
# 1. Abre ArcGIS Pro y conéctate a tu portal
# 2. Ejecuta el servidor
python arcgis_mcp.py🌐 Modo 2: OAuth2 Interactivo (Recomendado para producción)
Crea un archivo .env:
ARCGIS_USE_OAUTH=true
ARCGIS_URL=https://www.arcgis.com # O tu portal Enterprise
# Opcional: Client ID personalizado (si tienes una app registrada)
# ARCGIS_CLIENT_ID=tu_app_client_idAl ejecutar el servidor, se abrirá automáticamente el navegador para que el usuario se autentique. El token se genera y almacena automáticamente.
🔑 Modo 3: Perfil nombrado (Desarrollo)
Primero crea un perfil con credenciales:
from arcgis.gis import GIS
gis = GIS("https://mi-portal.com/portal", username="mi_usuario")
# Ingresa tu contraseña cuando lo pida
gis.users.me.username # Verifica que funciona
# Las credenciales se guardan en el keyring del sistemaLuego en .env:
ARCGIS_PROFILE=mi_perfil📋 Otras opciones
API Key:
ARCGIS_URL=https://mi-portal.com/portal
ARCGIS_API_KEY=tu_api_key_aquiUsuario/Contraseña:
ARCGIS_URL=https://mi-portal.com/portal
ARCGIS_USER=mi_usuario
ARCGIS_PASS=mi_contraseñaGuardarrailes de seguridad:
# Habilitar operaciones de escritura (crear, editar, eliminar)
ARCGIS_WRITE_ENABLED=true # false por defecto🎯 Uso Recomendado: MCP Puro
El servidor está diseñado para usarse como MCP puro (sin HTTP) directamente desde cualquier cliente compatible:
En todos los casos, reemplaza
PYTHON_PATH_EXEcon el ejecutable de tu entorno ArcGIS Pro
(ej:C:\...\arcgispro-py3-clone\python.exe) yREPO_PATHcon la ruta al archivoarcgis_mcp.py.
Claude Desktop
Archivo de configuración:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"arcgis-mcp": {
"command": "PYTHON_PATH_EXE",
"args": ["REPO_PATH\\arcgis_mcp.py"],
"env": {
"ARCGIS_WRITE_ENABLED": "true"
}
}
}
}Reiniciar Claude Desktop después de editar.
Claude Code (CLI)
Claude Code maneja tres scopes. El más práctico es user (disponible en todos tus proyectos):
claude mcp add --scope user --env ARCGIS_WRITE_ENABLED=true --transport stdio arcgis-mcp -- "PYTHON_PATH_EXE" "REPO_PATH/arcgis_mcp.py"Claude Code escribe la configuración automáticamente — no hace falta editar JSON a mano.
Scope | Archivo | Disponibilidad |
|
| Solo vos, en el proyecto actual |
|
| Todo el equipo vía git |
|
| Solo vos, en todos los proyectos |
Para ver los servidores configurados: claude mcp list
Cursor
Archivo: ~/.cursor/mcp.json (global) o .cursor/mcp.json (solo este proyecto).
{
"mcpServers": {
"arcgis-mcp": {
"command": "PYTHON_PATH_EXE",
"args": ["REPO_PATH\\arcgis_mcp.py"],
"env": {
"ARCGIS_WRITE_ENABLED": "true"
}
}
}
}Cursor recarga la configuración automáticamente; no hace falta reiniciar.
OpenCode
Archivo global: ~/.config/opencode/opencode.json
Archivo de proyecto: opencode.json en la raíz del proyecto.
{
"$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"
}
}
}
}Atención: La clave correcta es
"environment"(no"env"). OpenCode ignora"env"silenciosamente.

Puede usar el metodo pro. Si no, puede usar este metodo pero debe estar diligenciadas las variables: ARCGIS_URL, ARCGIS_CLIENT_ID en el archivo .env
Codex CLI (OpenAI)
Archivo global: ~/.codex/config.toml
Archivo de proyecto: .codex/config.toml en la raíz del proyecto.
Atención: Codex usa TOML, no JSON.
[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"O via CLI (escribe en config.toml automáticamente):
codex mcp add arcgis-mcp --env ARCGIS_WRITE_ENABLED=true -- PYTHON_PATH_EXE REPO_PATH/arcgis_mcp.pyKiro (AWS)
Archivo: .kiro/settings/mcp.json dentro del workspace.
{
"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"]
}
}
}El campo autoApprove es opcional — lista las tools que Kiro ejecuta sin pedir confirmación al usuario.
copilot:

📖 Guía completa: esta misma documentación en este README.
🚀 Ejecución
Modo 1: MCP Puro (Recomendado) ✅


Para usar desde Claude Desktop o VS Code:
No ejecutar manualmente
El cliente MCP (Claude/VS Code) inicia y gestiona el servidor automáticamente
Ver configuración en la sección anterior
Para testing local:
cd D:\Dev\IA\MCPs\arcgis-mcp
python arcgis_mcp.pyEl servidor queda esperando mensajes JSON-RPC en stdin/stdout.
Modo 2: HTTP Server (Solo para Testing/Dev) 🧪
python arcgis_mcp.py --httpSwagger UI: http://localhost:8080/docs
ReDoc: http://localhost:8080/redoc
⚠️ Modo de desarrollo únicamente. No usar en producción.
Modo 3: SSE (HTTP+SSE para clientes remotos)
python arcgis_mcp.py --sse
python arcgis_mcp.py --sse --port 9090 # puerto personalizadoExpone el MCP sobre HTTP+SSE en http://0.0.0.0:8080/sse. Requiere Entra ID configurado para validar tokens Bearer (variables AZURE_TENANT_ID y AZURE_CLIENT_ID_MCP). Si esas variables no están presentes, arranca sin autenticación (útil para pruebas internas).
Setup Inicial (Primera Vez)
Windows:
cd D:\Dev\IA\MCPs\arcgis-mcp
.\setup.ps1Linux/Mac:
cd ~/arcgis-mcp
python setup.py🧪 Pruebas de Autenticación
Antes de ejecutar el servidor completo, puedes probar tu configuración de autenticación:
Probar conexión con ArcGIS Pro
python test_pro.pyVerifica que tu sesión de Pro esté activa y funcional.
Probar OAuth2 interactivo
# ArcGIS Online
python test_oauth.py
# Portal Enterprise personalizado
python test_oauth.py --url https://mi-portal.com/portal
# Con Client ID personalizado
python test_oauth.py --url https://mi-portal.com/portal --client-id mi_app_idEstos scripts te ayudan a diagnosticar problemas de autenticación antes de ejecutar el servidor MCP completo.
🧪 Uso con agentes IA
Este MCP está diseñado para ser consumido por:
GitHub Copilot
Cursor
Claude Code
VS Code
OpenCode
Cualquier cliente MCP compatible
Ejemplos de prompts
🔍 GIS / Portal
"¿Con qué usuario estoy conectado y qué privilegios tengo?"
→ whoami()
"Muestra las propiedades del portal (versión, idioma, región)"
→ gis_properties()
"¿Qué versión tiene este ArcGIS Enterprise?"
→ gis_version()📦 Contenido — ContentManager
"Busca todos los Feature Layers con la palabra 'catastro'"
→ content_search(query="catastro", item_type="Feature Layer", max_items=50)
"¿Cuáles son los items que ocupan más de 500 MB?"
→ content_find_large(min_mb=500)📄 Items — Item
"Mostrame todos los detalles del item con ID abc123"
→ item_get(item_id="abc123")
"Exporta ese item a formato Shapefile"
→ item_export(item_id="abc123", export_format="Shapefile", title="catastro_shp")
"Mové el item abc123 a la carpeta 'Proyectos 2024'"
→ item_move(item_id="abc123", folder="Proyectos 2024")
"Clona el item abc123 en la cuenta del usuario jperez"
→ item_clone(item_id="abc123", owner="jperez")
"¿De qué otros items depende el item abc123?"
→ item_dependent_upon(item_id="abc123")
"Protege el item abc123 para que no se pueda borrar"
→ item_protect(item_id="abc123")
"Descarga el thumbnail del item abc123"
→ item_thumbnail(item_id="abc123", save_path="C:/tmp/thumb.png")👤 Usuarios — UserManager / User
"Lista todos los usuarios del portal"
→ user_list(query="*", max_users=200)
"Muestra el perfil y roles del usuario jperez"
→ user_get(username="jperez")
"Desactiva la cuenta del usuario jperez"
→ user_disable(username="jperez")
"Cambia el rol de jperez a 'publisher'"
→ user_set_role(username="jperez", role="publisher")
"¿Qué contenido tiene publicado el usuario jperez?"
→ user_content(username="jperez")👥 Grupos — GroupManager / Group
"Lista todos los grupos del portal"
→ group_list(query="*", max_groups=100)
"¿Quiénes son los miembros del grupo con ID grp456?"
→ group_members(group_id="grp456")
"Agrega a jperez y mgarcia al grupo grp456"
→ group_add_users(group_id="grp456", usernames=["jperez", "mgarcia"])
"¿Qué items están compartidos en el grupo grp456?"
→ group_content(group_id="grp456", max_items=100)
"Crea un grupo llamado 'Cartografía' con etiquetas gis, mapas"
→ group_create(title="Cartografía", description="Grupo de cartografía", tags=["gis", "mapas"])🔗 Compartición — SharingManager
"¿Quién tiene acceso al item abc123?"
→ share_get_access(item_id="abc123")
"Configura público el item abc123"
→ share_set_access(item_id="abc123", access="public")
"Comparte el item abc123 con los grupos grp456 y grp789"
→ share_group_add(item_id="abc123", group_ids=["grp456", "grp789"])
"¿Cuáles son los items públicos del usuario jperez?"
→ share_audit_by_owner(username="jperez")
"Configura privados todos estos items de golpe: abc123, def456, ghi789"
→ share_bulk_set_access(item_ids=["abc123", "def456", "ghi789"], access="private")⚙️ Geoprocesamiento
"¿Qué tools expone el GP service en esta URL?"
→ gp_discover(gp_url_or_item="https://mi-server/arcgis/rest/services/Recorte/GPServer")
"Ejecuta la tool 'Clip' con esa capa de entrada"
→ gp_run(gp_url_or_item="https://…/Recorte/GPServer", tool_name="Clip",
params={"input_features": "https://…/FeatureServer/0", "clip_features": "https://…/FeatureServer/1"})
"Busca GP services relacionados con 'buffer' en el portal"
→ gp_search_services(keywords="buffer", max_results=10)
"Muestra los parámetros y descripción de la tool 'Buffer'"
→ gp_tool_help(gp_url_or_item="https://…/GPServer", tool_name="Buffer")🗂️ Features — FeatureLayer
"¿Qué campos tiene el Feature Layer en esta URL?"
→ fl_fields(layer_ref="https://mi-server/arcgis/rest/services/Catastro/FeatureServer/0")
"Consulta los predios con área mayor a 5000 m²"
→ fl_query_advanced(layer_ref="https://…/FeatureServer/0",
where="AREA > 5000", out_fields=["OBJECTID", "PROPIETARIO", "AREA"],
return_geometry=True)
"¿Qué operaciones soporta ese layer (edit, query, etc.)?"
→ fl_capabilities(layer_ref="https://…/FeatureServer/0")
"Calcula el campo 'ESTADO' como 'Activo' para todos los features"
→ fl_calculate(layer_ref="https://…/FeatureServer/0",
where="1=1", calc_expression=[{"field": "ESTADO", "value": "Activo"}])🗂️ Features — Feature / Table / FLC / FeatureSet / FeatureCollection
"Dame el feature con OBJECTID=42 de esa capa"
→ feature_get(layer_ref="https://…/FeatureServer/0", object_id=42)
"Consulta la tabla de incidentes y devolve los últimos 50 registros"
→ table_query(layer_ref="https://…/FeatureServer/1",
where="1=1", max_records=50)
"¿Cuáles son los campos de esa tabla?"
→ table_fields(layer_ref="https://…/FeatureServer/1")
"Describí la estructura completa del FeatureLayerCollection"
→ flc_describe(layer_ref="https://…/FeatureServer")
"Calcula estadísticas (count, avg de AREA) de esta consulta"
→ fset_statistics(layer_ref="https://…/FeatureServer/0",
where="MUNICIPIO = 'Bogotá'",
stat_fields=[{"statisticType": "avg", "onStatisticField": "AREA", "outStatisticFieldName": "avg_area"}])
"Convertí los resultados de esa consulta a GeoJSON"
→ fset_to_geojson(layer_ref="https://…/FeatureServer/0", where="ESTADO = 'Activo'")📋 Logs del Portal — Enterprise
"Muestra los últimos WARNING de los logs del portal"
→ portal_logs_query(level="WARNING", page_size=200)
"Dame los errores del portal entre el 1 y el 7 de junio"
→ portal_logs_query(start_time="2025-06-01T00:00:00", end_time="2025-06-07T23:59:59",
level="SEVERE", page_size=500)
"¿Cuál es la configuración actual de retención de logs del portal?"
→ portal_logs_settings()
"Cambia el nivel de log del portal a WARNING"
→ portal_logs_settings_update(log_level="WARNING", dry_run=False)🔧 Admin Enterprise — misc
"¿Qué licencias de ArcGIS Pro están disponibles en el portal?"
→ admin_licenses()
"¿Hay servicios detenidos o con errores en este momento?"
→ admin_services_health()
"Lista todos los servidores federados al portal"
→ admin_servers_list()🖥️ ArcGIS Server — Enterprise
"Lista todos los servicios del servidor de hosting"
→ server_services_list(server_role="HOSTING_SERVER")
"¿Cuál es el estado y métricas del servicio 'Catastro/MapServer'?"
→ server_service_status(service_name="Catastro/MapServer", server_role="HOSTING_SERVER")
"Reinicia el servicio 'Catastro/MapServer' (primero en dry-run)"
→ server_service_restart(service_name="Catastro/MapServer", dry_run=True)
→ server_service_restart(service_name="Catastro/MapServer", dry_run=False)
"Muestra los errores de los últimos logs del servidor"
→ server_logs_query(log_level="SEVERE", num_messages=200, server_role="HOSTING_SERVER")
"¿Qué máquinas forman parte del clúster del servidor?"
→ server_machines_list(server_role="HOSTING_SERVER")
"Dame el hardware de la máquina ARCGIS-SRV01 (CPU, RAM, disco)"
→ server_machine_hardware(machine_name="ARCGIS-SRV01", server_role="HOSTING_SERVER")
"Lista las carpetas disponibles en el Services Directory del servidor"
→ server_services_folders(server_role="HOSTING_SERVER")
"¿Qué servicios hay en la carpeta 'Utilities' del servidor?"
→ server_services_directory_list(folder="Utilities", server_role="HOSTING_SERVER")🛠️ Tools disponibles
Total: 105 tools MCP organizadas por módulo API de ArcGIS Python
🔍 GIS / Portal (3)
whoami()— Identidad, plataforma, privilegios de la sesión activagis_properties()— Propiedades del portal (GIS.properties)gis_version()— Versión del portal o ArcGIS Enterprise
📦 Contenido — ContentManager (2)
content_search(query, item_type, max_items)— Buscar items en el portalcontent_find_large(min_mb)— Identificar items que superan un tamaño en MB
📄 Items — Item (21)
item_get(item_id)— Detalles completos de un itemitem_update(item_id, ...)— Actualizar metadata (WRITE)item_protect(item_id)/item_unprotect(item_id)— Protección contra eliminación (WRITE)item_metadata(item_id, format)— Metadata en JSON o XMLitem_download(item_id, save_path)— Descargar datos del itemitem_delete(item_id)— Eliminar item (WRITE)item_move(item_id, folder)— Mover a carpeta (WRITE)item_clone(item_id, ...)— Clonar item (WRITE)item_publish(item_id, ...)— Publicar como servicio (WRITE)item_export(item_id, ...)— Exportar a formato (WRITE)item_share(item_id, ...)— Compartir con grupos/público (WRITE)item_layers(item_id)— Capas de un item de servicioitem_dependent_upon(item_id)— Items de los que este dependeitem_dependent_to(item_id)— Items que dependen de esteitem_related_items(item_id, rel_type)— Items relacionadositem_reassign(item_id, target_owner)— Reasignar propietario (WRITE)item_get_data(item_id)— Datos/JSON interno del itemitem_thumbnail(item_id, save_path)— Descargar thumbnailitem_add_comment(item_id, comment)— Agregar comentario (WRITE)item_resources(item_id)— Recursos adjuntos al item
👤 Usuarios — UserManager / User (8)
user_list(query, max_users)— Listar usuarios del portaluser_create(username, ...)— Crear usuario (WRITE, Enterprise)user_get(username)— Detalles de un usuariouser_update(username, ...)— Actualizar datos del usuario (WRITE)user_disable(username)— Desactivar cuenta (WRITE)user_enable(username)— Activar cuenta (WRITE)user_set_role(username, role)— Cambiar rol (WRITE)user_content(username)— Items del usuario
👥 Grupos — GroupManager / Group (8)
group_list(query, max_groups)— Listar gruposgroup_create(title, description, tags)— Crear grupo (WRITE)group_get(group_id)— Detalles de un grupogroup_update(group_id, ...)— Actualizar grupo (WRITE)group_add_users(group_id, usernames)— Agregar miembros (WRITE)group_remove_users(group_id, usernames)— Remover miembros (WRITE)group_content(group_id, max_items)— Items compartidos en el grupogroup_members(group_id)— Miembros del grupo
🔗 Compartición — SharingManager (12)
share_get_access(item_id)/share_set_access(...)/share_status(item_id)— Acceso de un itemshare_bulk_set_access(item_ids, access)— Cambio masivo de acceso (WRITE)share_audit_public()/share_audit_by_owner(username)— Auditoría de items públicosshare_group_add(item_id, group_ids)/share_group_remove(...)/share_group_list(item_id)— Grupos de un itemshare_group_replace(...)/share_group_copy(...)/share_group_audit(group_id)— Operaciones de grupo avanzadas
⚙️ Geoprocesamiento (10)
gp_discover(gp_url_or_item)— Descubrir tools de un GP Servicegp_run(...)— Ejecutar tool sincrónicamentegp_run_async(...)— Ejecutar tool y esperar resultadogp_tool_help(gp_url_or_item, tool_name)— Parámetros y docstring de una toolgp_search_services(keywords, max_results)— Buscar GP services en el portalgp_service_info(gp_url_or_item)— Info REST del servicegp_linear_unit(distance, units)— Construir LinearUnitgp_data_file(url, item_id)— Construir DataFilegp_raster_data(url, item_id, format)— Construir RasterDatagp_run_with_env(...)— Ejecutar con arcgis.env (SR, extent, etc.)
🗂️ Features — FeatureLayer (6)
fl_fields(layer_ref)— Campos del layerfl_query_advanced(...)— Consulta con filtros SQL y espacialesfl_edit(...)— Agregar/actualizar/eliminar features (WRITE)fl_delete_by_query(...)— Eliminar features por filtro (WRITE)fl_calculate(...)— Calcular campo (WRITE)fl_capabilities(layer_ref)— Capacidades del layer
🗂️ Features — Feature / Table / FeatureLayerCollection / FeatureSet / FeatureCollection (15)
Feature (3):
feature_get,feature_get_value,feature_updateTable (3):
table_query,table_edit,table_fieldsFeatureLayerCollection (3):
flc_describe,flc_update_definition,flc_truncateFeatureSet (3):
fset_from_query,fset_statistics,fset_to_geojsonFeatureCollection (3):
fc_describe,fc_query,fc_to_feature_layer
📋 Logs del Portal — Enterprise (4)
Solo disponibles en ArcGIS Enterprise con credenciales de administrador.
portal_logs_query(start_time, end_time, level, query_filter, ...)— Consultar logs con filtrosportal_logs_clean()— Limpiar todos los logs (WRITE, IRREVERSIBLE)portal_logs_settings()— Configuración actual (logLevel, logDir, retención)portal_logs_settings_update(...)— Actualizar configuración de logs (WRITE)
🔧 Admin Enterprise — misc (3)
Solo disponibles en ArcGIS Enterprise.
admin_licenses()— Licencias de ArcGIS Pro disponiblesadmin_services_health()— Servicios detenidos o con erroresadmin_servers_list()— Servidores federados al portal
🖥️ ArcGIS Server — Enterprise (13)
Solo disponibles en ArcGIS Enterprise. Prefijo: server_.
server_list()— Listar todos los servidores federadosserver_services_list(folder, server_role)— Servicios de un servidorserver_service_status(service_name, folder, server_role)— Estado y métricasserver_service_start(...)/server_service_stop(...)/server_service_restart(...)— Control (WRITE)server_logs_query(...)— Logs del servidor con filtrosserver_logs_clean(server_role)— Limpiar logs del servidor (WRITE)server_machines_list(server_role)— Máquinas del clústerserver_machine_hardware(machine_name, server_role)— CPU, RAM, disco, SOserver_service_manifest(...)— Manifest de recursos del servicioserver_services_directory_list(folder, server_role)/server_services_folders(server_role)— Services Directory REST
📚 Ejemplos Python (modo HTTP)
import requests
BASE = "http://localhost:8080/tools"
# Obtener identidad
resp = requests.post(f"{BASE}/whoami", json={})
print(resp.json())
# Buscar contenido
resp = requests.post(
f"{BASE}/content_search",
json={"query": "population", "item_type": "Feature Layer", "max_items": 10}
)
print(resp.json())
# Items grandes (> 200 MB)
resp = requests.post(f"{BASE}/content_find_large", json={"min_mb": 200})
print(resp.json())
# Miembros de un grupo
resp = requests.post(f"{BASE}/group_members", json={"group_id": "abc123"})
print(resp.json())
# Logs del portal (últimos WARNING)
resp = requests.post(
f"{BASE}/portal_logs_query",
json={"level": "WARNING", "page_size": 100}
)
print(resp.json())🐛 Troubleshooting
Error: "No se pudo conectar a ArcGIS"
Verifica que tengas al menos una credencial configurada
Si usas Pro, verifica que esté abierto y conectado
Si usas .env, verifica que las variables estén correctas
Error: "Escritura deshabilitada"
Activa
ARCGIS_WRITE_ENABLED=trueen .envLas tools de escritura tienen
dry_run=Truepor defecto como protección
Error: "Solo disponible en ArcGIS Enterprise"
Algunas tools (webhooks, notebooks, servidores) solo funcionan en Enterprise
Verifica tu plataforma con
whoami()
Ejemplo de consumo vía HTTP (FastAPI + MCP)
El servidor HTTP corre en http://localhost:8080 (modo --http).
Python
import requests
# Listar usuarios
resp = requests.post("http://localhost:8080/tools/user_list", json={"max_users": 50})
print(resp.json())
# Items del usuario
resp = requests.post("http://localhost:8080/tools/user_content", json={"username": "jsmith"})
print(resp.json())
# Estado de un servicio
resp = requests.post(
"http://localhost:8080/tools/server_service_status",
json={"service_name": "MyMapService", "server_role": "HOSTING_SERVER"}
)
print(resp.json())curl
curl -X POST http://localhost:8080/tools/whoami -H "Content-Type: application/json" -d '{}'Documentación interactiva
Abre en tu navegador:
Swagger UI: http://localhost:8080/docs
ReDoc: http://localhost:8080/redoc
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/renemorenow/arcgis-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server