Dilix MCP
OfficialClick 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., "@Dilix MCPShould I pursue 555 California St for a residential conversion?"
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.
Dilix MCP
The open-source MCP server for Dilix — the regulatory intelligence layer for real estate AI agents.
Add Dilix to any MCP-compatible AI agent in 30 seconds. Get zoning, permits, entitlement roadmaps, state legislation flags, and deal scoring for any US property — surfaced as 10 callable tools.
Heads up: This package is the open-source client. The Dilix API (data + intelligence) requires an API key — get one free at dilix.ai/api-keys.
Why Dilix exists
Real estate is one of the largest opaque asset classes in the world. Owners close on properties unaware of regulatory shifts that compress NOI. Flippers burn months of carry on permits that never land. Brokers waste deal cycles chasing entitlements that won't clear.
Dilix is the data layer that catches it all — every permit, zoning change, and bill across 16 cities and 11 states, going national. For humans, and the AI agents reshaping the industry.
This MCP package gives those agents direct access.
Related MCP server: civic-library-mcp
Install
npm install -g @dilix/mcpOr run on demand without installing:
npx @dilix/mcpGet an API key
Free tier: 100 calls/month. Sign up at dilix.ai/api-keys.
Set it as an environment variable:
export DILIX_API_KEY="your-key-here"Wire it into Claude Desktop
Add to ~/.claude/claude_desktop_config.json (Mac) or
%APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"dilix": {
"command": "npx",
"args": ["-y", "@dilix/mcp"],
"env": {
"DILIX_API_KEY": "your-key-here"
}
}
}
}Restart Claude Desktop. The Dilix tools will appear in the MCP tool palette.
Wire it into Cursor / Continue / custom agents
Any MCP-compatible host. Spawn the binary with DILIX_API_KEY in the
environment. Speaks standard MCP over stdio.
Available tools
Tool | What it does |
| Zoning + HCD compliance + state-law flags for any address |
| Full approval pathway with timelines, fees, risks |
| Property records, valuation, sale history (US) |
| Scan a city for SB-9, SB-79, AB-2011, AB-130 candidates |
| Bulk compliance + opportunity scan across up to 50 properties |
| Hourly autonomous monitoring with email alerts |
| Real-time permit status + status-change notifications |
| Full deal score: zoning + property + financials + verdict |
| Source candidate properties matching investment criteria |
| Live SOFR + 10Y Treasury for cap-rate underwriting |
Full schemas: docs/tools.md (coming soon — for now, MCP hosts will expose them automatically once connected).
Example: Claude analyzing a deal
User: Should I pursue 555 California St for a residential conversion?
Claude (with Dilix MCP):
1. analyze_zoning(city="San Francisco", address="555 California St")
→ C-3-O zoning · Builder's Remedy active · AB-2011 eligible
2. get_entitlement_roadmap(...)
→ Ministerial pathway · CEQA exempt · 6-9 mo timeline · $X est. fees
3. lookup_property(address1="555 California St", address2="SF, CA 94104")
→ Built 1969 · 350K sqft · last sold 2018 · $X assessed
Verdict: Strong candidate. Pursue. Submit SB-330 vesting application
within 30 days to lock current rules.Grounding — every tool returns reasoning + sources
Starting in v1.1.0, every Dilix MCP tool surfaces a structured envelope to the host model:
_reasoning— plain-English narrative the agent can quote verbatim to the user. Composed by Dilix from structured fields, not extrapolated. Eliminates the most common failure mode (host model invents a cap rate / code section / date that wasn't in the response)._sources— citations the agent can surface as "Source: X" links. Includes provider, citation text, and a verifiable URL where available. Pulled from real authorities: ATTOM, DataSF, FEMA, HUD, NY Fed, FRED, Cal. Civ. Code, municipal codes, etc._caveats— soft warnings the agent should pass through (e.g. "no parcel-level zoning available for this address — answers are city-level only")._schemaVersion— pin behavior across upgrades.
The MCP server splits these into separate content blocks so the host model receives the narrative as the primary text and citations as a structured second block. Agents that want the raw payload still get it as a JSON block.
Endpoints currently emitting the envelope: analyze_deal, analyze_zoning,
get_entitlement_roadmap, lookup_property, market_rates,
find_opportunities, scan_portfolio. Others fall back to the legacy
single-block JSON response.
Configuration
Env var | Required? | Default | Description |
| Yes | — | Get from dilix.ai/api-keys |
| No | live Dilix API | Override for self-hosted or staging |
Pricing
The MCP client is free and open-source (MIT). The hosted Dilix API is usage-based:
Free tier: 100 calls/month
Pro: $49/month — 5,000 calls
Agentic: $499/month — 50,000 calls + portfolio monitoring + webhooks
Enterprise: custom — email ops@dilix.ai
See dilix.ai/pricing for the live tiers.
Why open source?
Same playbook as Anthropic, Vercel, Supabase, Resend: open the developer surface, charge for the data + infrastructure behind it.
We open-sourced the MCP client because:
Devs deserve to read the code that runs in their agent
The MCP spec is open (Anthropic, late 2024) — closing the client would be hypocritical
The client is just the "USB cable." Our actual value is the data + scoring + intelligence behind the API
Project status
Maintained best-effort by a solo founder. See STATUS.md for expectations and how to help.
For commercial support, custom integrations, or enterprise SLAs: ops@dilix.ai
Security
Found a vulnerability? See SECURITY.md — please email
ops@dilix.ai (subject: [SECURITY]) rather than opening a public issue.
Contributing
PRs welcome. Small and focused win. Large refactors usually don't.
git clone https://github.com/dilix-ai/mcp.git
cd mcp
npm install
npm run build
npm run devLicense
MIT. See LICENSE.
"Dilix" is a trademark of Ownership Theory LLC. The MIT license grants rights to the source code, not to the brand.
Links
🌐 Website: dilix.ai
🔑 Get an API key: dilix.ai/api-keys
📖 Docs (full): dilix.ai/agents
📰 Weekly Briefing: dilix.ai/briefings
📧 Contact: ops@dilix.ai
Available Tools
12 toolsanalyze_dealA
Investment-grade deal underwriting with the regulatory layer attached. Returns: financials (cap rate, DSCR, NOI, cash-on-cash, GRM, break-even occupancy, LTV), regulatory resolution (max legal annual rent increase % + source ordinance + municipal-code citation + confidence + effective period — sourced from the California Apartment Association 1/2026 ordinance chart for CA properties, AB-1482 statewide fallback elsewhere), year-by-year projection (NOI under cap vs. unrestricted market growth for the chosen hold period), drag summary (cumulative rent foregone + capitalized exit-value haircut over the hold), and a verdict (strong/workable/caution/pass) with reasoning. Use this tool when an agent needs to underwrite a multifamily acquisition, run a 'what-if' on a regulatory scenario, or surface NOI risk that conventional underwriting models miss.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ||
| city | Yes | City name — required for rent control resolution | |
| state | No | Two-letter state code, default CA | |
| county | No | County name — used for AB-1482 regional CPI lookup | |
| address | Yes | Full street address | |
| reserves | No | Annual | |
| insurance | No | Annual | |
| utilities | No | Annual | |
| hold_years | No | Hold period for projection, default 5, range 1-15 | |
| unit_count | No | Total dwelling units in the building | |
| year_built | No | Year of original construction. Drives Costa-Hawkins + AB-1482 15-year eligibility filters. Default 1970 if unknown. | |
| vacancy_rate | No | Percent, default 7 (93% occupancy) | |
| expense_ratio | No | Operating expenses as % of EGI | |
| interest_rate | No | Annual %, default 6.75 | |
| is_subsidized | No | Deed-restricted affordable / LIHTC / Section 8 | |
| property_name | No | Optional display name (e.g. 'The Bryant') | |
| property_type | No | Used for Costa-Hawkins SFH/condo exemptions | |
| other_expenses | No | Annual | |
| property_taxes | No | Annual | |
| purchase_price | Yes | ||
| down_payment_pct | No | Default 25 | |
| is_owner_occupied | No | ||
| market_growth_pct | No | Annual unrestricted-rent-growth assumption for the comparison line, default 4 | |
| expense_growth_pct | No | Annual expense growth assumption, default 3 | |
| current_annual_rent | No | Alternative to monthly | |
| maintenance_repairs | No | Annual | |
| property_management | No | % of EGI, default 8 | |
| other_monthly_income | No | ||
| loan_amortization_years | No | Default 30 | |
| current_gross_monthly_rents | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden. It discloses all outputs, data sources (California Apartment Association ordinance chart, AB-1482), and how key parameters are used (e.g., year_built for Costa-Hawkins filters). It does not explicitly mention side effects or error handling, but the behavior is well-covered for an underwriting tool.
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 lengthy but front-loaded with a clear purpose. Every sentence adds value by detailing outputs or usage. While it could be more structured (e.g., bullet points), it is not excessive given the complexity of the tool (30 parameters, no output schema).
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?
Despite having 30 parameters and no output schema, the description is remarkably complete. It explains all return values (financials, regulatory resolution with specific fields, projection, drag summary, verdict with reasoning), lists data sources and assumptions, and covers key parameter interactions. This fully compensates for the lack of an output schema.
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 83% (high), so baseline is 3. The description adds significant meaning beyond the schema by explaining how parameters like year_built and property_type drive regulatory filters and exemptions. It also contextualizes defaults and relationships between inputs and outputs.
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?
Description clearly states it performs investment-grade deal underwriting with a regulatory layer, lists specific outputs (financials, regulatory resolution, projection, drag summary, verdict), and distinguishes from sibling tools like analyze_zoning or get_entitlement_roadmap by focusing on multifamily acquisitions and rent control analysis.
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?
Description explicitly states when to use the tool: "when an agent needs to underwrite a multifamily acquisition, run a 'what-if' on a regulatory scenario, or surface NOI risk that conventional underwriting models miss." This provides clear guidance on use cases and implicitly excludes non-underwriting tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_zoningB
Returns zoning classification, HCD compliance status, and state-law overrides (SB-9, SB-79, AB-2011, AB-130, Builder's Remedy) for any US address.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City name | |
| state | No | Two-letter state code (e.g. CA) | |
| address | Yes | Full street address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry behavioral burden. It only states what is returned, but does not disclose if the operation is read-only, authentication needs, rate limits, or side effects.
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?
Single sentence that is concise and front-loaded with key return items. No extraneous words.
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 complexity of zoning analysis, the description lacks explanation of what HCD compliance means, conditions for state-law overrides, or how to interpret results. No output schema, making it insufficient for an informed agent.
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 100% with each parameter described. Description adds overall context but no extra parameter-level detail beyond schema. Baseline score of 3 is appropriate.
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?
Description clearly states the tool returns zoning classification, HCD compliance status, and specific state-law overrides for any US address. This distinguishes from sibling tools like analyze_deal or find_opportunities.
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?
Implied usage for zoning analysis, but no explicit guidance on when to use vs alternatives like lookup_property or get_entitlement_roadmap. No exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_opportunitiesB
Scan a city for parcels qualifying under specific state-law incentives (SB-9, SB-79, AB-2011, AB-130, Builder's Remedy, etc.). Returns ranked candidate list.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | ||
| state | No | ||
| incentive | Yes | e.g. 'SB-9', 'AB-2011', 'Builder\'s Remedy' | |
| max_results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It only says 'Scan' and 'Returns ranked candidate list,' but does not disclose whether it's read-only, destructive, or any other behavioral traits like rate limits or performance implications.
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?
One sentence with front-loaded action and specific details. No unnecessary words, every part serves a purpose.
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?
No output schema is provided, and the description does not explain the structure of the ranked candidate list. With 12 sibling tools, more context about when to use this over alternatives would improve 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 only 25%. The description adds value for the 'incentive' parameter by listing examples, but fails to explain 'state' (needed to disambiguate cities) and 'max_results' (controls count). It does not compensate for the low coverage.
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?
Clearly states the tool scans a city for parcels qualifying under specific state-law incentives and returns a ranked list. The verb 'scan' and resource 'city for parcels' are specific, and the listed incentives distinguish it from siblings like 'scan_portfolio' and 'source_deals'.
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 explicit guidance on when to use this tool versus alternatives. It implies usage for finding qualifying parcels under incentives, but does not mention when not to use it or provide context relative to sibling tools like 'analyze_deal' or 'watch_parcel'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entitlement_roadmapC
Step-by-step approval pathway for a project: required permits, agency review timelines, fee estimates, CEQA pathway, and risk flags.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| address | Yes | ||
| unit_count | No | ||
| project_type | Yes | e.g. 'residential conversion', 'multifamily new construction', 'ADU addition' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description lists output components but does not disclose behavioral traits like data source, update frequency, or error handling.
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?
Single sentence covering multiple output aspects. Front-loaded with key value, no fluff.
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 4 parameters and no output schema, the description omits important details like how to interpret risk flags or CEQA pathway, and lacks usage examples.
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 only 25%. Only project_type has an example. The description does not clarify optional parameters (city, unit_count) or their impact on results.
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 provides a step-by-step approval pathway including permits, timelines, fees, CEQA pathway, and risk flags. It uses specific nouns and distinguishes this tool from siblings like analyze_zoning or track_permit.
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 on when to use this tool vs alternatives. Does not mention when not to use it or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_ratesA
Live SOFR, 10Y Treasury, and CRE cap-rate spreads for current underwriting.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It implies read-only behavior ('Live') and lists data types, but does not explicitly state idempotency, refresh rates, or authorization needs. Adequate but minimal.
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?
Single sentence with no extraneous words. Efficiently conveys the tool's output.
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, parameterless tool returning current rates, the description is mostly complete. Could mention data source or update frequency, but not essential given the tool's scope.
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?
Input schema has zero parameters with 100% coverage. Description logically adds no parameter detail. Baseline 4 for zero-param case.
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 live SOFR, 10Y Treasury, and CRE cap-rate spreads for underwriting. It uses specific verbs and resources, differentiating it from sibling tools like analyze_deal or find_opportunities.
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 on when to use this tool versus alternatives. Given many sibling tools, explicit context or exclusions would help but are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_demoA
Returns the latest pre-rendered Dilix demo bundle for an address: 3D hero + HUD images, broker headline (LoopNet ask + cap), Dilix correction (rent cap, 5-yr NOI drag, exit haircut, corrected NOI, valuation gap), and a public shareable URL at /demo/{slug}. Use this when an agent or chat user wants to surface the Dilix counterfactual on a property — pitches, deck slides, prospect emails, social posts. Read-only: returns a 'not found' envelope (with a hint to live-render at /feasibility-3d) if no demo exists yet for the address. The nightly auto-discovery cron renders new SF/Oakland multifamily listings.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Full street address, e.g. '2625 Polk St, San Francisco, CA 94109' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description fully carries the burden. It explicitly states 'Read-only,' describes the return content including the 'not found' envelope, and mentions the nightly cron for new listings, setting expectations for data freshness and coverage limits.
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 well-structured with a clear first sentence summarizing the output, followed by use cases, read-only behavior, and cron note. Slightly verbose but every sentence adds value; minor surplus detail like the cron info could be condensed.
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 one parameter and no output schema, the description thoroughly explains the return structure, error case, and related functionality. It equips the agent with all necessary context to decide when and how to invoke this 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 single parameter 'address' is fully described in the schema with an example. The description does not add new semantic meaning beyond confirming it expects a full street address; hence no significant extra value. Baseline 3 due to 100% schema coverage.
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 a pre-rendered Dilix demo bundle for an address, listing specific components (3D hero, HUD images, broker headline, Dilix correction metrics, shareable URL). It distinguishes from sibling tools like request_demo_render and lookup_property by focusing on the pre-rendered demo use case.
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?
Explicitly states when to use: 'when an agent or chat user wants to surface the Dilix counterfactual on a property — pitches, deck slides, prospect emails, social posts.' Also provides a fallback hint to live-render at /feasibility-3d if no demo exists, guiding when to use an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_propertyA
Property records, valuation, sale history, owner info, and physical attributes for any US property.
| Name | Required | Description | Default |
|---|---|---|---|
| address1 | Yes | Street address | |
| address2 | Yes | City, State ZIP |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It lists return types (records, valuation, history, etc.) but does not disclose behavioral traits like error handling for invalid addresses, rate limits, or auth requirements.
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?
Single sentence, front-loaded with key data categories (records, valuation, history, owner, attributes). No wasted words; efficient communication.
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 tool simplicity (2 params, no output schema, no annotations), description adequately covers purpose and scope. Could mention behavior when property not found, but overall sufficient.
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 covers both parameters with clear descriptions (street address, city/state/ZIP). Description adds 'any US property' context, but does not significantly extend beyond schema, which already provides 100% coverage.
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?
Description clearly states the tool returns property records, valuation, sale history, owner info, and physical attributes for any US property. It uses specific resource categories and distinguishes from siblings like lookup_demo (which likely focuses on demo data) and analyze_deal (which is about deal analysis).
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 explicit when-to-use or when-not-to-use guidance. The description implies use for US property lookups based on address, but does not contrast with alternatives like find_opportunities or track_permit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_demo_renderA
Live-renders a Dilix demo bundle for an address that doesn't have one yet. Fires GitHub Actions to run the full render pipeline (3D screenshot, NOI counterfactual, citations) and returns immediately. The bundle is typically available 60-90 seconds later — call lookup_demo with the same address to fetch it. Use this when lookup_demo returned found: false and you want to produce the demo on demand. Ideal for live cofounder/investor pitches: 'type any address, I'll render it'.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Full street address | |
| source_url | No | Optional LoopNet/Crexi listing URL — if provided, the render scrapes broker NOI for full $ delta computation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it fires GitHub Actions, returns immediately, and that the bundle is typically available in 60-90 seconds. It also explains the follow-up action of calling `lookup_demo`. This is good transparency for an async trigger tool, though it could mention if re-triggering is allowed.
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 main action. Every sentence adds value: the first states the core function, the second explains the async behavior, the third gives usage guidance and an ideal use case. No wasted words.
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 context (2 params, no output schema, no nested objects), the description is complete. It covers what the tool does, how it works asynchronously, what to expect, and how to retrieve the result. The intended use case is clear.
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 100%, so baseline is 3. The description adds value by explaining the optional `source_url` parameter: 'if provided, the render scrapes broker NOI for full $ delta computation.' This provides meaningful context beyond the schema's description.
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: 'Live-renders a Dilix demo bundle for an address that doesn't have one yet.' It specifies the verb ('renders'), resource ('Dilix demo bundle'), and conditions. It distinguishes itself from sibling tools like `lookup_demo` which is for fetching existing demos.
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: 'Use this when `lookup_demo` returned `found: false`.' It also provides ideal context ('live cofounder/investor pitches'). While it doesn't explicitly say when not to use, the condition is clear from the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_portfolioA
Bulk compliance and opportunity scan across up to 50 properties at once. Returns a per-property risk + opportunity report.
| Name | Required | Description | Default |
|---|---|---|---|
| addresses | Yes | List of property addresses (max 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions the input limit (50 properties) and output type (report), but does not disclose if the tool is read-only, has side effects, or requires authentication.
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 concise sentences, front-loaded with the key action, and contains no extraneous 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 no output schema, the description adequately explains return value. With 11 siblings, more differentiation could be helpful, but the description is sufficient for a simple single-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 schema coverage is 100% with a description of the 'addresses' parameter. The tool description reinforces the purpose but adds no new semantic details beyond what the schema provides.
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 performs a 'Bulk compliance and opportunity scan across up to 50 properties' and returns a per-property report. This distinguishes it from siblings like analyze_deal (single property) and find_opportunities (search).
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 batch scanning multiple properties, providing context. However, it does not explicitly state when not to use it or mention alternatives like analyze_zoning for zoning-specific scans.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
source_dealsC
Source candidate properties matching investment criteria across one or more markets.
| Name | Required | Description | Default |
|---|---|---|---|
| markets | Yes | Cities or metros | |
| criteria | No | e.g. { min_units: 4, max_price: 5000000, zoning: ['multifamily'] } |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description should disclose auth needs, side effects, or output behavior. It only states the basic function, omitting details like whether it's a search or retrieval, or any limits.
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?
Single sentence, no wasted words. Efficiently conveys the core function.
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?
No output schema provided, so description should explain return value. It does not state what information is returned about sourced properties. Nested object parameter could also use more context.
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 100% with descriptions for both parameters. Description adds an example for 'criteria' but doesn't fully elaborate all possible subfields. Baseline 3 is appropriate.
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?
Description clearly states the tool sources candidate properties matching criteria across markets. Verb 'Source' and resource 'candidate properties' are specific, but lacks differentiation from siblings like 'find_opportunities'.
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 on when to use this tool vs alternatives. Sibling tools like 'find_opportunities' and 'scan_portfolio' overlap, but no when-not-to or context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
track_permitC
Track a specific permit application by ID or address. Returns current status and notifies on status changes.
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | ||
| permit_id | No | ||
| notify_email | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It says 'notifies on status changes' but does not explain the notification mechanism (e.g., email via notify_email), whether it is a one-time or ongoing subscription, or if authentication is required. Major behavioral aspects are left ambiguous.
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 and no wasted words. It could be improved by structuring information about parameters separately, but it is not verbose.
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 three parameters and no output schema/annotations, the description is too short. It omits details about output format, notification frequency, prerequisites, and how it differs from sibling tools like watch_parcel. The notification feature needs more explanation for an agent to use correctly.
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 states tracking 'by ID or address', adding context that address and permit_id are alternative identifiers. However, with 0% schema coverage, it fails to explain the notify_email parameter (its purpose, optionality, or format). The description adds some value but does not fully compensate 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 clearly states the tool tracks a permit application by ID or address and returns status with notifications. The verb 'Track' and resource 'permit application' are specific. However, it does not explicitly differentiate from siblings like watch_parcel, which may have overlapping functionality.
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 explicit guidance on when to use this tool versus alternatives. The description implies usage for tracking a specific permit, but does not mention when not to use it or provide context for choosing between track_permit and sibling tools like watch_parcel or lookup_property.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
watch_parcelB
Set up hourly autonomous monitoring on a parcel. Sends email alerts when zoning, permit, or regulatory status changes.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | ||
| notify_email | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose all behavioral traits. It mentions hourly monitoring and email alerts but omits details on setup, costs, limits, or how to stop monitoring.
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 single sentence is efficient but lacks necessary details. It is not overly verbose but sacrifices completeness.
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 two simple parameters and no output schema, the description is somewhat adequate but fails to explain monitoring scope, return behavior, or how to manage alerts.
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 clarify parameters. It only restates parameter names without adding format, constraints, or examples.
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 sets up hourly autonomous monitoring on a parcel and sends email alerts on changes. The verb 'set up' and resource 'parcel' are specific, and it distinguishes from sibling 'track_permit' by covering broader regulatory changes.
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 explicit guidance on when to use this tool versus siblings like 'track_permit'. The description implies general monitoring use but lacks exclusions or alternatives.
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.
12 tool updates
v1.2.0- First observed
analyze_deal - First observed
analyze_zoning - First observed
find_opportunities - First observed
get_entitlement_roadmap - First observed
get_market_rates - First observed
lookup_demo - First observed
lookup_property - First observed
request_demo_render - First observed
scan_portfolio - First observed
source_deals - First observed
track_permit - First observed
watch_parcel
TDQS
Scored across 12 tools
Each tool targets a distinct aspect of real estate analysis: underwriting, zoning, opportunity scanning, entitlement roadmaps, market rates, property records, demos, portfolio scanning, deal sourcing, permit tracking, and parcel monitoring. No two tools have overlapping purposes.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., analyze_deal, get_market_rates, watch_parcel). Verbs like analyze, find, get, lookup, request, scan, source, track, watch are all action-oriented and clear.
12 tools is an appropriate number for a domain covering multifamily underwriting, zoning, entitlements, market data, property lookup, demo generation, portfolio scanning, deal sourcing, and permit tracking. Each tool serves a clear and necessary function without bloat.
The tool set covers core workflows for development and investment analysis: deal underwriting with regulatory impact, zoning, entitlements, market rates, property records, demo rendering, portfolio scanning, deal sourcing, permit tracking, and parcel monitoring. Minor gaps like comparable sales analysis exist but do not hinder the primary use cases.
Maintenance
Related MCP Connectors
MCP server giving Claude AI access to 22+ NYC public-record databases for real estate due diligence
Agent-native MCP server over 49M+ US public and government records, privacy-first, always current.
MCP server for querying Tulsa County, Oklahoma property and parcel data for AI agents.
Agent-native MCP over US public + government records, entity- and parcel-keyed.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceUK property data MCP server for AI hosts (Claude, ChatGPT). Wraps Land Registry, Rightmove, EPC, rental yields, stamp duty, and Companies House into 13 tools.2MIT
- AlicenseAqualityDmaintenanceAn MCP server that gives AI agents clean, token-efficient access to US civic & property data — geocoding, census tracts, Opportunity Zones, ACS demographics, and FEMA flood zones — sourced entirely from free federal open data.531 npm1MIT
- FlicenseAqualityCmaintenanceMCP server that exposes a Hawaii property pipeline as Claude tools, allowing natural language queries about parcel records, hazards, zoning, ADU eligibility, and more, based on real public data.3-
- FlicenseNot gradedqualityDmaintenanceA production-grade MCP server enabling Claude to perform comprehensive NJ real estate workflows including property search, valuation, neighborhood intelligence, investment analysis, and agent tools via 20 tools and 15+ data sources.-