Skip to main content
Glama

us-places-mcp

CI PyPI

An MCP server for where things were, then. Records follow the jurisdiction that held a place on the date of the event, not today's: a 1795 deed for a farm now in Greene County, Pennsylvania, is in Washington County's books, because Greene was carved out the next year. This server answers the questions that decide which office to write to:

  • Which county held this spot on that date? From the Newberry Library's Atlas of Historical County Boundaries, which records every creation and boundary change of every US county from 1629 to 2000, dated to the day, with the act behind it. OpenHistoricalMap imported the atlas and serves it free (CC0); this server asks it.

  • Where is this land description on the ground? "E½NE Sec. 18, T84N R39W, 5th P.M." becomes a centroid, a bounding box and BLM's ids, from the Bureau of Land Management's national Public Land Survey data. A map pin becomes a land description the other way.

  • Where is the case file behind this land patent? The patent is the end of a process. The file at the National Archives holds the application and, for a homestead, years of residence, witnesses and citizenship papers. The server says which file and which series, and builds the search.

Nothing here writes anywhere, and nothing here keeps a family tree. It sits well beside nara-catalog-mcp, which can run the archive searches this server builds, familysearch-mcp and snac-archives-mcp.

This is an independent project. It is not affiliated with, endorsed by, or supported by the Newberry Library, OpenHistoricalMap, the Bureau of Land Management or the National Archives.

Tools

The server publishes nine tools, all read-only and annotated so for the client. Five make no network call at all.

Jurisdiction at a date

Tool

Purpose

county_at

The county (or counties) that held a point on a date: a day, a month or a year. Returns the holder, its dates, the event and statute that made it, the whole chain of counties for that spot, changes within a year (check those by hand), and whether two governments contested it.

county_history

Every version of one county: created when, from what, and each later change, with statutes.

Federal land

Tool

Purpose

parse_legal_description

Read a land description, however it is written (E½NE, E2NE, E 1/2 NE 1/4, "the east half of the northeast quarter", GLO's padded 0840N, lots, several tracts), into its parts, with quarter-quarters and warnings for anything guessed. Offline.

plss_locate

Place a description on the map: centroid, bounding box, acreage and BLM's ids, to the township, section, quarter-quarter or lot.

plss_from_point

Name the survey tract at a point: township, range, section and quarter-quarter.

public_land_state

Was this state federal land? If not, who granted first title and where those records are; if so, its meridians and special cases. Offline.

From patent to case file

Tool

Purpose

find_land_entry_file

From a patent's Authority: the kind of entry, what its file holds, which National Archives series has it, ready-made arguments for nara-catalog-mcp's search_records_advanced, and how to order the file if it is not online. Offline.

glo_links

A link to a search, or to one record, on BLM's General Land Office Records site, for you to open. Offline.

cache_status

This session's live calls and cache hits. Offline.

Related MCP server: Corridor-MCP

Setup

You need Python 3.11 or later and uv. There is no key to request.

uvx us-places-mcp

or from a clone:

git clone https://github.com/ianderso/us-places-mcp
cd us-places-mcp
uv sync
uv run us-places-mcp   # stdio server, usually launched by the client

Claude Desktop

{
  "mcpServers": {
    "places": {
      "command": "uvx",
      "args": ["us-places-mcp"]
    }
  }
}

If the server fails to start because uvx cannot be found, give the full path that which uvx prints as the command.

Claude Code

claude mcp add places -- uvx us-places-mcp

Configuration

Nothing is required. A .env file in the directory the server starts in supplies anything the environment does not; only that directory is read.

Variable

Meaning

US_PLACES_OVERPASS_URL

OpenHistoricalMap's Overpass endpoint. Default https://overpass-api.openhistoricalmap.org/api/interpreter.

US_PLACES_PLSS_URL

BLM's national PLSS map service. Default https://gis.blm.gov/arcgis/rest/services/Cadastral/BLM_Natl_PLSS_CadNSDI/MapServer.

US_PLACES_CACHE_DIR

Response cache directory. Default ~/.cache/us-places-mcp.

US_PLACES_TIMEOUT

HTTP timeout in seconds. Default 60.

US_PLACES_CONTACT

An email address or URL added to the User-Agent, so either service can reach you. Optional, and courteous.

Both URLs must be https. Their two hosts are the only ones the server will contact.

Being a good guest

OpenHistoricalMap's Overpass server runs on donated capacity and publishes no rate limit. The server sends one request at a time to each service, two seconds apart for OpenHistoricalMap and half a second for BLM, joins identical calls in flight, and caches answers on disk: county answers for 90 days, survey answers until you pass refresh=true. A 429 or a 5xx is retried three times with back-off, then reported as rate_limited or upstream_error, which is never the same as "nothing here".

How to read what comes back

  • The county then, not now. A record was made by the county that held the place on the day. A new county does not take its parent's earlier records, so a deed from before Greene County existed is in Washington County's books still.

  • Check dates near a change. boundary_change_within_a_year lists changes close to your date. Laws took effect on stated days, but offices took time to organise; records from those months can be in either county.

  • "Attached to". Before an area was organised as a county it was often attached to a neighbour for administration, and that neighbour kept its records. county_at reads this from the atlas's event text.

  • Contested ground. Pennsylvania and Virginia both governed the Waynesburg area in the 1770s, and similar disputes ran elsewhere. "status": "contested" means look in both governments' records.

  • The atlas files counties under today's state. Monongalia County was created by Virginia but is filed under West Virginia; the event text says which government acted.

  • The atlas ends in 2000 and holds counties only: not towns, townships or parishes as church units.

  • A located tract is not a house. A section's centre is up to half a mile from any point in it, and BLM's data is a modern compilation that can differ from the original plat near correction lines and water. Lotted sections (along a township's north and west edges, or by water) have lots where a regular section has quarter-quarters.

  • A parse is a reading of a reading. parse_legal_description keeps the original text and says what it guessed: a section number with no "Sec.", a meridian taken from the state.

  • A patent proves a conveyance, on its signature date. The entry was years earlier: homesteaders lived on the land five years before final proof, and mid-century backlogs put years between purchase and signature. The Homestead Act took effect in 1863, so an "1856 homestead" in a family story is a cash, credit, preemption or warrant entry.

  • The patentee may never have seen the land. Military bounty-land warrants were bought and sold; the veteran is in the warrant file, the patentee may be a speculator.

  • No federal patents in state-land states. The thirteen colonies, Maine, Vermont, Kentucky, Tennessee, West Virginia, Texas and Hawaii granted their own land. A nil search there means nothing; public_land_state says where first title was recorded.

  • Old GLO links are dead. BLM rebuilt glorecords.blm.gov in July 2026, and older record links now land on the home page. Cite a patent by its accession number, document number, state and signature date.

Deliberately not here

  • Searching GLO itself. The rebuilt site has no public API. The server builds links for you to open; it does not fetch the site.

  • Towns, townships and church parishes. The atlas is counties only.

  • Writing anywhere.

Security

  • Two hosts. A request hook refuses any request not for the two configured services, so a value a model passes in cannot make the server fetch another site.

  • Inputs are validated before they reach a query: coordinates as finite numbers in range, states against a table, survey numbers as digits, and a county name escaped character by character into the Overpass query.

  • Event and statute text is data. It comes from the atlas and reaches the model verbatim; the server's instructions tell the model to treat it as data, never as instructions.

To report a vulnerability, see SECURITY.md.

Development

uv sync --extra dev
uv run pytest                      # mocked with respx; never touches either service
uv run ruff check .
uv run ruff format --check .
uv run python -m tests.live_check  # a few paced calls to both live services

See CONTRIBUTING.md, docs/API-NOTES.md for what was observed of each service and when, and docs/DESIGN.md for why the server is shaped this way.

Credits

County boundaries: the Newberry Library's Atlas of Historical County Boundaries (John H. Long, editor), as imported into OpenHistoricalMap and released under CC0. Survey data: the Bureau of Land Management's National PLSS (CadNSDI), a US government work.

License

MIT.

Available Tools

9 tools
cache_statusA
Read-only

Report this session's live calls and cache use. Makes no network call.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description's 'Makes no network call' adds corroborating context, but it repeats what openWorldHint=false already implies and says nothing about the shape or timing of the returned report.

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 sentences, zero waste, with the core purpose front-loaded before the network-call caveat.

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 no-parameter, read-only diagnostic tool with no output schema, the description is nearly sufficient. It could say slightly more about the report contents, but nothing an agent needs to call it 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?

The tool takes zero parameters, so there is nothing to disambiguate; baseline 4 applies. The schema itself is trivially complete.

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 ('Report this session's live calls and cache use'), so an agent knows this is a session-level diagnostic. It doesn't explicitly contrast with any sibling, but the geospatial siblings make the distinction obvious.

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?

There is no explicit when-to-use or when-not-to-use guidance; usage is only implied by the description's diagnostic nature. 'Makes no network call' hints that it is cheap to call, but does not tell the agent which situations warrant it.

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

county_atA
Read-only

Which county held a point on a date, with the act that made it so.

Records were made by the county that held the place THEN: a 1795 deed for a farm now in Greene County, Pa., is in Washington County's books. Returns the holder(s), the full chain of counties for the point, and changes within a year of the date (boundary_change_within_a_year: check those by hand). A non-county area "attached to" a county was administered, and recorded, by that county. "contested" means two governments claimed the spot. The atlas ends in 2000 and holds no towns or townships. It says where the courthouse was, not where anyone lived.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe date of the event: YYYY, YYYY-MM or YYYY-MM-DD. A year or month returns every county that held the point during it.
refreshNoTrue asks the service again instead of using the cache.
latitudeYesLatitude in decimal degrees, e.g. 39.896.
longitudeYesLongitude in decimal degrees; negative in the US.

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 real behavioral context beyond that: the returned chain of counties, the meaning of 'attached to' and 'contested', the 2000 cutoff, and the caveat that some results need manual verification.

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 purpose is front-loaded in sentence one, and each following sentence carries genuine domain information rather than filler. It is longer than strictly necessary and slightly discursive, but no sentence 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?

With no output schema, the description usefully characterizes the return (holder(s), full chain, within-a-year changes) and the tool's scope limits. It omits edge-case behavior such as out-of-range dates or points outside the covered area, which keeps it from a 5.

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%, so latitude, longitude, date and refresh are already fully documented, including the year/month expansion behavior. The description adds no syntax or format detail 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.

Purpose5/5

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

The opening sentence states a precise verb and resource: which county held a point on a date, plus the act that made it so. That is a specific point-in-time lookup that is inherently distinguishable from siblings like county_history (history of a named county) without needing to name them.

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 gives strong contextual guidance: records were made by the county that held the place THEN, boundary_change_within_a_year should be checked by hand, and the atlas ends in 2000 and holds no towns or townships. It never explicitly names an alternative sibling or states when not to use this tool, 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.

county_historyA
Read-only

Every version of one county: when it was created, from what, and each change.

Each version carries its dates, the event ("GREENE created from WASHINGTON."), and the statute. The atlas files counties under their modern state. Use county_at for a particular place: a county's history does not say which version held a given farm.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateYesThe state whose atlas file holds it: today's state, e.g. 'WV' for a county Virginia created in what is now West Virginia.
countyYesThe county's name, e.g. 'Greene' or 'Greene County'.
refreshNoTrue asks the service again instead of using the cache.

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, but the description adds real behavioral context: the shape of each returned version (dates, event string, statute) and the non-obvious atlas convention of filing counties under their modern state. It does not cover caching/rate-limit behavior beyond the schema's refresh note.

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, then a concrete example of a returned event, then the sibling routing rule. Sentences are short and each earns its place, though the telegraphic fragment style ('Each version carries its dates, the event..., and the statute.') borders on clipped.

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 no output schema, the description carries the return-shape burden and discharges it by naming the per-version contents (dates, event, statute). For a single-county lookup, pagination is unlikely to matter, so nothing critical 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 all three parameters are already documented, including the modern-state convention for 'state' with its own WV example. The description reinforces that convention but adds no syntax, format, or edge-case detail the schema lacks; 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 precise verb+resource: returns every version of one county over time, with creation date, parent source, and each subsequent change, plus the statute citation. It explicitly contrasts itself with the sibling county_at, so an agent can pick correctly without inspecting 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?

Names the alternative (county_at) and the exact condition that selects it: use county_at for 'a particular place,' because a county's history does not record which version held a given farm. This is an explicit when-to-use-this vs when-to-use-that statement.

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

find_land_entry_fileA
Read-only

From a land patent to the case file behind it: which file, where, and the search to run.

The patent proves a conveyance on its signature date; the case file holds the application and, for a homestead, the proof of residence, witnesses and citizenship. Signature date is not purchase or settlement date: the entry came years earlier. For a military warrant the patentee may be an assignee, and the veteran is in the warrant file. Returns arguments for nara-catalog-mcp's search_records_advanced (this server cannot call it).

ParametersJSON Schema
NameRequiredDescriptionDefault
stateYesThe state of the land.
patenteeNoThe name on the patent, for a warrant search.
authorityYesThe patent's Authority, as GLO gives it, e.g. 'May 20, 1862: Homestead EntryOriginal (12 Stat. 392)'.
land_officeNoThe land office, e.g. 'Lincoln'.
signature_dateNoThe patent's signature date, YYYY-MM-DD.
certificate_numberNoThe final certificate or entry number on the patent.

TDQS

A4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorldHint=false, and the description is consistent (a local lookup that produces query arguments, not a live search). The added disclosure that the tool does not itself perform the NARA search and instead returns arguments is valuable behavioral information beyond the annotations, though the exact return shape is only loosely described.

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 purpose and the patent-vs-case-file distinction are front-loaded, and the relevant caveats follow. It is dense but each sentence carries domain weight (provenance of dates, warrant assignee, the cross-server return contract), with no filler.

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?

Six parameters with no output schema, but the description compensates by explaining what the return is (arguments for search_records_advanced) and by grounding the ambiguous date/name fields. It is complete enough for correct invocation, with only minor gaps around the exact output structure.

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 earns above that: it clarifies that signature_date is the patent's date and not the entry/purchase/settlement date, that authority is as GLO gives it, and that patentee may be an assignee on a military warrant. These are semantic caveats the schema alone does not convey.

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 transformation: given a land patent, find the entry/case file, its location, and the search to run. The verb+resource (find the land entry file behind a patent) is clear and the domain is distinct from the geographic siblings (plss_locate, county_at). It stops short of naming a sibling to disambiguate against, so 4 rather than 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?

It gives real usage context: the patent proves a conveyance only on its signature date, and homestead/military-warrant cases require looking beyond the patent. Critically, it states that it returns arguments for nara-catalog-mcp's search_records_advanced and that this server cannot call it, telling the agent how the output is meant to be consumed. No explicit exclusion against siblings, but the routing guidance is strong.

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

plss_from_pointA
Read-only

Name the Public Land Survey tract at a point: township, range, section, quarter-quarter.

Use it to turn a map pin (a cemetery, a farmstead) into the description a land patent or tract book would carry, then search the land records with it. Finds nothing in states that were never federal public domain.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoTrue asks the service again instead of using the cache.
latitudeYesLatitude in decimal degrees.
longitudeYesLongitude in decimal degrees; negative in the US.

TDQS

A4/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/external-service profile is covered. The description adds genuinely non-structured behavior: results only exist in states that were once federal public domain. It does not mention caching or response latency, which the refresh parameter implies.

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 short sentences, front-loaded with what the tool returns, followed by the use case and the failure condition. Every sentence carries information an agent needs; nothing is 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?

With no output schema, the description usefully names the returned fields and the geographic limitation. It stops short of saying what a non-result looks like (null vs. empty vs. error) or whether results are cached, minor gaps for a read-only lookup.

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 latitude, longitude and refresh are fully documented in the schema. The description adds nothing about coordinate format, hemisphere handling, or the cache behavior, 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 and resource ('Name the Public Land Survey tract at a point') and enumerates the returned hierarchy (township, range, section, quarter-quarter). The 'from_point' direction is clear enough to separate it from the reverse-lookup sibling plss_locate, though no sibling is named explicitly.

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?

Provides a concrete use case ('turn a map pin (a cemetery, a farmstead) into the description a land patent or tract book would carry, then search the land records with it') and a real exclusion: it returns nothing outside federal public-domain states. No alternative tool is named for the reverse direction.

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

plss_locateA
Read-only

Place a federal land description on the map, using BLM's PLSS data.

Returns each tract's centroid and bounding box (lat/lon), BLM's ids, and the precision reached (township, section, aliquot or lot). A tract is not a house: a section's centre is up to half a mile from any point in it, and BLM's modern survey data can differ from the original plat near correction lines and water. To find the county that held it, pass the centroid and the patent's date to county_at; a county today is not the county then.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateYesThe state, as a two-letter code or a name.
refreshNoTrue asks the service again instead of using the cache.
descriptionYesThe land description, e.g. 'E½NE Sec. 18, T84N R39W, 5th P.M.' The meridian may be left out where the state has only one.

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, but the description adds substantive, non-obvious context: the precision levels reached (township/section/aliquot/lot), the warning that a centroid can be up to half a mile off, and divergence from the original plat near correction lines and water. It omits caching behavior, though the refresh parameter implies a cache.

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 and return values are front-loaded in the first two lines before the caveats, which is good structure. The prose is slightly literary ('A tract is not a house') and leans on metaphor, costing a little economy without losing meaning.

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 no output schema, the description usefully enumerates the returned fields (centroid, bbox, BLM ids, precision) and warns about accuracy limits, a key gap for a coordinate tool. It does not address failure modes for unparseable or ambiguous land descriptions, leaving a modest 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%, so all three parameters (state, description, refresh) are already documented in-schema with examples and defaults. The description adds no syntax or format detail beyond the schema, so the 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?

The first sentence gives a specific verb and resource ('place a federal land description on the map, using BLM's PLSS data'), which clearly separates it from the reverse-geocoding sibling plss_from_point and the text-only parse_legal_description. It also enumerates what is produced (centroid, bbox, BLM ids, precision).

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 explicitly routes the downstream step to a sibling ('pass the centroid and the patent's date to county_at'), which is clear conditional guidance. However it never states when to prefer this over plss_from_point or parse_legal_description, so the sibling differentiation is one-directional.

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

public_land_stateA
Read-only

Was this state federal public domain, and if not, who granted its land? No network call.

In a state that was never federal land (the 13 colonies, ME, VT, KY, TN, WV, TX, HI), a search for a federal patent finds nothing, and that nil says nothing about the family: first title came from the colony or state, and this says where those records are. Public-land states list their principal meridians, and the special cases (Ohio's surveys, Spanish and French claims).

ParametersJSON Schema
NameRequiredDescriptionDefault
stateYesA state, as a two-letter code or a name.

TDQS

A4.1/5.0
Behavior4/5

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

With readOnlyHint=true and openWorldHint=false already declared, the description reinforces this with 'No network call' and goes further by describing what a result contains (principal meridians for public-land states, Ohio's surveys, Spanish and French claims). It does not discuss error cases for invalid state input, but adds real context beyond 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.

Conciseness4/5

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

The key question is front-loaded and each following sentence carries information about why a nil result occurs and what the answer includes. Slightly verbose and the mid-sentence line break in the first paragraph is awkward, but no sentence 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?

With no output schema, the description must convey the return content itself, and it does: state status, where the first-title records live, principal meridians, and special survey/claim cases. It could be marginally more explicit about the response shape, but an agent has enough to call it and interpret results correctly.

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?

Only one parameter with 100% schema coverage ('A state, as a two-letter code or a name'), so the schema fully documents the input. The description adds no input-format detail beyond what the schema already states, making the baseline 3 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?

The opening question states exactly what the tool answers: whether a state was federal public domain and, if not, who granted its land. This is clearly distinct from coordinate/PLSS siblings like plss_locate and plss_from_point, and the 'No network call' note signals it is a local reference lookup.

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 explains the situation in which the tool matters: in a never-federal state a patent search comes back nil, and that nil says nothing about the family, so the agent needs the state-level provenance instead. It does not explicitly name sibling alternatives or state exclusions (e.g. 'do not use for PLSS coordinates'), 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.

Tool Schema Changelog

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

  1. 9 tool updatesv0.1.0
    • First observedcache_status
    • First observedcounty_at
    • First observedcounty_history
    • First observedfind_land_entry_file
    • First observedglo_links
    • First observedparse_legal_description
    • First observedplss_from_point
    • First observedplss_locate
    • First observedpublic_land_state

TDQS

A4/5.0

Scored across 9 tools

Disambiguation4/5

Tools are largely distinct: county_at (point-in-time jurisdiction) vs county_history (a county's versions) is explicitly differentiated, and plss_locate vs plss_from_point are inverse operations. There is mild overlap between parse_legal_description and plss_locate since both touch PLSS text, but the descriptions clarify that one parses and the other geolocates.

Naming Consistency4/5

All names use snake_case with a mostly predictable verb/noun or noun/noun structure (plss_locate, county_at, parse_legal_description). A few names are static noun phrases (county_history, cache_status, glo_links) rather than action-oriented, a minor deviation but still readable and consistent in casing.

Tool Count5/5

Nine tools is well-scoped for a land-research domain, with each tool covering a distinct capability (state context, PLSS geocoding both ways, county resolution, parsing, patent-to-file, link building, cache status). Nothing feels extraneous or missing at the count level.

Completeness4/5

The surface covers the PLSS-to-county research lifecycle well, including both directional geocoding, temporal county resolution, description parsing, GLO linking, and a hand-off to NARA for case files. Minor gaps like a direct patent/record lookup are delegated to companion servers by design, which is reasonable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server providing direct, credentialed access to parcel data via Regrid and county ArcGIS sources, with tools for querying by point, owner, size, and county.
    -
  • A
    license
    A
    quality
    A
    maintenance
    Enables users to search and browse US National Archives Catalog records, read OCR text, citizen transcriptions, tags, and comments, and download page images for genealogical or historical research. It also supports advanced filtered searches and searching within contributed document text while remaining read-only except for saving page images locally.
    18
    415 PyPI
    MIT