Tennessee Property Search MCP
An official MCP server operated by Tennessee Property Search that provides access to property records for 90 Tennessee counties. It enables agents to search for parcels by address or owner, retrieve detailed ownership and sale history, check recent changes, and access property statistics without requiring authentication.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://tnpropertysearch.app/mcpWhat its tools do
11 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (10)
Can change data (1)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to tnpropertysearch.app ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search for property parcels by address or owner name
- Retrieve detailed ownership and sale history for a specific parcel
- Find recent property ownership changes in a county
- Get property statistics grouped by county or zoning
Source and maintenance
Protocol and capabilities
- Server
- tn-property 2.0.0
- MCP protocol negotiated in check
- 2025-06-18
- Tools
- 11 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
11 advertised
dataset_info — Dataset overview
Start here. Describes what data exists: totals, every loaded county with parcel and ownership-record counts, how much ownership history each county has, which fields each county populates, data sources, bulk download files, query tips and usage terms.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}search_properties — Search properties
Find parcels by address words, current owner name, or location (near a point or inside a small box), optionally limited to a county, city or ZIP. Returns pin, address, owner, county, location and a link to the parcel in the map app. Paginate with next_cursor.
{
"type": "object",
"required": [],
"properties": {
"q": {
"type": "string",
"description": "Free text matched against the address, or the current owner name."
},
"zip": {
"type": "string",
"description": "ZIP code(s), comma-separated."
},
"bbox": {
"type": "string",
"description": "Bounding box 'west,south,east,north' in degrees (under about 5 km across)."
},
"city": {
"type": "string",
"description": "City name (populated mainly in Davidson)."
},
"near": {
"type": "string",
"description": "Center point 'lat,lon', e.g. '36.1627,-86.7816'."
},
"sort": {
"enum": [
"relevance",
"address",
"distance"
],
"type": "string",
"description": "relevance (default with text), distance (default with near), address."
},
"limit": {
"type": "integer",
"description": "Results per page, 1–200 (default varies by tool)."
},
"owner": {
"type": "string",
"description": "Current owner name words, e.g. 'bailey trust'. For former owners use search_owners."
},
"county": {
"type": "string",
"description": "County name, or several comma-separated, e.g. 'Davidson,Williamson'."
},
"cursor": {
"type": "string",
"description": "next_cursor from the previous page, to fetch the next page."
},
"address": {
"type": "string",
"description": "Property address words, any order, e.g. '1313 gallatin'."
},
"radius_m": {
"type": "number",
"description": "Radius in meters around `near` (default 500, max 2000)."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}get_property — Property details and owner history
Everything known about one parcel: full parcel record, every ownership record (current and former, with acquisition dates, prices and deed references/links where the county provides them), sale history for Hamilton, and the county Register of Deeds website. Look up by pin, or by apn plus county.
{
"type": "object",
"required": [],
"properties": {
"apn": {
"type": "string",
"description": "Assessor parcel number."
},
"pin": {
"type": "string",
"description": "Parcel id as returned by other tools."
},
"county": {
"type": "string",
"description": "County, to disambiguate apn."
},
"include_geometry": {
"type": "boolean",
"description": "Include the boundary rings ([lon,lat] pairs)."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}property_at — Property at a point
Which parcel contains a latitude/longitude. Uses the actual parcel boundary, not the nearest centroid.
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"description": "Latitude."
},
"lon": {
"type": "number",
"description": "Longitude."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}search_owners — Find owners by name
Find people and companies by name across current AND former ownership records. Each result has an owner_key, how many properties they have ever owned and own now, their counties and first/last acquisition dates. Pass an owner_key to owner_portfolio for the full list.
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Name words in any order, e.g. 'john smith' or 'ryman hospitality'."
},
"limit": {
"type": "integer",
"description": "Owners to return, 1–100 (default 20)."
},
"county": {
"type": "string",
"description": "Limit to county(ies)."
},
"current_only": {
"type": "boolean",
"description": "Only owners who currently hold property."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}owner_portfolio — All properties for an owner
Every property an owner (by owner_key) or a mailing address has ever been recorded on, newest first, with whether they still own it, when they acquired it and the recorded price. Includes summary counts. Searching by mailing address groups LLCs and trusts that share a mailbox.
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "integer",
"description": "Records per page, 1–1000 (default 200)."
},
"county": {
"type": "string",
"description": "Limit to county(ies)."
},
"cursor": {
"type": "string",
"description": "next_cursor from the previous page, to fetch the next page."
},
"mailing": {
"type": "string",
"description": "Exact mailing address as stored (from a property or owner record)."
},
"owner_key": {
"type": "string",
"description": "owner_key from search_owners (an exact name also works; it is normalized)."
},
"current_only": {
"type": "boolean",
"description": "Only properties still owned."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}search_ownership_records — Search ownership records / transfers
Ownership records (one row per owner per parcel) for an owner, owner_key, mailing address or pin, or every transfer recorded in one county over up to 3 calendar months. Filter by price, current vs former, and address; sort by date or price. Use it for questions like 'who bought in Davidson in March 2024 over $1M'.
{
"type": "object",
"required": [],
"properties": {
"pin": {
"type": "string",
"description": "Parcel pin(s), comma-separated."
},
"sort": {
"enum": [
"date_desc",
"date_asc",
"price_desc"
],
"type": "string",
"description": "date_desc (default), date_asc, price_desc."
},
"limit": {
"type": "integer",
"description": "Results per page, 1–200 (default varies by tool)."
},
"owner": {
"type": "string",
"description": "Owner name words."
},
"county": {
"type": "string",
"description": "County (one, for date searches)."
},
"cursor": {
"type": "string",
"description": "next_cursor from the previous page, to fetch the next page."
},
"address": {
"type": "string",
"description": "Property address words (filters the other results)."
},
"current": {
"type": "boolean",
"description": "true = current owners only, false = former owners only."
},
"date_to": {
"type": "string",
"description": "Acquired on or before, YYYY-MM-DD."
},
"mailing": {
"type": "string",
"description": "Exact mailing address."
},
"date_from": {
"type": "string",
"description": "Acquired on or after, YYYY-MM-DD."
},
"max_price": {
"type": "number",
"description": "Maximum recorded price."
},
"min_price": {
"type": "number",
"description": "Minimum recorded price."
},
"owner_key": {
"type": "string",
"description": "Exact owner_key."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}property_stats — Aggregate statistics
Parcel counts, total/average/median appraised value and total acres grouped by county, city, zip, land_use, zoning, owner, mailing or subdivision, statewide or for one county. Use it for 'largest owners in Davidson' or 'value by land use'.
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "integer",
"description": "Groups to return, 1–500 (default 25)."
},
"county": {
"type": "string",
"description": "One county (default: statewide)."
},
"group_by": {
"enum": [
"county",
"city",
"zip",
"land_use",
"zoning",
"owner",
"mailing",
"subdivision"
],
"type": "string",
"description": "Field to group on."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}refresh_property — Refresh properties from the source
Re-read up to 5 parcels from their official county/state source right now (and, for Davidson, the full owner history), then return what changed. Use when last_checked is too old for the question, or the user says a record is out of date.
{
"type": "object",
"required": [
"pins"
],
"properties": {
"pins": {
"type": "string",
"description": "Parcel pin(s), comma-separated (max 5)."
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}recent_changes — Recently detected changes
Changes the update jobs detected, newest first: owner_change (with old and new owners), new_parcel, and retired (parcel no longer listed by the county). Filter by county, kind, owner name, date or area.
{
"type": "object",
"required": [],
"properties": {
"bbox": {
"type": "string",
"description": "Bounding box 'west,south,east,north'."
},
"kind": {
"type": "string",
"description": "Kind(s), comma-separated: owner_change, new_parcel, retired."
},
"near": {
"type": "string",
"description": "Center point 'lat,lon', e.g. '36.1627,-86.7816'."
},
"limit": {
"type": "integer",
"description": "Results per page, 1–200 (default varies by tool)."
},
"owner": {
"type": "string",
"description": "Old or new owner name words."
},
"since": {
"type": "string",
"description": "Detected on or after (YYYY-MM-DD)."
},
"until": {
"type": "string",
"description": "Detected on or before (YYYY-MM-DD)."
},
"county": {
"type": "string",
"description": "County(ies)."
},
"cursor": {
"type": "string",
"description": "next_cursor from the previous page, to fetch the next page."
},
"radius_m": {
"type": "number",
"description": "Radius in meters around `near` (default 500)."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}update_status — Data freshness and update jobs
How fresh the data is: when each county was last checked, the most recent update runs with their status and counts, what is in progress, and the schedule.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 357 ms
- 95th percentile latency
- 357 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 357 ms · metadata changed · 11 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http tennessee-property-search-mcp https://tnpropertysearch.app/mcpCodex
codex mcp add tennessee-property-search-mcp --url https://tnpropertysearch.app/mcpCursor
{
"mcpServers": {
"tennessee-property-search-mcp": {
"url": "https://tnpropertysearch.app/mcp"
}
}
}Cline
{
"mcpServers": {
"tennessee-property-search-mcp": {
"type": "streamableHttp",
"url": "https://tnpropertysearch.app/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"tennessee-property-search-mcp": {
"type": "http",
"url": "https://tnpropertysearch.app/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http tennessee-property-search-mcp https://tnpropertysearch.app/mcpClaude Desktop
https://tnpropertysearch.app/mcpWindsurf
{
"mcpServers": {
"tennessee-property-search-mcp": {
"serverUrl": "https://tnpropertysearch.app/mcp"
}
}
}Let your agent find its tools
Find servers like Tennessee Property Search MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other data and analytics servers
Do you run Tennessee Property Search MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.