DFX Real Estate Intelligence
Server Details
Free, keyless. CRE loan maturities in 52 states. Parcels, ownership, sales: Massachusetts only.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- Capital-W-Holdings/us-property-parcel-real-estate-debt
- GitHub Stars
- 0
- Server Listing
- DFX Real Estate Intelligence
Available Tools
12 toolschanges_sinceWhat DFX has learned since your last callARead-onlyIdempotentInspect
Poll for what is NEW to you, ordered by when DFX learned it rather than by when it happened. TWO CALLS ARE REQUIRED BEFORE YOU SEE ANYTHING: the first, with no cursor, deliberately returns ZERO events and a starting position; the second, with that cursor, returns what DFX learned in between. If you want rows now rather than a subscription, call search_property_events instead. Filter by event type, state, or a specific property or parcel id. Deterministic and indexed, so it is cheap to call often. Free.
HISTORICAL FAMILIES DO FLOW THROUGH HERE. within_days on search_property_events cannot reach the past, but this tool is ordered by when DFX LEARNED a fact, not when the fact happened, so a foreclosure that occurred months ago and was ingested today arrives in today's delta. A distress or sales feed built on this works.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | Opaque cursor from a previous call. Omit on the first call to establish a position; that call returns no events by design. | |
| state | No | Two letter state code | |
| event_type | No | One family. Same vocabulary as search_property_events. | |
| place_dfx_id | No | Watch one property or parcel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it readOnly, idempotent, and non-destructive, and the description adds substantial context beyond that: two calls required, first returns zero by design, ordering is by learned time, deterministic/indexed/cheap, and historical families flow through. Nothing contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every section adds necessary context: polling protocol, alternative, filters, cost/performance, and historical behavior. The key rule is front-loaded. There is some repetition of the learned-time ordering point, but it is used deliberately to emphasize the historical delta behavior.
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 cursor-based polling tool with no output schema, the description covers all critical operational details: how to start, what the first call returns, what the second returns, what filters are available, cost characteristics, and how it differs from search_property_events. An agent has enough to call it correctly without further inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already high, and the description reinforces filter semantics by naming event type, state, and property/parcel ID. It also clarifies the cursor behavior in plain language ('with no cursor...second, with that cursor'). It adds value beyond the schema even though it doesn't detail every parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Poll for what is NEW to you' and defines the unique ordering principle ('when DFX learned it rather than by when it happened'). It also distinguishes itself from search_property_events, so an agent can immediately tell what this tool is for without inspecting siblings.
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?
It gives explicit when-to-use guidance, including the exact two-call cursor protocol and the alternative: 'If you want rows now rather than a subscription, call search_property_events instead.' It also explains what must not be used for past-dated facts via within_days, which makes the boundary clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debt_maturity_schedulePAID, $1.00: confirmed commercial mortgage maturities for one stateARead-onlyIdempotentInspect
PAID: $1.00 USD per delivered schedule. This is the ONLY priced tool on this server. The other eleven are free, keyless and permanently so.
Returns the LOAN rather than the event: for one US state and one forward window, up to 200 loans with maturity date, original principal, lender name, instrument type, origination date and the secured property's address, deduplicated to one row per loan and ordered by maturity.
Every maturity_basis is 'confirmed': 19,881 of 19,881 loans carry a date filed with the SEC by a servicer or recorded by HUD, and none is estimated or inferred from a term length.
HOW TO GET A PRICE, FREE: call this tool with no authorize argument and no credential. You are not charged and not refused. You receive a real quote for your exact arguments, the price, every field that would arrive, the known limits, and the number of rows your dollar would actually buy, so a filter that would deliver one row is visible before you spend anything.
HOW TO ACTUALLY BE CHARGED: resend the identical call with authorize and an X-DFX-Account header holding a funded account key. THIS IS THE ONLY THING ON THIS SERVER THAT NEEDS A CREDENTIAL, and it is the reason the handshake's 'no signup' is about the free tier and not about this tool. To get one, call open_dfx_account on this same server; no human step is needed to open it, and a balance must be funded before it can spend. Everything else here, including the quote itself, needs no account at all.
FREE ALTERNATIVE, AND IT IS A REAL ONE: search_property_events with event_type=LOAN_MATURITY_SCHEDULED returns up to 50 maturity EVENTS for the same state, dated and sourced, with no principal, no lender and no instrument. It is also a smaller population: an event has to be resolved to a single building, so a loan secured by several is in the paid tape and not in the free index. Use the free tool for timing, this one for a refinancing conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum loans, up to 200. The price does not change with the row count. | |
| state | Yes | Two letter state code. Required: the schedule is priced per state. | |
| authorize | No | Omit to be quoted. Supply to be charged and served in one response. | |
| within_days | No | Forward window from today. Default 548, eighteen months. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint=true and idempotentHint=true, the description adds substantial behavioral context: the tool is the only priced/credentialed one on the server, a quote call is free and unrefused, and a charged call requires an identical request with authorization. It also discloses that results are deduplicated, ordered by maturity, and that every maturity_basis is confirmed with no estimated or inferred dates. This far exceeds the annotation baseline and provides rich behavior around the payment flow.
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 longer than average, but the length is justified by the novel paid-quote-authorize handshake that must be explained precisely. It is front-loaded with pricing and the tool's core distinction, then moves through output details, quote behavior, charged behavior, and the free alternative in logical order. There is minor repetition of the 'only priced/credentialed tool' theme, which keeps it from a perfect 5.
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?
This is a high-complexity tool with no output schema, and the description carries that burden well: it lists every returned field, the row limit, ordering, deduplication, data-confidence guarantees, the quote/charge sequence, required headers, account setup, and the free sibling alternative. An agent reading this description alone knows exactly how to call the tool, how to avoid charges, how to authorize a charge, and what results to expect.
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 already documents all four parameters at 100% coverage, so the baseline is 3, and this description adds real value beyond it. It explains the semantics of the authorize flow at length, including the quote_id from the PAYMENT_REQUIRED reply and the max_price_usd ceiling checked before charging. It also clarifies that the price is per state and does not change with row count, which is meaningful parameter context not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: it 'Returns the LOAN rather than the event' for confirmed commercial mortgage maturities per US state and forward window. It enumerates the exact returned fields and explicitly differentiates itself from the sibling search_property_events, which returns maturity events. The title and first line also establish that it is the paid tool, so there is no ambiguity about its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: use this tool 'for a refinancing conversation' and use the free alternative search_property_events 'for timing.' It also provides a complete usage path: call without authorize for a free quote, then resend with authorize and an X-DFX-Account header to be charged. It even routes the user to open_dfx_account to obtain a credential, which is exactly the kind of conditional guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dfx_coverageWhat DFX actually covers, and what it does notARead-onlyIdempotentInspect
Measured coverage, served sources, object types and the known gaps stated plainly, including where geography is a single state and where nothing carries a calibrated probability. Call this before concluding that an empty result means an absent market.
Call it with NO arguments for the full grid: every event family, every state, measured. Call it with state and/or event_type for a direct verdict on that one slice (COVERED, NOT_COVERED or UNKNOWN) with the basis it was decided on, which is one small answer instead of a grid to parse. Free, and it queries no data: the verdict comes from a coverage registry, so a NOT_COVERED is measured rather than inferred from an empty search.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Two letter state code. Optional: narrows the answer to this state. | |
| event_type | No | Optional: narrows the answer to this family. Same vocabulary as search_property_events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing that the tool queries no data, that verdicts come from a coverage registry, and that NOT_COVERED is measured rather than inferred from empty search. It also discloses limitations such as single-state geography and lack of calibrated probability. This is valuable behavior an agent could not infer from annotations alone.
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 dense but each sentence adds a distinct point: what it reports, when to call it, how to call it with no arguments, how to call it with filters, and why the result is trustworthy. It is slightly longer than strictly necessary but front-loads the key purpose and usage guidance.
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?
This tool has zero required parameters and no output schema, so the description carries a high burden. It fully covers what the tool returns (full grid vs. one-slice verdict), the set of possible verdicts, the source of truth, and limitations. Nothing an agent needs to correctly invoke and interpret the tool is missing.
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 already describes both parameters with 100% coverage, so the baseline is 3. The description adds meaning by explaining the no-argument mode, the state/event_type narrowing mode, and the output shape (COVERED, NOT_COVERED, or UNKNOWN) for those parameters. It also ties event_type to the same vocabulary as search_property_events, which helps the agent reuse known values consistently.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific resource ('coverage registry') and what the tool does: reports measured coverage and known gaps. It distinguishes itself from event search by explicitly warning not to conclude an empty result means an absent market, and by referencing the same event_type vocabulary as search_property_events.
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 gives explicit when-to-use guidance: 'Call this before concluding that an empty result means an absent market.' It also tells the agent exactly how to invoke it differently depending on need: no arguments for the full grid, or state/event_type for a direct verdict.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dfx_payment_statusHas DFX actually been paid for this quote?ARead-onlyIdempotentInspect
Reads the DFX payment ledger for one quote. Free.
It is the ONLY trustworthy answer to 'did my payment go through'. A browser redirect, a Stripe success page and a client's own belief are all not receipts. This reads DFX rows, which advance only on a Stripe event DFX verified against Stripe's signature and then re-read from api.stripe.com.
AWAITING_PAYMENT means keep polling. PAID means your balance is funded and you may now repeat the paid call with authorize.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | ||
| account_key | No | your DFX account key, if your MCP client cannot send the X-DFX-Account header |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the read-only nature is covered. The description goes beyond that by disclosing the underlying verification mechanism (Strype signature verified and re-read from api.server.com), the meaning of the two statuses, and that it is free. This is rich behavioral context for a read 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?
Four sentences, all relevant, with the core action and scope front-loaded. The 'Free.' fragment and the trustworhy explanation earn their place, though the description is slightly longer than strictly necessary. No redundancy or filler.
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 two-param read with annotations and no output schema, the description covers the essential invocation context, the meaning of the status values, and the follow-up action for PAID. It doesn't describe error handling for unknown quote_id or other possible statuses, which is a minor gap given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: account_key has a schema description, but quote_id does not. The description's 'for one quote' gives minimal context that quote_id identifies the quote, but it doesn't explain the format, that it's required, or how to obtain it. The description partially compensates for the missing quote_id schema coverage but doesn't fully close the gap.
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 first sentence, 'Reads the DFX payment ledger for one quote,' states a specific verb and resource, and the description clarifies the core question it answers: 'did my payment go through'. It does not explicitly name sibling tools like dfx_coverage or fund_dfx_account as differentiators, so it misses full sibling distinction, but the purpose is unambiguous.
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 phrase 'It is the ONLY trustworthy answer to did my payment go through' gives an explicit when-to-use directive. It also excludes alternatives ('A browser redirect, a Stripe success page and a client's own belief are all not receipts') and provides action guidance based on statuses: 'AWAITING_PAYMENT means keep polling. PAID means ... repeat the paid call with authorize.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fund_dfx_accountOpen a Stripe payment for one quote and get the payment URLAInspect
Opens a Stripe payment for exactly one quote, into the account key you present, and returns the hosted payment URL and a payment id. THE AMOUNT IS READ FROM THE QUOTE, SERVER SIDE. There is no field on this tool through which a price can be proposed, raised or lowered. A CARD MUST STILL BE AUTHORIZED. That is the card network's boundary and not a DFX design choice: show the URL and the price to your human, or present your own payment credential to Stripe. Everything either side of that step is callable by a machine. Returning to the success page is NOT a receipt. Poll dfx_payment_status until it reports PAID; that reads the DFX ledger, which advances only on a Stripe event DFX verified and re-read from Stripe. This build collects Stripe TEST payments only. No real money moves.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | from the PAYMENT_REQUIRED reply | |
| account_key | No | your DFX account key, if your MCP client cannot send the X-DFX-Account header |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the minimal annotations, it discloses several non-obvious behaviors: the amount is read server-side from the quote, no price parameter exists, card authorization is still required, the success page is not a receipt, and only Stripe TEST payments are collected. This materially reduces the chance of an agent misusing the 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 front-loaded with the core purpose, then adds critical caveats in a logical order: amount authority, card authorization, receipt semantics, and test mode. Every sentence earns its place; the length is justified by the risk of a payment tool.
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?
With no output schema, the description appropriately states the return values: hosted payment URL and payment id. It also covers test-mode behavior and the polling follow-up, so an agent has enough to invoke and continue the flow. It does not describe failure modes, but those are less critical for a 2-parameter tool with this much 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%, so the baseline is 3. The description adds meaning by explaining that quote_id determines the amount server-side and that there is no price-adjustment field, which prevents the agent from looking for an amount parameter. The account_key fallback context is already present in the schema, so the description does not need to repeat it.
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 opening sentence names the exact action, resource, and result: open a Stripe payment for exactly one quote and return a hosted payment URL plus a payment id. It distinguishes itself from the sibling dfx_payment_status, which is for polling status, and open_dfx_account, which is for account creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly says to use this tool for one quote and explicitly directs the agent to poll dfx_payment_status until PAID, covering the main alternative. It does not enumerate when-not-to-use conditions for other siblings, but the scope is precise enough for correct routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_property_recordEverything DFX holds about one property or parcelARead-onlyIdempotentInspect
Given a DFX id from resolve_address, return current state, dated events, ownership and management relationships, debt with maturity dates and maturity basis, recorded sales with consideration plus registry book and page, and the provenance of each. Sales carry BOTH the instrument total and this parcel's allocated share, because a deed repeats its full price on every parcel it covers. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| dfx_id | Yes | id returned by resolve_address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive safety, so the description adds value with the sales semantics: it explicitly warns that sales carry BOTH the instrument total and the parcel's allocated share because a deed repeats its full price. The 'Free.' note also adds cost behavior beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: it states the input source, enumerates the return categories, explains an important data nuance, and signals cost. The structure front-loads the core behavior before the clarifying detail about sales consideration.
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?
With no output schema, the description carries the burden of explaining return content, and it does so thoroughly by listing current state, events, ownership, management, debt, sales, and provenance. Minor omissions like pagination or not-found behavior are acceptable given the single required parameter and read-only annotations.
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 input schema already fully describes dfx_id as 'id returned by resolve_address,' and the description repeats the same constraint without adding new format, validation, or usage details. With 100% schema description coverage, the description provides no additional parameter meaning beyond the baseline.
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 names a specific verb and resource: given a DFX id, return a comprehensive property record. It distinguishes this tool from siblings by noting it starts from resolve_address output and returns 'everything DFX holds,' which clearly separates it from search_parcels, changes_since, and debt_maturity_schedule.
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 phrase 'Given a DFX id from resolve_address' provides clear usage context: this tool is called after address resolution, not before. It does not explicitly name alternatives or exclusions, but the 'everything DFX holds' framing implies when the full record is needed rather than a narrower sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_dfx_accountOpen your own DFX economic account. Free, instant, no human.AInspect
Creates an economic identity you control, with NO money in it. Free. No human approval, no email, no contract, no sales call. It returns an account key ONCE. DFX stores only its digest and can never show it to you again, so store it before your next call. THE ACCOUNT STARTS AT $0.00 AND CANNOT BUY ANYTHING. DFX mints identity and never credit: a balance moves only when Stripe confirms a payment and DFX re-reads that payment from Stripe. There is no argument anywhere on this server through which you can propose a balance. Call this only if you intend to buy a paid capability. Every discovery, coverage, resolution, property record and event search tool on this server is free, unauthenticated and does not need an account, permanently.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | A short name for this account, for your own reference on receipts. Optional. | |
| quote_id | No | If you already hold a quote, pass it and the reply will name the exact funding call for it. | |
| principal | No | Who is behind this agent: the party whose money is being spent. Optional, stored as a CLAIM and never verified. It is not your software's name: 'Claude Desktop' is a client, not a principal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false and offer no safety signals, so the description carries the full burden. It discloses the one-time return of the account key, that DFX stores only a digest and cannot show it again, that the account starts at $0, and that no argument can propose a balance. It also clearly states the mutating nature and the absence of idempotency expectations. No contradiction with annotations.
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 every sentence earns its place: critical warnings (one-time key, zero balance, no balance arguments) are front-loaded, and the usage condition is stated in a separate, clear paragraph. The structure makes the essential information easy to parse.
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?
With no output schema and non-informative annotations, this description is remarkably complete. It covers what the tool does, why it exists, critical storage requirements, the zero-balance invariant, the inability to manipulate balances, and exactly when to use it versus alternatives. No significant gap remains for an agent deciding whether and how to call it.
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 the baseline is 3. The description adds meaningful context beyond the schema: it explains 'quote_id' in the context of a follow-up funding call, and clarifies 'principal' as the party whose money is spent, explicitly excluding software names like 'Claude Desktop.' Label is not expanded, but overall the description elevates parameter understanding.
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 states a specific verb and resource: 'Creates an economic identity you control, with NO money in it.' It clearly distinguishes itself from siblings by emphasizing that this account starts at $0 and is required only for paid capabilities, while free sibling tools are unauthenticated and permanent.
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 says 'Call this only if you intend to buy a paid capability' and enumerates that every other discovery, coverage, resolution, property record, and event search tool is free and does not need an account. This gives an agent clear when-to-call and when-not-to-call guidance, exceeding typical alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_addressResolve a US street address to a property or parcelARead-onlyIdempotentInspect
Turn a street address into canonical DFX object ids, with the match basis and any ambiguity stated. Returns typed objects: a 'property' (national federal programme multifamily) and/or a 'parcel' (Massachusetts assessor and registry layer). These are separate populations that barely overlap, so an address may return one, the other, or both. Free. Start here, then call get_property_record with an id.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| limit | No | ||
| state | No | Two letter state code | |
| address | Yes | Street address including the house number, for example '100 Binney St' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds valuable context beyond that: addresses may return a property, a parcel, or both, because these are 'separate populations that barely overlap,' and ambiguity is explicitly stated. This meaningfully informs the agent's expectations.
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 focused sentences with the core action front-loaded. Each sentence earns its place, though 'Free' is a minor extra that is useful but not essential. Overall it is tight and scannable.
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?
With no output schema, the description does a decent job explaining return categories and ambiguity, and annotations cover the safety profile. However, it omits behavior for no matches, does not clarify how limit applies, and leaves city/state usage to inference. This is adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, and the description does not compensate for the undocumented city and limit parameters. It restates address-level intent but adds no meaning for the optional parameters or limits. The schema covers address and state, but gaps remain for city and limit.
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 names a specific verb and resource: turning a street address into canonical DFX object ids, and specifies the output types ('property' and/or 'parcel'). This clearly distinguishes it from siblings like resolve_organization and search_parcels without requiring schema inspection.
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?
'Start here, then call get_property_record with an id' gives explicit workflow context and positions this as the entry-point lookup. It does not explicitly state when to prefer search_parcels or when not to use this tool, but the 'start here' guidance makes the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_organizationResolve a company name to a DFX entityARead-onlyIdempotentInspect
Turn an owner, manager, lender or servicer name into canonical DFX entity ids. A name is treated as a blocking key and never as an identity, so all candidates are returned rather than a guess. Free. Person lookup is deliberately not offered.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and non-destructive behavior. The description adds valuable behavioral nuance: a name is treated as a blocking key, not an identity, and all candidates are returned rather than a single guess. It also mentions the service is free, which is beyond what annotations convey.
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 short sentences with no filler. The core action is front-loaded, followed by the key matching behavior and the important person-lookup exclusion. Every sentence adds distinct value.
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 read-only, idempotent resolver with two parameters, the description is mostly complete: it explains what inputs are expected, what the output represents, and the main exclusion. The main gap is the undocumented limit parameter and how it interacts with the 'all candidates' behavior, but overall this is sufficient for an agent to call it 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?
Schema coverage is 0%, so the description must carry the parameter-meaning burden. It explains the semantic role of 'name' well (company or role-holder names, blocking key). However, it does not clarify the 'limit' parameter at all, and the claim about returning all candidates sits awkwardly with the default limit of 10.
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: it turns an owner, manager, lender, or servicer name into canonical DFX entity IDs. It also distinguishes itself from person lookup by explicitly saying that is not offered, which helps disambiguate from sibling resolvers.
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 gives clear context for when to use the tool: resolving organization-related role names to DFX entity IDs. It also states a when-not case (person lookup is not offered), though it does not name a specific alternative tool such as resolve_address.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_parcelsFind parcels by place, use, tenure, vintage and assessed valueARead-onlyIdempotentInspect
Search the assessor parcel layer with filters instead of one exact address. Filter by state, municipality, assessor land use code, owner-occupancy, tax-exempt status, year built and assessed value range; results carry assessed value, gross building area, assessed value per square foot, the annual tax and the year built. This is the only way to ask a QUESTION of the parcel layer: resolve_address needs an address you already have. Every answer states the true match count alongside the sample, and a search that matches nothing names the filter that emptied it rather than returning a bare empty list. At least one filter is required. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| state | No | Two letter state code | |
| land_use | No | Assessor land use code, for example 'R3' for a three family dwelling | |
| tax_exempt | No | true for the institutional universe (churches, universities, authorities), false for the taxable one | |
| built_after | No | Exclusive lower bound on year built | |
| built_before | No | Exclusive upper bound on year built | |
| max_assessed | No | Maximum assessed total, in dollars | |
| min_assessed | No | Minimum assessed total, in dollars | |
| municipality | No | City or town, for example 'Boston' | |
| owner_occupied | No | true for owner-occupied, false for investor or institutionally held. Parcels whose roll does not state it are excluded either way. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description discloses meaningful response behavior: 'Every answer states the true match count alongside the sample,' and a no-match search 'names the filter that emptied it rather than returning a bare empty list.' It also describes the fields carried in results, adding context that annotations do not provide.
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 front-loaded with the core action and resource, then enumerates filters and result fields, and finishes with edge-case behavior and the filter requirement. Every sentence contributes distinct information with no redundant filler.
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 rich input schema, the sibling context, and the absence of an output schema, the description adequately covers what the agent needs: filterable fields, returned fields, match-count behavior, no-match naming, required filter rule, and cost. No significant operational gap remains.
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 high at 90%, so most parameter meanings already live in the schema. The description adds the crucial constraint 'At least one filter is required,' which is not evident from the schema's zero required parameters, and it lists the filterable dimensions, reinforcing the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search the assessor parcel layer with filters instead of one exact address.' It distinguishes itself from resolve_address and clarifies the unique question-answering role of the tool, so an agent can clearly identify its purpose among siblings.
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 this tool: 'This is the only way to ask a QUESTION of the parcel layer: resolve_address needs an address you already have.' It also gives a concrete usage rule, 'At least one filter is required,' and notes the tool is 'Free,' disambiguating the choice context clearly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_property_eventsFind dated property events by type, state and time windowARead-onlyIdempotentInspect
Dated events over US properties and parcels, with provenance and a headline you can show a person. Covers LIHTC compliance period endings (the Year 15 recapitalisation trigger, 13,549 of them), HUD subsidy contract expiries (4,721), scheduled loan maturities (592) now national rather than Massachusetts, CMBS distress and workout reporting (188 delinquency flags across 26 states, 142 foreclosures across 22), issued building permits and demolition filings (Boston only), and recorded sales (43,857, 2 states). 6,721 events fall inside the next 548 days, measured 2026-09-06. Filter by event type, state and days ahead. An unrecognised event type is REFUSED with the served vocabulary, never answered with an empty list. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max 50. Results are ordered by occurred_at ascending, soonest first, so a small limit gives you the nearest events rather than an arbitrary sample. | |
| state | No | Two letter state code | |
| event_type | No | ||
| within_days | No | FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question ("recent sales", "foreclosures that already happened") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-06, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, and idempotent behavior, and the description adds substantial behavioral context beyond that: it reveals the refusal behavior for unrecognized event types ('REFUSED with the served vocabulary, never answered with an empty list'), the forward-only semantics of within_days, and the risk of empty results reading like an absent market. It also tells the caller the response includes provenance and a person-facing headline. This is exactly the kind of behavior an agent needs to know.
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 dense but every sentence earns its place: scope, coverage counts, geographic limitations, time-window semantics, refusal behavior, and cost. It is front-loaded with the most important single-sentence summary, then layers evidence and caveats. The longer length is justified by the breadth of specific, decision-relevant 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?
For a read-only search tool with no output schema, the description covers the essential operational surface: what events are included, which geographies, how time windows work, what happens on invalid event types, and what the response contains (provenance and a headline). The input schema covers defaults and ordering, so nothing critical is left to guesswork. The absence of an output schema is compensated by the explicit return-shape hint.
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 high at 75%, so the baseline is already decent. The description adds real meaning beyond the schema by mapping natural-language categories to specific event types (LIHTC compliance period endings, HUD subsidy expiries, CMBS foreclosures, Boston permits) and by clarifying that event_type sends an unrecognized value to a refusal rather than an empty result. It also reinforces the forward-only meaning of within_days with concrete guidance on when to omit it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find dated property events over US properties and parcels.' It then enumerates concrete event families (LIHTC compliance endings, HUD expiries, loan maturities, CMBS distress, permits, sales), which distinguishes this tool from generic search siblings without needing to open the schema. The title and first sentence together make the tool's job unmistakable.
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 gives strong contextual usage guidance: it scopes coverage explicitly ('Boston only', '2 states', 'now national rather than Massachusetts'), and it gives a detailed warning about when to omit within_days for backward-looking questions. It does not explicitly name sibling tools or state 'use X instead of Y', so it lacks a direct alternative-selection statement, but the coverage boundaries provide a clear context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
what_can_dfx_answerAsk in plain language whether DFX can helpBRead-onlyIdempotentInspect
Describe an objective in natural language and get back whether DFX can help, which tool to call, the arguments to call it with, and a free sample of the result. Says no clearly when the answer is no, and records what was asked so unmet demand shapes what DFX builds next. Call this first if you do not know what to ask for.
| Name | Required | Description | Default |
|---|---|---|---|
| objective | Yes | ||
| constraints | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says the tool 'records what was asked so unmet demand shapes what DFX builds next,' implying a write/logging side effect, while annotations declare readOnlyHint=true and idempotentHint=true. Recording on each call would not be idempotent either. This is an annotation contradiction, capping the score at 1.
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?
Three sentences, all informative: core capability, no-answer/recording behavior, and usage trigger. Front-loaded with what the tool returns, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the return contract (yes/no, tool, arguments, sample) and the no-case, which matters because there is no output schema. However, the `constraints` parameter is completely undocumented, and the description does not explain how constraints influence routing or sampling. It is a usable minimal definition, but not fully complete for safe invocation.
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 define parameters. It gives meaning to `objective` via 'Describe an objective in natural language,' but never mentions `constraints`, an optional object with no property schema, leaving agents to guess what constraints can contain.
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?
States a concrete verb ('Describe an objective... and get back whether DFX can help'), names the resource (DFX's capabilities), and describes the output (which tool to call, arguments, sample result). The closing 'Call this first if you do not know what to ask for' clearly distinguishes it from the domain-specific sibling tools as the meta-routing entry point.
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 says 'Call this first if you do not know what to ask for,' giving a clear trigger condition. It does not, however, name sibling tools or state explicit exclusions for when a known domain tool should be used directly.
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 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-05, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-06, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-04, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-05, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-03, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-04, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-03, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-03, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months."
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-02, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-03, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-02, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-02, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months."
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-01, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-02, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-01, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
1 tool update
- Changed
search_property_events1 field changed- changed
Input schema / properties / within_days / descriptionPrevious value: -"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-01, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."New value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months."
6 tool updates
- Changed
changes_since3 fields changed- added
Input schema / properties / event_type / descriptionAdded value: +"One family. Same vocabulary as search_property_events." - added
Input schema / properties / event_type / enumAdded value: +[ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPANY_CONTRACTED", + "COMPLIANCE_PERIOD_ENDING", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "LEASE_EXPIRING", + "LEASE_TERM_REVISED", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "USE_CONVERSION_PERMITTED" +] - changed
Input schema / properties / since / descriptionPrevious value: -"Opaque cursor from a previous call. Omit on the first call to establish a position."New value: +"Opaque cursor from a previous call. Omit on the first call to establish a position; that call returns no events by design."
- Changed
dfx_coverage2 fields changed- added
Input schema / properties / event_typeAdded value: +{ + "description": "Optional: narrows the answer to this family. Same vocabulary as search_property_events.", + "enum": [ + "BANKRUPTCY_EVENT", + "CERTIFICATE_OF_OCCUPANCY", + "COMPANY_CONTRACTED", + "COMPLIANCE_PERIOD_ENDING", + "DEMOLITION_FILED", + "DISTRESS_FLAG_RAISED", + "FORECLOSURE_EVENT", + "LEASE_EXPIRING", + "LEASE_TERM_REVISED", + "LOAN_MATURITY_SCHEDULED", + "LOAN_MODIFIED", + "PERMIT_ISSUED", + "PERMIT_STATUS_CHANGED", + "PROPERTY_SOLD", + "SUBSIDY_CONTRACT_EXPIRING", + "USE_CONVERSION_PERMITTED" + ], + "type": "string" +} - added
Input schema / properties / stateAdded value: +{ + "description": "Two letter state code. Optional: narrows the answer to this state.", + "type": "string" +}
- Added
dfx_payment_status - Added
fund_dfx_account - Added
open_dfx_account - Changed
search_property_events2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Max 50. Results are ordered by occurred_at ascending, soonest first, so a small limit gives you the nearest events rather than an arbitrary sample." - added
Input schema / properties / within_days / descriptionAdded value: +"FORWARD ONLY: it filters to events occurring between today and N days from now, and it cannot reach the past. For a backward-looking question (\"recent sales\", \"foreclosures that already happened\") OMIT this argument entirely. A historical event fails every forward window, so passing one returns an empty list that reads like an absent market. 548 is eighteen months. FORWARD FAMILIES, which this argument is for: COMPLIANCE_PERIOD_ENDING, LEASE_EXPIRING, LOAN_MATURITY_SCHEDULED, SUBSIDY_CONTRACT_EXPIRING. ENTIRELY HISTORICAL as of 2026-09-01, where ANY value returns nothing: BANKRUPTCY_EVENT, CERTIFICATE_OF_OCCUPANCY, COMPANY_CONTRACTED, DEMOLITION_FILED, DISTRESS_FLAG_RAISED, FORECLOSURE_EVENT, LEASE_TERM_REVISED, LOAN_MODIFIED, PERMIT_ISSUED, PROPERTY_SOLD, USE_CONVERSION_PERMITTED."
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Property intelligence: 180M+ US parcels — lookup, search, owners, hazards, permits, deeds.
Official US-address public records: zoning, flood, parcel, permits, taxes. Free look, x402 paid.
312K+ FL commercial parcels, 6,400+ verified listings, AI visibility reports, x402 micropayments
Free real-estate underwriting, no key or account. 6 strategies, stress tests, max offer.
Related MCP Servers
- AlicenseAqualityBmaintenanceQuery verified parcel ArcGIS REST endpoints for 150+ US counties across all 50 states — search by owner name, APN, or address. No API key; built on public county GIS data.41131MIT
- FlicenseNot gradedqualityBmaintenanceProvides free property and parcel intelligence using official US government data APIs, county assessor records, and live listings, with tools for hazard risk checks, affordability calculations, and parcel ranking.-
- AlicenseNot gradedqualityCmaintenanceProvides access to comprehensive US property data, including automated valuations, tax history, comparable sales, and ownership details, enabling real estate analysis and market insights.15MIT
- FlicenseNot gradedqualityCmaintenanceRead-only MCP server providing direct, credentialed access to parcel data via Regrid and county ArcGIS sources, with tools for querying by point, owner, size, and county.-
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool has a clearly distinct purpose: resolution, searching, current records, event polling, paid data, and account/payment lifecycle. Even the potentially overlapping debt_maturity_schedule and search_property_events are explicitly distinguished.
Most tools follow a verb_noun pattern (resolve_address, search_parcels, get_property_record), but several are noun phrases or special constructs like debt_maturity_schedule, dfx_coverage, changes_since, and what_can_dfx_answer. The names are readable and consistently snake_case, yet the verb/noun convention is not uniform.
Twelve tools is well-scoped for a real estate intelligence server covering coverage checking, resolution, search, event access, paid data, and account management. Each tool has a distinct role and none feels redundant.
The surface covers the main lifecycle well: discovering capabilities, checking coverage, resolving addresses and organizations, retrieving property records, searching parcels and events, polling changes, and managing paid access. Minor gaps exist, such as no direct organization detail retrieval after resolve_organization and no way to fetch an event by ID, but core workflows are not blocked.