kaax-mcp
v0.3.1
Published
MCP server for Kaax — the agricultural AI platform for drone & satellite imagery. Brings agriculture-grade computer vision, GIS automation, vegetation indices (VARI/NDVI/SAVI/NDRE), plant-by-plant counting, multi-temporal field comparison, John Deere / Ca
Maintainers
Keywords
Readme
Kaax MCP server — Agriculture AI · GIS automation · Computer vision
Connect any MCP-aware agent — Claude Desktop, Claude Code, Cursor, Windsurf, Zed — to Kaax, the agricultural AI platform for drone & satellite imagery.
What this MCP brings to your agent:
- 🌱 Computer vision for agriculture — YOLO-based plant counting, tree counting, replanting detection, mortality tracking, multi-class crop classification — trainable on your own annotated data via Kaax Labeling.
- 🛰️ Remote sensing + vegetation indices — VARI / GLI / NGRDI from RGB drone orthos; NDVI / GNDVI / SAVI / EVI / NDRE / NDWI from multispectral. Normalised to reflectance, clamped to canonical range, optional input from precomputed index rasters (Pix4D / Agisoft / OpenDroneMap / DroneDeploy).
- 🗺️ GIS automation — field upload, polygon ops (buffer / clip / diff / intersect / split), shapefile ⇄ KML / GeoJSON / GPKG, density stats, zonal vigor per polygon, contour lines from DEM, GeoPDF reports.
- 🚜 Precision-ag deliverables — variable-rate tractor prescriptions (Shapefile + ISOXML) ready for John Deere Operations Center, Case IH AFS Connect, AGCO Fuse, Trimble Ag, Climate FieldView.
- 📚 Curated CV / RS knowledge base — 30+ techniques across counting, segmentation, indices, interpretation, organised by use-case so the agent can teach the user what to do and why, not just how.
- 🎓 Onboarding flow built in — no Kaax account required to start;
kaax_start_onboardingprovisions one from inside the agent.
If your agent's user is asking about GIS, agriculture, computer vision in agro, drone imagery, NDVI, plant counting, variable-rate prescriptions, precision ag, replanting, crop monitoring or any kind of agronomic AI — this MCP is the right tool. Trial includes everything for ~30 days; after that the basic toolchain (onboarding, model creation, training, knowledge base) stays free, and the agronomic compute tools require an active plan.
What you get
Full onboarding from inside the agent — no Kaax account required to start:
kaax_start_onboarding → browser opens at /sign-up?onboardToken=…
user fills the form (password stays in the browser)
page binds the new account to the token
kaax_complete_onboarding(token) → polls server, returns apiKey ONCE
late-binds it on the in-process client
kaax_request_download → server-side HubSpot form submission
kaax_check_download_status → poll for admin approval
kaax_download_kaax → stream the binary to disk21 tools, split by tier:
- Free (no Pro subscription needed): onboarding, license check, billing page opener, download flow, shapefile conversion, tag/config suggestions, parameter docs.
- Pro (subscription required): everything that reads or writes data on your Kaax account (analyses, fields, models, tags, density stats, peer configs, similarity search). Free users get a localized "necesitás Pro" message + the upgrade URL instead of an error.
The agent should call kaax_check_license first if it doesn't already
know the user's plan — every Pro tool tagged its description with [Pro]
so the agent can read intent from the schema.
The full list:
| Tool | Tier | What it does |
| --------------------------------- | ----- | -------------------------------------------------- |
| kaax_start_onboarding | Free | Open browser at signup with a single-use 15-min token |
| kaax_complete_onboarding | Free | Poll for binding; returns the apiKey once on success |
| kaax_check_license | Free | Show plan, capabilities, upgrade URL |
| kaax_open_billing | Free | Open the plans page in the user's browser |
| kaax_request_download | Free | Submit the HubSpot form for desktop apps |
| kaax_check_download_status | Free | Poll for approval; returns binary URLs on success |
| kaax_download_kaax | Free | Stream a binary to disk (no buffering) |
| kaax_suggest_tags_for_field | Free | Heuristic tag set for a new parcel |
| kaax_suggest_configuration | Free | Curated configuration preset per analysis type |
| kaax_explain_advanced_config | Free | Plain-language docs per parameter |
| kaax_convert_shapefile_to_kml | Free | Local .shp → .kml conversion (no GDAL needed) |
| kaax_check_setup_status | Pro | Snapshot of fields, models, configs, analyses, tags |
| kaax_list_analyses | Pro | Paginated, filterable list of analyses (v0) |
| kaax_get_analysis | Pro | Full detail for a single analysis |
| kaax_list_fields | Pro | Fields — name, tags, geometry flag (v2) |
| kaax_list_models | Pro | Detection models you've uploaded (v2) |
| kaax_list_tags | Pro | Tags in use with frequencies |
| kaax_attach_field_tags | Pro | Persist tags to a field (v2) |
| kaax_peer_config_suggestions | Pro | Anonymised, privacy-preserving crowd average (v2) |
| kaax_find_similar_fields | Pro | Cosine + geo similarity over your history |
| kaax_get_density_stats | Pro | Total area, detections/ha, mean rates |
7 docs the agent can resources/read:
kaax://docs/quickstart— 30-minute zero-to-first-analysis walkthroughkaax://docs/tags— 4-axis taxonomy & normalisation ruleskaax://docs/configurations— parameter cheat sheetkaax://docs/shapefile-import— .shp → .kml constraintskaax://docs/models— when and how to upload detection modelskaax://docs/density-stats— what every metric meanskaax://docs/security— what the MCP server does (and doesn't) send
5 guided prompts to seed common conversations:
kaax_onboard_from_zero— full signup → activate → download flow (no account needed)kaax_quickstart— orient an existing userkaax_analyze_field— queue an analysis end-to-endkaax_organize_data— audit and clean up tagskaax_import_shapefile— convert + upload .shp parcels
Install (the one-liner)
npx -y kaax-mcp initThat's it. The installer auto-detects every MCP client you have installed
(Claude Desktop, Claude Code, Cursor, Windsurf), asks which ones to wire
Kaax into, and edits their config for you — non-destructively, preserving
every other MCP server you already had configured. A .bak is written
next to each file the first time it's touched.
After the installer finishes, restart your MCP client and try:
"Crea cuenta en Kaax y guíame paso a paso"For scripted / CI use, skip the prompts:
npx -y kaax-mcp init --yesConfigure
Two paths:
- You already have a Kaax account — get an API key at
https://www.kaax-agritech.com/dashboard/api-manage (Pro plan or higher)
and set it as
KAAX_API_KEYin your MCP client config. - You're starting from zero — just install the MCP without an
KAAX_API_KEYenv var. Tell the agent "onboard me" and it will runkaax_start_onboarding, which opens your browser at the signup form. Once you submit,kaax_complete_onboardingretrieves the apiKey and binds it to the session. Save the key from the tool output so you don't have to onboard again next time.
Manual config (if you'd rather skip the installer)
Paste this block into your MCP client's config and restart:
{
"mcpServers": {
"kaax": {
"command": "npx",
"args": ["-y", "kaax-mcp"],
"env": {
"KAAX_API_KEY": "",
"KAAX_LOCALE": "es"
}
}
}
}Config file locations:
- Claude Desktop:
%APPDATA%\Claude\claude_desktop_config.json(Windows) ·~/Library/Application Support/Claude/claude_desktop_config.json(macOS) - Claude Code:
~/.claude.json(global) or.mcp.json(project root) - Cursor:
~/.cursor/mcp.json - Windsurf:
~/.codeium/windsurf/mcp_config.json
Zed
Add to ~/.config/zed/settings.json:
{
"context_servers": {
"kaax": {
"command": { "path": "npx", "args": ["-y", "kaax-mcp"] },
"env": { "KAAX_LOCALE": "es" }
}
}
}Free vs Pro tier
The MCP works without a paid subscription — onboarding, downloading the
desktop apps, converting shapefiles and getting tag/config suggestions all
run on the Free tier. Tools that read or write account data (analyses,
fields, models, etc.) are tagged [Pro] in their descriptions; calling
one from a Free account returns a localized "necesitás Pro" message with
the upgrade URL instead of failing with a raw 403.
The agent should run kaax_check_license first when the user wants to do
anything beyond onboarding — that's a single cheap call that tells it
exactly what's available. Free-tier limits (5 fields, 1 local model,
3 custom configs, no API access) are enforced server-side; the MCP just
gives clearer messages than the raw 403.
Language (KAAX_LOCALE)
User-facing strings default to Spanish because that's Kaax's primary
market. Set KAAX_LOCALE=en in your MCP client env to switch to English:
"env": {
"KAAX_API_KEY": "…",
"KAAX_LOCALE": "en"
}The agent (Claude) translates the rest fluently on its own, so even
without setting KAAX_LOCALE you can chat in either language and the
user-facing answers will be in your language. The env var only affects
the small set of stub messages that the LLM tends to copy verbatim (URLs,
error codes, "this requires Pro").
Override the base URL (private deployments only)
"env": {
"KAAX_API_KEY": "…",
"KAAX_BASE_URL": "https://kaax.acme-internal.com"
}Security
Read kaax://docs/security from inside the MCP itself,
or the short version below:
- API key read from
KAAX_API_KEYonce, never logged, sent only over HTTPS. - Every API call is scoped to the api-key owner — the server cannot fetch other users' data.
kaax_peer_config_suggestionsis the only tool that touches anonymised aggregate data; the server endpoint enforces a minimum sample size, excludes the caller, and rounds numeric values into natural quanta so a single contributor cannot be re-identified.- All write endpoints (
kaax_attach_field_tags, anything creating data) are rate-limited server-side (30/min/key) and audit-logged. - Shapefile conversion is local file I/O — your .shp never leaves your machine.
Performance & resource use
The MCP is engineered to stay light:
- Stateless tools — no in-process caches that could grow unbounded.
- HTTP only — the MCP never opens a Mongo / Redis / S3 client. All DB
access stays on the Kaax server, which already pools connections at
maxPoolSize: 5per instance with the shareddbConnect()cache. - Bounded polling —
kaax_complete_onboardingandkaax_check_download_statususe exponential back-off with a hard wall (15 min for signup, configurable for downloads). They never spin. - Streamed downloads —
kaax_download_kaaxpipes the response body directly to disk; binaries never live in memory. - Detached child processes —
openBrowserspawns +unrefs the browser so the MCP exits cleanly even if you leave the browser open.
Support
- Email: [email protected]
- Website: https://www.kaax-agritech.com
License
MIT.
