GeoNode MCP
GeoNode的MCP服务器 4.x 和 5.x,通过配置解决了API兼容性。
服务器当前的目标是在 /api/v2,仍然是GeoNode 4.x和5.x的API基础。MCP配置将:
GEONODE_VERSION:GeoNode产品版本(4或5)GEONODE_API_VERSION:要使用的REST API版本(当前v2)
这使MCP为未来API更改做好准备,而无需在每个工具上进行版本检查。
特性
- 搜索和检查GeoNode资源
- 从URL检测最可能的GeoNode/API兼容性设置
- 从URL生成可粘贴的MCP客户端配置片段
- 将生成的MCP客户端配置直接写入本地配置文件
- 验证编写的MCP配置文件在结构上正确且可用
- 在一次调用中启动完整的MCP客户端设置
- 解析与特定用户关联的组
- 列出和管理数据集、文档、地图、用户和组
- 运行更安全的批量用户工作流,用于组入职、密码设置、所有权审核和保护删除
- 列出类别、关键字、地区和所有者
- 用于GeoNode/API版本映射的集中式兼容层
- MCP客户端(如Codex、Cursor、OpenCode和Claude Code)的本地stdio执行
可用工具
MCP服务器公开了以下工具。创建、更新、删除、写入文件或设置密码的工具需要具有匹配GeoNode权限的凭据。批量密码和删除工作流包括明确的安全字段,如 dry_run, confirm,以及 expected_count.
实例和MCP配置
| 工具 | 功能 |
|---|---|
geonode_detect_instance | 探测GeoNode URL并推荐 GEONODE_URL, GEONODE_VERSION,以及 GEONODE_API_VERSION 设置。 |
geonode_generate_mcp_config | 无需写入文件即可生成即用型MCP客户端配置代码段。 |
geonode_write_mcp_config | 将生成的MCP客户端配置写入支持的本地客户端配置文件。 |
geonode_verify_mcp_config | 验证编写的MCP配置在结构上是否正确,是否可以启动服务器。 |
geonode_bootstrap_mcp_config | 在一个工作流中运行检测、配置生成、文件写入和可选验证。 |
搜索和通用资源
| 工具 | 功能 |
|---|---|
geonode_search_resources | 使用分页和过滤器通过通用资源端点搜索GeoNode资源。 |
geonode_search_metadata_text | 在选定字段和资源类型中搜索元数据文本,合并目标API查询。 |
geonode_get_resource | 按ID获取通用GeoNode资源的详细信息 |
数据集
| 工具 | 功能 |
|---|---|
geonode_list_datasets | 列出具有分页和可选搜索/筛选参数的数据集。 |
geonode_get_dataset | 按ID获取数据集详细信息 |
geonode_create_dataset | 创建数据集条目。 |
geonode_update_dataset | 更新数据集元数据。 |
geonode_delete_dataset | 按ID删除数据集 |
文件
| 工具 | 功能 |
|---|---|
geonode_list_documents | 列出具有分页和可选搜索/筛选参数的文档。 |
geonode_get_document | 按ID获取文档详细信息 |
geonode_create_document | 创建文档条目。 |
geonode_update_document | 更新文档元数据。 |
geonode_delete_document | 按ID删除文档 |
地图
| 工具 | 功能 |
|---|---|
geonode_list_maps | 列出带有分页和可选搜索/筛选参数的地图。 |
geonode_get_map | 按ID获取地图详细信息 |
geonode_create_map | 创建地图条目。 |
geonode_update_map | 更新地图元数据。 |
geonode_delete_map | 按ID删除地图 |
用户和组
| 工具 | 功能 |
|---|---|
geonode_list_users | 按姓名、用户名或电子邮件列出用户。 |
geonode_get_user | 按ID获取用户详细信息 |
geonode_get_user_groups | 通过ID或确切的用户名解析与用户关联的组。 |
geonode_update_user | 更新支持的用户字段,当前为名字和姓氏。 |
geonode_list_groups | 列出GeoNode组。 |
geonode_get_group | 按ID获取组详细信息 |
用户和组工作流
| 工具 | 功能 |
|---|---|
geonode_create_group | 按slug创建或重用GeoNode组。 |
geonode_bulk_create_users | 通过结构化JSON输入创建或重用用户,并可以设置带有明确确认的共享密码。 |
geonode_add_users_to_group | 将现有用户添加到组中,并在更新后验证成员资格。 |
geonode_bulk_create_users_and_add_to_group | 创建或重用组和用户,可选择设置密码,并将用户添加到组中。 |
geonode_count_user_owned_resources | 使用以下方式统计选定用户拥有的数据集、文档、地图和仪表板 filter{owner.pk}. |
geonode_find_group_users_by_resource_ownership | 通过可选的电子邮件域过滤,将组用户分为有和没有自有资源的用户 |
geonode_delete_users_safely | 在确认、组成员身份、员工状态和拥有资源的安全检查失败后,仅删除明确列出的用户。 |
目录查找
| 工具 | 功能 |
|---|---|
geonode_list_categories | 列出GeoNode类别。 |
geonode_list_keywords | 列出关键字,可选择按搜索文本过滤。 |
geonode_list_regions | 列出区域,可选择按名称或代码过滤。 |
geonode_list_owners | 列出资源所有者,可选择按搜索文本进行筛选。 |
兼容性
今天支持:
- GeoNode
4.xAPIv2 - GeoNode
5.xAPIv2
默认运行时值:
GEONODE_VERSION=5GEONODE_API_VERSION=v2
本地安装
需求
- python
3.10+ - 访问GeoNode实例
- 如果您需要经过身份验证的操作,请提供GeoNode凭据
1.克隆存储库
git clone
cd mcp-geonode-api2.创建虚拟环境
python3 -m venv .venv
source .venv/bin/activate3.在本地安装软件包
正常使用:
pip install -e .对于开发,包括植绒和测试:
pip install -e ".[dev]"4.设置环境变量
export GEONODE_URL="https://your-geonode.example.com"
export GEONODE_USER="admin"
export GEONODE_PASSWORD="your-password"
export GEONODE_VERSION="5"
export GEONODE_API_VERSION="v2"可选覆盖:
export GEONODE_API_BASE_PATH="/api/v2"使用 GEONODE_API_BASE_PATH 仅当您的部署在自定义路径下公开API时。
5.在本地运行服务器
python -m geonode_mcp这将重新启动MCP服务器 stdio,这正是本地MCP客户所期望的。
配置参考
环境变量
GEONODE_URL:GeoNode基本URL,最好不带尾随斜线GEONODE_USER:基本身份验证的用户名GEONODE_PASSWORD:基本身份验证密码GEONODE_VERSION:GeoNode主要版本,当前4或5GEONODE_API_VERSION:API版本,当前v2GEONODE_API_BASE_PATH:可选的显式API路径重写
推荐值
对于大多数GeoNode 5部署:
GEONODE_VERSION=5
GEONODE_API_VERSION=v2对于大多数GeoNode 4部署:
GEONODE_VERSION=4
GEONODE_API_VERSION=v2检测正确的版本设置
MCP包括一个名为 geonode_detect_instance.
其目的是检查GeoNode实例URL,并建议应将哪些值用于:
GEONODE_URLGEONODE_VERSIONGEONODE_API_VERSION
这是一个尽力而为的检测流程。在实践中:
- API版本检测通常是可靠的,当
/api/v2/resources/可以联系到 - 准确的GeoNode主版本检测取决于实例是在HTML、头文件还是静态文件中公开版本提示
工具名称
geonode_detect_instance输入参数
url:GeoNode实例的基本URL,甚至是已知的API URLusername:用于探测受保护实例的可选基本身份验证用户名password:用于探测受保护实例的可选基本身份验证密码timeout:可选超时(秒)response_format:json或markdown
示例调用
{
"url": "https://your-geonode.example.com",
"response_format": "json"
}您还可以直接传递API URL:
{
"url": "https://your-geonode.example.com/api/v2/resources/",
"response_format": "json"
}示例响应
{
"normalized_base_url": "https://your-geonode.example.com",
"detected_api_base_path": "/api/v2",
"recommended_settings": {
"GEONODE_URL": "https://your-geonode.example.com",
"GEONODE_VERSION": "5",
"GEONODE_API_VERSION": "v2"
},
"confidence": {
"geonode_version": "medium",
"api_version": "high"
}
}推荐用法
- 跑
geonode_detect_instance针对目标URL。 - 将返回的推荐设置复制到MCP客户端配置中。
- 如果
GEONODE_VERSION返回为undetermined或null,保持检测GEONODE_API_VERSION并手动确认GeoNode主版本。
查找用户组
MCP包括一个名为 geonode_get_user_groups.
当您需要回答以下问题时,请使用它:
- “用户属于哪个组
my-user属于?" - “列出给定用户的组”
- “按用户名解析用户成员身份,而无需手动浏览用户和组”
工具名称
geonode_get_user_groups输入参数
user_id:可选用户数字IDusername:当用户ID未知时,可选的确切用户名response_format:json或markdown
您必须提供 user_id 或 username.
按用户名调用示例
{
"username": "my-user",
"response_format": "json"
}示例响应
{
"user": {
"pk": 1317,
"username": "my-user"
},
"groups": [
{
"pk": 59,
"title": "GRUPO_ACOES_RS",
"group": {
"name": "ROLE_GRUPO_ACOES_RS"
}
}
]
}为什么这个工具存在
如果没有这个工具,回答“此用户属于哪个组?”是不必要的尴尬:
geonode_list_users用于发现,而不是精确的成员查找geonode_get_user不直接公开组成员身份geonode_list_groups未针对用户反向查找进行优化
geonode_get_user_groups 直接通过以下方式解决:
- 在需要时通过精确的用户名解析用户
- 将用户呼叫到组端点
- 一步返回成员列表
生成即用型MCP客户端配置
MCP还包括一个名为的辅助工具 geonode_generate_mcp_config.
此工具结合了:
- 从提供的URL检测实例
- 推荐
GEONODE_*设置 - 为一个目标客户端准备粘贴MCP代码段
工具名称
geonode_generate_mcp_config输入参数
client:其中之一codex,cursor,opencode,claude_codeurl:GeoNode实例的基本URL,或已知的API URLusername:可选的基本身份验证用户名password:可选基本身份验证密码geonode_version:可选手动超控api_version:可选手动超控server_name:可选MCP服务器名称,默认值geonodepython_command:用于启动的Python可执行路径python -m geonode_mcpresponse_format:markdown或json
示例调用
{
"client": "cursor",
"url": "https://your-geonode.example.com",
"username": "admin",
"password": "your-password",
"python_command": "/path/to/mcp-geonode-api/.venv/bin/python",
"response_format": "markdown"
}示例使用流程
- 跑
geonode_generate_mcp_config. - 将生成的代码段复制到响应建议的配置文件中。
- 如果需要,更换
GEONODE_PASSWORD使用您喜欢的秘密管理模式。
何时使用每种工具
- 使用
geonode_detect_instance如果您只想检查GeoNode URL并了解推断的兼容性。 - 使用
geonode_generate_mcp_config如果你想立即获得最终的客户端代码片段。 - 使用
geonode_write_mcp_config如果你想让MCP为你更新目标配置文件。 - 使用
geonode_verify_mcp_config写入后确认文件和命令有效。 - 使用
geonode_bootstrap_mcp_config如果你想一步完成全部流程。
一步引导
MCP还提供 geonode_bootstrap_mcp_config.
这是最高级别的助手。它
- 检测目标GeoNode实例
- 解决推荐的问题
GEONODE_*设置 - 写入客户端配置文件
- 可选择验证最终结果
工具名称
geonode_bootstrap_mcp_config输入参数
client:其中之一codex,cursor,opencode,claude_codeurl:GeoNode实例的基本URL,或已知的API URLconfig_path:要创建或更新的文件username:可选的基本身份验证用户名password:可选基本身份验证密码geonode_version:可选手动超控api_version:可选手动超控server_name:可选MCP服务器名称,默认值geonodepython_command:用于启动的Python可执行路径python -m geonode_mcpcreate_parent_dirs:自动创建缺少的父目录verify_after_write:写入后验证文件,默认trueresponse_format:markdown或json
示例调用
{
"client": "cursor",
"url": "https://your-geonode.example.com",
"config_path": "/Users/you/.cursor/mcp.json",
"username": "admin",
"password": "your-password",
"python_command": "/path/to/mcp-geonode-api/.venv/bin/python",
"verify_after_write": true,
"response_format": "json"
}推荐的默认工作流
对于大多数用户来说, geonode_bootstrap_mcp_config 应该是默认选择。
为什么低级工具仍然存在
其他工具仍然有用,应该继续使用:
geonode_detect_instance:最适合诊断和理解服务器暴露的内容geonode_generate_mcp_config:最好是在触摸文件之前查看代码段geonode_write_mcp_config:最好是在没有验证的情况下写作,或者必须将验证分开geonode_verify_mcp_config:最适合CI、故障排除或验证现有的配置文件
因此,在引导存在之后,低级工具仍然是合理的。它们并非多余;它们支持审查、调试和部分工作流。
自动写入MCP客户端配置文件
MCP还提供 geonode_write_mcp_config.
此工具:
- 从URL检测实例设置
- 生成正确的客户端配置
- 写入或更新目标本地配置文件
工具名称
geonode_write_mcp_config输入参数
client:其中之一codex,cursor,opencode,claude_codeurl:GeoNode实例的基本URL,或已知的API URLconfig_path:要创建或更新的文件username:可选的基本身份验证用户名password:可选基本身份验证密码geonode_version:可选手动超控api_version:可选手动超控server_name:可选MCP服务器名称,默认值geonodepython_command:用于启动的Python可执行路径python -m geonode_mcpcreate_parent_dirs:自动创建缺少的父目录response_format:markdown或json
示例调用
{
"client": "cursor",
"url": "https://your-geonode.example.com",
"config_path": "/Users/you/.cursor/mcp.json",
"username": "admin",
"password": "your-password",
"python_command": "/path/to/mcp-geonode-api/.venv/bin/python",
"response_format": "markdown"
}它更新了什么
- 对于
cursor和claude_code,它会更新mcpServers所选服务器名称的条目。 - 对于
opencode,它会更新mcp所选服务器名称的条目。 - 对于
codex,它会更新匹配[mcp_servers.]和[mcp_servers..env]TOML块。
推荐用法
- 要获得最快的设置,请使用
geonode_bootstrap_mcp_config. - 如果你想要一个分阶段的流程,请使用
geonode_generate_mcp_config那么geonode_write_mcp_config那么geonode_verify_mcp_config. - 每当GeoNode URL、凭据或Python路径发生变化时,请重新运行相关工具。
验证书面MCP配置文件
MCP还提供 geonode_verify_mcp_config.
此工具验证:
- 目标文件存在
- 预期的服务器条目存在
- 文件形状与所选客户端匹配
- 配置的可执行文件存在
- 那
python -m geonode_mcp至少可以在命令与该模式匹配时导入包
工具名称
geonode_verify_mcp_config输入参数
client:其中之一codex,cursor,opencode,claude_codeconfig_path:要验证的文件server_name:要检查的MCP服务器名称,默认值geonoderesponse_format:markdown或json
示例调用
{
"client": "cursor",
"config_path": "/Users/you/.cursor/mcp.json",
"server_name": "geonode",
"response_format": "json"
}推荐使用流程
- 跑
geonode_write_mcp_config. - 跑
geonode_verify_mcp_config. - 如果验证失败,请检查返回的检查并更正命令路径、环境或文件位置。
MCP客户端设置
以下示例假设:
- 存储库位于
/path/to/mcp-geonode-api - 虚拟环境位于
/path/to/mcp-geonode-api/.venv
将这些路径调整到您的机器。
法典
如果您希望MCP自动生成此信息,请调用 geonode_generate_mcp_config 随着 "client": "codex". 如果你想让它直接写入文件,请使用 geonode_write_mcp_config 随着 config_path="~/.codex/config.toml".
OpenAI在文档中记录了MCP配置 ~/.codex/config.tomlThe mcp_servers 该表为食品法典委员会记录;下面的本地stdio示例遵循此服务器的相同结构。
文件: ~/.codex/config.toml
[mcp_servers.geonode]
command = "/path/to/mcp-geonode-api/.venv/bin/python"
args = ["-m", "geonode_mcp"]
[mcp_servers.geonode.env]
GEONODE_URL = "https://your-geonode.example.com"
GEONODE_USER = "admin"
GEONODE_PASSWORD = "your-password"
GEONODE_VERSION = "5"
GEONODE_API_VERSION = "v2"如果您更喜欢特定于项目的设置,请在用于该工作区的Codex配置中保持相同的命令和环境值。
光标
如果您希望MCP自动生成此信息,请调用 geonode_generate_mcp_config 随着 "client": "cursor". 如果你想让它直接写入文件,请使用 geonode_write_mcp_config 随着 config_path="~/.cursor/mcp.json" 或一个项目 .cursor/mcp.json.
Cursor通过以下方式支持MCP mcp.json。您可以在中全局配置它 ~/.cursor/mcp.json 或按项目 .cursor/mcp.json.
文件: .cursor/mcp.json
{
"mcpServers": {
"geonode": {
"command": "/path/to/mcp-geonode-api/.venv/bin/python",
"args": ["-m", "geonode_mcp"],
"env": {
"GEONODE_URL": "https://your-geonode.example.com",
"GEONODE_USER": "admin",
"GEONODE_PASSWORD": "your-password",
"GEONODE_VERSION": "5",
"GEONODE_API_VERSION": "v2"
}
}
}
}如果需要,您还可以使用游标变量插值,例如 ${workspaceFolder} 或 ${env:GEONODE_PASSWORD}.
开源代码
如果您希望MCP自动生成此信息,请调用 geonode_generate_mcp_config 随着 "client": "opencode". 如果你想让它直接写入文件,请使用 geonode_write_mcp_config 随着 config_path="~/.config/opencode/opencode.json" 或一个项目 opencode.json.
OpenCode从以下位置加载配置 ~/.config/opencode/opencode.json 全球或 opencode.json 在项目根中。
文件: opencode.json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"geonode": {
"type": "local",
"command": [
"/path/to/mcp-geonode-api/.venv/bin/python",
"-m",
"geonode_mcp"
],
"enabled": true,
"environment": {
"GEONODE_URL": "https://your-geonode.example.com",
"GEONODE_USER": "admin",
"GEONODE_PASSWORD": "your-password",
"GEONODE_VERSION": "5",
"GEONODE_API_VERSION": "v2"
}
}
}
}克劳德代码
如果您希望MCP自动生成此信息,请调用 geonode_generate_mcp_config 随着 "client": "claude_code". 如果你想让它直接写入文件,请使用 geonode_write_mcp_config 随着 config_path=".mcp.json" 或另一个克劳德代码MCP文件路径。
Claude Code直接从CLI支持本地stdio MCP服务器,还可以将项目范围的配置存储在 .mcp.json.
选项1:使用CLI添加它
claude mcp add --transport stdio geonode \
--env GEONODE_URL=https://your-geonode.example.com \
--env GEONODE_USER=admin \
--env GEONODE_PASSWORD=your-password \
--env GEONODE_VERSION=5 \
--env GEONODE_API_VERSION=v2 \
-- /path/to/mcp-geonode-api/.venv/bin/python -m geonode_mcp对于共享项目配置:
claude mcp add --transport stdio --scope project geonode \
--env GEONODE_URL=https://your-geonode.example.com \
--env GEONODE_USER=admin \
--env GEONODE_PASSWORD=your-password \
--env GEONODE_VERSION=5 \
--env GEONODE_API_VERSION=v2 \
-- /path/to/mcp-geonode-api/.venv/bin/python -m geonode_mcp选项2:配置 .mcp.json 手动地
文件: .mcp.json
{
"mcpServers": {
"geonode": {
"command": "/path/to/mcp-geonode-api/.venv/bin/python",
"args": ["-m", "geonode_mcp"],
"env": {
"GEONODE_URL": "https://your-geonode.example.com",
"GEONODE_USER": "admin",
"GEONODE_PASSWORD": "your-password",
"GEONODE_VERSION": "5",
"GEONODE_API_VERSION": "v2"
}
}
}
}推荐设置策略
如果您想要稳定的本地开发,请使用此布局:
- 在项目本地虚拟环境中安装该包。
- 将MCP客户端指向virtualenv Python可执行文件。
- 尽可能在环境变量或客户端秘密存储中保密。
- 集
GEONODE_VERSION即使在使用默认值时也是如此。 - 仅覆盖
GEONODE_API_BASE_PATH如果您的部署是非标准的。
发展
运行检查:
ruff check .
python3 -m mypy src
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest -qPYTEST_DISABLE_PLUGIN_AUTOLOAD=1 如果您的计算机安装了无关的全局pytest插件,建议使用。
为什么以这种方式实现版本控制
GeoNode4.x和5.x仍然记录下的主要REST API /api/v2因此,该项目不会将GeoNode产品版本直接映射到新的REST前缀。相反,它:
- 从配置中读取GeoNode版本
- 从配置中读取API版本
- 通过兼容层解析实际路由集
这种设计使工具表面保持稳定,并使未来的版本支持更容易添加。
来源
- OpenAI Codex MCP文档: developers.openai.com/learn/docs-mcp
- 光标MCP文档: docs.cursor.com/advanced/model-context-protocol
- 克劳德代码MCP文档: code.claude.com/docs/en/mcp
- OpenCode MCP文档: opencode.ai/docs/mcp-server
- OpenCode配置位置: opencode.ai/docs/config
- GeoNode开发人员API文档:
