Skip to main content
Glama
vanantwerp

Deere Ops Center MCP

by vanantwerp

Deere Ops Center MCP

Deere Ops Center MCP lets an AI assistant such as Claude read your John Deere Operations Center data: your fields and boundaries, each tillage, planting, application and harvest pass with its totals, your machines and their health, plus the products, operators, guidance lines and work plans behind them. It runs on your own computer. It can only read; it cannot change anything in Operations Center.


What you need

  1. A John Deere Operations Center account with access to at least one organization.

  2. A free John Deere developer application. It gives you two codes that let the tool sign in on your behalf. Step 1 explains how.

  3. A computer running Windows, macOS or Linux.

  4. An AI app that supports MCP, the standard AI apps use to connect to tools like this one. Claude Desktop (the Claude app for Windows and macOS) and Claude Code (Claude's command-line tool) both do.

  5. uv, a free helper program that downloads and runs this tool. Installing it is one command, shown in each quick start. uvx is the part of uv that runs a tool.


Related MCP server: VFS DMS ChatGPT Plugin

Step 1: Create your John Deere application

The same on every platform. You do it once.

  1. Sign in at developer.deere.com with your John Deere account.

  2. Open My Applications and click Create Application. Accept the API Development License Agreement when it is shown.

  3. Fill in the application details. Deere asks for a real name rather than "test", for example your farm's name, and a one-line description such as "Reads my Operations Center data for analysis".

  4. For the Redirect URI, enter exactly:

    http://localhost:9090/callback

    It must match character for character. It only works on your own computer; it is how John Deere hands the sign-in back to the tool.

  5. Click Next. Deere now offers to request API access. You can do it here, or later from the application's page (My Applications, View Details, the Access tab, Request Access). In that screen, choose Precision Tech on the left, tick a category to list its APIs, expand each API below and tick only the permission named. Every one of them is a read permission; tick nothing marked Write or Delete.

    Category

    API

    Permission to tick

    Organization/User

    Operations Center - Organizations

    Organizations Read

    Setup/Plan

    Operations Center - Fields

    Fields Read

    Setup/Plan

    Operations Center - Boundaries

    Boundaries Read

    Work Results

    Operations Center - Field Operations

    Field Operations Read and Field Operations Export Read

    Equipment

    Operations Center - Equipment

    Equipment Read

    Equipment

    Operations Center - Machine Alerts

    Alerts Read

    Equipment

    Operations Center - Machine Engine Hours

    Engine Hours Read

    Equipment

    Operations Center - Machine Hours Of Operation

    Hours Of Operation Read

    Equipment

    Operations Center - Machine Locations

    Location History Read

    Equipment

    Operations Center - Machine Device State Reports

    Device State Reports Read

    Setup/Plan

    Operations Center - Work Plans

    Workplans Read

    Setup/Plan

    Operations Center - Operators

    Operators Read

    Setup/Plan

    Operations Center - Products

    Products Read

    Setup/Plan

    Operations Center - Guidance Lines

    Guidance Lines Read

    Deere asks for a written business use case before granting Work Plans. Skip it if you do not use work plans in Operations Center; nothing else depends on it. If you want it, Deere emails you after you request it, and this answers the questions it asks:

    The application is a read-only connector that lets a grower view their own Operations Center data in an AI assistant running on their own computer. Work Plans access is read-only (Workplans Read): it lists and displays the organization's existing work plans next to its fields and field operations, so the grower can compare what was planned with what was done. It does not create, edit, assign or execute work plans and cannot write anything to Operations Center. No plans are created through the application, by a grower or by a service provider; plans continue to be created in Operations Center as today.

    Request nothing else. The requests show as Pending on the Access tab until Deere approves them, which can take up to a day, and an approval takes a few more minutes to reach the API. You can finish Step 2 meanwhile. Once the requests show as approved, run the login command from Everyday use once more: that is when John Deere asks which of your organizations the application may see. Until then every request is refused with "403 Forbidden".

  6. Open the application's View Details page. Its Security section shows the Application ID and the Secret. Keep both for Step 2. Treat the Secret like a password.

New applications run against John Deere's sandbox, which uses your real organizations and data. Deere limits how long an application may stay in the sandbox (six months at the time of writing) and how much it may call; after that you ask Deere to move it to production or to grant an exception. See Deere's getting started page for the current rules.


Step 2: Quick start on macOS

  1. Install uv. Open Terminal (press Command+Space, type Terminal, press Return). Paste this line and press Return:

    curl -LsSf https://astral.sh/uv/install.sh | sh

    Close Terminal and open it again. If you use Homebrew, brew install uv also works.

  2. Run setup. Paste this and press Return:

    uvx --from https://github.com/vanantwerp/deere-ops-center-mcp/archive/refs/heads/main.zip deere-mcp setup

    The first run downloads the tool. Setup then:

    • asks for your Application ID, then your Secret. Paste each and press Return. The Secret does not show as you paste it.

    • opens your browser to sign in to John Deere. Once Deere has approved the API access, John Deere also asks which of your organizations the application may see. Choose them and confirm.

    • asks Add the server to Claude Desktop? [Y/n]. Press Return for yes.

    • if Claude Code is installed, asks Also add it to Claude Code? [Y/n]. Press Return for yes, or type n and Return.

    It ends with Signed in. Quit and reopen Claude Desktop to finish. If it ends with only Signed in., it did not find Claude Desktop: see Manual configuration, then continue with step 4.

  3. Quit and reopen Claude Desktop. Closing the window is not enough. In the menu bar choose Claude, then Quit Claude (Command+Q), and open it again.

  4. Try it. Ask Claude: "List my John Deere organizations."


Step 2: Quick start on Windows

  1. Install uv. Open PowerShell (click Start, type PowerShell, choose Windows PowerShell). Paste this line and press Enter. To paste, press Ctrl+V or right-click in the window.

    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

    Close PowerShell and open it again. winget install --id=astral-sh.uv -e does the same if you prefer.

  2. Run setup. Paste this and press Enter:

    uvx --from https://github.com/vanantwerp/deere-ops-center-mcp/archive/refs/heads/main.zip deere-mcp setup

    The first run downloads the tool. Setup then:

    • asks for your Application ID, then your Secret. Paste each and press Enter. The Secret does not show as you paste it.

    • opens your browser to sign in to John Deere. Once Deere has approved the API access, John Deere also asks which of your organizations the application may see. Choose them and confirm.

    • asks Add the server to Claude Desktop? [Y/n]. Press Enter for yes.

    • if Claude Code is installed, asks Also add it to Claude Code? [Y/n]. Press Enter for yes, or type n and Enter.

    It ends with Signed in. Quit and reopen Claude Desktop to finish. If it ends with only Signed in., it did not find Claude Desktop: see Manual configuration, then continue with step 4.

  3. Quit and reopen Claude Desktop. Closing the window is not enough. Right-click the Claude icon at the right end of the taskbar (click the small up arrow there if it is hidden) and choose Quit. If there is no icon, the app has already quit. Open Claude Desktop again from the Start menu.

  4. Try it. Ask Claude: "List my John Deere organizations."


Step 2: Quick start on Linux

  1. Install uv. In a terminal, paste this line and press Enter:

    curl -LsSf https://astral.sh/uv/install.sh | sh

    Open a new terminal afterwards.

  2. Run setup. Paste this and press Enter:

    uvx --from https://github.com/vanantwerp/deere-ops-center-mcp/archive/refs/heads/main.zip deere-mcp setup

    Setup asks for your Application ID and Secret (the Secret does not show as you paste it), opens your browser to sign in to John Deere and choose your organization, and, if Claude Code is installed, asks Also add it to Claude Code? [Y/n]. If no browser opens, copy the link the terminal prints into one. It ends with Signed in.

  3. Connect your AI app. If setup found Claude Desktop or you answered yes for Claude Code, that app is connected. Otherwise use the command in the next section, or give any other MCP app the command uvx with the arguments --from https://github.com/vanantwerp/deere-ops-center-mcp/archive/refs/heads/main.zip deere-mcp.


Using it with Claude Code (any platform)

setup offers to add the server to Claude Code when it finds it. If you skipped that question, or installed Claude Code later, run this once in a terminal:

claude mcp add --scope user deere -- uvx --from https://github.com/vanantwerp/deere-ops-center-mcp/archive/refs/heads/main.zip deere-mcp

Installing with Claude

If you use the Code tab in Claude Desktop, paste this repository's address into it and ask Claude to install the server. Claude does everything except type your two codes.

  1. Claude installs uv. You approve one command.

  2. Claude opens the Terminal panel (a command window inside Claude Desktop) and starts setup there with --yes, which answers the two "add" questions for you:

    uvx --from https://github.com/vanantwerp/deere-ops-center-mcp/archive/refs/heads/main.zip deere-mcp setup --yes
  3. You type the Application ID and Secret into that panel (the Secret is hidden), sign in to John Deere in the browser that opens, and choose your organization.

  4. Claude checks the result with deere-mcp config and asks you to quit and reopen Claude Desktop.

Rules for Claude, or for anyone helping you:

  • Never ask for the Secret in chat, and never put it on a command line or in a settings file. It belongs only in the hidden prompt.

  • Run setup and login only in the Terminal panel, where a person can type. They wait for input and open a browser, so they cannot run as background commands.

Without a Terminal panel, follow the quick start for your platform.


Everyday use

Signing in again. The sign-in renews itself. If the assistant says the session expired:

uvx --from https://github.com/vanantwerp/deere-ops-center-mcp/archive/refs/heads/main.zip deere-mcp login

Signing out. Removes the saved sign-in from your computer and cancels it at John Deere:

uvx --from https://github.com/vanantwerp/deere-ops-center-mcp/archive/refs/heads/main.zip deere-mcp logout

Updating. Add --refresh once:

uvx --refresh --from https://github.com/vanantwerp/deere-ops-center-mcp/archive/refs/heads/main.zip deere-mcp login

If you reinstall or move uv. The Claude Desktop entry holds the full location of uvx. When that changes, Claude Desktop reports that the server could not start. Rewrite the entry without signing in again:

uvx --from https://github.com/vanantwerp/deere-ops-center-mcp/archive/refs/heads/main.zip deere-mcp connect

It asks the same questions as setup and prints one line per app: created, updated (with the name of the backup it saved first), unchanged, or skipped. A message ending in Run "deere-mcp connect" to try again. means the sign-in worked but the settings file was not changed; fix what it describes and run the command above.

Where your sign-in is kept. In a folder only your user account can read:

Platform

Folder

macOS

~/Library/Application Support/deere-mcp

Windows

%LOCALAPPDATA%\deere-mcp (usually C:\Users\yourname\AppData\Local\deere-mcp)

Linux

~/.config/deere-mcp

It holds your Application ID, Secret and sign-in tokens. Do not copy or share it. To see the exact locations, whether the Claude Desktop entry is present, and whether Claude Code was found:

uvx --from https://github.com/vanantwerp/deere-ops-center-mcp/archive/refs/heads/main.zip deere-mcp config

Settings you can change (optional)

Everything works without these. Set them as environment variables, or in the config.toml file in the folder above. An environment variable wins if both are set.

Setting

What it does

Default

DEERE_UOM

Measurement system: ENGLISH (acres, bushels) or METRIC (hectares, tonnes).

Not set: each organization's own preference in Operations Center is used.

DEERE_YIELD

How yield is expressed: VOLUME (bushels) or MASS (pounds, tonnes).

Not set: organization preference.

DEERE_CALLBACK_PORT

The port used during sign-in. Change it only if 9090 is in use, and change the Redirect URI in your John Deere application to match.

9090

DEERE_PAGE_CAP

The most pages of results fetched for one question before the tool stops and says the list was cut short.

20

DEERE_OUTPUT_DIR

The only folder the tool may write files into (downloads and exports).

A deere-mcp folder in your Documents.

DEERE_BASE_URL

Which John Deere environment to talk to.

The sandbox, https://sandboxapi.deere.com/platform. If John Deere approves your application for production, change this to the address they give you.

DEERE_CLIENT_ID, DEERE_CLIENT_SECRET

Your Application ID and Secret. setup stores these for you; set them here only if you prefer not to use the stored file.

None


What it can and cannot do

It can read:

  • Organizations, clients, farms and fields, including field boundaries

  • Field operations: tillage, planting, applications and harvests, with dates, products, rates, varieties, crop and measurement totals such as area, seeding rate and yield

  • Equipment, with machine alerts, engine hours, hours of operation, location history and terminal status

  • Work plans, operators, products and guidance lines

  • One map image per measurement of an operation

It cannot:

  • Create, edit or delete anything. The sign-in asks John Deere for read permissions only.

  • Show seasons from before your farm started using Operations Center.

  • Hand the assistant point-by-point yield maps. Those are large files; the tool can download them to your output folder for other software.

The permissions it asks John Deere for: view fields and production data, view equipment, view operators, view work plans, and stay signed in between uses.


Troubleshooting

"redirect_uri mismatch" or "invalid redirect" during sign-in. The Redirect URI in your John Deere application is not exactly http://localhost:9090/callback. Fix it there and sign in again.

"403 Forbidden" on everything, including listing organizations. The application has not been granted the API access yet, most often Organizations Read: see step 5 of Step 1. Approved requests can take a while to take effect. One kind of data is refused. That API is missing from the application's approved list. The organization list works but data for an organization is refused. The application is not connected to that organization yet. Sign in again and complete the organization page John Deere shows, or connect it at connections.deere.com.

Claude Desktop says the server could not start. Run connect (see "If you reinstall or move uv" above).

"command not found: uv" (or uvx) after installing it. Your terminal does not see the folder uv was installed in. Close and reopen the terminal first. If that does not help, run this once, then open a new terminal:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc

On Windows, open a new PowerShell window; the installer updates the path for new windows only.

No browser opened during sign-in. Copy the link printed in the terminal into any browser.

"Session expired." Sign in again.

"List was cut short." The result had more pages than the page cap allows. Ask for less (one season, a shorter date range) or raise DEERE_PAGE_CAP.

Machine alerts or locations fail with a date error. John Deere allows at most 7 days of alerts and 1 month of location history per request. Ask for a shorter window.


Manual configuration

Only needed if setup did not find Claude Desktop (it never asked Add the server to Claude Desktop? [Y/n] and ended with just Signed in.). These steps add the entry to Claude Desktop's settings file, claude_desktop_config.json, by hand. The file is JSON, where every quote, comma and bracket matters; copy the example exactly and change only the location from step 1.

On macOS

  1. Find where uvx is. Claude Desktop needs the full location. In Terminal:

    which uvx

    It prints something like /Users/yourname/.local/bin/uvx.

  2. Edit the settings file. In Claude Desktop, open Settings → Developer → Edit Config. Make the file look like this, with the location from step 1:

    {
      "mcpServers": {
        "deere": {
          "command": "/Users/yourname/.local/bin/uvx",
          "args": ["--from", "https://github.com/vanantwerp/deere-ops-center-mcp/archive/refs/heads/main.zip", "deere-mcp"]
        }
      }
    }

    If the file already has an mcpServers section, add only the "deere" entry inside it, with a comma between entries. Save.

  3. Quit and reopen Claude Desktop, as in step 3 of the macOS quick start, then continue with step 4 there.

On Windows

  1. Find where uvx is. Claude Desktop needs the full location. In PowerShell:

    where.exe uvx

    It prints something like C:\Users\yourname\.local\bin\uvx.exe.

  2. Edit the settings file. In Claude Desktop, open Settings → Developer → Edit Config. Make the file look like this, with the location from step 1. Every backslash is written twice:

    {
      "mcpServers": {
        "deere": {
          "command": "C:\\Users\\yourname\\.local\\bin\\uvx.exe",
          "args": ["--from", "https://github.com/vanantwerp/deere-ops-center-mcp/archive/refs/heads/main.zip", "deere-mcp"],
          "env": { "PYTHONUTF8": "1" }
        }
      }
    }

    Keep the "env" line; it makes the tool send text to Claude Desktop as UTF-8. If the file already has an mcpServers section, add only the "deere" entry inside it, with a comma between entries. Save.

  3. Quit and reopen Claude Desktop, as in step 3 of the Windows quick start, then continue with step 4 there.


Privacy

Your data moves between your computer and John Deere only. There is no third-party server. The AI app you connect sees what the tools return. Only error messages are logged; sign-in tokens never are. During use, the tools write only the files you ask for, in your output folder; setup writes its own settings and tokens in the folder shown by deere-mcp config.


For developers

git clone https://github.com/vanantwerp/deere-ops-center-mcp
cd deere-ops-center-mcp
uv sync
uv run pytest
uv run deere-mcp setup --source .

--source . makes Claude Desktop run your checkout instead of the published version; edits take effect the next time Claude Desktop starts the server. The tests use a fake John Deere, so they need no account. Before a pull request, run uv run ruff check ., uv run ruff format --check . and uv run pytest -q, the same checks CI runs.

Rules that keep the tool safe:

  • Tools only read from John Deere. The sign-in asks for read permissions and that stays true. The three file tools write only inside the output folder and carry the WRITES_FILES annotation, so AI apps know to ask before running them; every other tool is READ_ONLY.

  • No real Application IDs, Secrets, tokens or farm data anywhere in the repository. Use made-up values.

  • No print() under src/ except in cli.py; the server talks to the AI app over standard output.

  • Never log tokens, secrets, or request or response bodies.

To add a tool, copy a small one such as src/deere_mcp/tools/operators.py. Its docstring is the description the assistant reads, so say what it returns, where its IDs come from, and any limit John Deere sets. Build addresses with client.url(...), return a dict, raise ToolError for anything the assistant should read as a failure, and write files only through resolve_output_path. Add a test with the mcp_client fixture and note the change in CHANGELOG.md.

Found a security problem? Report it privately through the repository's Security tab on GitHub, not in a public issue, and leave real codes and tokens out of the report.

Acknowledgements

Inspired by john-deere-ops-mcp by Corey Fransen, a John Deere MCP server for Cloudflare Workers, which served as a reference for the Operations Center endpoints and parameters. This project is an independent rewrite in Python and shares no code with it.

License

MIT. See LICENSE.

Available Tools

22 tools
jd_download_operation_shapefileA
DestructiveIdempotent

Download the point-by-point shapefile for one field operation and save it to disk.

    The file is a zip of ESRI shapefiles (GPS points or polygons with yield, rate, moisture
    and similar values at each location), meant for GIS software or Python. This tool saves
    the zip in the output folder and returns its path and size; it does not return the
    contents, because the files are large. Operation IDs come from
    jd_list_field_operations (only operations with shapefile_available true have one).

    Deere prepares the file in the background, so this tool may wait a little. If Deere is
    still preparing it when max_wait_seconds runs out, the result has status "preparing";
    call the tool again after retry_after_seconds. On success the status is "saved".
    
ParametersJSON Schema
NameRequiredDescriptionDefault
filenameNoFile name to save as, inside the output folder. Defaults to operation-<operation_id>.zip.
resolutionNoHow densely to sample the operation: per machine section, per sensor, or once per second. Omit to let Deere choose its default.
shape_typeNoGeometry to export. Omit to let Deere choose its default.
operation_idYesField operation ID, from jd_list_field_operations.
max_wait_secondsNoHow long to wait for Deere to prepare the file before giving up.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only mark it as a non-read-only, destructive, idempotent write; the description adds the substantive behavior: the zip is written to the output folder, the tool returns path and size rather than contents because files are large, Deere prepares the file asynchronously, and the result carries status 'preparing' vs 'saved' with retry_after_seconds. That is exactly the context an agent needs to avoid mis-handling the response. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and result, then the async caveat. Mostly tight, though the retry explanation is slightly repetitive ('call the tool again after retry_after_seconds' restates the status semantics).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a mutation-style download tool: it covers the source of the ID, output location, absent return contents (despite an output schema), and the asynchronous preparation contract. Nothing an agent needs to invoke and interpret it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so filename/resolution/shape_type defaults are already documented. The description still adds real semantics: where operation_id comes from (jd_list_field_operations), and how max_wait_seconds interacts with the 'preparing' status and retry_after_seconds, which the schema only describes as a timeout.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: downloads the point-by-point shapefile for ONE field operation and saves it to disk. It also clarifies the payload format (zip of ESRI shapefiles with yield/rate/moisture), which separates it from generic export siblings like jd_export_field_operations and jd_save_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear entry condition: operation IDs come from jd_list_field_operations, and only operations with shapefile_available=true have one. It also explains the retry path when status is 'preparing'. It does not explicitly say when to prefer this over jd_export_field_operations, which is the only remaining gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_export_field_operationsA
DestructiveIdempotent

Save every field operation for one field across several seasons to a JSON file.

    Use this for multi-season history (for example five years of planting, applications
    and harvests) instead of reading each season into the conversation. Each operation
    includes its dates, crop, products, varieties and measurement totals such as area,
    rate and yield. The JSON file holds org_id, field_id and a "seasons" object mapping
    each year to its list of operations. This tool returns the file path and the number of
    operations per season, not the operations themselves; use jd_list_field_operations to
    read a single season directly. Organization and field IDs come from
    jd_list_organizations and jd_list_fields. If a season is listed in truncated_seasons,
    it had more results than the page cap allows and the file holds only the first part.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idYesOrganization ID, from jd_list_organizations.
seasonsYesCrop seasons (years) to export, for example [2022, 2023, 2024].
field_idYesField ID, from jd_list_fields.
filenameNoFile name to save as, inside the output folder. Defaults to field-<field_id>-operations.json.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the file-writing nature is partly covered. The description goes further by describing the file's contents (org_id, field_id, seasons map), the return payload (file path plus per-season counts, not the operations), and the truncated_seasons caveat when the page cap is hit. That is substantial added disclosure, though it does not address what happens to an existing file at the same filename.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and scope, then usage, then output shape and truncation. Each sentence carries useful information, though it runs a bit long across five sentences for a tool this simple.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the scoping, the alternative sibling, ID sources, the file layout, the returned summary (path and counts), and the truncation edge case. Even with an output schema present, the explanation of what the file contains and what is NOT returned is exactly what an agent needs to avoid mis-using the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so org_id, field_id, seasons and filename are already documented in the schema, including the filename default. The description adds only the ID provenance and a sample seasons list, which the schema already implies. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: saving all field operations for one field across multiple seasons to a JSON file. It explicitly distinguishes itself from jd_list_field_operations, which reads a single season, so an agent can separate the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use ('multi-season history ... instead of reading each season into the conversation') and an explicit alternative ('use jd_list_field_operations to read a single season directly'), plus points to jd_list_organizations and jd_list_fields for the required IDs. Nothing about selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_getA
Read-only

Make a read-only GET request to any John Deere API endpoint.

    Use this for Deere endpoints that no dedicated tool covers; follow the `links[].uri`
    values from other results to get there, and take IDs from the list tools. Only Deere
    hosts are allowed and only GET is ever sent. JSON comes back as the parsed object (lists
    are wrapped as {"data": [...]}), images come back as an image, and any other text comes
    back as {"content_type", "text", "truncated"} cut to 20,000 characters. Pass
    accept="application/vnd.deere.axiom.v3.image+json" to fetch a measurement map image.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute Deere URL, or a path such as /organizations/123/fields that is joined to the configured API base URL.
acceptNoAccept header to send; the Deere v3 JSON type when omitted.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint and openWorldHint, and the description goes well beyond them: it constrains hosts and method, and details return shapes for JSON (lists wrapped as {"data": [...]}), images, and other text (truncated at 20,000 characters). It even documents the accept header needed to fetch a measurement map image.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose in the first sentence, then layers routing guidance and return-format details. Every sentence conveys actionable information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries the burden and does so thoroughly by describing JSON, list, image, and text/truncation return formats. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so both parameters are already documented as a baseline of 3. The description adds value by explaining that `url` can be an absolute Deere URL or a path joined to the configured base, and by giving the concrete accept value for image retrieval.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: a read-only GET request to any John Deere API endpoint. It explicitly distinguishes itself from siblings by saying to use it for Deere endpoints that no dedicated tool covers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use (endpoints not covered by dedicated tools) and how to use it: follow `links[].uri` values from other results and take IDs from the list tools. It also states hard constraints (only Deere hosts, only GET is ever sent), leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_get_equipmentA
Read-only

Get the full record for one machine or implement.

    Returns everything Deere has on the piece of equipment, including any data requested
    with `embed`. `equipment_id` is the 'id' of an item from jd_list_equipment; the
    principalId shown there is a different identifier and is only for the jd_get_machine_*
    tools.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
embedNoAsk Deere to embed extra data in the record.
equipment_idYesEquipment ID (the 'id' field from jd_list_equipment).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that the response is the complete Deere record and that `embed` can pull in extra data, but says nothing about rate limits, error behavior, or record size. Useful but modest context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short paragraphs, front-loaded with the core action, and both the embed behavior and the id caveat earn their space. Minor redundancy between 'full record' and 'Returns everything Deere has,' but nothing wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't enumerate return fields, and annotations cover the read-only/open-world profile. The identifier routing note closes the main correctness risk. Remaining gaps (pagination, embed combination semantics) are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, and the description legitimately adds a disambiguation the schema does not: the warning that `principalId` is a different identifier reserved for jd_get_machine_* tools. It also frames `embed` as the source of supplemental data in the returned record.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Get the full record for one machine or implement') and explicitly contrasts itself with siblings: jd_list_equipment is the source of the id, and jd_get_machine_* tools use principalId instead. An agent can route between these families without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the retrieval context (full record for a single piece of equipment) and, more importantly, which identifier to use and which tool family handles the other identifier. There is no explicit 'when not to use' or list of alternatives beyond the principalId routing note, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_get_fieldA
Read-only

Get one field's details together with its active boundary.

    Returns the field record plus `boundary` (the active boundary with its geometry, or
    null when the field has none, or `{"error": ...}` if the boundary could not be fetched)
    and `boundaries_url`. Get `org_id` from jd_list_organizations and `field_id` from
    jd_list_fields.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idYesOrganization ID from jd_list_organizations.
field_idYesField ID from jd_list_fields.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=true), but the description adds a genuinely useful behavioral detail: the boundary may be null when absent, or an embedded {"error": ...} object when the fetch fails, meaning partial failure is returned in-band rather than raised. That is context the annotations do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded first sentence delivers the core purpose, followed by return-shape detail and parameter provenance. Slightly padded by restating the schema-documented ID sources, but every sentence is relevant and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values, yet it usefully flags the null and error-shaped boundary cases. For a two-param read tool with full schema coverage, this is essentially complete; only minor guidance on sibling selection is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters already carry descriptions naming their source tools, so the description's restatement of provenance is largely redundant. Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get), a singular resource (one field), and the exact scope of what comes back (field record plus its active boundary). This clearly distinguishes it from jd_list_fields, which returns many fields without boundary geometry.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent where to source both required IDs (org_id from jd_list_organizations, field_id from jd_list_fields), which establishes a clear call ordering. It stops short of naming exclusions, e.g. when to prefer jd_list_fields or jd_get_field_operation_measurements, so it is not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_get_field_operation_measurementsA
Read-only

Get the measurement totals of one field operation.

    Returns the measurements Deere recorded for the operation (area, material and rate
    totals and averages, yield) as `measurements`, or the single measurement object when
    `measurement_type` is given. The `operation_id` comes from the `id` of an item returned
    by jd_list_field_operations.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
operation_idYesField operation ID from jd_list_field_operations.
measurement_typeNoOne measurement type name as listed by this tool, for example HarvestYield. Omit to list every measurement type for the operation.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, openWorldHint), and the description adds genuine behavioral detail beyond them: the branching return shape (a `measurements` collection vs. a single measurement object when measurement_type is given) and the categories of data returned. It does not discuss pagination or limits, but the output schema partly covers structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then return shape, then the parameter provenance. Three sentences, each carrying weight, with only mild redundancy between the description and the param descriptions for operation_id.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return formatting, yet it still conveys the conditional shape and data categories. Combined with readOnly/openWorld annotations, the agent has enough to invoke correctly; only cross-tool alternatives remain unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it tells the agent the operation_id's provenance and that a valid measurement_type value (e.g. HarvestYield) is discoverable by calling without the parameter ('as listed by this tool'). That discovery hint goes beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the measurement totals of one field operation') and names the exact fields returned (area, material, rate totals and averages, yield). It is clearly distinguishable from siblings like jd_list_field_operations, which it references only as the source of the operation_id.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent on how to obtain operation_id ('comes from the id of an item returned by jd_list_field_operations') and explains the measurement_type conditional (omit to list every type). However, it does not name an alternative tool for the case where the agent might want measurements another way, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_get_guidance_lineA
Read-only

Get one guidance line on a field.

    Returns the full guidance line record, with its geometry when `embed_shapes` is true.
    Get `org_id` from jd_list_organizations, `field_id` from jd_list_fields and
    `guidance_line_id` from jd_list_guidance_lines.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idYesOrganization ID from jd_list_organizations.
field_idYesField ID from jd_list_fields.
embed_shapesNoAlso return the line geometry (shapes). Larger responses; default false.
guidance_line_idYesGuidance line ID from jd_list_guidance_lines.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the embed_shapes conditional-return behavior, but that same behavior is already documented in the schema's embed_shapes param, so the net new behavioral insight is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded in the first sentence, followed by the conditional return note and the ID-sourcing guidance. Three short sentences with little waste, though the ID-sourcing line is somewhat repetitive with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the return values need not be explained, and the description covers the embed_shapes toggle and full param-sourcing chain. Adequate for a single-record read tool with full schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description restates the source of each ID, which duplicates the schema param descriptions rather than adding format or syntax detail beyond them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (get) and resource (one guidance line on a field), with 'one' implicitly contrasting with the jd_list_guidance_lines sibling. It is clear what the tool retrieves, though it never names the list sibling explicitly to sharpen the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a concrete prerequisite chain, telling the agent exactly where to obtain org_id (jd_list_organizations), field_id (jd_list_fields) and guidance_line_id (jd_list_guidance_lines). It stops short of stating when to prefer this over jd_list_guidance_lines or any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_get_machine_alertsA
Read-only

Get machine alerts (diagnostic trouble codes) for one machine.

    Returns the alerts under 'alerts'. `principal_id` comes from jd_list_equipment. Deere
    allows at most 7 days between start_date and end_date in a single request; ask for a
    shorter window or make several calls.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoEnd of the window, ISO 8601 UTC, e.g. 2026-10-07T00:00:00Z.
start_dateNoStart of the window, ISO 8601 UTC, e.g. 2026-10-01T00:00:00Z.
principal_idYesMachine principal ID: the 'principalId' of an item from jd_list_equipment.
exclude_acknowledgedNoTrue to leave out alerts the operator already acknowledged.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=true), so the bar is lower. The description adds real value beyond them: it discloses the return key ('alerts') and the hard 7-day span constraint imposed by Deere plus the recommended workaround, which an agent could not infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with purpose, then provenance, then the operational constraint. No filler; the awkward indentation is cosmetic rather than wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be spelled out, and the description still names the payload key. Provenance of the required ID and the request-window constraint are both covered, so an agent has everything needed to call this correctly for a 4-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters, including principal_id's provenance and the ISO 8601 format for the dates. The description only restates principal_id's origin and relates the 7-day constraint to the date range, adding marginal meaning beyond structured data. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a specific verb+resource ('Get machine alerts') and immediately disambiguates the term with '(diagnostic trouble codes) for one machine'. An agent can distinguish this from the equipment-related siblings (jd_list_equipment, jd_get_machine_engine_hours, etc.) without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context: principal_id is sourced from jd_list_equipment, and the 7-day window rule tells the agent when to split requests. It stops short of explicitly naming an alternative tool or stating when NOT to use this one, so it doesn't reach a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_get_machine_device_state_reportsA
Read-only

Get device state (terminal status) reports for one machine.

    Returns the reports under 'device_state_reports'. `principal_id` comes from
    jd_list_equipment. Use last_known=True for the latest report, or a start_date/end_date
    window for history.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoEnd of the window, ISO 8601 UTC, e.g. 2026-10-07T00:00:00Z.
last_knownNoTrue for only the most recent report.
start_dateNoStart of the window, ISO 8601 UTC, e.g. 2026-10-01T00:00:00Z.
principal_idYesMachine principal ID: the 'principalId' of an item from jd_list_equipment.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety behavior is covered. The description adds that reports are returned under 'device_state_reports', which is modest extra context; it says nothing about pagination, rate limits, or what happens when a window contains no reports.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Tight and front-loaded: purpose first, then return location, then parameter guidance. The 'Returns the reports under device_state_reports' sentence is somewhat redundant given an output schema exists, so slightly less than perfectly economical.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read tool with full schema coverage and an output schema, the description covers purpose, ID sourcing, and the two mutually exclusive query modes. Missing only edge-case behavior (empty windows, default when neither last_known nor dates are given).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented with formats in the schema — baseline 3. The description adds the provenance of principal_id and the last_known vs date-window tradeoff, which is a small increment over the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get device state (terminal status) reports for one machine,' with a scope qualifier that separates it from sibling read tools like jd_get_machine_alerts or jd_get_machine_engine_hours. It does not explicitly name those siblings, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives actionable routing: `principal_id` comes from jd_list_equipment, and 'Use last_known=True for the latest report, or a start_date/end_date window for history.' This tells the agent which mode to pick but offers no when-not-to-use guidance or alternative-tool routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_get_machine_engine_hoursA
Read-only

Get engine hour readings for one machine.

    Returns the readings under 'engine_hours'. `principal_id` comes from jd_list_equipment.
    Use last_known=True for the current total, or a start_date/end_date window for history.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoEnd of the window, ISO 8601 UTC, e.g. 2026-10-07T00:00:00Z.
last_knownNoTrue for only the most recent reading.
start_dateNoStart of the window, ISO 8601 UTC, e.g. 2026-10-01T00:00:00Z.
principal_idYesMachine principal ID: the 'principalId' of an item from jd_list_equipment.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds value beyond that by disclosing the cross-tool dependency on jd_list_equipment for principal_id and by stating which key the readings are returned under, letting the agent plan a two-call flow.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, zero filler, and front-loaded: purpose first, then return shape, then parameter source, then mode selection. Each sentence carries distinct information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full schema description coverage, the description needs only to add dependencies and mode semantics, which it does. It is nearly complete; pagination or result-size limits for a date-range history query are the only unaddressed concern.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining how last_known relates to the start_date/end_date window (mutually exclusive modes) — semantics the schema presents only as three independent optional fields. It adds real meaning on top of the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get engine hour readings for one machine') and names the returned payload key, so the agent knows exactly what comes back. It does not explicitly differentiate itself from the adjacent sibling jd_get_machine_hours_of_operation, which is the one name an agent could plausibly confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives usable mode-selection guidance: last_known=True for the current total versus a start_date/end_date window for history, plus the provenance of principal_id. It stops short of any when-not-to-use or explicit sibling routing, which is the only gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_get_machine_hours_of_operationA
Read-only

Get how long a machine was working, idle or transporting over a period.

    Returns the records under 'hours_of_operation'. `principal_id` comes from
    jd_list_equipment and `org_id` from jd_list_organizations. Use start_date and end_date
    to bound the period; the detailed_state and summarize_duration filters are passed to
    Deere unchanged.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idNoOrganization ID, from jd_list_organizations. Narrows the result to that organization.
end_dateNoEnd of the window, ISO 8601 UTC, e.g. 2026-10-07T00:00:00Z.
start_dateNoStart of the window, ISO 8601 UTC, e.g. 2026-10-01T00:00:00Z.
principal_idYesMachine principal ID: the 'principalId' of an item from jd_list_equipment.
detailed_stateNoDeere's detailedState filter, passed through as given.
summarize_durationNoDeere's summarizeDuration option, passed through as given.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real value beyond that by disclosing that detailed_state and summarize_duration are passed through to Deere unchanged (implying upstream validation and Deere-specific semantics) and that results land under 'hours_of_operation'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose in the first sentence, followed by return container, ID provenance, and date/filter behavior. No filler sentences, though the provenance and date-window sentences could be tightened slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description still names the 'hours_of_operation' container. Combined with the annotations and full schema coverage, an agent has enough to invoke it correctly; only explicit routing against sibling machine-hour tools is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema with format details (ISO 8601 UTC examples, principalId/passthrough notes). The description largely repeats that; the cross-tool ID provenance is helpful but already present in the schema text, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (machine hours of operation) and concretely defines the measurement as time spent working, idle, or transporting over a period. This distinguishes it from sibling reads like jd_get_machine_engine_hours and jd_get_machine_alerts without the agent needing to open another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context: principal_id is sourced from jd_list_equipment and org_id from jd_list_organizations, and start_date/end_date bound the period. It does not explicitly say when to prefer this over engine-hours or other machine reads, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_get_machine_location_historyA
Read-only

Get GPS location points for one machine.

    Returns the points under 'locations'. `principal_id` comes from jd_list_equipment. Deere
    allows at most 1 month between start_date and end_date in a single request. For where the
    machine is now, prefer last_known=True instead of pulling history.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoEnd of the window, ISO 8601 UTC, e.g. 2026-10-07T00:00:00Z.
last_knownNoTrue for only the most recent position.
start_dateNoStart of the window, ISO 8601 UTC, e.g. 2026-10-01T00:00:00Z.
principal_idYesMachine principal ID: the 'principalId' of an item from jd_list_equipment.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds real behavioral context beyond that: results arrive under a 'locations' key, Deere enforces a maximum 1-month span per request, and principal_id must be sourced from jd_list_equipment. No auth or pagination detail, and nothing contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the purpose, then return shape, then prerequisites, then the alternative mode. Every clause carries information; no filler or restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described in depth, and the description still notes the 'locations' container. Combined with complete parameter docs and an explicit range limit and dependency, an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters are already documented with formats and defaults (ISO 8601 UTC, last_known semantics). The description still adds cross-tool provenance for principal_id and the relational constraint between start_date and end_date, which the schema does not express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with clear scope: 'Get GPS location points for one machine.' An agent immediately knows this is telemetry history, not alerts or engine hours. However, it never names a sibling tool it should be chosen over, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage direction: 'For where the machine is now, prefer last_known=True instead of pulling history,' and states the 1-month window constraint. It does not, though, route the agent between this tool and other machine-level tools such as jd_get_machine_device_state_reports.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_get_work_planA
Read-only

Get the full record of one work plan.

    Returns everything Deere holds for the plan (field, work type, status, instructions,
    operations and assignments). Get `org_id` from jd_list_organizations and `erid` from
    jd_list_work_plans.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
eridYesWork plan `erid` from jd_list_work_plans.
org_idYesOrganization ID from jd_list_organizations.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds genuine behavioral context beyond that: it discloses the breadth of the payload (field, work type, status, instructions, operations and assignments), which is the key signal for choosing a heavyweight single-record fetch over a list call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short paragraphs, front-loaded with the verb+resource and followed immediately by payload scope and ID sourcing. No filler sentences; every clause adds routing or expectation-setting value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the description covers purpose, payload breadth, and how to obtain both required IDs. It omits only edge behavior such as what happens for an unknown erid or cross-org access restrictions, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema descriptions already state the provenance of both IDs ("from jd_list_work_plans", "from jd_list_organizations"), so the description's sourcing note is largely duplicative. Baseline 3 is correct when the schema carries parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get the full record of one work plan") and scopes it to a single plan, which cleanly separates it from the sibling jd_list_work_plans. It also enumerates what the record contains, so an agent knows this is the detailed single-record counterpart to the list tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete prerequisite routing: get `org_id` from jd_list_organizations and `erid` from jd_list_work_plans, which tells the agent exactly how to reach a callable state. It stops short of stating when-not to use it (e.g. vs. the list tool for bulk retrieval), so it is clear context without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_list_equipmentA
Read-only

List the machines and implements in an organization.

    Returns id, principalId, name, category, type, archived and uri for each item. `org_id`
    comes from jd_list_organizations. The principalId of a machine is what the
    jd_get_machine_* tools (alerts, engine hours, hours of operation, location history,
    device state reports) take as `principal_id`; `id` is what jd_get_equipment takes. When
    `embed` is set, the full record with the embedded data is added to each item under 'raw'.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoOnly these equipment IDs.
embedNoAsk Deere to embed extra data in each item; returned under 'raw'.
org_idYesOrganization ID, from jd_list_organizations.
archivedNoTrue for archived equipment only, False for active only.
categoryNoOnly machines or only implements.
capable_ofNo'Connectivity' for connected equipment, '!Connectivity' for the rest.
item_limitNoPage size, 1 to 5000. Deere's default applies when omitted.
principal_idsNoOnly equipment with these principal IDs.
serial_numbersNoOnly equipment with these serial numbers.
organization_role_typeNoWhether this organization controls the equipment or only sees it.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds meaningful behavior: the exact identifier mapping between tools and the fact that `embed` injects the full record under 'raw'. It stops short of describing pagination semantics, which item_limit hints at but doesn't fully explain.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, followed by return fields and ID semantics. It is dense but every sentence carries information relevant to correct invocation; the return-field list is slightly redundant given an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter list tool with full schema coverage, an output schema, and annotations, the description covers the essential cross-tool wiring an agent needs. Remaining gaps (paging behavior, default page size) are minor and partly covered by parameter descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds genuine value by disambiguating `id` vs `principalId`/`principal_ids`, which are the most error-prone parameters in this tool and directly affect whether downstream calls succeed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the machines and implements in an organization') and scopes it clearly. It is distinguishable from jd_get_equipment, which the description explicitly notes takes `id`, and from the jd_list_* siblings by resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong chaining guidance: org_id comes from jd_list_organizations, and it explains that principalId feeds the jd_get_machine_* tools while id feeds jd_get_equipment. This tells the agent how to route the outputs. It does not explicitly state when to prefer this list over a single-entity get, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_list_field_operationsA
Read-only

List the field operations recorded on one field: tillage, seeding, application, harvest.

    Returns `operations`, each with `fieldOperationType`, `cropSeason`, `cropName`,
    `startDate`, `endDate`, `products`, `varieties`, `fieldOperationMachines` and the
    measurement totals Deere recorded (area, total and average material, seeding rate,
    yield), plus `measurements_url` and `shapefile_available`. Get `org_id` from
    jd_list_organizations and `field_id` from jd_list_fields; each operation's `id` is the
    `operation_id` for jd_get_field_operation_measurements and the shapefile download.
    One crop season per call is the normal use (`crop_season`). `start_date` and `end_date`
    form a date filter that Deere limits to a 7-day window per request.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idYesOrganization ID from jd_list_organizations.
end_dateNoEnd of a date window, ISO 8601 (for example 2024-05-07T23:59:59Z).
field_idYesField ID from jd_list_fields.
start_dateNoStart of a date window, ISO 8601 (for example 2024-05-01T00:00:00Z).
crop_seasonNoCrop season year to return, for example 2024. Omit for all.
operation_typeNoOnly operations of this type. Omit for all types.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint/openWorldHint, and the description adds a real constraint beyond them: Deere limits the start_date/end_date filter to a 7-day window per request. It also discloses that shapefile availability is signaled via `shapefile_available`, which is useful behavioral context for downstream chaining.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then usage, then constraints in a logical order. The long enumeration of return fields is somewhat verbose given an output schema already exists, but it is dense and non-repetitive rather than padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because an output schema exists, explaining return values is not strictly necessary, yet the description covers the key shape and the 7-day constraint, making the call self-sufficient. Only minor gap is no explicit guidance on the alternative export/measurement tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning the schema lacks: the date window is capped at 7 days, one crop season per call is the norm, and org_id/field_id provenance is spelled out. That is real added value over the field-level descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List the field operations recorded on one field') and enumerates the operation kinds covered (tillage, seeding, application, harvest). The mention that each operation's `id` feeds jd_get_field_operation_measurements and the shapefile download cleanly separates it from those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context: 'One crop season per call is the normal use', and points to jd_list_organizations and jd_list_fields for the required IDs. It does not, however, state when to prefer this over jd_export_field_operations or when a single-operation lookup (jd_get_field_operation_measurements) is the better call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_list_fieldsA
Read-only

List the fields in one organization.

    Returns `fields`, each with `id`, `name` and `archived`. Get `org_id` from
    jd_list_organizations. The field `id` is the `field_id` used by jd_get_field,
    jd_list_field_operations, jd_list_guidance_lines and jd_list_work_plans (as `field_ids`).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idYesOrganization ID from jd_list_organizations.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds genuinely useful beyond-annotation context: the identity of the returned id and the downstream tools that consume it. It is silent on pagination or whether archived fields are included by default, which keeps it out of the top band.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in one short sentence, followed by return shape and id linkage; every sentence carries information. The return-field enumeration is slightly redundant given an output schema exists, but it is brief.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, prerequisite, return shape, and cross-tool id semantics, and the output schema handles detailed return structure. Only gaps are pagination/result-size behavior for an organization that may hold many fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single `org_id` parameter, so the schema already carries the semantics and baseline 3 applies. The description repeats the same sourcing hint ('from jd_list_organizations') without adding format, validation, or failure behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope ('List the fields in one organization'), and positions itself in the tool graph by explaining that the returned `id` is the `field_id` consumed by jd_get_field, jd_list_field_operations, jd_list_guidance_lines and jd_list_work_plans. An agent can distinguish this list tool from the single-field getter without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the prerequisite for the only parameter (get `org_id` from jd_list_organizations), which is clear context for use. It does not state when to prefer this over jd_get_field (single field) or explain exclusions, so it stops short of explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_list_guidance_linesA
Read-only

List the guidance lines stored on one field.

    Returns `guidance_lines`, each with `id`, `erid`, `name`, `type`, `archived` and `uri`
    (the line's own address). With `embed_shapes` true each item also carries the full
    record, including its geometry, under `raw`. Get `org_id` from jd_list_organizations and
    `field_id` from jd_list_fields; the `id` of a line is the `guidance_line_id` for
    jd_get_guidance_line.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idYesOrganization ID from jd_list_organizations.
statusNoFilter by line status. Omit for Deere's default.
field_idYesField ID from jd_list_fields.
embed_shapesNoAlso return the line geometry (shapes). Larger responses; default false.
record_filterNoFilter by record state. Omit for Deere's default.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare read-only/open-world, so the description carries the rest and does so well: it names the returned fields, explains that embed_shapes adds a full record with geometry under `raw`, and warns that this makes responses larger. It does not mention pagination or result limits, which is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose in the first sentence, then return shape, then input provenance. Every sentence is functional. Slightly verbose in restating the returned field list, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter list tool with an output schema and full schema coverage, the description covers the essentials: scope, parameter provenance, the sibling to use for single-item fetches, and the opt-in shape embedding. Pagination behavior is the only notable omission, and the output schema may already carry that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks — that embed_shapes nests the complete record including geometry under a `raw` key on each item. It says nothing about `status` or `record_filter` beyond what the schema already documents ('Omit for Deere's default').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with explicit scope: 'List the guidance lines stored on one field.' The scope qualifier ('on one field') and the closing note that a line's `id` is the `guidance_line_id` used by jd_get_guidance_line cleanly separate this collection tool from its singular sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It tells the agent exactly where the two required inputs come from (org_id from jd_list_organizations, field_id from jd_list_fields) and explicitly routes to jd_get_guidance_line for single-record retrieval. There is no explicit when-not-to-use statement, but the list-vs-get split is unambiguous from the chaining note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_list_operatorsA
Read-only

List the machine operators defined in an organization.

    Returns `operators`, each with `id`, `name`, `archived`, `dateModified` and `uri`.
    Get `org_id` from jd_list_organizations.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idYesOrganization ID from jd_list_organizations.
record_filterNoWhich operators to return. Omit for Deere's default.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe-read profile is covered. The description adds the upstream dependency for org_id, but return details it lists are already available via the output schema, so added behavioral value is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, followed by compact supporting notes. Every sentence is short and purposeful, though enumerating return fields overlaps with the output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only list tool with a full output schema, the description is complete enough: it states the action, the key dependency, and where org_id comes from. Return values need not be explained further given the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are fully documented in the schema (org_id source and record_filter semantics with default). The description reinforces the org_id origin but adds no syntax or meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) with a specific resource (machine operators) and scope (defined in an organization), which an agent can immediately understand. The resource is distinct from all siblings (organizations, fields, products, work plans), so no sibling disambiguation is needed, but the description does not explicitly contrast with alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides one concrete prerequisite: 'Get org_id from jd_list_organizations.' This is useful context, but there is no guidance on when to use this tool versus alternatives, nor any exclusions or conditions for the record_filter behavior beyond what the schema already states.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_list_organizationsA
Read-only

List the John Deere Operations Center organizations this sign-in can access.

    Returns `organizations`, each with `id`, `name`, `type`, `member` and `connected`.
    Start here: the `id` of an organization is the `org_id` that every other tool needs.
    `connected` is false when the application has not yet been connected to that
    organization; its data will be empty or return 403 until the user opens
    `manage_connections_url` (included only in that case) and approves access.
    
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint and openWorldHint; the description adds substantial context beyond them — that unconnected organizations yield empty data or 403, and that manage_connections_url appears only in that case. This is exactly the behavioral detail (auth/permission failure mode) an agent needs before calling downstream tools.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what it lists, then the response fields, then the routing guidance, then the failure-mode caveat. Four tight sentences, each carrying distinct information with no repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Though an output schema exists (so field definitions are not strictly required), the description still supplies the semantic interpretation of `connected` and the 403/approval flow. Nothing an agent needs to select or correctly invoke this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the baseline is 4; the schema is trivially complete. The description instead documents the response shape (id, name, type, member, connected), which is useful but is return-value rather than parameter information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the ... organizations this sign-in can access') and scopes it to the authenticated sign-in's access, which no sibling covers. It also positions itself as the entry point ('Start here'), clearly distinguishing it from the jd_list_*/jd_get_* siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to start here and explains why: the organization `id` is the `org_id` every other tool needs. It also gives the concrete follow-up condition for the `connected: false` case (open manage_connections_url and approve access), so the agent knows both when to use this tool and what to do next.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_list_productsA
Read-only

List one kind of product defined in an organization.

    Returns `products`, each with `id`, `name`, `category`, `type`, `cropName`,
    `companyName`, `archived` and `uri`. One call lists one `product_type`: chemicals,
    fertilizers, seed varieties, tank mixes or dry blends. Get `org_id` from
    jd_list_organizations. Use it to see what the organization has defined, for example
    which seed varieties or chemicals exist.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
org_idYesOrganization ID from jd_list_organizations.
statusNoFilter by availability. Omit for Deere's default.
product_typeYesWhich kind of product to list.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=true, openWorldHint=true), so the bar is lower. The description still adds genuinely useful behavior beyond that: one call returns only one product_type, the returned field set is enumerated, and it tells the agent where org_id must come from.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action in the first sentence, then scope, then provenance. Slightly wasteful: it enumerates return fields even though an output schema exists, which is redundant real estate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists and 100% parameter coverage in the schema, the description needs only the action, the one-type-per-call constraint and org_id provenance — all present. Minor gap: nothing notes pagination or result-size behavior for large organizations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 by rule. The description restates the five product_type kinds in prose (mapping to the enum) and the org_id provenance, but adds no syntax or format detail the schema does not already carry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List one kind of product defined in an organization') and immediately constrains scope to a single product_type per call, enumerating the five kinds. An agent can distinguish this from jd_list_fields, jd_list_operators, etc., without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: use it to see what an organization has defined, e.g. which seed varieties or chemicals exist, and directs the agent to jd_list_organizations for org_id. No explicit when-not or alternative tool for product discovery is named, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_list_work_plansA
Read-only

List the work plans of an organization, optionally for a year, kind of work or fields.

    Returns `work_plans`, each with `erid`, `fieldUri`, `workType`, `year`, `workStatus`,
    `workOrder`, `instructions`, `sequenceNumber`, `operations` and `assignmentCount`.
    Get `org_id` from jd_list_organizations; the `erid` of a plan is the `erid` for
    jd_get_work_plan.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoPlan year, for example 2025. Omit for all years.
org_idYesOrganization ID from jd_list_organizations.
field_idsNoOnly plans for these field IDs from jd_list_fields.
work_typeNoOnly plans of this kind of work. Omit for all.
work_statusNoOnly plans in this state. Omit for Deere's default.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real workflow context by naming the parent lookup (jd_list_organizations) and the downstream consumer (jd_get_work_plan), though it says nothing about pagination or result limits for a potentially large list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then the handoff note. The enumerated return fields are somewhat redundant given an output schema exists, but the rest is tight and waste-free.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain returns, yet it does name the key fields when passing erid downstream. Combined with the org_id sourcing instruction, an agent has everything needed to call this correctly in sequence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter already carries its own description (e.g., 'Omit for all years', 'Omit for Deere's default'). The description only restates the filter axes ('optionally for a year, kind of work or fields') without adding format or semantic detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the work plans of an organization') plus the filter dimensions, and explicitly distinguishes itself from the sibling read tool jd_get_work_plan by naming the erid handoff. An agent can tell it apart from jd_get_work_plan without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: get org_id from jd_list_organizations, and use the returned erid with jd_get_work_plan. It does not state when NOT to use it (e.g., retrieving a single plan's detail), but the chaining guidance makes the intended workflow unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jd_save_fileA
DestructiveIdempotent

Save text, such as a CSV or a summary the assistant has assembled, to a file.

    Use this when the user wants a result kept on their computer. Files can only be created
    inside the configured output folder (DEERE_OUTPUT_DIR); any filename that points outside
    it is refused. An existing file with the same name is replaced. Returns the full path
    and the size in bytes.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesThe full text to write to the file.
filenameYesName of the file to create, for example 'north-80-yield.csv'. A relative path such as 'reports/2024.csv' is allowed.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds behavior beyond the annotations: path sandboxing (filenames outside DEERE_OUTPUT_DIR are refused) and overwrite semantics (an existing file with the same name is replaced). This usefully corroborates the destructiveHint=true annotation rather than merely repeating it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then usage condition, then constraints and return behavior in a tight sequence. Every sentence carries information; only the return-value sentence is arguably redundant given the output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter write tool with full schema coverage and an output schema, the description covers what matters: scope, safety constraint, overwrite behavior, and return shape. Nothing required to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already fully documented with examples and relative-path support. The description adds no format or constraint detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (save) and resource (text content written to a file), plus concrete content types like CSV or summaries. It is easily distinguishable from every sibling, which are all read/query tools, though it does not explicitly name one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear triggering condition: 'Use this when the user wants a result kept on their computer.' It also states the operating constraint (writes confined to DEERE_OUTPUT_DIR). No explicit exclusion or named alternative, but for a singleton write tool that context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 22 tool updatesv0.1.0
    • First observedjd_download_operation_shapefile
    • First observedjd_export_field_operations
    • First observedjd_get
    • First observedjd_get_equipment
    • First observedjd_get_field
    • First observedjd_get_field_operation_measurements
    • First observedjd_get_guidance_line
    • First observedjd_get_machine_alerts
    • First observedjd_get_machine_device_state_reports
    • First observedjd_get_machine_engine_hours
    • First observedjd_get_machine_hours_of_operation
    • First observedjd_get_machine_location_history
    • First observedjd_get_work_plan
    • First observedjd_list_equipment
    • First observedjd_list_field_operations
    • First observedjd_list_fields
    • First observedjd_list_guidance_lines
    • First observedjd_list_operators
    • First observedjd_list_organizations
    • First observedjd_list_products
    • First observedjd_list_work_plans
    • First observedjd_save_file

TDQS

A3.9/5.0

Scored across 22 tools

Disambiguation4/5

Most tools target distinct resources and actions (list vs get for fields, guidance lines, work plans, equipment, machine telemetry). The generic jd_get overlaps with every dedicated read tool, and jd_list_field_operations vs jd_export_field_operations/jd_download_operation_shapefile could be confused, but descriptions clarify intended use.

Naming Consistency5/5

All tools use a consistent jd_ prefix and snake_case, with predictable verb_noun or verb_resource_action patterns (list_fields, get_field, get_machine_alerts, download_operation_shapefile). The only minor deviation is the generic jd_get, but it is still readable and consistent with the prefix.

Tool Count3/5

22 tools is on the heavy side for the rubric's 16-25 borderline range. The broad John Deere domain covers many resources, so most tools earn their place, but the set could likely be trimmed or consolidated without losing much.

Completeness4/5

The surface covers a wide read-only lifecycle: organizations, fields, field operations, measurements, guidance lines, products, operators, work plans, equipment, machine telemetry, plus file export/save and a generic GET fallback. Minor gaps like no dedicated organization detail tool or explicit boundary history exist, but the generic jd_get can fill them.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables AI assistants to interact with Mender IoT platform for device management, deployment monitoring, and fleet analysis through natural language commands. Provides read-only access to device status, deployment logs, releases, and system monitoring capabilities.
    2
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables read-only file-management operations from AI assistants, including health checks, connection and folder listings, search, share-link resolution, metadata retrieval, and on-demand document reading.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants like Claude, ChatGPT, and Copilot to query live Jobber data—clients, jobs, quotes, invoices, revenue, and schedule—using natural language, with read-only access and careful API budget management.
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to access Saxo Bank portfolio data, account balances, positions, orders, transactions, and market data such as instruments, quotes, and charts. It is read-only by default, with trading tools available only when explicitly enabled.
    10
    MIT