Skip to main content
Glama
CoreyFransen08

John Deere Operations Center MCP Server

John Deere Operations Center MCP Server

A remote MCP server hosted on Cloudflare Workers that connects to John Deere Operations Center. Browse organizations, fields, field operations, equipment, work plans, and more via any MCP-compatible client (Claude Desktop, Cursor, etc.).

Architecture

The server runs as a Cloudflare Worker with a Durable Object (McpAgent) providing stateful MCP sessions. Authentication uses a double OAuth proxy pattern:

  • Downstream: The Worker is an OAuth server to MCP clients

  • Upstream: The Worker is an OAuth client to John Deere

This means authentication happens at the transport layer — no manual auth tool call is needed.

Setup

Prerequisites

git clone <repo-url>
cd john-deere-ops-center
npm run setup

The interactive setup script (scripts/setup.mjs) will walk you through every step:

  1. Install dependencies — runs npm install

  2. Cloudflare login — runs wrangler login in your browser

  3. Create KV namespace — creates the OAUTH_KV namespace and patches its ID into wrangler.jsonc automatically

  4. Enter credentials — prompts for your John Deere Application ID (JD_CLIENT_ID) and Secret (JD_CLIENT_SECRET), then pushes them as Cloudflare secrets along with an auto-generated COOKIE_ENCRYPTION_KEY

  5. Deploy — runs wrangler deploy and prints your Worker URL

At the end of setup, the script prints:

MCP endpoint:   https://<worker>.<subdomain>.workers.dev/mcp
Redirect URI:   https://<worker>.<subdomain>.workers.dev/callback

Register the redirect URI at developer.deere.com under My Applications → your app → Redirect URIs before attempting to authenticate.

First login: After signing in with John Deere, you will be prompted to connect your Operations Center organization to the application. This is a required one-time step — the server detects it automatically and redirects you to connections.deere.com to complete the selection. See docs/oauth2-flow.md for details.

Manual setup

If you prefer to run each step yourself:

npm install
npx wrangler login
npx wrangler kv namespace create OAUTH_KV   # paste the id into wrangler.jsonc
npx wrangler secret put JD_CLIENT_ID
npx wrangler secret put JD_CLIENT_SECRET
npx wrangler secret put COOKIE_ENCRYPTION_KEY
npm run deploy

Register your application at developer.deere.com and add https://<worker>.<subdomain>.workers.dev/callback as a redirect URI.

For local development, copy .dev.vars.example to .dev.vars and fill in the values.

Connect an MCP Client

Add to your MCP client config (e.g. Claude Desktop claude_desktop_config.json):

{
  "mcpServers": {
    "john-deere": {
      "command": "npx",
      "args": ["mcp-remote", "https://<worker>.<subdomain>.workers.dev/mcp"]
    }
  }
}

Tools

Organizations & Fields

Tool

Description

jd_list_organizations

List all accessible organizations

jd_list_fields

List all fields for an organization

jd_get_field

Get field details including boundaries

jd_list_field_operations

List planting, harvest, and application operations for a field

Work Plans

Tool

Description

jd_list_work_plans

List work plans for an organization

jd_get_work_plan

Get a single work plan by ERID

jd_create_work_plan

Create a planned work plan

Equipment & Machine Health

Tool

Description

jd_list_equipment

List equipment for an organization

jd_get_equipment

Get equipment details by ID

jd_get_machine_alerts

Get machine diagnostic and maintenance alerts

jd_get_machine_engine_hours

Get engine hour readings

jd_get_machine_hours_of_operation

Get engine state and operation history

jd_get_machine_location_history

Get location history or last known position

jd_get_machine_device_state_reports

Get terminal and connectivity diagnostics

Reference Data

Tool

Description

jd_list_products

List products (chemicals, fertilizers, varieties, etc.) for use in work plans

jd_list_operators

List operators available for work plan assignment

jd_list_guidance_lines

List guidance lines for a field

jd_get_guidance_line

Get a specific guidance line

Commands

Command

Description

/jd-fields [org]

Browse fields in an organization

/jd-ops [field]

View field operations data

/jd-equipment [org]

Browse equipment and machine health

/jd-work-plans [org]

View and manage work plans

/jd-machine-health [machine]

Check machine alerts and hours

/jd-guidance-lines [field]

View guidance lines for a field

Local Development

cp .dev.vars.example .dev.vars
# Fill in JD_CLIENT_ID, JD_CLIENT_SECRET, COOKIE_ENCRYPTION_KEY
npm run dev

Test with the MCP Inspector:

npx @modelcontextprotocol/inspector@latest

Connect to http://localhost:8787/mcp.

Transport Type: Streamable HTTP Connection Type: Direct

Environment

This targets the John Deere Sandbox (sandboxapi.deere.com). Sandbox limits:

  • Max 5 connected organizations

  • Max 150,000 API calls/month

  • 18-month maximum sandbox duration

For production access, apply through the John Deere developer portal.

Required OAuth Scopes

The following scopes are requested automatically during the OAuth flow:

Scope

Purpose

ag1

View fields, farms, and clients

ag2

Analyze production data

ag3

Manage locations and production data

eq1

View equipment

eq2

View detailed machine measurements

org1

View staff, operators, and partners

org2

Modify staff, operators, and partners

work1

View work and crop plans

work2

Create and manage work and crop plans

files

Files API access

offline_access

Refresh token (prevents re-authentication every 12 hours)

F
license - not found
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

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/CoreyFransen08/john-deere-ops-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server