GeoServer MCP Server

Conecta Modelos de Linguagem de Grande Escala à API REST do GeoServer, permitindo que assistentes de IA interajam com dados e serviços geoespaciais.

Documentação

PyPI Downloads

GeoServer MCP Server

Uma implementação de servidor Model Context Protocol (MCP) que conecta Modelos de Linguagem de Grande Porte (LLMs) à API REST do GeoServer, permitindo que assistentes de IA interajam com dados e serviços geoespaciais.

GeoServer MCP Server Logo

A versão 0.5.0 (Beta) está em desenvolvimento ativo e será lançada em breve. Estamos abertos a contribuições e recebemos desenvolvedores para se juntarem a nós na construção deste projeto.

🎥 Demonstração

GeoServer MCP Server Demo

📋 Sumário

🚀 Recursos

  • 🔍 Consultar e manipular workspaces, camadas e estilos do GeoServer
  • 🗺️ Executar consultas espaciais em dados vetoriais
  • 🎨 Gerar visualizações de mapas
  • 🌐 Acessar serviços web compatíveis com OGC (WMS, WFS)
  • 🛠️ Integração fácil com clientes compatíveis com MCP

🚀 Opções de Implantação

O GeoServer MCP pode ser executado de duas maneiras. Elas compartilham a mesma ideia de produto (ferramentas MCP sobre o GeoServer), mas são artefatos separados. O pacote Python permanece inalterado.

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

Servidor MCP Python

Execute o GeoServer MCP separadamente (pip, Docker ou Smithery). O processo fala MCP com o agente e chama a API REST do GeoServer. Esta é a implantação original, atualmente publicada.

Veja Instalação abaixo.

Extensão GeoServer

Instale a Extensão MCP do GeoServer diretamente no GeoServer e exponha um endpoint MCP remoto em /geoserver/mcp. Nenhum sidecar Python é necessário. Destina-se ao GeoServer 2.28.x.

Veja extension/README.md para arquitetura, instalação, configuração, segurança e exemplos de clientes.

📋 Pré-requisitos

  • Python 3.10 ou superior
  • Instância do GeoServer em execução com API REST habilitada
  • Cliente compatível com MCP (como Claude Desktop ou Cursor)
  • Conexão com a internet para instalação de pacotes

🛠️ Instalação

Escolha o método de instalação que melhor atende às suas necessidades:

Instalação via Smithery

Para instalar o GeoServer MCP Server para Claude Desktop automaticamente via Smithery:

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

🛠️ Instalação (Docker)

A instalação via Docker é a maneira mais rápida e isolada de executar o servidor MCP do GeoServer. É ideal para:

  • Testes e avaliações rápidas
  • Implantações em produção
  • Ambientes onde você deseja evitar dependências Python
  • Implantação consistente em diferentes sistemas
  1. Execute o geoserver-mcp:
docker pull mahdin75/geoserver-mcp
docker run -d mahdin75/geoserver-mcp
  1. Configure os clientes:

Se você estiver usando Claude Desktop, edite claude_desktop_config.json Se você estiver usando Cursor, crie .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"
      ]
    }
  }
}

🛠️ Instalação (pip)

A instalação via pip é recomendada para a maioria dos usuários que desejam executar o servidor diretamente em seu sistema. Este método é melhor para:

  • Usuários regulares que desejam executar o servidor localmente
  • Sistemas com Python 3.10+ instalado
  • Usuários que desejam personalizar a configuração do servidor
  • Propósitos de desenvolvimento e teste
  1. Instale o gerenciador de pacotes uv.
pip install uv
  1. Crie o Ambiente Virtual (Python 3.10+):

Linux/Mac:

uv venv --python=3.10

Windows PowerShell:

uv venv --python=3.10
  1. Instale o pacote usando pip:
uv pip install geoserver-mcp
  1. Configure a conexão com o 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 o servidor:

Se você for usar o Claude Desktop, não precisa desta etapa. Para Cursor ou seu próprio cliente personalizado, execute o seguinte código.

Linux:

source .venv/bin/activate

geoserver-mcp

ou

source .venv/bin/activate

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

Windows PowerShell:

.\.venv\Scripts\activate
geoserver-mcp

ou

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

Se você estiver usando Claude Desktop, edite claude_desktop_config.json Se você estiver usando Cursor, crie .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"
      ]
    }
  }
}

🛠️ Instalação para desenvolvimento

A instalação para desenvolvimento é projetada para contribuidores e desenvolvedores que desejam modificar o código-fonte. Este método é adequado para:

  • Desenvolvedores contribuindo com o projeto
  • Usuários que precisam modificar o código-fonte
  • Testar novos recursos
  • Propósitos de depuração e desenvolvimento
  1. Instale o gerenciador de pacotes uv.
pip install uv
  1. Crie o Ambiente Virtual (Python 3.10+):
uv venv --python=3.10
  1. Instale o pacote usando pip:
uv pip install -e .
  1. Configure a conexão com o 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 o servidor:

Se você for usar o Claude Desktop, não precisa desta etapa. Para Cursor ou seu próprio cliente personalizado, execute o seguinte código.

Linux:

source .venv/bin/activate

geoserver-mcp

ou

source .venv/bin/activate

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

Windows PowerShell:

.\.venv\Scripts\activate
geoserver-mcp

ou

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

Se você estiver usando Claude Desktop, edite claude_desktop_config.json Se você estiver usando Cursor, crie .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"
      ]
    }
  }
}

Armazenamento de Arquivos e Uso de --storage

O servidor MCP do GeoServer suporta um flag opcional --storage para especificar um diretório base para todas as operações de leitura/gravação de arquivos, como upload de shapefiles, GeoTIFFs ou exportação de resultados.

Visão Geral

  • O flag --storage define a pasta raiz para operações de arquivo de todas as ferramentas relacionadas a dados.
  • Você pode fornecer caminhos relativos (relativos à raiz de armazenamento) ou caminhos absolutos (ignorando a raiz de armazenamento) como argumentos para as ferramentas relevantes.
  • Se --storage não estiver definido, os caminhos são resolvidos conforme fornecidos pelo usuário (relativos ao diretório de trabalho ou absolutos).

Exemplo de CLI

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

Isso define D:/my/data/dir como o caminho base para todos os arquivos.

Exemplo de chamada de ferramenta em 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')

Caminhos absolutos (por exemplo, 'C:/input/other.shp') são sempre usados como estão.

Quando Executar em Docker

Se estiver usando Docker, certifique-se de que o diretório de armazenamento esteja montado como um volume, por exemplo:

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

Em seguida, inicie o servidor com:

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

Melhores Práticas

  • Use caminhos relativos ao interagir com a API/ferramentas, pois isso mantém sua configuração portátil.
  • Para implantação remota ou em contêiner, sempre garanta que seus dados de arquivo estejam acessíveis dentro do contêiner (use volumes Docker se necessário).
  • Verifique as docstrings das ferramentas para saber quais argumentos usam o sistema de armazenamento.

O sistema --storage simplifica o gerenciamento de arquivos para todos os usuários e torna a implantação muito mais flexível!

🛠️ Ferramentas Disponíveis

Esta seção detalha todas as ferramentas e recursos expostos pelo servidor MCP do GeoServer. Essas ferramentas permitem que LLMs interajam com a API REST do GeoServer para gerenciamento abrangente de dados geoespaciais.

🌍 Endpoints de Recursos

Os endpoints de recursos fornecem acesso direto aos recursos do GeoServer por meio de um padrão de URI.

URI do RecursoDescrição
geoserver://catalog/workspacesListar workspaces disponíveis
geoserver://catalog/layers/{workspace}/{layer}Obter informações sobre uma camada específica
geoserver://services/wms/{request}Lidar com solicitações de recursos WMS
geoserver://services/wfs/{request}Lidar com solicitações de recursos WFS

📦 Gerenciamento de Workspaces

FerramentaDescrição
list_workspacesListar workspaces disponíveis no GeoServer
create_workspaceCriar um novo workspace no GeoServer

📁 Gerenciamento de Datastores e Coveragestores

FerramentaDescrição
create_datastoreCriar um novo datastore no workspace fornecido
create_featurestoreCriar um novo featurestore no workspace fornecido
create_gpkg_datastoreCriar um datastore GeoPackage (GPKG)
create_shp_datastoreCriar um datastore ESRI Shapefile
create_coveragestoreCriar um novo coveragestore em um workspace
delete_coveragestoreExcluir um coveragestore de um workspace
get_coveragestoreObter detalhes sobre um único coveragestore
get_coveragestoresObter todos os coveragestores de um workspace
get_datastoreObter um datastore específico pelo nome
get_datastoresListar todos os datastores no workspace fornecido

🗺️ Gerenciamento de Camadas

FerramentaDescrição
get_layer_infoObter informações detalhadas sobre uma camada
list_layersListar camadas no GeoServer, opcionalmente filtradas por workspace
create_layerCriar uma nova camada no GeoServer
delete_resourceExcluir um recurso do GeoServer (genérico)

🧩 Gerenciamento de Grupos de Camadas

FerramentaDescrição
create_layergroupCriar um novo grupo de camadas com camadas específicas e (opcionalmente) estilos
get_layergroupObter um grupo de camadas de um workspace
get_layergroupsListar todos os grupos de camadas em um workspace
add_layer_to_layergroupAdicionar uma camada específica a um grupo de camadas
remove_layer_from_layergroupRemover uma camada de um grupo
delete_layergroupExcluir um grupo de camadas de um workspace
update_layergroupAtualizar os detalhes e a configuração de um grupo de camadas

👥 Gerenciamento de Usuários e Grupos de Usuários

FerramentaDescrição
create_userCriar um novo usuário para segurança do GeoServer
delete_userExcluir um usuário pelo nome
get_all_usersListar todos os usuários na instância do GeoServer
modify_userModificar as propriedades de um usuário existente
create_usergroupCriar um novo grupo de usuários
delete_usergroupExcluir um grupo de usuários
get_all_usergroupsRetornar todos os grupos de usuários

📊 Gerenciamento de Tipos de Feição e Atributos

FerramentaDescrição
query_featuresConsultar feições de uma camada vetorial usando filtro CQL
publish_featurestorePublicar um featurestore existente
publish_featurestore_sqlviewPublicar um featurestore usando uma definição de visão SQL
edit_featuretypeEditar as configurações de um tipo de feição em um store
get_featuretypesListar todos os tipos de feição em um store específico
get_feature_attributeObter esquema/detalhes de atributos de feição

🎨 Gerenciamento de Estilos

FerramentaDescrição
create_styleCriar um novo estilo SLD no GeoServer
publish_styleAtribuir/publicar um estilo em uma camada
create_catagorized_featurestyleCriar um estilo categorizado para feições
create_classified_featurestyleCriar um estilo classificado para feições
create_coveragestyleCriar um estilo de cobertura raster
create_outline_featurestyleCriar um estilo simples apenas com contorno para feições

⚙️ Operações de Sistema e Serviços

FerramentaDescrição
get_manifestObter metadados/detalhes do manifesto do GeoServer
get_statusObter status geral do servidor
get_system_statusObter visão geral/informações de status do sistema do GeoServer
get_versionBuscar string de versão do GeoServer
reload_geoserverRecarregar catálogo e configuração do disco
reset_geoserverRedefinir todos os caches/conexões do GeoServer
update_serviceAtualizar opções selecionadas de serviços OGC
publish_time_dimension_to_coveragestoreAdicionar ou atualizar uma dimensão de tempo para um coverage store (para séries temporais)

📝 Utilitários de XML de Estilo

FerramentaDescrição
style_catagorize_xmlGerar SLD para estilo vetorial categorizado
style_classified_xmlObter XML SLD para estilo vetorial classificado
style_coverage_style_colormapentryGerar entradas de mapa de cores para SLD raster
style_coverage_style_xmlGerar XML para SLD raster/cobertura
style_outline_only_xmlXML para estilo apenas com contorno para uma geometria

🛠️ Desenvolvimento de Cliente

Se você está planejando desenvolver seu próprio cliente para interagir com o servidor GeoServer MCP, você pode encontrar inspiração na implementação de cliente de exemplo em examples/client.py. Este exemplo demonstra:

  • Como estabelecer uma conexão com o servidor MCP
  • Como enviar solicitações e lidar com respostas
  • Tratamento básico de erros e gerenciamento de conexão
  • Exemplo de uso de várias ferramentas e operações

O cliente de exemplo serve como um bom ponto de partida para entender o protocolo e implementar suas próprias aplicações de cliente.

Além disso, aqui está o exemplo de uso:

Listar Workspaces


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

Obter Informações da Camada


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

Consultar Feições


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

Gerar 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"
}

🔮 Recursos Planejados

  • Gerenciamento de dados de cobertura e raster
  • Segurança e controle de acesso
  • Recursos avançados de estilização
  • Operações de processamento WPS
  • Integração com GeoWebCache

🤝 Contribuindo

Aceitamos contribuições! Veja como você pode ajudar:

  1. Faça um fork do repositório
  2. Crie um branch de recurso (git checkout -b feature/AmazingFeature)
  3. Faça commit das suas alterações (git commit -m 'Add some AmazingFeature')
  4. Envie para o branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

Por favor, garanta que a descrição do seu PR descreva claramente o problema e a solução. Inclua o número do issue relevante, se aplicável.

📄 Licença

Este projeto é licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.

🔗 Projetos Relacionados

🌐 Veja Também: GIS MCP

Para automação mais ampla de dados geoespaciais e ainda mais recursos MCP relacionados a GIS, consulte GIS MCP by mahdin75.

📞 Suporte

Para suporte, por favor abra um issue

🏆 Selos