API reference
Every tool the Secrets.RealEstate MCP server exposes — parameters, coverage and an example response.
- 16
- tools
- 8
- official public datasets
- 96
- départements — all of France
Contents
Search & data
Market
Location & environment
Connect
Add the hosted server to your MCP client (Claude Code, Cursor and others). Replace the placeholder with a key from the developer console.
claude mcp add secrets-realestate \
--transport http https://secrets.realestate/mcp \
--header "X-API-Key: sk_live_…" Every request must carry your key in the X-API-Key header. There is no anonymous access — each call resolves to your account and plan. The Developer API requires a paid plan and administrator approval.
Conventions
Every tool declares these MCP annotations:
readOnlyHint— never changes your data — every call only readsidempotentHint— the same call returns the same result, so it is safe to retryopenWorldHint— reads live external data, so results can change over time
- Location is given as coordinates (lat/lng) — resolve an address with geocode_address first.
- Pass lang (en, de, fr, it, ru, es) to localize text fields; it defaults to en.
- List tools (search_properties, get_my_listings) page with page and size.
- Response fields are snake_case.
- Every tool currently covers France — outside France, or if a provider is down, a tool returns an empty result or null, never an error.
Tools
Deep coverage spans every French département, joined from eight official public datasets — BDNB, IRIS, SSMSI, GeoRisques, Hub'Eau, Éducation IVAL, OpenStreetMap and DVF. More markets later.
Search & data
search_propertiesSearch property listings on Secrets.RealEstate by city, type, price, size and bedrooms (paginated). Use when the user wants to find or browse properties matching criteria.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
city | string | City to search in, e.g. Nice. | No |
property_type | string | Property type, e.g. apartment or house. | No |
price_min | integer | Minimum price. | No |
price_max | integer | Maximum price. | No |
size_min | integer | Minimum living area in square metres. | No |
size_max | integer | Maximum living area in square metres. | No |
bedrooms | integer | Minimum number of bedrooms. | No |
page | integer | Zero-based page number. Defaults to 0. | No |
size | integer | Page size, 1-100. Defaults to 10. | No |
Returns
| Field | Type | Description |
|---|---|---|
items | array | Listings on this page. |
property_id | integer | Listing id. |
property_type | string | Property type, e.g. apartment or house. |
price_amount | number | Asking price. |
price_currency | string | ISO currency code, e.g. EUR. |
monthly_fees | number | Monthly charges / co-ownership fees. |
size_sqm | integer | Living area in square metres. |
size_usable_sqm | integer | Usable area in square metres. |
room_count | integer | Total rooms. |
bedroom_count | integer | Bedrooms. |
bathroom_count | integer | Bathrooms. |
floor_level | integer | Floor the unit is on. |
total_floors | integer | Floors in the building. |
plot | integer | Plot / land area in square metres. |
condition | string | Property condition. |
elevator | boolean | Has an elevator. |
garage_spaces | integer | Number of garage / parking spaces. |
pool | boolean | Has a pool. |
furnished | boolean | Sold furnished. |
balcony | boolean | Has a balcony. |
terrace | boolean | Has a terrace. |
energy_rating | string | DPE energy class, A to G. |
ghg_class | string | Greenhouse-gas class, A to G. |
energy_kwh_m2_year | integer | Energy use, kWh/m2/year. |
ghg_kg_co2_m2_year | integer | Emissions, kg CO2/m2/year. |
heating_type | string | Heating type. |
year_built | integer | Construction year. |
street | string | Street name (null if the listing hides its address). |
house_number | string | House number (null if the listing hides its address). |
postal_code | string | Postal code. |
city | string | City. |
state | string | Region or state. |
country | string | Country name. |
country_code | string | ISO country code. |
latitude | number | Latitude (null if the listing hides its address). |
longitude | number | Longitude (null if the listing hides its address). |
listing_url | string | Source listing URL. |
created_date | string | When the listing was saved (ISO date). |
total | integer | Total matching listings. |
page | integer | Zero-based page number. |
size | integer | Page size. |
geocode_addressResolve an address or place name to coordinates (latitude/longitude), city and country. Use whenever the user gives an address or place, asks where something is, wants to locate or pin a property, or needs lat/lon before any other analysis. France is covered in depth; other areas still resolve but have limited downstream data.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
query | string | Address or place to locate, for example 12 rue de Rivoli, Paris. | Yes |
lang | string | Response language: en, de, fr, it, ru or es. Defaults to en. | No |
limit | integer | Maximum number of results, 1-10. Defaults to 5. | No |
Returns
| Field | Type | Description |
|---|---|---|
latitude | number | Latitude (WGS84). |
longitude | number | Longitude (WGS84). |
display_name | string | Full formatted address. |
city | string | City. |
state | string | Region or state. |
country | string | Country name. |
country_code | string | ISO 3166-1 alpha-2 country code, e.g. fr. |
result_type | string | Match granularity, e.g. house, street, city. |
get_listingGet the facts for a single property listing by its id — price, type, size, rooms, location, energy rating. Use the id returned by search_properties or get_my_listings.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
property_id | integer | The listing id (from search_properties or get_my_listings). | Yes |
Returns
| Field | Type | Description |
|---|---|---|
property_id | integer | Listing id. |
property_type | string | Property type, e.g. apartment or house. |
price_amount | number | Asking price. |
price_currency | string | ISO currency code, e.g. EUR. |
monthly_fees | number | Monthly charges / co-ownership fees. |
size_sqm | integer | Living area in square metres. |
size_usable_sqm | integer | Usable area in square metres. |
room_count | integer | Total rooms. |
bedroom_count | integer | Bedrooms. |
bathroom_count | integer | Bathrooms. |
floor_level | integer | Floor the unit is on. |
total_floors | integer | Floors in the building. |
plot | integer | Plot / land area in square metres. |
condition | string | Property condition. |
elevator | boolean | Has an elevator. |
garage_spaces | integer | Number of garage / parking spaces. |
pool | boolean | Has a pool. |
furnished | boolean | Sold furnished. |
balcony | boolean | Has a balcony. |
terrace | boolean | Has a terrace. |
energy_rating | string | DPE energy class, A to G. |
ghg_class | string | Greenhouse-gas class, A to G. |
energy_kwh_m2_year | integer | Energy use, kWh/m2/year. |
ghg_kg_co2_m2_year | integer | Emissions, kg CO2/m2/year. |
heating_type | string | Heating type. |
year_built | integer | Construction year. |
street | string | Street name (null if the listing hides its address). |
house_number | string | House number (null if the listing hides its address). |
postal_code | string | Postal code. |
city | string | City. |
state | string | Region or state. |
country | string | Country name. |
country_code | string | ISO country code. |
latitude | number | Latitude (null if the listing hides its address). |
longitude | number | Longitude (null if the listing hides its address). |
listing_url | string | Source listing URL. |
created_date | string | When the listing was saved (ISO date). |
get_my_listingsList the properties saved in the caller's own account (owner-scoped, paginated). Use when the user asks about their properties, their listings, properties they saved or added, or wants to review their own portfolio. Requires an authenticated caller.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
page | integer | Zero-based page number. Defaults to 0. | No |
size | integer | Page size, 1-100. Defaults to 10. | No |
Returns
| Field | Type | Description |
|---|---|---|
items | array | Listings on this page. |
property_id | integer | Listing id. |
property_type | string | Property type, e.g. apartment or house. |
price_amount | number | Asking price. |
price_currency | string | ISO currency code, e.g. EUR. |
monthly_fees | number | Monthly charges / co-ownership fees. |
size_sqm | integer | Living area in square metres. |
size_usable_sqm | integer | Usable area in square metres. |
room_count | integer | Total rooms. |
bedroom_count | integer | Bedrooms. |
bathroom_count | integer | Bathrooms. |
floor_level | integer | Floor the unit is on. |
total_floors | integer | Floors in the building. |
plot | integer | Plot / land area in square metres. |
condition | string | Property condition. |
elevator | boolean | Has an elevator. |
garage_spaces | integer | Number of garage / parking spaces. |
pool | boolean | Has a pool. |
furnished | boolean | Sold furnished. |
balcony | boolean | Has a balcony. |
terrace | boolean | Has a terrace. |
energy_rating | string | DPE energy class, A to G. |
ghg_class | string | Greenhouse-gas class, A to G. |
energy_kwh_m2_year | integer | Energy use, kWh/m2/year. |
ghg_kg_co2_m2_year | integer | Emissions, kg CO2/m2/year. |
heating_type | string | Heating type. |
year_built | integer | Construction year. |
street | string | Street name (null if the listing hides its address). |
house_number | string | House number (null if the listing hides its address). |
postal_code | string | Postal code. |
city | string | City. |
state | string | Region or state. |
country | string | Country name. |
country_code | string | ISO country code. |
latitude | number | Latitude (null if the listing hides its address). |
longitude | number | Longitude (null if the listing hides its address). |
listing_url | string | Source listing URL. |
created_date | string | When the listing was saved (ISO date). |
total | integer | Total matching listings. |
page | integer | Zero-based page number. |
size | integer | Page size. |
Market
get_comparable_salesRecent comparable sold properties near a location (official DVF records) with price, size and a liquidity score. France only. Pass coordinates from geocode_address.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
lat | number | Latitude (WGS84). Obtain it from geocode_address. | Yes |
lng | number | Longitude (WGS84). Obtain it from geocode_address. | Yes |
lang | string | Response language: en, de, fr, it, ru or es. Defaults to en. | No |
Returns
| Field | Type | Description |
|---|---|---|
comparables | array | Recent nearby sales (DVF). |
date | string | Sale date (ISO). |
price | integer | Sale price. |
price_per_sqm | integer | Price per square metre. |
size_sqm | integer | Living area in square metres. |
object_type | string | Property type. |
transaction_type | string | Transaction type. |
latitude | number | Latitude (WGS84). |
longitude | number | Longitude (WGS84). |
liquidity | object | Market liquidity for the area. |
score | integer | Liquidity score (0-100). |
grade | string | Liquidity grade. |
total_transactions | integer | Transactions in the sample. |
annual_volume | integer | Approximate sales per year. |
price_variation | number | Price dispersion. |
distinct_types | integer | Distinct property types seen. |
get_price_trendsPrice-per-square-metre trend history for a location (official DVF sale records). France only. Pass coordinates from geocode_address.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
lat | number | Latitude (WGS84). Obtain it from geocode_address. | Yes |
lng | number | Longitude (WGS84). Obtain it from geocode_address. | Yes |
lang | string | Response language: en, de, fr, it, ru or es. Defaults to en. | No |
Returns
| Field | Type | Description |
|---|---|---|
currency | string | ISO currency code. |
series | array | One series per asset type. |
name | string | Series name (asset type). |
points | array | Yearly price-per-sqm points. |
year | integer | Year. |
value | integer | Price per square metre. |
get_location_ratingLocation rating for a point: mean price, net rent and related neighbourhood market metrics. France only. Pass coordinates from geocode_address.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
lat | number | Latitude (WGS84). Obtain it from geocode_address. | Yes |
lng | number | Longitude (WGS84). Obtain it from geocode_address. | Yes |
lang | string | Response language: en, de, fr, it, ru or es. Defaults to en. | No |
Returns
| Field | Type | Description |
|---|---|---|
currency | string | ISO currency code. |
description | string | Long description of the location market. |
summary | string | Short summary. |
last_update | string | Date the figures were last updated (ISO). |
summaries | array | Per-asset-type metrics. |
asset_type | string | Asset type. |
price_per_sqm | integer | Mean sale price per square metre. |
rent_per_sqm | number | Mean net rent per square metre. |
grade | string | Grade for the asset type. |
Location & environment
get_air_qualityAir-quality index and grade for a location. Pass coordinates from geocode_address.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
lat | number | Latitude (WGS84). Obtain it from geocode_address. | Yes |
lng | number | Longitude (WGS84). Obtain it from geocode_address. | Yes |
lang | string | Response language: en, de, fr, it, ru or es. Defaults to en. | No |
Returns
| Field | Type | Description |
|---|---|---|
aqi | number | Air-quality index. |
grade | string | Air-quality grade (A to G). |
get_seasonal_climateSeasonal temperature / climate profile for a location. Pass coordinates from geocode_address.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
lat | number | Latitude (WGS84). Obtain it from geocode_address. | Yes |
lng | number | Longitude (WGS84). Obtain it from geocode_address. | Yes |
lang | string | Response language: en, de, fr, it, ru or es. Defaults to en. | No |
Returns
| Field | Type | Description |
|---|---|---|
sunny_days | integer | Sunny days per year. |
seasons | array | Per-season temperature summary. |
season | string | Season: winter, spring, summer or autumn. |
summary | string | Short text summary. |
min_celsius | number | Typical low temperature (Celsius). |
max_celsius | number | Typical high temperature (Celsius). |
get_neighborhoodLiving environment for a location: amenities, schools, leisure, safety and water quality. France only. Pass coordinates from geocode_address.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
lat | number | Latitude (WGS84). Obtain it from geocode_address. | Yes |
lng | number | Longitude (WGS84). Obtain it from geocode_address. | Yes |
lang | string | Response language: en, de, fr, it, ru or es. Defaults to en. | No |
Returns
| Field | Type | Description |
|---|---|---|
tabs | array | One entry per environment domain. |
category | string | Domain, e.g. amenities, schools, safety. |
grade | string | Grade for the domain (A to G). |
badges | array | Highlight labels. |
text | string | Short description. |
get_noiseEstimated baseline noise level for a location, in decibels. Pass coordinates from geocode_address.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
lat | number | Latitude (WGS84). Obtain it from geocode_address. | Yes |
lng | number | Longitude (WGS84). Obtain it from geocode_address. | Yes |
lang | string | Response language: en, de, fr, it, ru or es. Defaults to en. | No |
Returns
| Field | Type | Description |
|---|---|---|
base_noise | integer | Estimated baseline noise level in decibels. |
Insights
get_building_insightsFull building report for a location: categorised buyer insights (energy/DPE, structural, regulatory, and natural/technological risks such as flood, seismic, clay and radon), each with severity, detail, a recommendation, the applicable regulation and its data source and confidence, plus an overall risk score. Use for due diligence on an address. Pass coordinates and the country_code from geocode_address: France has the full 36-category report; Germany a partial report from open German data. An out-of-coverage point returns an empty report rather than an error.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
lat | number | Latitude (WGS84). Obtain it from geocode_address. | Yes |
lng | number | Longitude (WGS84). Obtain it from geocode_address. | Yes |
country | string | ISO 3166-1 alpha-2 country code from geocode_address (country_code): fr for the full report, de for the German partial report. Defaults to fr. | No |
lang | string | Response language: en, de, fr, it, ru or es. Defaults to en. | No |
Returns
| Field | Type | Description |
|---|---|---|
latitude | number | Latitude (WGS84). |
longitude | number | Longitude (WGS84). |
risk_score | integer | Overall risk score (0-100); null if out of coverage. |
risk_label | string | Label for the risk score. |
total_insights | integer | Number of insights returned. |
insights | array | Categorised buyer insights. |
category | string | Insight category. |
severity | string | Severity level. |
title | string | Short title. |
detail | string | What was found. |
recommendation | string | Suggested action. |
regulation | string | Applicable regulation, if any. |
source | string | Knowledge-graph inference chain that produced this insight. |
confidence | number | Data reliability (0-1), from the source quality tier. |
source_version | string | Data source identifier, e.g. bdnb_open_data or the German source. |
get_renovation_advicePrioritised renovation and energy plan for a building: the renovation-relevant findings — envelope insulation deficiencies, heating and hot-water obsolescence, the worst heat-loss element, window quality, thermal bridges, the estimated energy bill, carbon footprint, the DPE rental-ban regulation, and green-energy / district-heating options — filtered from the full building report and ordered most-urgent first with a priority rank, so you can advise what to fix first. France has the full analysis; Germany a partial one. Pass coordinates and the country_code from geocode_address. Out of coverage returns an empty plan, not an error.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
lat | number | Latitude (WGS84). Obtain it from geocode_address. | Yes |
lng | number | Longitude (WGS84). Obtain it from geocode_address. | Yes |
country | string | ISO 3166-1 alpha-2 country code from geocode_address (country_code): fr for the full report, de for the German partial report. Defaults to fr. | No |
lang | string | Response language: en, de, fr, it, ru or es. Defaults to en. | No |
Returns
| Field | Type | Description |
|---|---|---|
latitude | number | Latitude (WGS84). |
longitude | number | Longitude (WGS84). |
total_steps | integer | Number of renovation steps returned. |
steps | array | Renovation-relevant insights, most urgent first (fix the first one first). |
category | string | Insight category. |
severity | string | Severity level. |
title | string | Short title. |
detail | string | What was found. |
recommendation | string | Suggested action. |
regulation | string | Applicable regulation, if any. |
source | string | Knowledge-graph inference chain that produced this insight. |
confidence | number | Data reliability (0-1), from the source quality tier. |
source_version | string | Data source identifier, e.g. bdnb_open_data. |
get_property_reportOne-shot due-diligence report for an address: bundles the building insights (energy/DPE, structural, regulatory and natural/technological risks), comparable sold properties, price-per-square-metre trends, the location rating (mean price and net rent), the risk assessment, the local environment (air quality, seasonal climate, neighbourhood and noise) and the commune's short-term-rental regime into a single response. Use for a complete property review in one call instead of chaining the individual tools; each section matches its dedicated tool's shape. Any section out of coverage is omitted. France is covered in depth; elsewhere the sections that resolve are returned. Pass coordinates and the country_code from geocode_address.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
lat | number | Latitude (WGS84). Obtain it from geocode_address. | Yes |
lng | number | Longitude (WGS84). Obtain it from geocode_address. | Yes |
country | string | ISO 3166-1 alpha-2 country code from geocode_address (country_code): fr for the full report, de for the German partial report. Defaults to fr. | No |
lang | string | Response language: en, de, fr, it, ru or es. Defaults to en. | No |
Returns
| Field | Type | Description |
|---|---|---|
latitude | number | Latitude (WGS84). |
longitude | number | Longitude (WGS84). |
building_insights | object | Same shape as get_building_insights. Null if out of coverage. |
comparable_sales | object | Same shape as get_comparable_sales. Null if unavailable. |
price_trends | object | Same shape as get_price_trends. Null if unavailable. |
location_rating | object | Same shape as get_location_rating. Null if unavailable. |
risk_assessment | object | Same shape as get_risk_assessment. Null if unavailable. |
air_quality | object | Same shape as get_air_quality. Null if unavailable. |
seasonal_climate | object | Same shape as get_seasonal_climate. Null if unavailable. |
neighborhood | object | Same shape as get_neighborhood. Null if unavailable. |
noise | object | Same shape as get_noise. Null if unavailable. |
short_term_rental | object | Same shape as get_short_term_rental. Null outside France. |
get_risk_assessmentNatural and technological risk assessment for a location (official GeoRisques data): flood, seismic, clay/subsidence and radon. France only. Pass coordinates from geocode_address.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
lat | number | Latitude (WGS84). Obtain it from geocode_address. | Yes |
lng | number | Longitude (WGS84). Obtain it from geocode_address. | Yes |
lang | string | Response language: en, de, fr, it, ru or es. Defaults to en. | No |
Returns
| Field | Type | Description |
|---|---|---|
risks | array | One entry per hazard. |
category | string | Hazard, e.g. flood, seismic, clay, radon. |
grade | string | Risk grade. |
explanation | string | What the grade means here. |
confidence | number | Confidence (0-1). |
get_short_term_rentalShort-term-rental (Airbnb) regime of the commune a location lies in, for a home the owner does not live in: whether a changement d'usage permit is needed, whether the commune is closed to new lets (quota reached or compensation required), the yearly day cap for the owner's own home, the règlement's specifics and its source. Derived from the national registration list and each commune's own règlement; an absent status means no local rule is on file, not that letting is allowed. France only. Pass coordinates from geocode_address.
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
lat | number | Latitude (WGS84). Obtain it from geocode_address. | Yes |
lng | number | Longitude (WGS84). Obtain it from geocode_address. | Yes |
lang | string | Response language: en, de, fr, it, ru or es. Defaults to en. | No |
Returns
| Field | Type | Description |
|---|---|---|
insee | string | INSEE code of the commune. |
commune | string | Commune name. |
status | string | Regime for a home the owner does not live in: OPEN (verified: no local rule), AUTHORIZATION (changement d'usage permit needed), CAPPED (closed to new lets: quota reached or compensation from the first square metre), UNDER_REVIEW (restriction being debated). Absent when no local rule is on file — not known, not a guarantee. |
compensation | boolean | A replacement dwelling is required at least in part of the commune. |
quota | boolean | The number of permits is limited. |
quota_full | boolean | That limit is known to be reached. |
primary_days | integer | Days per year the owner's own main home may be let: 120 by law, 90 where the council lowered it. |
note | string | The règlement's specifics in the requested language. |
source_url | string | Mairie / EPCI page or open-data list the row is based on. |
verified_at | string | Date the row was last checked against its source (ISO 8601). |
Start building
Request developer access, generate an API key and connect your MCP client.