cart-mcp
Provides tools prefixed qgis_* for driving QGIS Desktop, enabling extraction of an AOI from the canvas, mapping soil and risk ratings back into QGIS, adding vector layers, styling, and zooming, as part of an agent-driven conservation planning workflow.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cart-mcpWhat are the soil resource concerns for this field?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 | iexThen install the dependencies (uv auto-downloads a managed Python >= 3.12 if the system interpreter is older):
uv --version # sanity check
uv syncRelated 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 transportOr during development:
uv run python -m cart_mcpVerify 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 an AOI (WKT, EPSG:4326) for resource concerns via the SDA web service. Accepts an optional |
| Rate multiple landunits in one pipeline run ( |
| Map units, components, and acreage intersecting an AOI (lightweight, no rating computation). |
| 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; |
| 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; |
| All CART resource concerns with pipeline type, data source, and whether rating is computable in this server. |
| Profile for one concern. |
| Ordered rating classes (best→worst) for a concern. |
| NRCS conservation practices typically addressing a concern (advisory, from public NRCS practice-points materials). |
| Re-run the pipeline against the known T9981 Fld3/Fld4 test AOIs and diff against embedded golden values. Requires network. |
Resources
URI | Description |
| Advisory disclaimer for ratings |
| Index of all concerns |
| One concern's full profile |
| Rating domain for a concern |
| Soil interpretation name mappings |
Prompts
Prompt | Description |
| Guided AI workflow: describe AOI, pick concerns, run |
| Run |
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 ( | USDA NRCS SSURGO published snapshots via the Soil Data Access web service ( | Anonymous, no auth | Federal government work (17 U.S.C. § 105) |
| Derived from public NRCS CART documentation and chapters | Embedded in package | Derived from federal works |
| 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_aoicall.Query.aspx(SOAP) is the documented fallback if thepost.restendpoint 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 LLMLicense
MIT for the server code; embedded data is derived from public-domain US federal government
works. See LICENSE.
Available Tools
10 toolsget_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.
| Name | Required | Description | Default |
|---|---|---|---|
| wkt | Yes | ||
| concern | Yes | ||
| landunit | No | AOI 1 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| wkt | Yes | ||
| landunit | No | AOI 1 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| wkt | Yes | ||
| landunit | No | AOI 1 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| concern | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| concern | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| concern | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| wkt | Yes | ||
| concerns | No | ||
| landunit | No | AOI 1 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| aois | Yes | ||
| concerns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
10 tool updates
v0.1.0- First observed
get_aoi_risk_map - First observed
get_aoi_soil_map - First observed
get_aoi_soil_summary - First observed
get_concern_details - First observed
get_rating_domain - First observed
list_concerns - First observed
list_practices_for_concern - First observed
rate_aoi - First observed
rate_aois - First observed
validate_pipeline
TDQS
Scored across 10 tools
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.
All tool names follow a consistent verb_noun pattern with clear prefixes (list_, get_, rate_, validate_). Pluralization and compound nouns are used predictably.
With 10 tools, the set is well-scoped for the CART/AOI analysis domain. Each tool serves a clear purpose without redundancy.
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
Related MCP Connectors
Built-environment forecasts, public benchmarks, and permit or zoning readiness through remote MCP.
Geospatial AI MCP server — satellite imagery, embeddings, weather, GNS governance
GIS tools for AI agents: 65 free tools + 8 paid (hazard/site-scouting/GeoJSON export)
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Related MCP Servers
AlicenseAqualityCmaintenanceExposes 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.2MIT- AlicenseNot gradedqualityCmaintenanceExposes 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
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to perform spatial analysis in ArcGIS Pro using natural language by exposing all ArcGIS Pro toolboxes as MCP tools.5MIT
- FlicenseNot gradedqualityCmaintenanceEnables querying soil data, planning and executing Earth Engine processing recipes, monitoring tasks, and answering questions about results without downloading national maps.-