Skip to main content
Glama

cart-mcp

This MCP server computes soil resource concern ratings for an area of interest (AOI) using the same SQL pipeline CART (Nemecek, J. & Peaslee, S., USDA NRCS) uses against the public USDA Soil Data Access (SDA) web service, and exposes the results as MCP tools, resources, and prompts for AI-assisted conservation planning.

What this is not: an official NRCS/CART ranking engine. CART's full ranking score combines five components (Vulnerability, Planned Practice Effects, Resource Priorities, Program Priorities, Cost Efficiency). This server computes only the soil-condition ratings (the vulnerability input) from published SSURGO soil data. Official program determinations come from your NRCS field office.

Install

Requires Python >= 3.12 and uv. If uv is not installed yet:

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
# irm https://astral.sh/uv/install.ps1 | iex

Then install the dependencies (uv auto-downloads a managed Python >= 3.12 if the system interpreter is older):

uv --version   # sanity check
uv sync

Related MCP server: Smart Irrigation MCP Server

Run

uv run cart-mcp                 # stdio transport (default, for MCP clients)
uv run cart-mcp --transport streamable-http --port 8000   # Streamable HTTP (recommended for remote/HTTP clients)
uv run cart-mcp --transport sse --port 8000               # legacy HTTP+SSE transport

Or during development:

uv run python -m cart_mcp

Verify the install

Confirm the server boots and exposes its tools (no network needed):

uv run python -c "import asyncio; from cart_mcp.server import mcp; [asyncio.run(mcp._list_tools(None)), print('ok')]"

Plain uv run cart-mcp (stdio) stays running by design, waiting for MCP traffic from the client; a quiet, non-exiting process is healthy. GUI users can instead attach the MCP Inspector to verify the server interactively.

Client configuration

Add to your MCP client config (opencode, Claude Desktop, etc.). The config assumes uv sync has been run in the repo checkout:

{
  "mcpServers": {
    "cart": {
      "command": "uv",
      "args": ["--directory", "/path/to/cart-assistant", "run", "cart-mcp"]
    }
  }
}

If the client reports uv: command not found (GUI clients on macOS/Linux often do not inherit the shell PATH where uv was installed), replace "command": "uv" with the absolute path from which uv (where uv on Windows).

opencode users can preconfigure both servers in a root opencode.json; all other clients use examples/mcp_config.json as a template.

See docs/usage.md for the user guide: framing an AOI, the token-efficient rating workflow, reading output, soil/risk maps, QGIS orchestration, benchmarking, and troubleshooting.

Tools

Tool

Description

rate_aoi

Rate an AOI (WKT, EPSG:4326) for resource concerns via the SDA web service. Accepts an optional concerns subset. Returns ratings with survey-data dates.

rate_aois

Rate multiple landunits in one pipeline run (aois = [{landunit, wkt}]); ideal for comparing fields/parcels. Invalid WKTs are reported per-landunit in errors without sinking the others.

get_aoi_soil_summary

Map units, components, and acreage intersecting an AOI (lightweight, no rating computation).

get_aoi_soil_map

Soil map as GeoJSON: AOI-clipped soil polygons with map unit properties (musym, muname, acres). Render directly with Leaflet/ArcGIS. Feature-count/byte caps bound the payload; truncated/dropped_features report omissions.

get_aoi_risk_map

Risk map as GeoJSON for one cointerp-backed concern: soil polygons carrying the dominant component's rating class/value; Order 5 units rated 'Not rated'. Feature-count/byte caps bound the payload; truncated/dropped_features report omissions.

list_concerns

All CART resource concerns with pipeline type, data source, and whether rating is computable in this server.

get_concern_details

Profile for one concern. summary=True returns a compact profile (rating classes, top-3 practices); summary=False returns the full profile (practices, regulatory crosswalk, interpretation).

get_rating_domain

Ordered rating classes (best→worst) for a concern.

list_practices_for_concern

NRCS conservation practices typically addressing a concern (advisory, from public NRCS practice-points materials).

validate_pipeline

Re-run the pipeline against the known T9981 Fld3/Fld4 test AOIs and diff against embedded golden values. Requires network.

Resources

URI

Description

cart://disclaimer

Advisory disclaimer for ratings

cart://concerns

Index of all concerns

cart://concerns/{key}

One concern's full profile

cart://domains/{concern}

Rating domain for a concern

cart://interpretations

Soil interpretation name mappings

Prompts

Prompt

Description

rate-land-for-conservation

Guided AI workflow: describe AOI, pick concerns, run rate_aoi, summarize ratings for a landowner.

validate-cart-pipeline

Run validate_pipeline and interpret results against golden values.

Data sources and public accessibility

All data used at runtime is public — no API keys, no credentials, no internal endpoints.

Input

Source

Access

Public-domain status

Soil ratings (cointerp), interpretation metadata (sdvattribute, distinterpmd), map units, components, horizons

USDA NRCS SSURGO published snapshots via the Soil Data Access web service (https://sdmdataaccess.nrcs.usda.gov/tabular/post.rest)

Anonymous, no auth

Federal government work (17 U.S.C. § 105)

data/concerns.json, rating_domains.json, interpretations.json, practice_links.json, concern_regulatory_map.json

Derived from public NRCS CART documentation and chapters

Embedded in package

Derived from federal works

data/test_aois.json, expected_outputs/*.csv

Public CART documentation test fields (T9981 Fld3/Fld4)

Embedded in package

Derived from federal works

Notes:

  • The SDA web service is a free public federal service without an SLA; the server makes one submission per rate_aoi call. Query.aspx (SOAP) is the documented fallback if the post.rest endpoint ever changes.

  • Ratings are only as fresh as each survey area's last publication (saverest); the server returns these dates with every rating.

  • Embedded data derives only from USDA NRCS federal publications; no third-party documents (e.g., journal articles) are redistributed.

  • SDA request constraints (100k row cap, timeout/memory failure modes) are enforced by the server's request caps (landunits, AOI area, timeout).

  • CART SQL queries, rating methodology, and domain tables are documented in the public CART reference repository: https://github.com/jneme910/CART (Nemecek, J. and Peaslee, S., USDA NRCS).

Development

uv run pytest                # offline tests (default)
uv run pytest -m network     # opt-in tests requiring live SDA access
uv run pytest -m bench       # opt-in benchmark: cart-mcp driven by a local LLM

License

MIT for the server code; embedded data is derived from public-domain US federal government works. See LICENSE.

Available Tools

10 tools
get_aoi_risk_mapA

Risk map for one cointerp-backed concern as GeoJSON (FeatureCollection).

Each feature is a soil polygon clipped to the AOI carrying the rating (rating_value, rating_class) of the dominant major soil component in its map unit. Order 5 survey map units are rated 'Not rated'. Supports cointerp-backed concerns only (e.g. the five SOH concerns, Hydric, Ponding/Flooding, AWS, Depth to Water Table, Drainage Class); SOC and other custom concerns raise an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
wktYes
concernYes
landunitNoAOI 1

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries full burden and does so admirably. It discloses the output structure (GeoJSON FeatureCollection with rating_value and rating_class), the rating logic (dominant major soil component), special handling for Order 5 map units ('Not rated'), and error behavior for unsupported concerns. This is rich behavioral context beyond 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?

The description is compact and well-structured. It leads with the primary purpose, then provides essential details about output and limitations in a dense, readable format. Every sentence adds meaningful information without redundancy.

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?

Given the tool's complexity (output schema exists, 3 params, 9 siblings), the description is remarkably complete. It explains the output format, data content, rating logic, edge cases, and error conditions. The existence of an output schema means return values need not be elaborated further, and the description fills the remaining context thoroughly.

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?

The schema has 0% description coverage, so the description must compensate. It implicitly explains 'concern' (the concern to rate) and suggests 'wkt' is the AOI geometry via 'clipped to the AOI', but it never explicitly documents the parameters, and 'landunit' is completely unaddressed. The description adds some semantic value but leaves significant gaps.

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 clearly states the tool's function: generating a risk map for one cointerp-backed concern as GeoJSON. It specifies the resource (soil polygons clipped to AOI) and distinguishes from siblings by limiting to cointerp-backed concerns and excluding SOC/custom concerns, which is a clear differentiation.

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?

The description explicitly states when to use the tool (cointerp-backed concerns like SOH, Hydric, etc.) and when not to (SOC and custom concerns raise an error). This provides clear usage context and exclusions, though it doesn't name alternative tools, the prohibitive guidance is sufficient.

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

get_aoi_soil_mapA

Soil map for an AOI as GeoJSON (FeatureCollection).

Each feature is a soil polygon clipped to the AOI with properties {landunit, mukey, musym, muname, invesintens, farmlndcl, poly_acres}. Render directly with Leaflet/ArcGIS; no ratings are computed.

ParametersJSON Schema
NameRequiredDescriptionDefault
wktYes
landunitNoAOI 1

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does a good job: it discloses the output format, the clipping behavior, the feature properties, and the explicit absence of ratings. It does not cover auth, rate limits, or error cases, but for a read-only map retrieval this is reasonable context.

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?

The description is two sentences long, front-loads the essential output format, and every sentence adds value. No redundant or vague wording.

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

Completeness3/5

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

The output schema exists, so return-value detail is not needed, but the description leaves gaps around parameter semantics and usage prerequisites. It is adequate for basic tool selection but not fully complete for an agent that needs to construct a valid request without additional inference.

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

Parameters2/5

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

Schema description coverage is 0%, but the description adds no parameter-level meaning. It references 'AOI' but never explains that 'wkt' should be Well-Known Text or what 'landunit' represents. The agent must rely on the parameter names alone.

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 clearly identifies the tool's purpose: producing a GeoJSON FeatureCollection soil map for an AOI. It distinguishes itself from rating tools by stating 'no ratings are computed,' though it does not explicitly name sibling 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?

The description implies when to use the tool (when you need a soil polygon map rendered as GeoJSON) and explicitly notes it does not compute ratings, which excludes it from rating use cases. However, it does not name alternatives like get_aoi_soil_summary or list specific conditions that would make this tool the preferred choice.

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

get_aoi_soil_summaryA

Map units and major components intersecting an AOI (no ratings).

Returns per map unit: mukey, symbol/name, survey order (invesintens), farmland class, acres, and its major components (compname, comppct_r, drainage class). Useful for transparency (E4) and leaching/water-table screening (W4).

ParametersJSON Schema
NameRequiredDescriptionDefault
wktYes
landunitNoAOI 1

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description bears the full burden. It discloses the tool's read-like behavior via 'Returns' and enumerates the exact fields, and it adds the key qualifier 'no ratings.' However, it omits any mention of side effects, permissions, rate limits, or edge-case behavior, offering only moderate transparency.

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?

The description is concise, with two sentences covering purpose, output fields, and usage context. It is front-loaded with the primary action and contains no filler, making every sentence valuable.

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

Completeness3/5

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

The description successfully conveys the tool's purpose, outputs, and use cases, and an output schema exists to document return values. However, it lacks parameter-level details and explicit guidance on when to prefer this tool over siblings, leaving notable gaps in completeness.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain 'wkt' or 'landunit.' While the parameter names are somewhat self-explanatory, the description fails to specify formats, coordinate systems, or how landunit is used, leaving a significant gap in compensating for the missing schema 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?

The description explicitly states the tool returns map units and major components intersecting an AOI, and conspicuously notes 'no ratings,' distinguishing it from sibling rating tools. It also lists specific output fields, removing ambiguity about the tool's scope.

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?

The description provides clear context by naming two use cases (transparency E4, leaching/water-table screening W4). It also implies a non-rating exclusion with 'no ratings,' but it does not explicitly reference alternative tools or provide comprehensive when-not-to-use conditions.

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

get_concern_detailsC

Full profile for one concern: domain, practices, regulatory references.

ParametersJSON Schema
NameRequiredDescriptionDefault
concernYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It names the returned content categories but says nothing about read-only safety, required permissions, error conditions, or how the concern identifier is resolved. The tool name 'get' implies a read, but explicit transparency is absent.

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?

The description is a single, tightly written sentence that front-loads the essential purpose and key content areas. There is no filler, repetition, or unnecessary detail.

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

Completeness3/5

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

For a simple one-parameter read tool with an output schema, the description is fairly complete, but it omits crucial context about how to acquire the concern value and how this tool relates to siblings. The output schema likely covers return structure, but missing usage and parameter guidance reduce completeness.

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

Parameters2/5

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

Schema description coverage is 0%, and the only parameter is an undocumented 'concern' string. The description adds only 'one concern,' which does little to clarify the expected identifier format, its source, or how to obtain valid values. This fails to compensate for the schema's lack of detail.

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 clearly identifies the resource ('one concern') and its contents ('domain, practices, regulatory references'), making it evident this returns a detailed profile. It differentiates from sibling tools like list_concerns (which lists concerns) and list_practices_for_concern (which focuses on practices alone), though it lacks an explicit verb like 'retrieves'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It does not mention that the 'concern' parameter should come from list_concerns, nor does it note that list_practices_for_concern exists for a narrower practice-specific view. Usage context is entirely implicit.

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

get_rating_domainB

Ordered rating classes (worst to best) for a concern.

ParametersJSON Schema
NameRequiredDescriptionDefault
concernYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It adds useful context by specifying the ordering ('worst to best'), but it does not mention error conditions, return behavior for invalid concerns, or whether it is explicitly read-only. The lack of annotation makes the description the sole source, and it only partially addresses this.

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?

The description is a single, concise sentence that is front-loaded with the key information. Every word contributes to the purpose, and there is no wasted text.

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

Completeness3/5

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

The tool is simple with one parameter and an output schema that likely describes the return structure, so the description needn't explain return values. However, it lacks context about when to use this tool versus siblings and how the 'concern' is specified. It is minimally sufficient but has clear gaps.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It mentions 'concern' as the parameter, but this only restates the schema's property name. It does not explain what constitutes a concern (e.g., ID vs. name), allowed values, or format. The description adds minimal semantic value beyond 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?

The description clearly states the tool returns ordered rating classes for a concern, which is specific and distinguishes it from sibling tools like list_concerns or get_concern_details. It uses an implied verb ('get' from the name) and specifies the scope ('for a concern'), though it could be more explicit about the action.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool vs. alternatives. The description only states what the tool does, with no mention of use cases, prerequisites, or situations where other tools should be preferred.

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

list_concernsA

All CART resource concerns with pipeline type, data source, computability, and docs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full burden. It states the tool returns all concerns and lists included fields, which is useful. However, it gives no details on read-only status, pagination, ordering, or access requirements. Minimal but not misleading.

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?

A single sentence that is front-loaded with the core function ('All CART resource concerns') and immediately lists the key attributes. No filler or redundant information.

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 the tool has no parameters and an output schema is present, the description fully explains what the tool returns. The only missing context is whether any authentication or special access is needed, but for a read-only listing tool this is often not required. It is adequate for the tool's simplicity.

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?

No parameters exist, so the baseline is 4. The description adds context about what each returned item includes (pipeline type, data source, etc.), which complements the empty schema.

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 clearly states the tool lists all CART resource concerns and enumerates the attributes (pipeline type, data source, computability, docs). This distinguishes it from siblings like get_concern_details (single concern) and list_practices_for_concern (practices for a concern).

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?

The description implies use when needing an overview of all concerns with their attributes. It doesn't explicitly name alternatives or exclusions, but the 'All' scope and the sibling tool names make the intended usage clear. For a simple list-all tool, this is sufficient context.

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

list_practices_for_concernA

NRCS conservation practices that address a concern (advisory).

Sourced from the public NRCS CART Practice Points spreadsheet ('Assoc Ag Land' points). Practices are listed by NRCS practice code, name, and points - they are suggestions for discussion, not a formal practice plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
concernYes

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?

With no annotations, the description carries the burden and does well by disclosing the data source (public NRCS CART spreadsheet, 'Assoc Ag Land' points), the listed fields (code, name, points), and the advisory, non-formal nature. It lacks mention of permissions or side effects, but these are unlikely for a read-only list operation.

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?

The description is concise, front-loaded with the primary purpose, and uses every sentence to add value: source, output fields, and advisory caveat. No unnecessary words or repetition.

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?

The description provides essential context for a simple lookup tool: purpose, data provenance, output fields, and the advisory nature. While it doesn't detail parameter handling or point interpretation, the presence of an output schema covers return values, making this sufficient for the tool's complexity.

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

Parameters2/5

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

The single 'concern' parameter is not explicitly described; only the tool name and description imply it specifies the concern to query. With 0% schema coverage, the description adds no format, allowed values, or context for this parameter, leaving the agent to guess its exact semantics.

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 clearly states the tool lists NRCS conservation practices associated with a concern, with specific verb 'list' and resource 'practices for concern'. It also distinguishes itself from sibling tools like list_concerns and get_concern_details by focusing on practices rather than concerns themselves.

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?

The description implies usage for advisory discussions and notes it is not a formal practice plan, but it does not explicitly state when to choose this over alternatives. It offers context but no direct exclusions or comparisons to sibling tools.

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

rate_aoiA

Rate an area of interest (WKT, EPSG:4326) for CART soil resource concerns.

Submits the CART pipeline to the public Soil Data Access web service and returns the landunit rating for every ratable concern (or the subset given in concerns). Each rating includes rating_name, rating_value, rating_class and the survey-area publication date (soils_metadata). Results are advisory - not official NRCS scores.

ParametersJSON Schema
NameRequiredDescriptionDefault
wktYes
concernsNo
landunitNoAOI 1

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?

With no annotations provided, the description carries the full transparency burden. It discloses that the tool submits to an external public web service (Soil Data Access), returns specific rating fields, and that results are advisory, not official. This goes beyond a simple 'rate' statement, though it does not mention side effects, rate limits, or error behavior.

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?

The description is three sentences, front-loaded with the core action, and every sentence adds value: action/input, execution/output detail, and a caveat about advisability. No redundant or filler content.

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 the presence of an output schema (which descriptions needn't duplicate) and the complexity of the tool, the description covers the main aspects: what it does, the inputs, the output fields, and a key caveat. It doesn't mention relationship to sibling tools like rate_aois, but this is not essential when the tool list is available.

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 0%, so the description must compensate. It adds meaning for 'wkt' by specifying the format (WKT, EPSG:4326) and for 'concerns' as a subset of concerns. However, the 'landunit' parameter is only referenced indirectly via 'landunit rating', which may be ambiguous; the default value 'AOI 1' is not explained.

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 opens with a specific verb ('Rate') and resource ('area of interest'), and includes the input format (WKT, EPSG:4326) and domain (CART soil resource concerns). It clearly distinguishes itself from the sibling tool rate_aois by focusing on a single AOI, and the mention of returning landunit ratings for ratable concerns adds further specificity.

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?

The description clearly implies usage for rating a single area of interest and for CART soil concerns. It does not explicitly name alternatives or exclusion scenarios, but the context is clear enough that an agent can infer when to use this tool versus the plural rate_aois. The 'advisory' note also sets expectations about applicability.

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

rate_aoisA

Rate multiple landunits in one pipeline run.

aois is a list of {"landunit": str (<=20 chars), "wkt": str (EPSG:4326)}. Ideal for comparing fields/parcels (e.g., EQIP/CSP portal parcel exploration).

ParametersJSON Schema
NameRequiredDescriptionDefault
aoisYes
concernsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description adds useful input constraints (landunit length, EPSG:4326 for wkt) and the batching behavior ('one pipeline run'), but does not disclose whether the operation is read-only, what the output format is (though an output schema exists), or any side effects or prerequisites.

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?

The description is two sentences, immediately states the core action, and provides a concrete example. Every sentence adds value with no redundancy or unnecessary detail.

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

Completeness3/5

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

Given the presence of an output schema, the description covers the main use case and the critical 'aois' parameter, but the unexplained 'concerns' parameter and lack of explicit safety/prerequisite info leave notable gaps for a multi-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?

The description compensates for the 0% schema coverage by explaining the structure and constraints of the required 'aois' parameter, but it completely omits any explanation of the 'concerns' parameter, leaving its semantics ambiguous.

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 clearly states the tool's function with a specific verb ('Rate') and resource ('multiple landunits') and distinguishes it from the sibling 'rate_aoi' by emphasizing 'in one pipeline run' for multiple items. The use case example also reinforces purpose.

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?

The description provides clear context for when to use this tool ('Ideal for comparing fields/parcels') and implies it is the batch version of rate_aoi. However, it does not explicitly name alternatives or state when not to use it, leaving some room for inference from sibling names.

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

validate_pipelineA

Re-run the pipeline on the T9981 Fld3/Fld4 test fields and diff against golden values.

Network required. Golden values are tied to the 2018 ND001/SD105 survey-area snapshots; a mismatch may be legitimate if those areas were republished since.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It discloses that network access is required and that golden values are tied to specific snapshots, which helps set expectations. It also warns about potential false mismatches, offering useful context beyond the basic function.

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?

The description is extremely concise, consisting of two short sentences that immediately state the action and the key caveat. Every sentence adds value, with no filler or redundancy.

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?

Given the tool has no parameters and an output schema exists, the description sufficiently covers the key contextual facts: network dependency, golden value provenance, and a likely cause of mismatches. It is complete for a zero-parameter validation tool.

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?

The tool has zero parameters, so the baseline is 4 per the rubric. The description does not need to explain parameter semantics since there are none, and the schema fully captures the lack of parameters.

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 uses a specific verb ('Re-run') and identifies an exact resource ('pipeline on the T9981 Fld3/Fld4 test fields') with a clear action ('diff against golden values'). This clearly distinguishes it from sibling tools like rate_aoi or list_concerns, which serve different domains.

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?

The description provides clear context on when to use the tool (for validating the pipeline against golden values) and includes a caveat about legitimate mismatches due to republished survey areas. It does not explicitly name alternatives, but the sibling tools are obviously unrelated, making the intended use evident.

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. 10 tool updatesv0.1.0
    • First observedget_aoi_risk_map
    • First observedget_aoi_soil_map
    • First observedget_aoi_soil_summary
    • First observedget_concern_details
    • First observedget_rating_domain
    • First observedlist_concerns
    • First observedlist_practices_for_concern
    • First observedrate_aoi
    • First observedrate_aois
    • First observedvalidate_pipeline

TDQS

A3.8/5.0

Scored across 10 tools

Disambiguation4/5

The tools are largely distinct, but rate_aoi and rate_aois are essentially the same operation for one vs. multiple areas, and get_concern_details includes rating domain information that overlaps with get_rating_domain. Still, the descriptions make the intended use clear.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with clear prefixes (list_, get_, rate_, validate_). Pluralization and compound nouns are used predictably.

Tool Count5/5

With 10 tools, the set is well-scoped for the CART/AOI analysis domain. Each tool serves a clear purpose without redundancy.

Completeness4/5

The server covers listing concerns, retrieving details and ratings, generating soil and risk maps, and validating the pipeline. A minor gap is that risk maps only support cointerp-backed concerns, but rate_aoi covers custom concerns, so the overall workflow is complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Exposes Mireye Earth's geospatial data API as MCP tools (mireye_ask and mireye_fetch) for querying location-based information like elevation, flood zones, and wildfire risk for US places.
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Exposes real-time soil sensor metrics as MCP Resources and irrigation valve controls as MCP Tools, enabling AI-driven agronomic decisions with built-in safety guardrails.
    Apache 2.0