GeoServer MCP Server

Conecta modelos de lenguaje grandes a la API REST de GeoServer, permitiendo que asistentes de IA interactúen con datos y servicios geoespaciales.

Documentación

PyPI Downloads

Servidor MCP de GeoServer

Una implementación de servidor de Model Context Protocol (MCP) que conecta Modelos de Lenguaje de Gran Tamaño (LLMs) a la API REST de GeoServer, permitiendo que asistentes de IA interactúen con datos y servicios geoespaciales.

GeoServer MCP Server Logo

La versión 0.5.0 (Beta) está en desarrollo activo y se publicará próximamente. Estamos abiertos a contribuciones y damos la bienvenida a desarrolladores para que se unan a nosotros en la construcción de este proyecto.

🎥 Demostración

GeoServer MCP Server Demo

📋 Tabla de Contenidos

🚀 Características

  • 🔍 Consultar y manipular espacios de trabajo, capas y estilos de GeoServer
  • 🗺️ Ejecutar consultas espaciales sobre datos vectoriales
  • 🎨 Generar visualizaciones de mapas
  • 🌐 Acceder a servicios web compatibles con OGC (WMS, WFS)
  • 🛠️ Integración sencilla con clientes compatibles con MCP

🚀 Opciones de Despliegue

GeoServer MCP puede ejecutarse de dos maneras. Comparten la misma idea de producto (herramientas MCP sobre GeoServer) pero son artefactos separados. El paquete de Python no cambia.

                    GeoServer MCP
                         │
             ┌───────────┴───────────┐
             │                       │
      Python MCP Server       GeoServer Extension
             │                       │
             ▼                       ▼
        GeoServer                GeoServer
             │                       │
             └───────────┬───────────┘
                         │
                    MCP Interface
                         │
                         ▼
                     AI Agents

Servidor MCP de Python

Ejecute GeoServer MCP por separado (pip, Docker o Smithery). El proceso habla MCP con el agente y llama a la API REST de GeoServer. Esta es la implementación original, actualmente publicada.

Consulte Instalación a continuación.

Extensión de GeoServer

Instale la Extensión MCP de GeoServer directamente en GeoServer y exponga un endpoint MCP remoto en /geoserver/mcp. No se requiere un proceso auxiliar de Python. Está dirigida a GeoServer 2.28.x.

Consulte extension/README.md para arquitectura, instalación, configuración, seguridad y ejemplos de clientes.

📋 Requisitos Previos

  • Python 3.10 o superior
  • Instancia de GeoServer en ejecución con la API REST habilitada
  • Cliente compatible con MCP (como Claude Desktop o Cursor)
  • Conexión a Internet para la instalación de paquetes

🛠️ Instalación

Elija el método de instalación que mejor se adapte a sus necesidades:

Instalación mediante Smithery

Para instalar GeoServer MCP Server para Claude Desktop automáticamente mediante Smithery:

npx -y @smithery/cli install @mahdin75/geoserver-mcp --client claude

🛠️ Instalación (Docker)

La instalación con Docker es la forma más rápida y aislada de ejecutar el servidor MCP de GeoServer. Es ideal para:

  • Pruebas y evaluación rápidas
  • Despliegues en producción
  • Entornos donde desea evitar dependencias de Python
  • Despliegue consistente en diferentes sistemas
  1. Ejecute geoserver-mcp:
docker pull mahdin75/geoserver-mcp
docker run -d mahdin75/geoserver-mcp
  1. Configure los clientes:

Si está usando Claude Desktop, edite claude_desktop_config.json Si está usando Cursor, cree .cursor/mcp.json

{
  "mcpServers": {
    "geoserver-mcp": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GEOSERVER_URL=http://localhost:8080/geoserver",
        "-e",
        "GEOSERVER_USER=admin",
        "-e",
        "GEOSERVER_PASSWORD=geoserver",
        "-p",
        "8080:8080",
        "mahdin75/geoserver-mcp"
      ]
    }
  }
}

🛠️ Instalación (pip)

La instalación con pip se recomienda para la mayoría de los usuarios que desean ejecutar el servidor directamente en su sistema. Este método es el mejor para:

  • Usuarios habituales que desean ejecutar el servidor localmente
  • Sistemas donde tiene Python 3.10+ instalado
  • Usuarios que desean personalizar la configuración del servidor
  • Propósitos de desarrollo y pruebas
  1. Instale el administrador de paquetes uv.
pip install uv
  1. Cree el Entorno Virtual (Python 3.10+):

Linux/Mac:

uv venv --python=3.10

Windows PowerShell:

uv venv --python=3.10
  1. Instale el paquete usando pip:
uv pip install geoserver-mcp
  1. Configure la conexión a GeoServer:

Linux/Mac:

export GEOSERVER_URL="http://localhost:8080/geoserver"
export GEOSERVER_USER="admin"
export GEOSERVER_PASSWORD="geoserver"

Windows PowerShell:

$env:GEOSERVER_URL="http://localhost:8080/geoserver"
$env:GEOSERVER_USER="admin"
$env:GEOSERVER_PASSWORD="geoserver"
  1. Inicie el servidor:

Si va a usar Claude Desktop no necesita este paso. Para Cursor o su propio cliente personalizado debe ejecutar el siguiente código.

Linux:

source .venv/bin/activate

geoserver-mcp

o

source .venv/bin/activate

geoserver-mcp --url http://localhost:8080/geoserver --user admin --password geoserver --debug

Windows PowerShell:

.\.venv\Scripts\activate
geoserver-mcp

o

.\.venv\Scripts\activate
geoserver-mcp --url http://localhost:8080/geoserver --user admin --password geoserver --debug
  1. Configure los Clientes:

Si está usando Claude Desktop, edite claude_desktop_config.json Si está usando Cursor, cree .cursor/mcp.json

Windows:

{
  "mcpServers": {
    "geoserver-mcp": {
      "command": "C:\\path\\to\\geoserver-mcp\\.venv\\Scripts\\geoserver-mcp",
      "args": [
        "--url",
        "http://localhost:8080/geoserver",
        "--user",
        "admin",
        "--password",
        "geoserver"
      ]
    }
  }
}

Linux:

{
  "mcpServers": {
    "geoserver-mcp": {
      "command": "/path/to/geoserver-mcp/.venv/bin/geoserver-mcp",
      "args": [
        "--url",
        "http://localhost:8080/geoserver",
        "--user",
        "admin",
        "--password",
        "geoserver"
      ]
    }
  }
}

🛠️ Instalación para desarrollo

La instalación para desarrollo está diseñada para contribuyentes y desarrolladores que desean modificar el código base. Este método es adecuado para:

  • Desarrolladores que contribuyen al proyecto
  • Usuarios que necesitan modificar el código fuente
  • Probar nuevas características
  • Propósitos de depuración y desarrollo
  1. Instale el administrador de paquetes uv.
pip install uv
  1. Cree el Entorno Virtual (Python 3.10+):
uv venv --python=3.10
  1. Instale el paquete usando pip:
uv pip install -e .
  1. Configure la conexión a GeoServer:

Linux/Mac:

export GEOSERVER_URL="http://localhost:8080/geoserver"
export GEOSERVER_USER="admin"
export GEOSERVER_PASSWORD="geoserver"

Windows PowerShell:

$env:GEOSERVER_URL="http://localhost:8080/geoserver"
$env:GEOSERVER_USER="admin"
$env:GEOSERVER_PASSWORD="geoserver"
  1. Inicie el servidor:

Si va a usar Claude Desktop no necesita este paso. Para Cursor o su propio cliente personalizado debe ejecutar el siguiente código.

Linux:

source .venv/bin/activate

geoserver-mcp

o

source .venv/bin/activate

geoserver-mcp --url http://localhost:8080/geoserver --user admin --password geoserver --debug

Windows PowerShell:

.\.venv\Scripts\activate
geoserver-mcp

o

.\.venv\Scripts\activate
geoserver-mcp --url http://localhost:8080/geoserver --user admin --password geoserver --debug
  1. Configure los Clientes:

Si está usando Claude Desktop, edite claude_desktop_config.json Si está usando Cursor, cree .cursor/mcp.json

Windows:

{
  "mcpServers": {
    "geoserver-mcp": {
      "command": "C:\\path\\to\\geoserver-mcp\\.venv\\Scripts\\geoserver-mcp",
      "args": [
        "--url",
        "http://localhost:8080/geoserver",
        "--user",
        "admin",
        "--password",
        "geoserver"
      ]
    }
  }
}

Linux:

{
  "mcpServers": {
    "geoserver-mcp": {
      "command": "/path/to/geoserver-mcp/.venv/bin/geoserver-mcp",
      "args": [
        "--url",
        "http://localhost:8080/geoserver",
        "--user",
        "admin",
        "--password",
        "geoserver"
      ]
    }
  }
}

Almacenamiento de Archivos y Uso de --storage

El servidor MCP de GeoServer admite un indicador opcional --storage para especificar un directorio base para todas las operaciones de lectura/escritura de archivos, como la carga de shapefiles, GeoTIFFs o la exportación de resultados.

Resumen

  • El indicador --storage establece la carpeta raíz para las operaciones de archivos de todas las herramientas relacionadas con datos.
  • Puede proporcionar rutas relativas (relativas a la raíz de almacenamiento) o rutas absolutas (ignorando la raíz de almacenamiento) como argumentos para las herramientas relevantes.
  • Si --storage no está configurado, las rutas se resuelven tal como las proporciona el usuario (relativas al directorio de trabajo o absolutas).

Ejemplo de CLI

python -m geoserver_mcp.main --storage D:/my/data/dir

Esto establece D:/my/data/dir como la ruta base para todos los archivos.

Ejemplo de llamada a herramienta en Python:

# Will read from D:/my/data/dir/roads.zip if --storage is set to D:/my/data/dir
create_shp_datastore('workspace', 'datastore_name', 'roads.zip')

Las rutas absolutas (por ejemplo, 'C:/input/other.shp') siempre se usan tal cual.

Cuando se Ejecuta en Docker

Si usa Docker, asegúrese de que el directorio de almacenamiento esté montado como un volumen, por ejemplo:

docker run -v D:/my/data:/opt/data ...

Luego inicie el servidor con:

python -m geoserver_mcp.main --storage /opt/data

Mejores Prácticas

  • Use rutas relativas al interactuar con la API/herramientas, ya que mantiene su configuración portátil.
  • Para despliegues remotos o en contenedores, asegúrese siempre de que sus datos de archivos sean accesibles dentro del contenedor (use volúmenes de Docker si es necesario).
  • Consulte las cadenas de documentación de las herramientas para saber qué argumentos usan el sistema de almacenamiento.

El sistema --storage agiliza la gestión de archivos para todos los usuarios y hace que el despliegue sea mucho más flexible.

🛠️ Herramientas Disponibles

Esta sección detalla todas las herramientas y recursos disponibles expuestos por el servidor MCP de GeoServer. Estas herramientas permiten a los LLMs interactuar con la API REST de GeoServer para una gestión integral de datos geoespaciales.

🌍 Endpoints de Recursos

Los endpoints de recursos proporcionan acceso directo a los recursos de GeoServer mediante un patrón de URI.

URI de RecursoDescripción
geoserver://catalog/workspacesListar espacios de trabajo disponibles
geoserver://catalog/layers/{workspace}/{layer}Obtener información sobre una capa específica
geoserver://services/wms/{request}Manejar solicitudes de recursos WMS
geoserver://services/wfs/{request}Manejar solicitudes de recursos WFS

📦 Gestión de Espacios de Trabajo

HerramientaDescripción
list_workspacesListar espacios de trabajo disponibles en GeoServer
create_workspaceCrear un nuevo espacio de trabajo en GeoServer

📁 Gestión de Almacenes de Datos y Coberturas

HerramientaDescripción
create_datastoreCrear un nuevo almacén de datos en el espacio de trabajo dado
create_featurestoreCrear un nuevo almacén de entidades en el espacio de trabajo dado
create_gpkg_datastoreCrear un almacén de datos GeoPackage (GPKG)
create_shp_datastoreCrear un almacén de datos ESRI Shapefile
create_coveragestoreCrear un nuevo almacén de coberturas en un espacio de trabajo
delete_coveragestoreEliminar un almacén de coberturas de un espacio de trabajo
get_coveragestoreObtener detalles sobre un único almacén de coberturas
get_coveragestoresObtener todos los almacenes de coberturas de un espacio de trabajo
get_datastoreObtener un almacén de datos específico por nombre
get_datastoresListar todos los almacenes de datos en el espacio de trabajo dado

🗺️ Gestión de Capas

HerramientaDescripción
get_layer_infoObtener información detallada sobre una capa
list_layersListar capas en GeoServer, opcionalmente filtradas por espacio de trabajo
create_layerCrear una nueva capa en GeoServer
delete_resourceEliminar un recurso de GeoServer (genérico)

🧩 Gestión de Grupos de Capas

HerramientaDescripción
create_layergroupCrear un nuevo grupo de capas con capas específicas y (opcionalmente) estilos
get_layergroupObtener un grupo de capas de un espacio de trabajo
get_layergroupsListar todos los grupos de capas en un espacio de trabajo
add_layer_to_layergroupAñadir una capa específica a un grupo de capas
remove_layer_from_layergroupEliminar una capa de un grupo
delete_layergroupEliminar un grupo de capas de un espacio de trabajo
update_layergroupActualizar los detalles y la configuración de un grupo de capas

👥 Gestión de Usuarios y Grupos de Usuarios

HerramientaDescripción
create_userCrear un nuevo usuario para la seguridad de GeoServer
delete_userEliminar un usuario por nombre
get_all_usersListar todos los usuarios en la instancia de GeoServer
modify_userModificar las propiedades de un usuario existente
create_usergroupCrear un nuevo grupo de usuarios
delete_usergroupEliminar un grupo de usuarios
get_all_usergroupsDevolver todos los grupos de usuarios

📊 Gestión de Tipos de Entidad y Atributos

HerramientaDescripción
query_featuresConsultar características de una capa vectorial usando filtro CQL
publish_featurestorePublicar un featurestore existente
publish_featurestore_sqlviewPublicar un featurestore usando una definición de vista SQL
edit_featuretypeEditar la configuración de un tipo de característica en un store
get_featuretypesListar todos los tipos de características en un store dado
get_feature_attributeObtener el esquema/detalles de atributos de una característica

🎨 Gestión de Estilos

HerramientaDescripción
create_styleCrear un nuevo estilo SLD en GeoServer
publish_styleAsignar/publicar un estilo a una capa
create_catagorized_featurestyleCrear un estilo categorizado para características
create_classified_featurestyleCrear un estilo clasificado para características
create_coveragestyleCrear un estilo de cobertura ráster
create_outline_featurestyleCrear un estilo simple solo de contorno para características

⚙️ Operaciones de Sistema y Servicios

HerramientaDescripción
get_manifestObtener metadatos/detalles del manifiesto de GeoServer
get_statusObtener el estado general del servidor
get_system_statusObtener resumen/estado del sistema desde GeoServer
get_versionObtener la cadena de versión de GeoServer
reload_geoserverRecargar el catálogo y la configuración desde el disco
reset_geoserverRestablecer todas las cachés/conexiones de GeoServer
update_serviceActualizar opciones seleccionadas del servicio OGC
publish_time_dimension_to_coveragestoreAgregar o actualizar una dimensión de tiempo para un store de cobertura (para series temporales)

📝 Utilidades XML de Estilos

HerramientaDescripción
style_catagorize_xmlGenerar SLD para estilo vectorial categorizado
style_classified_xmlObtener XML SLD para estilo vectorial clasificado
style_coverage_style_colormapentryGenerar entradas de mapa de colores para SLD ráster
style_coverage_style_xmlGenerar XML para SLD ráster/cobertura
style_outline_only_xmlXML para estilo solo de contorno para una geometría

🛠️ Desarrollo de Clientes

Si planeas desarrollar tu propio cliente para interactuar con el servidor GeoServer MCP, puedes encontrar inspiración en la implementación de cliente de ejemplo en examples/client.py. Este ejemplo demuestra:

  • Cómo establecer una conexión con el servidor MCP
  • Cómo enviar solicitudes y manejar respuestas
  • Manejo básico de errores y gestión de conexiones
  • Uso de ejemplo de varias herramientas y operaciones

El cliente de ejemplo sirve como un buen punto de partida para entender el protocolo e implementar tus propias aplicaciones cliente.

Además, aquí está el uso de ejemplo:

Listar Workspaces


Tool: list_workspaces
Parameters: {}
Response: ["default", "demo", "topp", "tiger", "sf"]

Obtener Información de Capa


Tool: get_layer_info
Parameters: {
"workspace": "topp",
"layer": "states"
}

Consultar Características


Tool: query_features
Parameters: {
"workspace": "topp",
"layer": "states",
"filter": "PERSONS > 10000000",
"properties": ["STATE_NAME", "PERSONS"]
}

Generar Mapa


Tool: generate_map
Parameters: {
"layers": ["topp:states"],
"styles": ["population"],
"bbox": [-124.73, 24.96, -66.97, 49.37],
"width": 800,
"height": 600,
"format": "png"
}

🔮 Características Planificadas

  • Gestión de datos de cobertura y ráster
  • Seguridad y control de acceso
  • Capacidades avanzadas de estilo
  • Operaciones de procesamiento WPS
  • Integración con GeoWebCache

🤝 Contribuciones

¡Damos la bienvenida a las contribuciones! Así es como puedes ayudar:

  1. Haz un fork del repositorio
  2. Crea una rama de características (git checkout -b feature/AmazingFeature)
  3. Confirma tus cambios (git commit -m 'Add some AmazingFeature')
  4. Empuja a la rama (git push origin feature/AmazingFeature)
  5. Abre una Pull Request

Asegúrate de que la descripción de tu PR describa claramente el problema y la solución. Incluye el número de issue relevante si corresponde.

📄 Licencia

Este proyecto está licenciado bajo la Licencia MIT - consulta el archivo LICENSE para más detalles.

🔗 Proyectos Relacionados

🌐 Ver También: GIS MCP

Para una automatización más amplia de datos geoespaciales y aún más características MCP relacionadas con GIS, consulta GIS MCP by mahdin75.

📞 Soporte

Para soporte, abre un issue

🏆 Insignias