MCP Server
Give AI agents typed tools for Every.Farm and the Crop Picker with the everyfarm-mcp Model Context Protocol server: install, configure a token, the tool list, and the safety boundary.
everyfarm-mcp is a Model Context Protocol server that exposes Every.Farm and the public Crop Picker catalog as tools an AI agent can call from Claude, Cursor, Claude Code or any MCP-capable client.
It is a thin wrapper over the Developer API: authentication, farm scoping, scopes, rate limits and the rule that a person publishes robot missions all stay in the API. The server only turns endpoints into typed tools and calls through with your own token.
#Install
- Create a token in Every.Farm (account menu → API Tokens). Read scope is enough for everything except the two write tools; restrict the token to the farms the agent should see.
- Add the server to your client:
{
"mcpServers": {
"everyfarm": {
"command": "npx",
"args": ["-y", "everyfarm-mcp"],
"env": { "EVERYFARM_TOKEN": "efv_..." }
}
}
}Claude Code one-liner:
claude mcp add everyfarm -e EVERYFARM_TOKEN=efv_... -- npx -y everyfarm-mcpWithout a token the Crop Picker tools still work, because that API is public; the farm tools answer with instructions for getting one.
#Tools
| Area | Tools |
|---|---|
| Farms & blocks | list_farms, get_farm, list_blocks, get_block, list_block_headers, get_block_values |
| Datasets | list_datasets, list_folders, get_dataset, get_dataset_geojson (summary by default; full=true for every feature) |
| Collectors | list_collectors, get_collector, list_datapoints |
| Satellite | list_satellite_collections, list_analysis_recipes, list_vector_indices, search_scenes, get_analysis |
| Missions & alerts | list_missions, get_mission_waypoints, list_robot_events |
| Writes (the only two) | create_draft_mission — always a draft; a person publishes it in the Missions plugin · acknowledge_robot_event |
| Escape hatch | api_describe returns the live manifest · api_get calls any read endpoint in it; writes are refused |
| Crop Picker | crops_recommend (match crops to a farm's conditions), crops_search, crops_get, crops_fit, crops_compare, crops_sources, crops_interactions, crops_meta, crops_regions |
Resources: everyfarm://manifest, everyfarm://llms.txt, everyfarm://safety.
Note: results are capped at 60,000 characters with a note, and
get_dataset_geojsonsummarises large layers (feature count, geometry types, bounding box, property keys and a few sample features) unless asked for everything.
#What it will never do
Command robot motion, publish, claim or complete missions, post robot events, edit or delete farm data, or step around the token's scopes and farm restrictions. Robots own stop; Every.Farm dispatches and reports. Anything an agent needs beyond this is a REST route and a product decision first, never a tool added here on its own.
#A typical agent session
list_farms→ farm id.list_datasets→ find the RTK line for the rows to drive;get_dataset_geojson(summary) confirmssingleLine: trueand the waypoint count.create_draft_missionwith that dataset → the draft appears in the Missions plugin.- A person reviews the START/END preview and publishes. The robot claims it on its next poll.
list_missionsandlist_robot_eventsto follow progress and alerts;acknowledge_robot_eventonce handled.
Updated
Something missing or out of date? Tell us — the docs are updated with every release.