mcpField
G
GeoServer MCP Server

GeoServer MCP Server

本地服务
github.com/mahdin75地图与出行9610 周前更新

关于 GeoServer MCP Server

GeoServer MCP Server 是一个 MCP 服务,将 LLM 连接到 GeoServer REST API,使 AI 助手能够访问和操作地理空间数据与服务。适合需要通过自然语言管理 GeoServer 的 GIS 用户和开发者。项目目前可通过 pip、Docker 或作为 GeoServer 扩展部署。

主要功能

  1. 01管理工作区、图层、数据存储与样式
  2. 02对矢量数据执行空间查询
  3. 03生成地图可视化
  4. 04访问 WMS 与 WFS 等 OGC 服务
  5. 05支持 --storage 参数指定文件根目录

适用场景

  1. 01通过 AI 助手查询和修改 GeoServer 中的图层
  2. 02批量创建 Shapefile 或 GeoPackage 数据存储
  3. 03为 GIS 数据生成地图预览

MCP 相关

该项目是 MCP 服务,向 MCP 客户端暴露 GeoServer REST API 对应的工具与资源,例如 list_workspaces 和 geoserver://catalog/layers 等端点。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"geoserver": {
"command": "npx",
"args": [
"-y",
"@smithery/cli"
]
}
}
}
启动命令npx -y @smithery/cli

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@smithery/cli

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

PyPI 下载量

GeoServer MCP 服务

一种模型上下文协议(MCP)服务实现,可将大模型(LLM)连接到 GeoServer REST API,使 AI 助手能够与地理空间数据和服务交互。

GeoServer MCP 服务徽标

0.5.0 版(Beta)目前正在积极开发中,即将发布。我们欢迎大家贡献代码,也欢迎开发者加入我们,共同构建此项目。

🎥 演示

GeoServer MCP 服务演示

📋 目录

🚀 功能

  • 🔍 查询和操作 GeoServer 工作区、图层和样式
  • 🗺️ 对矢量数据执行空间查询
  • 🎨 生成地图可视化结果
  • 🌐 访问符合 OGC 标准的 Web 服务(WMS、WFS)
  • 🛠️ 轻松集成兼容 MCP 的客户端

🚀 部署选项

GeoServer MCP 可以通过两种方式运行。它们具有相同的产品理念(通过 MCP 工具操作 GeoServer),但属于独立的制品。Python 软件包保持不变。

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

单独运行 GeoServer MCP(通过 pip、Docker 或 Smithery)。该进程通过 MCP 与 Agent 通信,并调用 GeoServer REST API。这是原始部署方式,目前已发布。

请参阅下文的安装。

GeoServer 扩展

将 GeoServer MCP 扩展直接安装到 GeoServer 中,并在 /geoserver/mcp 暴露远程 MCP 端点。无需 Python 伴随进程。适用于 GeoServer 2.28.x。

有关架构、安装、配置、安全性和客户端示例,请参阅 extension/README.md。

📋 先决条件

  • Python 3.10 或更高版本
  • 已启用 REST API 的运行中 GeoServer 实例
  • 兼容 MCP 的客户端(如 Claude Desktop 或 Cursor)
  • 安装软件包时需要互联网连接

🛠️ 安装

选择最适合你需求的安装方式:

通过 Smithery 安装

通过 Smithery 为 Claude Desktop 自动安装 GeoServer MCP 服务:

npx -y @smithery/cli install @mahdin75/geoserver-mcp --client claude
🛠️ 安装(Docker)

Docker 安装是运行 GeoServer MCP 服务最快且隔离性最好的方式,适用于:

  • 快速测试和评估
  • 生产环境部署
  • 希望避免 Python 依赖的环境
  • 在不同系统上保持一致的部署
  1. 运行 geoserver-mcp:
docker pull mahdin75/geoserver-mcp
docker run -d mahdin75/geoserver-mcp
  1. 配置客户端:

如果使用 Claude Desktop,请编辑 claude_desktop_config.json 如果使用 Cursor,请创建 .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"
      ]
    }
  }
}
🛠️ 安装(pip)

对于希望直接在系统上运行服务的大多数用户,建议使用 pip 安装。此方法适用于:

  • 希望在本地运行服务的普通用户
  • 已安装 Python 3.10+ 的系统
  • 希望自定义服务配置的用户
  • 开发和测试用途
  1. 安装 uv 包管理器。
pip install uv
  1. 创建虚拟环境(Python 3.10+):

Linux/Mac:

uv venv --python=3.10

Windows PowerShell:

uv venv --python=3.10
  1. 使用 pip 安装软件包:
uv pip install geoserver-mcp
  1. 配置 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. 启动服务:

如果要使用 Claude desktop,则无需执行此步骤。若要使用 Cursor 或自定义客户端,请运行以下代码。

Linux:

source .venv/bin/activate

geoserver-mcp

或

source .venv/bin/activate

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

Windows PowerShell:

.\.venv\Scripts\activate
geoserver-mcp

或

.\.venv\Scripts\activate
geoserver-mcp --url http://localhost:8080/geoserver --user admin --password geoserver --debug
  1. 配置客户端:

如果使用 Claude Desktop,请编辑 claude_desktop_config.json 如果使用 Cursor,请创建 .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"
      ]
    }
  }
}
🛠️ 开发环境安装

开发环境安装面向希望修改代码库的贡献者和开发者。此方法适用于:

  • 为项目做贡献的开发者
  • 需要修改源代码的用户
  • 测试新功能
  • 调试和开发用途
  1. 安装 uv 包管理器。
pip install uv
  1. 创建虚拟环境(Python 3.10+):
uv venv --python=3.10
  1. 使用 pip 安装软件包:
uv pip install -e .
  1. 配置 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. 启动服务:

如果要使用 Claude desktop,则无需执行此步骤。若要使用 Cursor 或自定义客户端,请运行以下代码。

Linux:

source .venv/bin/activate

geoserver-mcp

或

source .venv/bin/activate

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

Windows PowerShell:

.\.venv\Scripts\activate
geoserver-mcp

或

.\.venv\Scripts\activate
geoserver-mcp --url http://localhost:8080/geoserver --user admin --password geoserver --debug
  1. 配置客户端:

如果使用 Claude Desktop,请编辑 claude_desktop_config.json 如果使用 Cursor,请创建 .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"
      ]
    }
  }
}

文件存储和 --storage 的用法

GeoServer MCP 服务支持可选的 --storage 标志,用于指定所有文件读写操作的基础目录,例如上传 shapefile、GeoTIFF 或导出结果。

概述
  • --storage 标志用于设置所有数据相关工具执行文件操作时的根文件夹。
  • 你可以将相对路径(相对于存储根目录)或绝对路径(绕过存储根目录)作为参数传递给相关工具。
  • 如果未设置 --storage,则按用户提供的路径解析(相对于工作目录或作为绝对路径)。
CLI 示例
python -m geoserver_mcp.main --storage D:/my/data/dir

这会将 D:/my/data/dir 设为所有文件的基础路径。

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')

绝对路径(例如 'C:/input/other.shp')始终按原样使用。

在 Docker 中运行时

如果使用 Docker,请确保将存储目录挂载为卷,例如:

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

然后使用以下命令启动服务:

python -m geoserver_mcp.main --storage /opt/data
最佳实践
  • 与 API/工具交互时使用相对路径,让配置更易于移植。
  • 对于远程或容器部署,务必确保容器内可访问文件数据(如有需要,请使用 Docker 卷)。
  • 查看工具文档字符串,了解哪些参数会使用存储系统。

--storage 系统简化了所有用户的文件管理,并让部署更加灵活!

🛠️ 可用工具

本节详细介绍 GeoServer MCP 服务公开的所有可用工具和资源。这些工具可让大模型通过 GeoServer 的 REST API 进行全面的地理空间数据管理。

🌍 资源端点

资源端点通过 URI 模式直接访问 GeoServer 资源。

资源 URI描述
geoserver://catalog/workspaces列出可用的工作区
geoserver://catalog/layers/{workspace}/{layer}获取特定图层的信息
geoserver://services/wms/{request}处理 WMS 资源请求
geoserver://services/wfs/{request}处理 WFS 资源请求
📦 工作区管理
工具描述
list_workspaces列出 GeoServer 中可用的工作区
create_workspace在 GeoServer 中创建新工作区
📁 数据存储与覆盖存储管理
工具描述
create_datastore在指定工作区中创建新的数据存储
create_featurestore在指定工作区中创建新的要素存储
create_gpkg_datastore创建 GeoPackage(GPKG)数据存储
create_shp_datastore创建 ESRI Shapefile 数据存储
create_coveragestore在工作区中创建新的覆盖存储
delete_coveragestore从工作区中删除覆盖存储
get_coveragestore获取单个覆盖存储的详细信息
get_coveragestores获取工作区中的所有覆盖存储
get_datastore按名称获取指定的数据存储
get_datastores列出指定工作区中的所有数据存储
🗺️ 图层管理
工具描述
get_layer_info获取图层的详细信息
list_layers列出 GeoServer 中的图层,可按工作区筛选
create_layer在 GeoServer 中创建新图层
delete_resource从 GeoServer 中删除资源(通用)
🧩 图层组管理
工具描述
create_layergroup使用指定图层和(可选)样式创建新的图层组
get_layergroup从工作区获取图层组
get_layergroups列出工作区中的所有图层组
add_layer_to_layergroup将指定图层添加到图层组
remove_layer_from_layergroup从图层组中移除图层
delete_layergroup从工作区中删除图层组
update_layergroup更新图层组的详细信息和配置
👥 用户与用户组管理
工具描述
create_user为 GeoServer 安全管理创建新用户
delete_user按名称删除用户
get_all_users列出 GeoServer 实例中的所有用户
modify_user修改现有用户的属性
create_usergroup创建新用户组
delete_usergroup删除用户组
get_all_usergroups返回所有用户组
📊 要素类型与属性管理
工具描述
query_features使用 CQL 过滤器查询矢量图层中的要素
publish_featurestore发布现有要素存储
publish_featurestore_sqlview使用 SQL 视图定义发布要素存储
edit_featuretype编辑存储中要素类型的设置
get_featuretypes列出指定存储中的所有要素类型
get_feature_attribute获取要素属性架构/详细信息
🎨 样式管理
工具描述
create_style在 GeoServer 中创建新的 SLD 样式
publish_style为图层指定/发布样式
create_catagorized_featurestyle为要素创建分类样式
create_classified_featurestyle为要素创建分级样式
create_coveragestyle创建栅格覆盖范围样式
create_outline_featurestyle为要素创建仅包含轮廓的简单样式
⚙️ 系统与服务操作
工具描述
get_manifest获取 GeoServer 清单元数据/详细信息
get_status获取服务器总体状态
get_system_status获取 GeoServer 的系统状态概览/信息
get_version获取 GeoServer 版本字符串
reload_geoserver从磁盘重新加载目录和配置
reset_geoserver重置所有 GeoServer 缓存/连接
update_service更新所选 OGC 服务选项
publish_time_dimension_to_coveragestore为覆盖范围存储添加或更新时间维度(用于时间序列)
📝 样式 XML 实用工具
工具描述
style_catagorize_xml生成分类矢量样式的 SLD
style_classified_xml获取分级矢量样式的 SLD XML
style_coverage_style_colormapentry为栅格 SLD 生成颜色映射条目
style_coverage_style_xml生成栅格/覆盖范围 SLD 的 XML
style_outline_only_xml为几何对象生成仅包含轮廓样式的 XML

🛠️ 客户端开发

如果你计划开发自己的客户端来与 GeoServer MCP 服务交互,可以参考 examples/client.py 中的示例客户端实现。此示例演示了:

  • 如何与 MCP 服务建立连接
  • 如何发送请求并处理响应
  • 基本的错误处理和连接管理
  • 各种工具和操作的用法示例

此示例客户端是了解该协议并实现自己的客户端应用程序的良好起点。

此外,以下是示例用法:

列出工作区

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

获取图层信息

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

查询要素

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

生成地图

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

🔮 计划中的功能

  • 覆盖数据和栅格数据管理
  • 安全和访问控制
  • 高级样式功能
  • WPS 处理操作
  • GeoWebCache 集成

🤝 贡献

欢迎贡献!以下是你可以提供帮助的方式:

  1. Fork 此仓库
  2. 创建功能分支(git checkout -b feature/AmazingFeature)
  3. 提交你的更改(git commit -m 'Add some AmazingFeature')
  4. 将分支推送到远程仓库(git push origin feature/AmazingFeature)
  5. 发起 Pull Request

请确保你的 PR 描述清楚地说明问题和解决方案。如果适用,请附上相关问题编号。

📄 许可证

本项目采用 MIT License 授权,详情请参阅 LICENSE 文件。

🔗 相关项目

🌐 另请参阅:GIS MCP

如需了解更广泛的地理空间数据自动化功能和更多 GIS 相关的 MCP 功能,请参阅 mahdin75 的 GIS MCP。

📞 支持

如需支持,请提交 issue

🏆 徽章

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。