 ](https://pepy.tech/project/geoserver-mcp)
GeoServer MCP服务器
A Model Context Protocol (MCP) server implementation that connects Large Language Models (LLMs) to the GeoServer REST API, enabling AI assistants to interact with geospatial data and services.
版本0.5.0(测试版)正在积极开发中,将很快发布。我们对贡献持开放态度,欢迎开发人员加入我们建设这个项目。
🎥 演示
📋 目录
- 资源端点 - 工作空间管理 - 数据存储和封面存储管理 - 层管理 - 图层组管理 - 用户和用户组管理 - 功能类型和属性管理 - 式管理 - 系统和服务运营 - 样式XML实用程序
- 列出工作区 - 获取图层信息 - 查询功能 - 生成地图
🚀 特性
- 🔍 查询和操作GeoServer工作区、图层和样式
- 🗺️ 对矢量数据执行空间查询
- 🎨 生成地图可视化
- 🌐 访问符合OGC标准的web服务(WMS、WFS)
- 🛠️ 与MCP兼容客户端轻松集成
📋 先决条件
- Python 3.10或更高版本
- 在启用REST API的情况下运行GeoServer实例
- MCP兼容客户端(如Claude Desktop或Cursor)
- 用于安装软件包的互联网连接
🛠️ 安装
选择最适合您需求的安装方法:
通过Smithery安装
通过以下方式自动安装克劳德桌面版GeoServer MCP服务器 史密瑟里:
npx -y @smithery/cli install @mahdin75/geoserver-mcp --client claude🛠️ 安装(Docker)
Docker安装是运行GeoServer MCP服务器最快、最独立的方式。它非常适合:
- 快速测试和评估
- 生产部署
- 您希望避免Python依赖的环境
- 跨不同系统的一致部署
- 运行geoserver mcp:
docker pull mahdin75/geoserver-mcp
docker run -d mahdin75/geoserver-mcp- 配置客户端:
如果您使用的是Claude Desktop,请编辑 claude_desktop_config.json 如果使用光标,请创建 .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。这种方法最适合:
- 希望在本地运行服务器的普通用户
- 安装了Python 3.10+的系统
- 想要自定义服务器配置的用户
- 开发和测试目的
- 安装uv包管理器。
pip install uv- 创建虚拟环境(Python 3.10+):
Linux/Mac:
uv venv --python=3.10Windows PowerShell:
uv venv --python=3.10- 使用pip安装软件包:
uv pip install geoserver-mcp- 配置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"- 启动服务器:
如果你要使用Claude桌面,你不需要这一步。对于游标或您自己的自定义客户端,您应该运行以下代码。
Linux:
source .venv/bin/activate
geoserver-mcp或
source .venv/bin/activate
geoserver-mcp --url http://localhost:8080/geoserver --user admin --password geoserver --debugWindows PowerShell:
.\.venv\Scripts\activate
geoserver-mcp或
.\.venv\Scripts\activate
geoserver-mcp --url http://localhost:8080/geoserver --user admin --password geoserver --debug- 配置客户端:
如果您使用的是Claude Desktop,请编辑 claude_desktop_config.json 如果使用光标,请创建 .cursor/mcp.json
窗户:
{
"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"
]
}
}
}🛠️ 开发安装
开发安装是为想要修改代码库的贡献者和开发人员设计的。该方法适用于:
- 为项目做出贡献的开发人员
- 需要修改源代码的用户
- 测试新功能
- 调试和开发目的
- 安装uv包管理器。
pip install uv- 创建虚拟环境(Python 3.10+):
uv venv --python=3.10- 使用pip安装软件包:
uv pip install -e .- 配置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"- 启动服务器:
如果你要使用Claude桌面,你不需要这一步。对于游标或您自己的自定义客户端,您应该运行以下代码。
Linux:
source .venv/bin/activate
geoserver-mcp或
source .venv/bin/activate
geoserver-mcp --url http://localhost:8080/geoserver --user admin --password geoserver --debugWindows PowerShell:
.\.venv\Scripts\activate
geoserver-mcp或
.\.venv\Scripts\activate
geoserver-mcp --url http://localhost:8080/geoserver --user admin --password geoserver --debug- 配置客户端:
如果您使用的是Claude Desktop,请编辑 claude_desktop_config.json 如果使用光标,请创建 .cursor/mcp.json
窗户:
{
"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"
]
}
}
}文件存储和存储使用情况
GeoServer MCP服务器支持可选 --storage 标志为所有文件读/写操作指定一个基本目录,例如上传shapefiles、GeoTIFFs或导出结果。
概述
- 这
--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服务器公开的所有可用工具和资源。这些工具允许LLM与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服务器建立连接
- 如何发送请求和处理响应
- 基本错误处理和连接管理
- 各种工具和操作的示例用法
示例客户端是理解协议和实现自己的客户端应用程序的良好起点。
此外,以下是usgage的示例:
列出工作区
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集成
🤝 贡献
我们欢迎捐款!以下是您可以提供帮助的方式:
- 分叉存储库
- 创建要素分支(
git checkout -b feature/AmazingFeature) - 提交您的更改(
git commit -m 'Add some AmazingFeature') - 推到分支(
git push origin feature/AmazingFeature) - 打开拉取请求
请确保您的公关描述清楚地描述了问题和解决方案。如果适用,请包括相关问题编号。
📄 许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
🔗 相关项目
- 模型上下文协议 -核心MCP实施
- GeoServer REST API -GeoServer REST官方文档
- GeoServer REST Python客户端 -用于GeoServer REST API的Python客户端
🌐 另请参见:GIS MCP
有关更广泛的地理空间数据自动化和更多与GIS相关的MCP功能,请参阅 mahdin75的GIS MCP.
📞 支持
如需支持,请打开 问题
🏆 徽章
](https://mseep.ai/app/mahdin75-geoserver-mcp)

