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

  1. 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.
  2. 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-mcp

Without 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_geojson summarises 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

  1. list_farms → farm id.
  2. list_datasets → find the RTK line for the rows to drive; get_dataset_geojson (summary) confirms singleLine: true and the waypoint count.
  3. create_draft_mission with that dataset → the draft appears in the Missions plugin.
  4. A person reviews the START/END preview and publishes. The robot claims it on its next poll.
  5. list_missions and list_robot_events to follow progress and alerts; acknowledge_robot_event once handled.

Updated

Something missing or out of date? Tell us — the docs are updated with every release.