GeoNode MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GeoNode MCPsearch for resources related to water"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
GeoNode MCP
MCP server for GeoNode 4.x and 5.x, with API compatibility resolved through configuration.
The server currently targets the GeoNode REST API exposed under /api/v2, which is still the documented API base for GeoNode 4.x and 5.x. The MCP configuration separates:
GEONODE_VERSION: the GeoNode product version (4or5)GEONODE_API_VERSION: the REST API version to use (currentlyv2)
This keeps the MCP ready for future API changes without spreading version checks across every tool.
Features
Search and inspect GeoNode resources
Detect the most likely GeoNode/API compatibility settings from a URL
Generate ready-to-paste MCP client configuration snippets from a URL
Write the generated MCP client configuration directly into a local config file
Verify that a written MCP config file is structurally correct and usable
Bootstrap a complete MCP client setup in one call
Resolve the groups associated with a specific user
List and manage datasets, documents, maps, users, and groups
Run safer bulk user workflows for group onboarding, password setup, ownership audit, and guarded deletion
List categories, keywords, regions, and owners
Centralized compatibility layer for GeoNode/API version mapping
Local stdio execution for MCP clients such as Codex, Cursor, OpenCode, and Claude Code
Related MCP server: Google Earth Engine MCP Server
Available Tools
The MCP server exposes the tools below. Tools that create, update, delete, write files, or set passwords require credentials with the matching GeoNode permissions. Bulk password and deletion workflows include explicit safety fields such as dry_run, confirm, and expected_count.
Instance and MCP Configuration
Tool | Function |
| Probes a GeoNode URL and recommends |
| Generates a ready-to-use MCP client configuration snippet without writing files. |
| Writes a generated MCP client configuration to a supported local client config file. |
| Validates that a written MCP config is structurally correct and can launch the server. |
| Runs detection, config generation, file writing, and optional verification in one workflow. |
Search and Generic Resources
Tool | Function |
| Searches GeoNode resources through the generic resources endpoint with pagination and filters. |
| Searches metadata text across selected fields and resource types, merging targeted API queries. |
| Fetches details for a generic GeoNode resource by ID. |
Datasets
Tool | Function |
| Lists datasets with pagination and optional search/filter parameters. |
| Fetches dataset details by ID. |
| Creates a dataset entry. |
| Updates dataset metadata. |
| Deletes a dataset by ID. |
Documents
Tool | Function |
| Lists documents with pagination and optional search/filter parameters. |
| Fetches document details by ID. |
| Creates a document entry. |
| Updates document metadata. |
| Deletes a document by ID. |
Maps
Tool | Function |
| Lists maps with pagination and optional search/filter parameters. |
| Fetches map details by ID. |
| Creates a map entry. |
| Updates map metadata. |
| Deletes a map by ID. |
Users and Groups
Tool | Function |
| Lists users by name, username, or email. |
| Fetches user details by ID. |
| Resolves the groups associated with a user by ID or exact username. |
| Updates supported user fields, currently first name and last name. |
| Lists GeoNode groups. |
| Fetches group details by ID. |
User and Group Workflows
Tool | Function |
| Creates or reuses a GeoNode group by slug. |
| Creates or reuses users from structured JSON input and can set a shared password with explicit confirmation. |
| Adds existing users to a group and verifies membership after the update. |
| Creates or reuses a group and users, optionally sets passwords, and adds the users to the group. |
| Counts owned datasets, documents, maps, and dashboards for selected users using |
| Splits group users into users with and without owned resources, with optional email-domain filtering. |
| Deletes only explicitly listed users after fail-closed safety checks for confirmation, group membership, staff status, and owned resources. |
Catalog Lookups
Tool | Function |
| Lists GeoNode categories. |
| Lists keywords, optionally filtered by search text. |
| Lists regions, optionally filtered by name or code. |
| Lists resource owners, optionally filtered by search text. |
Compatibility
Supported today:
GeoNode
4.xwith APIv2GeoNode
5.xwith APIv2
Default runtime values:
GEONODE_VERSION=5GEONODE_API_VERSION=v2
Local Installation
Requirements
Python
3.10+Access to a GeoNode instance
GeoNode credentials if you need authenticated operations
1. Clone the repository
git clone <your-repo-url>
cd mcp-geonode-api2. Create a virtual environment
python3 -m venv .venv
source .venv/bin/activate3. Install the package locally
For normal usage:
pip install -e .For development, including linting and tests:
pip install -e ".[dev]"4. Set environment variables
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"Optional override:
export GEONODE_API_BASE_PATH="/api/v2"Use GEONODE_API_BASE_PATH only if your deployment exposes the API under a custom path.
5. Run the server locally
python -m geonode_mcpThis starts the MCP server over stdio, which is what local MCP clients expect.
Configuration Reference
Environment variables
GEONODE_URL: GeoNode base URL, without a trailing slash preferredGEONODE_USER: username for Basic AuthGEONODE_PASSWORD: password for Basic AuthGEONODE_VERSION: GeoNode major version, currently4or5GEONODE_API_VERSION: API version, currentlyv2GEONODE_API_BASE_PATH: optional explicit API path override
Recommended values
For most GeoNode 5 deployments:
GEONODE_VERSION=5
GEONODE_API_VERSION=v2For most GeoNode 4 deployments:
GEONODE_VERSION=4
GEONODE_API_VERSION=v2Detecting the Correct Version Settings
The MCP includes a discovery tool named geonode_detect_instance.
Its purpose is to inspect a GeoNode instance URL and suggest which values should be used for:
GEONODE_URLGEONODE_VERSIONGEONODE_API_VERSION
This is a best-effort detection flow. In practice:
API version detection is usually reliable when
/api/v2/resources/is reachableexact GeoNode major version detection depends on whether the instance exposes version hints in HTML, headers, or static files
Tool name
geonode_detect_instanceInput parameters
url: base URL of the GeoNode instance, or even a known API URLusername: optional Basic Auth username for probing protected instancespassword: optional Basic Auth password for probing protected instancestimeout: optional timeout in secondsresponse_format:jsonormarkdown
Example call
{
"url": "https://your-geonode.example.com",
"response_format": "json"
}You can also pass an API URL directly:
{
"url": "https://your-geonode.example.com/api/v2/resources/",
"response_format": "json"
}Example response
{
"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"
}
}Recommended usage
Run
geonode_detect_instanceagainst the target URL.Copy the returned recommended settings into your MCP client configuration.
If
GEONODE_VERSIONis returned asundeterminedornull, keep the detectedGEONODE_API_VERSIONand confirm the GeoNode major version manually.
Looking Up a User's Groups
The MCP includes a dedicated tool named geonode_get_user_groups.
Use it when you need to answer questions such as:
"Which group does user
my-userbelong to?""List the groups for a given user"
"Resolve user membership by username without manually browsing users and groups"
Tool name
geonode_get_user_groupsInput parameters
user_id: optional user numeric IDusername: optional exact username when the user ID is not knownresponse_format:jsonormarkdown
You must provide either user_id or username.
Example call by username
{
"username": "my-user",
"response_format": "json"
}Example response
{
"user": {
"pk": 1317,
"username": "my-user"
},
"groups": [
{
"pk": 59,
"title": "GRUPO_ACOES_RS",
"group": {
"name": "ROLE_GRUPO_ACOES_RS"
}
}
]
}Why this tool exists
Without this tool, answering "which group does this user belong to?" is unnecessarily awkward:
geonode_list_usersis for discovery, not exact membership lookupgeonode_get_userdoes not expose group membership directlygeonode_list_groupsis not optimized for reverse lookup by user
geonode_get_user_groups solves that directly by:
resolving the user by exact username when needed
calling the user-to-groups endpoint
returning the membership list in one step
Generating Ready-to-Use MCP Client Config
The MCP also includes a helper tool named geonode_generate_mcp_config.
This tool combines:
instance detection from the provided URL
recommended
GEONODE_*settingsa ready-to-paste MCP snippet for one target client
Tool name
geonode_generate_mcp_configInput parameters
client: one ofcodex,cursor,opencode,claude_codeurl: base URL of the GeoNode instance, or a known API URLusername: optional Basic Auth usernamepassword: optional Basic Auth passwordgeonode_version: optional manual overrideapi_version: optional manual overrideserver_name: optional MCP server name, defaultgeonodepython_command: Python executable path used to startpython -m geonode_mcpresponse_format:markdownorjson
Example call
{
"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"
}Example usage flow
Run
geonode_generate_mcp_config.Copy the generated snippet into the config file suggested by the response.
If needed, replace
GEONODE_PASSWORDwith your preferred secret-management pattern.
When to use each tool
Use
geonode_detect_instanceif you only want to inspect a GeoNode URL and understand the inferred compatibility.Use
geonode_generate_mcp_configif you want the final client snippet immediately.Use
geonode_write_mcp_configif you want the MCP to update the target config file for you.Use
geonode_verify_mcp_configafter writing to confirm the file and command are valid.Use
geonode_bootstrap_mcp_configif you want the full flow in one step.
One-Step Bootstrap
The MCP also provides geonode_bootstrap_mcp_config.
This is the highest-level helper. It:
detects the target GeoNode instance
resolves the recommended
GEONODE_*settingswrites the client config file
optionally verifies the final result
Tool name
geonode_bootstrap_mcp_configInput parameters
client: one ofcodex,cursor,opencode,claude_codeurl: base URL of the GeoNode instance, or a known API URLconfig_path: file to create or updateusername: optional Basic Auth usernamepassword: optional Basic Auth passwordgeonode_version: optional manual overrideapi_version: optional manual overrideserver_name: optional MCP server name, defaultgeonodepython_command: Python executable path used to startpython -m geonode_mcpcreate_parent_dirs: create missing parent directories automaticallyverify_after_write: validate the file after writing, defaulttrueresponse_format:markdownorjson
Example call
{
"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"
}Recommended default workflow
For most users, geonode_bootstrap_mcp_config should be the default choice.
Why the lower-level tools still exist
The other tools are still useful and should remain:
geonode_detect_instance: best for diagnosis and understanding what the server exposesgeonode_generate_mcp_config: best when you want to review the snippet before touching filesgeonode_write_mcp_config: best when writing should happen without verification, or when verification must be separatedgeonode_verify_mcp_config: best for CI, troubleshooting, or validating an already existing config file
So after bootstrap exists, the lower-level tools are still justified. They are not redundant; they support review, debugging, and partial workflows.
Writing MCP Client Config Files Automatically
The MCP also provides geonode_write_mcp_config.
This tool:
detects the instance settings from the URL
generates the correct client configuration
writes or updates the target local config file
Tool name
geonode_write_mcp_configInput parameters
client: one ofcodex,cursor,opencode,claude_codeurl: base URL of the GeoNode instance, or a known API URLconfig_path: file to create or updateusername: optional Basic Auth usernamepassword: optional Basic Auth passwordgeonode_version: optional manual overrideapi_version: optional manual overrideserver_name: optional MCP server name, defaultgeonodepython_command: Python executable path used to startpython -m geonode_mcpcreate_parent_dirs: create missing parent directories automaticallyresponse_format:markdownorjson
Example call
{
"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"
}What it updates
For
cursorandclaude_code, it updates themcpServersentry for the selected server name.For
opencode, it updates themcpentry for the selected server name.For
codex, it updates the matching[mcp_servers.<name>]and[mcp_servers.<name>.env]TOML blocks.
Recommended usage
For the fastest setup, use
geonode_bootstrap_mcp_config.If you want a staged flow, use
geonode_generate_mcp_config, thengeonode_write_mcp_config, thengeonode_verify_mcp_config.Re-run the relevant tool whenever the GeoNode URL, credentials, or Python path changes.
Verifying a Written MCP Config File
The MCP also provides geonode_verify_mcp_config.
This tool validates:
that the target file exists
that the expected server entry is present
that the file shape matches the selected client
that the configured executable exists
that
python -m geonode_mcpcan at least import the package when the command matches that pattern
Tool name
geonode_verify_mcp_configInput parameters
client: one ofcodex,cursor,opencode,claude_codeconfig_path: file to validateserver_name: MCP server name to inspect, defaultgeonoderesponse_format:markdownorjson
Example call
{
"client": "cursor",
"config_path": "/Users/you/.cursor/mcp.json",
"server_name": "geonode",
"response_format": "json"
}Recommended usage flow
Run
geonode_write_mcp_config.Run
geonode_verify_mcp_config.If verification fails, inspect the returned checks and correct the command path, environment, or file location.
MCP Client Setup
The examples below assume:
the repository lives at
/path/to/mcp-geonode-apithe virtual environment lives at
/path/to/mcp-geonode-api/.venv
Adjust those paths to your machine.
Codex
If you want the MCP to generate this automatically, call geonode_generate_mcp_config with "client": "codex".
If you want it to write the file directly, use geonode_write_mcp_config with config_path="~/.codex/config.toml".
OpenAI documents MCP configuration in ~/.codex/config.toml. The mcp_servers table is documented for Codex; the local stdio example below follows that same structure for this server.
File: ~/.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"If you prefer a project-specific setup, keep the same command and environment values in the Codex configuration you use for that workspace.
Cursor
If you want the MCP to generate this automatically, call geonode_generate_mcp_config with "client": "cursor".
If you want it to write the file directly, use geonode_write_mcp_config with config_path="~/.cursor/mcp.json" or a project .cursor/mcp.json.
Cursor supports MCP via mcp.json. You can configure it globally in ~/.cursor/mcp.json or per project in .cursor/mcp.json.
File: .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"
}
}
}
}You can also use Cursor variable interpolation if needed, for example ${workspaceFolder} or ${env:GEONODE_PASSWORD}.
OpenCode
If you want the MCP to generate this automatically, call geonode_generate_mcp_config with "client": "opencode".
If you want it to write the file directly, use geonode_write_mcp_config with config_path="~/.config/opencode/opencode.json" or a project opencode.json.
OpenCode loads config from ~/.config/opencode/opencode.json globally or opencode.json in the project root.
File: 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"
}
}
}
}Claude Code
If you want the MCP to generate this automatically, call geonode_generate_mcp_config with "client": "claude_code".
If you want it to write the file directly, use geonode_write_mcp_config with config_path=".mcp.json" or another Claude Code MCP file path.
Claude Code supports local stdio MCP servers directly from the CLI and can also store project-scoped configuration in .mcp.json.
Option 1: add it with the 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_mcpFor a shared project configuration:
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_mcpOption 2: configure .mcp.json manually
File: .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"
}
}
}
}Recommended Setup Strategy
Use this layout if you want stable local development:
Install the package in a project-local virtual environment.
Point your MCP client to that virtualenv Python executable.
Keep secrets in environment variables or client-side secret storage where possible.
Set
GEONODE_VERSIONexplicitly even when using defaults.Only override
GEONODE_API_BASE_PATHif your deployment is non-standard.
Development
Run checks:
ruff check .
python3 -m mypy src
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest -qPYTEST_DISABLE_PLUGIN_AUTOLOAD=1 is recommended if your machine has unrelated global pytest plugins installed.
Why Versioning Is Implemented This Way
GeoNode 4.x and 5.x still document the primary REST API under /api/v2. Because of that, this project does not map GeoNode product versions directly to a new REST prefix. Instead, it:
reads the GeoNode version from configuration
reads the API version from configuration
resolves the actual route set through a compatibility layer
That design keeps the tool surface stable and makes future version support much easier to add.
Sources
OpenAI Codex MCP docs: developers.openai.com/learn/docs-mcp
Cursor MCP docs: docs.cursor.com/advanced/model-context-protocol
Claude Code MCP docs: code.claude.com/docs/en/mcp
OpenCode MCP docs: opencode.ai/docs/mcp-servers
OpenCode config locations: opencode.ai/docs/config
GeoNode developer API docs: docs.geonode.org/en/5.0.x/devel/api/usage/index.html
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/davicustodio/mcp-geonode-api'
If you have feedback or need assistance with the MCP directory API, please join our Discord server