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
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.
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
📋 Sumário
- Recursos
- Opções de Implantação
- Pré-requisitos
- Instalação
- Armazenamento de Arquivos e Uso de
--storage - Ferramentas Disponíveis
- Endpoints de Recursos
- Gerenciamento de Workspaces
- Gerenciamento de Datastores e Coveragestores
- Gerenciamento de Camadas
- Gerenciamento de Grupos de Camadas
- Gerenciamento de Usuários e Grupos de Usuários
- Gerenciamento de Tipos de Feição e Atributos
- Gerenciamento de Estilos
- Operações de Sistema e Serviços
- Utilitários de XML de Estilo
- Desenvolvimento de Clientes
- Recursos Planejados
- Contribuindo
- Licença
- Projetos Relacionados
- Suporte
- Badges
🚀 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
- Execute o geoserver-mcp:
docker pull mahdin75/geoserver-mcp
docker run -d mahdin75/geoserver-mcp
- 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
- Instale o gerenciador de pacotes uv.
pip install uv
- Crie o Ambiente Virtual (Python 3.10+):
Linux/Mac:
uv venv --python=3.10
Windows PowerShell:
uv venv --python=3.10
- Instale o pacote usando pip:
uv pip install geoserver-mcp
- 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"
- 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
- 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
- Instale o gerenciador de pacotes uv.
pip install uv
- Crie o Ambiente Virtual (Python 3.10+):
uv venv --python=3.10
- Instale o pacote usando pip:
uv pip install -e .
- 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"
- 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
- 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
--storagedefine 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
--storagenã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 Recurso | Descrição |
|---|---|
geoserver://catalog/workspaces | Listar 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
| Ferramenta | Descrição |
|---|---|
list_workspaces | Listar workspaces disponíveis no GeoServer |
create_workspace | Criar um novo workspace no GeoServer |
📁 Gerenciamento de Datastores e Coveragestores
| Ferramenta | Descrição |
|---|---|
create_datastore | Criar um novo datastore no workspace fornecido |
create_featurestore | Criar um novo featurestore no workspace fornecido |
create_gpkg_datastore | Criar um datastore GeoPackage (GPKG) |
create_shp_datastore | Criar um datastore ESRI Shapefile |
create_coveragestore | Criar um novo coveragestore em um workspace |
delete_coveragestore | Excluir um coveragestore de um workspace |
get_coveragestore | Obter detalhes sobre um único coveragestore |
get_coveragestores | Obter todos os coveragestores de um workspace |
get_datastore | Obter um datastore específico pelo nome |
get_datastores | Listar todos os datastores no workspace fornecido |
🗺️ Gerenciamento de Camadas
| Ferramenta | Descrição |
|---|---|
get_layer_info | Obter informações detalhadas sobre uma camada |
list_layers | Listar camadas no GeoServer, opcionalmente filtradas por workspace |
create_layer | Criar uma nova camada no GeoServer |
delete_resource | Excluir um recurso do GeoServer (genérico) |
🧩 Gerenciamento de Grupos de Camadas
| Ferramenta | Descrição |
|---|---|
create_layergroup | Criar um novo grupo de camadas com camadas específicas e (opcionalmente) estilos |
get_layergroup | Obter um grupo de camadas de um workspace |
get_layergroups | Listar todos os grupos de camadas em um workspace |
add_layer_to_layergroup | Adicionar uma camada específica a um grupo de camadas |
remove_layer_from_layergroup | Remover uma camada de um grupo |
delete_layergroup | Excluir um grupo de camadas de um workspace |
update_layergroup | Atualizar os detalhes e a configuração de um grupo de camadas |
👥 Gerenciamento de Usuários e Grupos de Usuários
| Ferramenta | Descrição |
|---|---|
create_user | Criar um novo usuário para segurança do GeoServer |
delete_user | Excluir um usuário pelo nome |
get_all_users | Listar todos os usuários na instância do GeoServer |
modify_user | Modificar as propriedades de um usuário existente |
create_usergroup | Criar um novo grupo de usuários |
delete_usergroup | Excluir um grupo de usuários |
get_all_usergroups | Retornar todos os grupos de usuários |
📊 Gerenciamento de Tipos de Feição e Atributos
| Ferramenta | Descrição |
|---|---|
query_features | Consultar feições de uma camada vetorial usando filtro CQL |
publish_featurestore | Publicar um featurestore existente |
publish_featurestore_sqlview | Publicar um featurestore usando uma definição de visão SQL |
edit_featuretype | Editar as configurações de um tipo de feição em um store |
get_featuretypes | Listar todos os tipos de feição em um store específico |
get_feature_attribute | Obter esquema/detalhes de atributos de feição |
🎨 Gerenciamento de Estilos
| Ferramenta | Descrição |
|---|---|
create_style | Criar um novo estilo SLD no GeoServer |
publish_style | Atribuir/publicar um estilo em uma camada |
create_catagorized_featurestyle | Criar um estilo categorizado para feições |
create_classified_featurestyle | Criar um estilo classificado para feições |
create_coveragestyle | Criar um estilo de cobertura raster |
create_outline_featurestyle | Criar um estilo simples apenas com contorno para feições |
⚙️ Operações de Sistema e Serviços
| Ferramenta | Descrição |
|---|---|
get_manifest | Obter metadados/detalhes do manifesto do GeoServer |
get_status | Obter status geral do servidor |
get_system_status | Obter visão geral/informações de status do sistema do GeoServer |
get_version | Buscar string de versão do GeoServer |
reload_geoserver | Recarregar catálogo e configuração do disco |
reset_geoserver | Redefinir todos os caches/conexões do GeoServer |
update_service | Atualizar opções selecionadas de serviços OGC |
publish_time_dimension_to_coveragestore | Adicionar ou atualizar uma dimensão de tempo para um coverage store (para séries temporais) |
📝 Utilitários de XML de Estilo
| Ferramenta | Descrição |
|---|---|
style_catagorize_xml | Gerar SLD para estilo vetorial categorizado |
style_classified_xml | Obter XML SLD para estilo vetorial classificado |
style_coverage_style_colormapentry | Gerar entradas de mapa de cores para SLD raster |
style_coverage_style_xml | Gerar XML para SLD raster/cobertura |
style_outline_only_xml | XML 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:
- Faça um fork do repositório
- Crie um branch de recurso (
git checkout -b feature/AmazingFeature) - Faça commit das suas alterações (
git commit -m 'Add some AmazingFeature') - Envie para o branch (
git push origin feature/AmazingFeature) - 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
- Model Context Protocol - A implementação principal do MCP
- GeoServer REST API - Documentação oficial do REST do GeoServer
- GeoServer REST Python Client - Cliente Python para a API REST do GeoServer
🌐 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
