RE Data Refinery MCP Server
Provides real estate property intelligence and investment scoring based on live Zillow data, including property listings, price history, tax assessments, school ratings, and natural-language search.
Click on "Install 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., "@RE Data Refinery MCP ServerWhat are the top flip deals in Columbus under $200k?"
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.
RE Data Refinery MCP Server
MCP server that lets AI agents query the RE Data Refinery for scored Columbus, OH real estate data and pay per lookup via the x402 protocol.
What it does
Exposes refinery endpoints as MCP tools (
refinery_*).Routes paid lookups through the x402-enabled Cloudflare Worker.
Supports automatic USDC-on-Base micropayments when
EVM_PRIVATE_KEYis set.Falls back to the free local API (
localhost:5004) whenREFINERY_ENABLE_X402=false.
Related MCP server: Scalogy Real Estate Deals MCP Server
Tools
Tool | Endpoint | Price |
|
| Free |
|
| Free |
|
| Free |
|
| $0.50 |
|
| $0.35 (live) / free (cached) |
|
| $0.35 |
|
| $0.25 |
|
| $0.25 |
|
| $0.25 |
| (status) | Free |
Setup
cd ~/projects/re-refinery/mcp-server
uv syncEnvironment variables
Create .env in this directory:
# Optional: override the worker or local API URLs
REFINERY_BASE_URL=https://re-data-refinery.ares-hms.workers.dev
REFINERY_LOCAL_URL=http://localhost:5004
# Required for paid x402 endpoints
EVM_PRIVATE_KEY=0x...
# Optional x402 spend cap (default $1 per payment)
X402_SPEND_CAP=$1
# Set to false to disable payments and use the free local API
REFINERY_ENABLE_X402=trueRun
# stdio transport (default; for Claude Desktop, Hermes, etc.)
uv run python re_refinery_mcp.py
# SSE transport
uv run python re_refinery_mcp.py --transport sseTest with MCP Inspector
npx @modelcontextprotocol/inspector \
uv run python /Users/ares.hmsgmail.com/projects/re-refinery/mcp-server/re_refinery_mcp.pyHermes configuration
Add to ~/.hermes/config.yaml under mcp_servers:
re_refinery:
enabled: true
command: /Users/ares.hmsgmail.com/projects/re-refinery/mcp-server/.venv/bin/python
args:
- /Users/ares.hmsgmail.com/projects/re-refinery/mcp-server/re_refinery_mcp.py
timeout: 120Notes
The server is read-only; no tools create or modify properties.
All paid tools support
response_format: "json"for machine-readable output.If
EVM_PRIVATE_KEYis missing and x402 is enabled, the server still starts but paid calls return a clear 402 error message.
Available Tools
10 toolsrefinery_cache_statsBRead-onlyIdempotent
Get cache statistics for the Refinery data store.
Returns total cached properties, last update time, and agent-funded count. Free endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds that the tool is free and returns specific fields, but it does not disclose much additional behavior such as rate limits, authentication, or pagination. No contradiction exists.
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 compact and front-loaded: a clear action, a concise return summary, and a useful 'Free endpoint' note. Every sentence adds value and there is 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?
For a simple read-only endpoint with one optional parameter, an output schema, and rich annotations, the description is nearly complete. The only minor gap is that it does not mention the response_format parameter or clearly state output behavior, though the schema covers that.
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 response_format parameter is documented in the schema with a default and description, but the reported schema description coverage is 0% and the description itself adds no parameter guidance. Given the low coverage signal, the description should compensate but does not mention response_format at all.
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 action ('Get cache statistics') and the target resource ('Refinery data store'), and it lists the returned data. It does not explicitly contrast with sibling tools like refinery_health or refinery_credits, so it is clear but not fully differentiated.
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 when to use the tool by describing what it returns, and 'Free endpoint' gives a mild cost/accessibility hint. However, it provides no when-to-use/when-not-to-use guidance or alternatives, so usage context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refinery_creditsARead-onlyIdempotent
Check remaining ZillAPI credit balance.
Free endpoint that returns the upstream ZillAPI credit balance.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful context by noting it is a 'Free endpoint' that queries 'upstream ZillAPI', meaning the check likely does not consume credits and reflects an external provider's balance. 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?
Two short sentences, front-loaded with the primary action. The second sentence repeats 'credit balance' but adds the free/upstream context, so the redundancy is minor.
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 read-only balance check with an output schema and full safety annotations, the description is largely sufficient. It could mention output format or usage context, but the missing pieces are small given the tool's 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?
With schema description coverage reported as 0%, the description carries the burden for parameter meaning, but it never mentions the response_format parameter or its values. The schema itself documents 'markdown' or 'json', so the gap is partially mitigated, but the tool description adds no parameter-level value.
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: 'Check remaining ZillAPI credit balance.' It is clear about what the tool does and is distinguishable from siblings like refinery_payment_status, though it does not explicitly name a sibling to exclude.
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?
Usage is implied by the purpose: call it when you need the remaining credit balance. It gives no explicit when-to-use versus alternatives or prerequisites, though none of the sibling tools obviously overlaps with this functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refinery_get_price_historyARead-only
Get the price-history timeline for a property by ZPID.
Paid lookup ($0.25 via x402) unless REFINERY_ENABLE_X402=false.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a critical behavioral trait not present in annotations: this is a paid lookup costing $0.25 via x402, with an environment-variable escape hatch. This goes well beyond the readOnlyHint and destructiveHint annotations and tells the agent what operational consequence to expect.
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 sentences with no filler: the main purpose is front-loaded, and the second sentence delivers the important payment condition. Every sentence earns its place.
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 single-resource lookup with an available output schema, the description, combined with annotations, is complete enough. An agent knows what the tool does, what input it needs, that it is safe, and that it has a cost implication. No critical call-blocking detail 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?
The description names the central required input, 'ZPID', which is helpful, but it does not explain the params wrapper or the optional response_format, and it adds little meaning beyond what the input schema already provides for zpid and response_format. The schema coverage signal is low, so the description only partially compensates.
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 action ('Get'), a specific resource ('price-history timeline'), and the key input ('by ZPID'). This clearly distinguishes it from sibling tools like refinery_get_tax_history and refinery_get_schools, which cover different property subresources.
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 usage context is implied rather than explicit: an agent can infer this tool is for price-history lookups, but the description does not explicitly name alternatives or state when not to use it. The paid-lookup caveat is a cost consideration, not guidance about choosing between sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refinery_get_propertyARead-only
Get full scored details for a single property by ZPID.
This is a paid lookup ($0.35 via x402) unless REFINERY_ENABLE_X402=false. Includes price/tax/school enrichment and Refinery scores.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only and non-destructive behavior. The description adds valuable behavioral context beyond annotations: this is a paid lookup ($0.35 via x402), conditional on REFINERY_ENABLE_X402=false. It also names the included enrichment categories, which helps set expectations for the response.
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 compact and front-loaded: purpose first, then cost/behavior, then included data. Every sentence contributes, though the final sentence partially restates the 'full scored details' idea from the opening.
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 single-required-parameter lookup with an output schema and useful annotations, the description covers the essential purpose, the paid-lookup caveat, and the included contents. It lacks explicit sibling-tool routing, but that is not critical for a focused property detail lookup.
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 mentions ZPID as the key input, but that is also present in the schema. It does not explain the response_format parameter or add any validation/format nuance beyond the schema. With schema description coverage reported as 0%, the description does not compensate for that 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 description uses a specific verb ('Get') with a clear resource ('full scored details for a single property by ZPID'), immediately identifying the tool's purpose and distinguishing it from list/search/history sibling tools. 'By ZPID' also clarifies the scope of the lookup.
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 when to use the tool: when you have a single ZPID and need full enriched property details. However, it does not explicitly contrast this with sibling tools like search_properties, list_properties, or geolice_history, and it does not state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refinery_get_schoolsARead-only
Get the school ratings near a property by ZPID.
Paid lookup ($0.25 via x402) unless REFINERY_ENABLE_X402=false.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and destructiveHint annotations already establish that this is a safe read operation. The description adds valuable behavioral context beyond annotations by disclosing that this is a paid lookup ($0.25 via x402) with a configuration flag to disable payment.
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 short sentences with no filler. The core action and lookup key are front-loaded, and the cost note is placed separately for clarity.
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 single-required-parameter read-only tool with an output schema, the description is largely complete: it states what is retrieved, how it is retrieved, and the cost. It does not offer explicit usage routing to sibling tools, but that is not a critical gap for this simple operation.
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 names ZPID as the lookup key, which aligns with the required zpid parameter. However, it does not mention the optional response_format parameter or the params wrapper structure. The schema provides some description for these fields, but the schema coverage signal is low, so the description only partially compensates.
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 uses a specific verb and resource: 'Get the school ratings near a property by ZPID.' It clearly distinguishes this from sibling tools like price history and tax history by naming the school-ratings domain and the property-lookup key.
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 the intended use case: retrieve school ratings when you have a ZPID. However, it does not explicitly state when to use this tool instead of refinery_get_property, refinery_get_price_history, or refinery_get_tax_history, nor does it mention exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refinery_get_tax_historyARead-only
Get the tax/assessment history for a property by ZPID.
Paid lookup ($0.25 via x402) unless REFINERY_ENABLE_X402=false.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, the description discloses a concrete paid-lookup behavior with a $0.25 x402 fee and an environment toggle (REFINERY_ENABLE_X402=false) that changes how payment applies. This is exactly the kind of payment/auth/rate context annotations do not capture, and it does not contradict the idempotentHint=false annotation.
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?
Two short sentences, with the core purpose front-loaded and the payment caveat following immediately. Every sentence earns its place and there is 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?
For a simple one-required-parameter tool with an output schema and annotations, the description plus schema cover the essential calling requirements. The only minor gap is that the conditional payment line is slightly ambiguous about what happens when REFINERY_ENABLE_X402=false, but that does not block correct 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?
Context signals indicate 0% schema description coverage, so the description must compensate for parameter documentation. It mentions ZPID in prose but does not explain response_format, its default, or the fact that zpid is required; the schema still carries most of the parameter burden.
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 concrete verb and object: 'Get the tax/assessment history for a property by ZPID,' which clearly identifies the resource and lookup key. It does not explicitly contrast with sibling tools like refinery_get_price_history or refinery_get_schools, so it falls just short of full differentiation.
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 first sentence implies the intended use: call this when you need tax/assessment history for a given ZPID. The payment note adds a practical condition, but the description does not state when not to use it or name alternative tools, leaving selection among tax/price/school siblings to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refinery_healthARead-onlyIdempotent
Check the RE Data Refinery API health and cache status.
Returns status, cached property count, and rate limit information. This is a free endpoint and does not require x402 payment.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds valuable behavioral context: it returns status, cached property count, rate limit info, and explicitly says no x402 payment is required. 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 concise: three short sentences, front-loaded with the main purpose, then return details and cost note. No unnecessary wording.
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 read-only health endpoint with one optional parameter, an output schema, and strong annotations, the description is complete. It tells the agent what the endpoint does, what it returns, and clarifies that payment is not needed.
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 tool description does not explain the response_format parameter, but the schema itself provides a description, default, and enum values. With one well-documented user-facing parameter, the description does not significantly add parameter meaning beyond 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 clearly identifies the resource ('RE Data Refinery API health') and states what it returns. It is distinctive and actionable, but it does not explicitly differentiate itself from the sibling refinery_cache_stats, which may overlap on cache status.
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 use for checking API health and cache status, and usefully notes that the endpoint is free and does not require payment. However, it does not name alternatives or state when not to use this tool versus siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refinery_list_propertiesARead-only
List scored properties by city with optional price filtering.
Set live=true (default) to query ZillAPI live data ($0.35 via x402). Set live=false to read cached data only (free, no payment required).
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the readOnlyHint and destructiveHint annotations by explaining the paid live-data path ($0.35 via x402) and the free cached-data path with no payment. It also clarifies the default behavior (live=true), which is important for cost-sensitive agents. It does not contradict 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 three short sentences with zero filler. The primary purpose is front-loaded, followed immediately by the most important operational distinction (live vs cache). Every sentence contributes necessary 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 list tool with read-only annotations and an output schema, the essential behavioral and cost information is covered. Missing details like explicit limit/response_format guidance are available in the nested schema, and the only notable gap is lack of guidance on when to choose this tool over sibling search tools.
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 names the key filtering dimensions (city, price) and provides important detail for the live parameter, including default and cost. However, it does not mention limit, response_format, or min/max price specifics, so it relies on the nested schema to fully document those. The cost context is a genuine addition beyond 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 uses a specific verb and resource ('List scored properties') with clear scoping dimensions ('by city' and 'optional price filtering'). It conveys a distinct purpose relative to siblings like refinery_search_properties, though it does not explicitly name an alternative or contrast itself.
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, actionable guidance on the critical live vs cache decision, including cost, payment requirement, and defaults. It does not explicitly discuss when to prefer this tool over refinery_search_properties, but it provides enough context for the main branching decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refinery_payment_statusARead-onlyIdempotent
Show whether x402 automatic payments are configured and the active API base URL.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds context about the specific status information (payment configuration and base URL), but does not disclose additional behavioral traits such as authentication needs or response characteristics.
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 a single, front-loaded sentence containing exactly the necessary information: what is checked and what is returned. There is 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, parameterless read-only status tool with an output schema present, the description is complete. It tells the agent exactly what state it reports on, and no further detail about return values is needed because the output schema presumably covers that.
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 tool has zero parameters, and the schema already reflects this with an empty properties object. With no parameters to document, the description has no obligation to explain parameter semantics; the baseline of 4 for zero-parameter tools applies.
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 uses a specific verb ('Show') and a clear resource ('x402 automatic payments are configured' and 'active API base URL'). This clearly identifies the tool's purpose and differentiates it from siblings like refinery_health or refinery_credits, none of which mention payment configuration or base URL.
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 does not provide any guidance on when to use this tool versus alternatives, nor does it mention exclusions or prerequisites. It only states what the tool shows, leaving the agent to infer the appropriate context from the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refinery_search_propertiesARead-only
Search for scored Columbus, OH properties using natural language terms.
This is a paid lookup ($0.50 via x402) unless REFINERY_ENABLE_X402=false. Results are written through to the Refinery cache.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses two important behavioral traits: this is a paid lookup costing $0.50 via x402 unless REFINERY_ENABLE_X402=false, and results are written through to the Refinery cache. These are valuable operational details that affect invocation decisions and are not present in the structured fields.
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 concise sentences with no filler. The primary action is front-loaded, followed by the cost condition and cache side effect, making it easy for an agent to parse quickly.
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 purpose, cost, payment bypass condition, and cache behavior, and the output schema handles return-value details. It does not explicitly guide an agent toward sibling alternatives or define what 'scored' means, but for a search tool with this schema, the essential context is present.
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 adds some parameter meaning by specifying that the search uses natural language terms, which directly informs the query parameter. However, it does not describe limit or response_format; the nested input schema provides those details, so the description is sufficient but not rich.
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 ('Search'), a specific resource ('scored Columbus, OH properties'), and a distinctive method ('using natural language terms'). This separates it from sibling tools like list_properties or get_property, which imply different operations.
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 positions this as the natural-language search tool for scored Columbus, OH properties, providing enough context for an agent to select it over a plain list/get tool. It does not explicitly name when-not-to-use alternatives, but the core usage context is clear.
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.
10 tool updates
v1.0.0- First observed
refinery_cache_stats - First observed
refinery_credits - First observed
refinery_get_price_history - First observed
refinery_get_property - First observed
refinery_get_schools - First observed
refinery_get_tax_history - First observed
refinery_health - First observed
refinery_list_properties - First observed
refinery_payment_status - First observed
refinery_search_properties
TDQS
Most tools target distinct concerns: status/health, payment, property search/list, and specific property data lookups. The only mild overlap is between refinery_search_properties and refinery_list_properties, but their different input modes and purposes make them reasonably distinguishable.
All tools share the refinery_ prefix and use snake_case, which creates a clear family identity. However, the status-style tools use bare nouns (health, cache_stats, credits, payment_status) while data tools use verb_noun forms, so the pattern is not perfectly uniform.
Ten tools is well-scoped for a property data refinery server: a few operational/status endpoints, general search/list capabilities, and individual data detail lookups. Each tool has a clear role without the surface feeling bloated or thin.
The tool set covers the full read-side property workflow: discover properties by search or listing, retrieve full details, and access price history, tax history, and schools. It also includes operational endpoints for health, cache stats, credits, and payment configuration, so there are no obvious dead ends.
Maintenance
Related MCP Connectors
Singapore property & financial data APIs for AI agents. 27 MCP tools. x402 micropayments.
Property Records MCP — address-level US property records (sales history,
AI-native real estate discovery with structured property search and market intelligence.
Agent-native MCP over US public + government records, entity- and parcel-keyed.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenancePay-per-call structured data for autonomous AI agents. x402-metered, MCP-native.-
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to find vetted, daily-scored US residential real-estate investment deals with pay-per-request via USDC on Base.15MIT
- FlicenseAqualityDmaintenanceHosted, pay-per-call MCP server for Cook County / Chicago property records — parcels, recorded sales & deeds, building permits, tax assessments, and comparable sales — by street address or 14-digit PIN. Pay per call via x402 (USDC on Base/Solana); no signup or API key.4-
- AlicenseNot gradedqualityBmaintenanceProvides comprehensive real estate market intelligence, property valuation, and investment analysis for AI agents. Unifies data from multiple sources like Zillow, Redfin, and public records into a single MCP interface.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/areshms/re-refinery-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server