Skip to main content
Glama
jdw2111

@propraven/mcp

by jdw2111

@propraven/mcp

Model Context Protocol server for PropRaven — gives Claude, ChatGPT, Cursor, and any MCP-compatible agent canonical access to 191.3M US parcels (110.0M mapped) with ownership, valuation, permits, deeds, hazard, and market data.

Hosted endpoint: https://propraven.com/mcp (Streamable HTTP, no install — docs: https://propraven.com/docs/mcp · agents + x402: https://propraven.com/docs/agents). Or run the stdio server locally (below).


Hosted (no install)

Point any HTTP-transport MCP client at https://propraven.com/mcp with your API key as a bearer header. Claude Desktop / Cursor (claude_desktop_config.json, ~/.cursor/mcp.json):

{
  "mcpServers": {
    "propraven": {
      "url": "https://propraven.com/mcp",
      "headers": { "Authorization": "Bearer pz_your_real_key_here" }
    }
  }
}

Claude Code: claude mcp add --transport http propraven https://propraven.com/mcp --header "Authorization: Bearer pz_your_real_key_here". The claude.ai web connector uses OAuth instead — add a custom connector with the same URL and sign in.


Related MCP server: Dilix MCP

Local install in Claude Desktop

Requirements: Node ≥18, a PropRaven API key (pz_…) from https://propraven.com/settings/api-keys (free, no card).

One-time setup

git clone https://github.com/jdw2111/propraven-mcp.git
cd propraven-mcp
npm install
npm run build

Wire into Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "propraven": {
      "command": "node",
      "args": ["/absolute/path/to/propraven-mcp/dist/index.js"],
      "env": {
        "PROPRAVEN_API_KEY": "pz_your_real_key_here"
      }
    }
  }
}

Restart Claude Desktop. The 8 PropRaven tools (parcel.lookup, parcel.search, parcel.compare, owner.pierce, hazard.score, valuation.estimate, permits.history, sales.history) appear in the tool list.

Quick test

Look up parcel 37183:0012345 and tell me the owner.

Claude should pick parcel.lookup and return canonical record + owner.


Cursor + ChatGPT

Cursor: install via the MCP marketplace (search "PropRaven") once we publish, or wire manually:

// ~/.cursor/mcp.json
{
  "mcpServers": {
    "propraven": { "command": "node", "args": ["/abs/path/dist/index.js"], "env": { "PROPRAVEN_API_KEY": "pz_..." } }
  }
}

ChatGPT: Custom GPT → Actions → OpenAPI URL https://api.propraven.com/openapi.json with API-key (Bearer) auth; native MCP-in-ChatGPT can use the hosted endpoint https://propraven.com/mcp (OAuth 2.1 + PKCE).


Tools

Tool

Purpose

Backed by

parcel.lookup

Resolve one parcel by composite ID, address, or APN

GET /api/v1/parcels/{id} or GET /api/v1/search/full

parcel.search

Filter parcels by geography + attributes

GET /api/v1/search/full

parcel.compare

Fetch reports for 2–25 parcels for agent-side ranking

GET /api/v1/parcels/{id}/report × N

owner.pierce

Resolve a name/entity to its full portfolio

GET /api/v1/owners/{name}/portfolio

hazard.score

Flood / fire / seismic / windstorm / air-quality / crime composite

GET /api/v1/parcels/{id}/risks

valuation.estimate

AVM + assessed / market values for a parcel

GET /api/v1/parcels/{id}

permits.history

Permit timeline for a parcel

GET /api/v1/parcels/{id}/permits

sales.history

Deed timeline ± UCC liens

GET /api/v1/parcels/{id}/deeds (+ /report if liens)

Tool descriptions are optimized for agent reasoning — they explicitly call out when not to use each tool, which is the biggest determinant of agent selection accuracy.


Environment

The server reads:

Variable

Default

Purpose

PROPRAVEN_API_KEY

(required)

Bearer token, format pz_...

PROPRAVEN_BASE_URL

https://api.propraven.com

API host. Use https://propzilla.vercel.app during the DNS cutover window.

PROPRAVEN_TIMEOUT_MS

30000

Per-request timeout in ms.


Develop / inspect

# Live-reloading dev (TypeScript, no build step):
PROPRAVEN_API_KEY=pz_test... npm run dev

# Or open the MCP Inspector UI:
PROPRAVEN_API_KEY=pz_test... npm run inspect

The inspector at https://modelcontextprotocol.io/legacy/tools/inspector lets you call each tool manually and see request/response payloads.


Why this exists

Every Claude / ChatGPT / Cursor workflow that touches property data needs an authoritative parcel-lookup tool. There is no canonical property-data MCP today. PropRaven aims to be it before the first-mover window closes (~12–18 months).


License

Apache-2.0

Available Tools

8 tools
hazard.scoreAInspect

Composite hazard score for a parcel: flood (FEMA NFIP zone), wildfire (USFS WUI), seismic (USGS ASCE7), windstorm, air quality (EPA AQS), and crime (composite tier). Each sub-score includes source citations. Use when the user asks about a property's risk profile — insurance pricing, underwriting, or due diligence. Do NOT use to compare multiple parcels (use parcel.compare with a hazard criterion). Backed by /api/v1/parcels/{id}/risks. Coverage varies by hazard: flood and crime are widely available; wildfire is strongest in CA/OR/WA/ID/MT/CO; seismic strongest on the West Coast.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoSubset of hazards to keep in the response. Default: return all.
parcel_idYesComposite parcel ID (county_fips:parcel_id). Use parcel.lookup to obtain.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses coverage varies by hazard and geographic region, references the API endpoint, and implies read-only behavior. Lacking explicit statement that it does not modify data.

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 usage, then coverage notes. Single paragraph is efficient but could be slightly more concise; still highly informative.

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

Completeness4/5

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

Given no output schema, description explains sub-scores and sources sufficiently for selection. Coverage details help set expectations. Lacks output structure but acceptable for this tool type.

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 covers 100% of parameters, but description adds value: explains parcel_id format (composite from parcel.lookup) and that include is a subset filter. Reinforces and clarifies beyond schema.

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

Purpose5/5

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

The description clearly states it provides a composite hazard score for a parcel, listing specific hazards (flood, wildfire, seismic, etc.) with sources. It distinguishes from sibling tool parcel.compare for multiple parcels.

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

Usage Guidelines5/5

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

Explicitly says when to use (property risk profile, insurance pricing) and when not to (comparing multiple parcels, suggesting parcel.compare). Also mentions coverage variations by region.

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

owner.pierceAInspect

Resolve an owner name or entity to its full property portfolio. Pierces LLC/Trust veils where PropRaven has linked the entity to its parent (via SEC Ex 21, sponsor parent-rollup, and county-level filings). Returns: canonical owner name, entity type, portfolio summary (count, total value, geographic distribution), and a list of parcels owned. Use when the user names a person, LLC, trust, or public company and wants to see what they own. Do NOT use when starting from a parcel (use parcel.lookup, which returns owner inline). If ticker is provided, the tool searches owner records for the company name first (best-effort). Tier-1 portfolios (SEC-tracked public companies — DHI, INVH, AMH, PHM, etc.) have higher confidence on cross-state attribution.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOwner name or entity name. Free-form — PropRaven normalizes (trims suffixes, handles trust/LLC variants).
stateNoOptional 2-letter state filter to scope the portfolio.
tickerNoPublic-company ticker. The tool attempts to resolve to a company name via owner search first.

TDQS

A4.5/5.0
Behavior4/5

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

Describes veil-piercing capability and data sources (SEC, sponsor rollup, county filings). Mentions return structure and confidence levels. No annotations provided, so description carries full burden. Could mention idempotence/side effects, but implied read-only.

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?

Well-structured with front-loaded purpose and actionable guidance. Each sentence adds value; slightly long but not excessive.

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

Completeness4/5

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

Covers return structure, confidence tiers, and example use cases. No output schema, so description compensates well. Lacks error handling info but overall sufficient for the complexity.

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?

Adds context beyond schema: name normalization, state filter optional, ticker resolution logic. Schema descriptions are already good; tool description enriches understanding.

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?

Clearly states the tool resolves an owner name/entity to its full property portfolio. Distinguishes from sibling parcel.lookup by explicitly saying when not to use it.

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

Usage Guidelines5/5

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

Explicitly says when to use (user names an owner) and when not to use (starting from a parcel, use parcel.lookup). Also describes ticker behavior and best-effort resolution.

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

parcel.compareAInspect

Fetch reports for 2–25 parcels so they can be ranked against criteria. Returns each parcel's full report (identity, owner, valuation, risks, permits, deeds) in a single payload — the calling agent does the per-criterion scoring and final ranking. This is the underwriting / shortlist loop. Use when the user has identified candidate properties (often from parcel.search) and wants them ranked. Do NOT use to discover new candidates (use parcel.search) or for a single property (use parcel.lookup + hazard.score). The criteria argument is returned verbatim in the response so the agent can pin its scoring to the user's intent.

ParametersJSON Schema
NameRequiredDescriptionDefault
criteriaYes1–8 ranking criteria, free-form natural language. Echoed back in the response to anchor the agent's scoring.
parcel_idsYesComposite parcel IDs to compare (e.g. "37183:0012345"). 2–25 parcels. Get IDs via parcel.search or parcel.lookup.

TDQS

A4.7/5.0
Behavior4/5

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

No annotations provided, but the description clarifies that the agent is responsible for scoring and ranking, and that criteria are echoed back. It does not mention destructive actions, auth needs, or rate limits, but the behavioral scope is well-defined for a compare-only tool.

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

Conciseness5/5

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

The description is four sentences, each serving a distinct purpose: purpose, output and agent role, use case label, and usage boundaries. No redundant information.

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

Completeness5/5

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

Given no output schema or annotations, the description adequately explains input format, output content (full reports per parcel), the agent's role in scoring, and the tool's place in the workflow (underwriting/shortlist loop).

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%, and the description adds value beyond the schema by providing an example ID format ("37183:0012345"), specifying how to obtain IDs, and explaining that the criteria argument is echoed back for scoring.

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

Purpose5/5

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

The description explicitly states the verb 'Fetch reports for 2–25 parcels so they can be ranked against criteria' and distinguishes from sibling tools by noting alternatives for discovery (parcel.search) and single-property lookup (parcel.lookup + hazard.score).

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?

Clearly states when to use: 'when the user has identified candidate properties' and includes explicit negative instructions: 'Do NOT use to discover new candidates (use parcel.search) or for a single property (use parcel.lookup + hazard.score).'

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

parcel.lookupAInspect

Resolve a single US parcel by identifier (composite county_fips:parcel_id, street address, or APN). Returns the canonical PropRaven record: identity, current owner, valuation, geography, and source provenance. Use when the user names one specific property. Do NOT use when ranking multiple parcels (use parcel.compare) or when filtering by criteria (use parcel.search). Example: parcel.lookup({ query: "37183:0012345" }) or parcel.lookup({ query: "420 S Tryon St, Charlotte NC" }).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesParcel identifier in any of three forms: (1) composite ID like "37183:0012345" — preferred, direct lookup; (2) full street address with state — uses fuzzy search, top 5 returned; (3) raw APN — search fallback.

TDQS

A4.6/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses behavior for different query types: composite ID is direct lookup, address uses fuzzy search returning top 5, APN is fallback. However, it does not mention failure modes, rate limits, or authorization requirements.

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 concise sentences plus examples. No filler. Purpose is front-loaded. Every sentence adds value.

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

Completeness4/5

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

Without an output schema, description explains return fields sufficiently. However, it omits edge cases (e.g., no match), error handling, or pagination for address search. Given the tool's simplicity, it is mostly complete.

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 already describes the three forms of the 'query' parameter with 100% coverage. Description adds value by indicating preferred form (composite ID) and specifying that address uses fuzzy search and returns top 5 results, which goes beyond schema.

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

Purpose5/5

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

Description clearly states it resolves a single parcel by identifier, specifying accepted formats (composite ID, address, APN) and listing returned fields (identity, owner, valuation, geography, provenance). It distinguishes from siblings by mentioning when to use parcel.compare and parcel.search.

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

Usage Guidelines5/5

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

Explicitly states when to use (user names one specific property) and when not to use (ranking multiple parcels → parcel.compare; filtering by criteria → parcel.search). Provides concrete examples of invocation.

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

parcel.searchAInspect

Filter US parcels by geography + attributes. Returns a ranked list (default 50, max 200) of matches with summary fields (id, address, owner, assessed value, last sale). Use when the user wants properties matching criteria ("absentee-owned SFR in Mecklenburg County over $400k", "flipped properties in Phoenix since 2024"). Do NOT use when looking up a single known property (use parcel.lookup) or ranking a known set (use parcel.compare). Backed by the /api/v1/search/full text+attribute index; pass q as either a city, owner name, or address fragment.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesText query — owner name, address fragment, or city. Min 2 chars.
dirNoasc
cityNoCity filter (when q is non-city).
pageNo
sortNoaddress
fieldNoRestrict the q match to one field.
limitNo
stateNo2-letter state filter.

TDQS

A4.4/5.0
Behavior4/5

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

Adds context beyond schema: backend index, query types, default/max limits, and summary fields. Lacks explicit read-only statement but no annotations to contradict.

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

Conciseness5/5

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

Four sentences with purpose first, then return structure, usage guidance, and backend context. No redundant words.

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

Completeness4/5

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

Covers core use cases, filtering, pagination, and sibling differentiation. Lacks detail on error handling and exact ranking logic, but sufficient given no output schema.

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

Parameters3/5

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

With 50% schema coverage, the description clarifies `q` usage and limit defaults but does not detail other parameters like `sort`, `dir`, or `page` beyond schema constraints.

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

Purpose5/5

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

The description clearly states 'Filter US parcels by geography + attributes' and differentiates from siblings with explicit 'Do NOT use' instructions for parcel.lookup and parcel.compare.

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?

Provides concrete use cases ('absentee-owned SFR in Mecklenburg County...') and explicit when-not-to-use scenarios, giving the agent clear decision criteria.

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

permits.historyAInspect

Timeline of building / construction / demolition permits filed against a parcel. Each permit includes type, status, declared value, issued date, completion date, contractor (where disclosed), and the originating jurisdiction's permit ID. Use when the user asks about construction activity, recent renovations, planned work, or wants to detect a property that's actively changing. Do NOT use to find properties WITH recent permits across a market (use parcel.search). Coverage varies by county: top-100 metros have near-complete permit feeds; smaller jurisdictions may be empty.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoISO date — only return permits issued on or after this date (client-side filter).
typesNoFilter by permit type substring (e.g. ["Building", "Demolition"]). Case-insensitive.
parcel_idYesComposite parcel ID.

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses that coverage varies by jurisdiction (top-100 metros complete, smaller may be empty) and lists returned fields. Does not explicitly state read-only, but implied. Good context for an agent.

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?

Five sentences, each adding unique value: purpose, field list, positive usage, negative usage, coverage caveat. Front-loaded with purpose. No fluff.

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

Completeness4/5

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

Covers purpose, usage, field details, and coverage limitations. Lacks mention of pagination or default ordering, but given the tool's simplicity, it is fairly complete. No output schema, so description of return values is adequate.

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 baseline is 3. The description does not add extra meaning beyond the schema's parameter descriptions; it only mentions parcel_id implicitly. No additional value.

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?

Clearly states it returns a timeline of permits for a parcel, listing specific fields. Distinguishes from sibling 'parcel.search' by saying not to use for finding properties with permits across a market.

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

Usage Guidelines5/5

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

Explicitly states when to use (construction activity, renovations, planned work) and when not to use (finding properties with permits across a market, deferring to parcel.search). Also provides coverage caveat.

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

sales.historyAInspect

Deed / transaction timeline for a parcel: every recorded sale, transfer, refinance. Each event includes date, sale price (where disclosed; flagged when withheld by state), buyer, seller, and deed type. Use when the user asks about a property's transaction history, flip activity, or holding period. Do NOT use to find properties with recent sales market-wide (use parcel.search with sold_since) or to estimate current market value (use valuation.estimate, which incorporates this data plus comps). Note: 13 states do not disclose sale prices on deeds (KS, MS, TX, UT, WY, etc.); PropRaven flags these explicitly. If include_liens=true, the tool ALSO fetches UCC liens via the parcel report — two API calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoISO date — only return events on or after this date (client-side filter).
parcel_idYesComposite parcel ID.
include_liensNoInclude UCC liens. Default false. Adds one extra API call.

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description fully handles behavioral disclosure. It notes the side effect of include_liens=true making an extra API call and highlights that 13 states do not disclose sale prices. It does not explicitly state the tool is read-only, but the context implies it. No contradictions.

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?

Concise yet informative; the purpose is front-loaded, followed by usage guidelines, behavioral notes, and parameter clarification. Every sentence adds value with no redundancy.

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

Completeness5/5

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

Despite no output schema, the description explains return event fields (date, price, buyer, seller, deed type) and flags for undisclosed prices. It also covers state-level limitations and side effects, making it complete for this tool's complexity.

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

Parameters4/5

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

Schema coverage is 100%, so the description adds value beyond schema by clarifying that 'since' is a client-side filter and that 'include_liens' adds an extra API call with default false. This nuance aids correct usage.

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

Purpose5/5

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

The description clearly states it provides a deed/transaction timeline for a parcel, listing specific event details (date, price, buyer, seller, deed type). This specific verb+resource distinguishes it from sibling tools like parcel.search or valuation.estimate.

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

Usage Guidelines5/5

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

Explicitly states when to use (user asks about transaction history, flip activity, holding period) and when not to use (market-wide sold properties or current value estimation), with direct references to alternative tools (parcel.search, valuation.estimate).

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

valuation.estimateAInspect

Estimated market value for a parcel: market estimate, assessed value, last sale price, and the underlying assessment + improvement breakdown. Use when the user asks for a property's value, market estimate, AVM, or wants to compare assessed vs market. Do NOT use as a substitute for an appraisal — PropRaven AVM has ±10–15% MAE in normal markets, wider in tail. Historical AVM (as_of) is not yet supported in v1; tool returns the current snapshot.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_ofNoISO date — historical AVM. NOT YET SUPPORTED in v1; ignored.
parcel_idYesComposite parcel ID (county_fips:parcel_id).

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It discloses that the tool returns a current snapshot, notes that as_of is not supported, and gives accuracy context. Could mention rate limits or response structure, but overall provides good transparency.

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

Conciseness5/5

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

Three sentences, front-loaded with purpose and scope, no wasted words. Every sentence adds value: purpose, usage guidance, and behavioral caveat. Excellent conciseness.

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

Completeness4/5

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

Given no output schema, the description explains the return components (market estimate, assessed value, etc.). It covers limitations and unsupported features. Could mention typical response format or authentication requirements, but is largely complete for the tool's complexity.

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. The description adds value by explicitly noting that the as_of parameter is not yet supported and ignored, which is crucial for correct invocation. Parcel_id is already described in schema, but the additional context elevates the score.

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

Purpose5/5

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

The description clearly states the tool returns estimated market value for a parcel, including specific components like assessed value and last sale price. It distinguishes from siblings by listing what it provides and implying it's the go-to for valuation queries, unlike other tools like sales.history.

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

Usage Guidelines5/5

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

Explicitly states when to use the tool (user asks for property value, market estimate, AVM, or comparing assessed vs market) and when not to use (substitute for an appraisal). Also provides accuracy limitations (MAE ±10-15%), guiding appropriate use.

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. Dates show when Glama detected each change.

  1. 8 tool updatesv0.1.1
    • First observedhazard.score
    • First observedowner.pierce
    • First observedparcel.compare
    • First observedparcel.lookup
    • First observedparcel.search
    • First observedpermits.history
    • First observedsales.history
    • First observedvaluation.estimate

TDQS

A4.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: parcel.lookup for single parcel, parcel.search for filtering, parcel.compare for ranking multiple, owner.pierce for portfolio, hazard.score for risk, valuation.estimate for value, permits.history for construction, sales.history for transactions. No overlaps.

Naming Consistency5/5

All tools use a consistent 'domain.action' pattern with lowercase and underscores (e.g., parcel.lookup, parcel.search, owner.pierce). The verb or noun after the dot is descriptive and follows a clear taxonomy.

Tool Count5/5

8 tools is well-scoped for a property intelligence server. Covers core operations (lookup, search, compare), ownership, risk, valuation, permits, and sales without excessive granularity.

Completeness4/5

Covers most key workflows: parcel identification, search, comparison, owner research, hazard, valuation, permits, and sales history. Minor gaps like zoning or tax history are minor; the set is comprehensive for typical use cases.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    A comprehensive Model Context Protocol server for real estate data management that provides tools and resources for property listings, agent management, market analysis, client relationships, and area intelligence.
    57
    AGPL 3.0
  • A
    license
    A
    quality
    D
    maintenance
    Open-source MCP server providing real estate regulatory intelligence (zoning, permits, entitlements, deal scoring) for US properties, enabling AI agents to access 10 callable tools.
    12
    9
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to look up county assessor public records for properties, check MLS discrepancies against public data, and discover new county assessor sources, all via a local MCP server for real-estate appraisal workflows.
    6
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jdw2111/propraven-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server