PropertyList — Spanish Property MLS
REMOTE · MCP.PROPERTYLIST.ES · SCANNED AUG 3
First-party Spanish, Portuguese and Italian property listings with notarial-verified prices.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →
Endpoint Security69
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS not yet verified: we couldn't determine whether a plaintext access path exists. View diagnostics → Unverified
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability64
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 2520 tokens (~193/item across 13 items; 13 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management23
- Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage93
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 75% of tool parameters carry a description.Partial
- Structured output schemas are declared (38% of tools); any adoption earns full credit.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · mcp.propertylist.es
claude mcp add --transport http es-propertylist-propertylist https://mcp.propertylist.es/mcp
[mcp_servers.es-propertylist-propertylist] url = "https://mcp.propertylist.es/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"es-propertylist-propertylist": {
"type": "remote",
"url": "https://mcp.propertylist.es/mcp",
"enabled": true
}
}
} openclaw mcp add es-propertylist-propertylist --url https://mcp.propertylist.es/mcp --transport streamable-http
mcp_servers:
es-propertylist-propertylist:
url: "https://mcp.propertylist.es/mcp" {
"mcpServers": {
"es-propertylist-propertylist": {
"type": "http",
"url": "https://mcp.propertylist.es/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 2 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Aug 26 +2
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 31 Jul 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 29 Jul 26 +1
- Tool “area_market_summary” rewrote its description, which is the text the model reads security
- Tool “get_property” rewrote its description, which is the text the model reads security
- Tool “search_properties” rewrote its description, which is the text the model reads security
- Schema quality: 174 → 193 ▼ functional
- Schema quality: good → excellent functional
- 28 Jul 26 +5
- Authorization: unverified → partial ▲ security
- Stability: unverified → 0.03 ▲ functional
- 27 Jul 26 58
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Probed https://mcp.propertylist.es/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=propertylist.es | CN=WE1,O=Google Trust Services,C=US | 13 Jun 2026 | 11 Sept 2026 | ECDSA 256 | ECDSA-SHA256 | c07b6c14c87f9ec9130275d146ba76eb |
| SANs: propertylist.es, *.propertylist.es | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
DNSSEC insecure
Validation of mcp.propertylist.es. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| es. | present | 54404 | 8 | Verified |
| propertylist.es. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
| referrer-policy | strict-origin-when-cross-origin |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.propertylist.es/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.propertylist.es/mcp | Inconclusive | 410 |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
area_market_summary ~233
Return aggregate market context for a Spanish area: number of active listings, median price, mean price, median €/m², and the count broken down by bedroom band. Filterable by property type and search type (for-sale / for-rent / holiday-rentals). Use this before recommending a price or commenting on whether a listing is good value. If the place name is not one we hold, the response says so (error: location_not_found, location_match.matched: false) and returns no figures. Figures are NEVER nationwide fallbacks. Price figures follow the search type and are labelled with price_unit: sale prices are totals, for-rent is per MONTH and holiday-rentals is per WEEK. median_price_per_sqm is reported for sales only.
| Name | Type | Req | Description |
|---|---|---|---|
| location | string | yes | Place name (city, suburb, or urbanisation). e.g. 'Marbella'. |
| property_types | string | — | Optional comma-separated slugs: apartments, villas, penthouses, plots, townhouses. |
| search_type | string | — | — |
| Name | Type | Req | Description |
|---|---|---|---|
| by_bedroom_band | object | — | — |
| error | string|null | — | — |
| location | string | yes | — |
| location_match | object|null | — | — |
| max_price | integer|null | — | — |
| mean_price | integer|null | — | — |
| median_price | integer|null | — | — |
| median_price_per_sqm | integer|null | — | — |
| min_price | integer|null | — | — |
| note | string|null | — | — |
| oracle | object | yes | — |
| price_basis | string | — | — |
| price_unit | string | — | — |
| property_types | string|null | — | — |
| search_type | string | — | — |
| total_listings | integer | yes | — |
No examples provided.
autocomplete_location ~115
Look up Spanish property areas (city, suburb, urbanisation) by free-text name. Returns up to 10 matches with id, name, and the parent province/city. Use this to resolve place names before calling search_properties, especially for common spellings like 'Nueva Andalucia' (vs 'Nueva Andalucía') or 'Marbella old town'.
| Name | Type | Req | Description |
|---|---|---|---|
| provinces | string | — | Optional comma-separated province ids to scope the search. |
| query | string | yes | Free-text place name. 2+ characters. |
No output schema declared.
No examples provided.
create_contact ~154
Add a new contact to YOUR agency's CRM. Use when the agent wants to save a person (buyer, owner, enquirer). If a contact with the same email already exists it is returned rather than duplicated. The contact is created unassigned and flagged as needing attention so it surfaces in the CRM. Requires an agency API key.
| Name | Type | Req | Description |
|---|---|---|---|
| company_name | string | — | Company name (for a business contact). Optional. |
| string | — | Email address. Optional but recommended (used for de-duplication). | |
| name | string | yes | Contact's first name (or full name). |
| phone | string | — | Phone number. Optional. |
| surname | string | — | Contact's surname. Optional. |
No output schema declared.
No examples provided.
find_contacts ~86
Search YOUR agency's CRM contacts by name, company, email or phone. Use to look a person up before logging a note or to check if they're already in the CRM. Requires an agency API key; only ever searches the calling agency's own contacts.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | — | — |
| query | string | yes | Name, company, email or phone fragment to search for. |
No output schema declared.
No examples provided.
find_properties_by_description ~147
Match Spanish properties from a free-form description of what the user wants. Best for vague, conditional, or lifestyle-heavy briefs ("3-bed near a good international school, flexible on budget if there's a sea view"). Uses Gemini to translate the brief into one to three parallel structured searches across PropertyList's full MLS, then merges and ranks the results. Returns up to 9 listings with match scores and an explanation of how the brief was interpreted (and what couldn't be resolved).
| Name | Type | Req | Description |
|---|---|---|---|
| brief | string | yes | Plain-English (or Spanish) description of what the user is looking for. 10-500 chars. |
| language | string | — | — |
| Name | Type | Req | Description |
|---|---|---|---|
| interpretation | object|null | — | — |
| properties | array | yes | — |
| summary | string|null | — | — |
| unresolved | array | — | — |
No examples provided.
get_property ~154
Fetch the full record for one PropertyList listing by its reference code (the human-readable id like 'PLE-12345'). Use this once the user has settled on a listing from search_properties or find_properties_by_description and wants details, photos, or agency contact info. `location.city` is whatever tier the listing was filed under and may be a municipality OR a locality inside one. To place a listing administratively use `location.municipality` (with its INE municipality_code); it is null, never guessed, when we cannot resolve it.
| Name | Type | Req | Description |
|---|---|---|---|
| language | string | — | — |
| reference | string | yes | PropertyList reference, e.g. 'PLE-12345'. |
| Name | Type | Req | Description |
|---|---|---|---|
| property | object | yes | — |
No examples provided.
list_agencies ~110
Find PropertyList agencies (estate agents) in a given Spanish area, ranked by how many active listings they carry there. Returns up to 10 agencies with name, location, listing count, and a public URL the user can visit. Use this after a buyer has narrowed in on an area and wants to know which agencies dominate it.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | — | — |
| location | string | yes | Place name (city, suburb, or urbanisation). e.g. 'Estepona'. |
No output schema declared.
No examples provided.
log_note ~132
Log a note against a contact or a listing in YOUR agency's CRM (e.g. record a call outcome or a viewing). Provide the note text plus a contact_id (from find_contacts) and/or a property reference. The note appears on the contact/property timeline. Requires an agency API key.
| Name | Type | Req | Description |
|---|---|---|---|
| contact_id | integer | — | Contact to attach the note to (from find_contacts). Optional if a property reference is given. |
| note | string | yes | The note text to record. |
| property_reference | string | — | Listing reference to attach the note to. Optional if a contact_id is given. |
No output schema declared.
No examples provided.
my_leads ~108
List recent enquiries (leads) for YOUR agency's CRM - newest first. Use when the agent asks about their own leads/enquiries (e.g. "what came in today?"). Requires an agency API key; only ever returns the calling agency's own leads.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | — | — |
| property_reference | string | — | Only leads about this listing reference. Optional. |
| since | string | — | ISO date/time - only leads created on or after this. Optional. |
No output schema declared.
No examples provided.
my_listings ~96
List YOUR agency's own property listings (newest first), optionally filtered by status or a specific reference. Use for "show my listings" / "is reference X still online?". Requires an agency API key; only ever returns the calling agency's own properties.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | — | — |
| reference | string | — | A specific listing reference. Optional. |
| status | string | — | Listing status. Defaults to 'online'. |
No output schema declared.
No examples provided.
search_properties ~385
Search PropertyList's full Spanish property MLS by structured filters. Use for queries that translate cleanly to fields: bedrooms, bathrooms, price ceiling, property type, area name. For free-form briefs use find_properties_by_description instead. Returns a paginated list with summary text plus structured JSON. Every property carries `oracle_verified` and `oracle_attestation_url` — true when PropertyList Oracle holds a verified attestation for the listing's municipality and segment. A `location` we do not hold returns zero results with error: location_not_found and location_match.matched: false. It never substitutes listings from other areas. `location.city` is whatever tier the listing was filed under and may be a municipality OR a locality inside one. To place a listing administratively use `location.municipality` (with its INE municipality_code); it is null, never guessed, when we cannot resolve it.
| Name | Type | Req | Description |
|---|---|---|---|
| bathrooms_min | integer | — | — |
| bedrooms_max | integer | — | — |
| bedrooms_min | integer | — | — |
| language | string | — | Preferred language for property titles and description excerpts. |
| location | string | — | Free-text place name (city, suburb, or urbanisation). e.g. 'Marbella', 'Nueva Andalucia', 'Sotogrande'. Pre-resolved with autocomplete_location if you need to confirm match. |
| page | integer | — | — |
| page_size | integer | — | — |
| price_max | integer | — | Maximum price in euros (sale) or monthly euros (rent). |
| price_min | integer | — | Minimum price in euros (sale) or monthly euros (rent). |
| property_types | string | — | Comma-separated slugs: apartments, villas, penthouses, plots, townhouses, commercial. |
| search_type | string | — | Listing market. Defaults to 'for-sale'. |
| Name | Type | Req | Description |
|---|---|---|---|
| error | string|null | — | — |
| location_match | object|null | — | — |
| page | integer | yes | — |
| page_size | integer | yes | — |
| properties | array | yes | — |
| total | integer | yes | — |
No examples provided.
submit_enquiry ~211
Submit an enquiry (lead) about a specific listing on behalf of a prospective buyer or tenant. Use this once the user has chosen a property and wants the agency to contact them. The listing agency receives the enquiry in their CRM and follows up directly. Requires an API key. Provide the property `reference` (from search results) plus the enquirer's contact details. Only submit with the person's clear intent and consent - this sends their details to a real estate agency.
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | Enquirer's email address. | |
| language | string | — | Preferred language for the agency to reply in. |
| message | string | — | Optional message / what they want to know or arrange (e.g. a viewing). |
| name | string | yes | Enquirer's full name. |
| phone | string | yes | Enquirer's phone number (with country code where possible). |
| reference | string | yes | PropertyList listing reference the enquiry is about, e.g. 'PLE-12345'. |
No output schema declared.
No examples provided.
verified_valuation ~240
Get a VERIFIED valuation for a Spanish property or area, sourced from the Spanish notarial register (Consejo General del Notariado) - not asking prices. Returns the verified €/m² for the municipality and segment, an indicative valuation when you give a size (build_sqm) or a listing reference, and a content-hashed attestation URL the figure can be cited from. Also returns our proprietary network achieved-sale figure where available. Use this for "what's it worth / is the asking price fair?". If no attestation covers the area yet, it says so plainly (use area_market_summary for asking-price stats instead).
| Name | Type | Req | Description |
|---|---|---|---|
| build_sqm | integer | — | Built size in m² to value. Optional. |
| location | string | — | Municipality / city name, e.g. "Marbella". Ignored if a reference is given. |
| property_type | string | — | Optional segment slug: apartment, villa, penthouse, townhouse, plot. Defaults to the municipality-wide figure. |
| reference | string | — | Value a specific PropertyList listing by reference (uses its municipality, type and size). Optional. |
| Name | Type | Req | Description |
|---|---|---|---|
| attestation_url | string|null | — | — |
| build_sqm | integer|null | — | — |
| content_hash | string|null | — | — |
| indicative_range | object | — | — |
| location | string|null | yes | — |
| network | object|null | — | — |
| on_chain | boolean | — | — |
| period_end | string|null | — | — |
| property_type | string|null | — | — |
| sample_size | integer|null | — | — |
| source | string|null | — | — |
| valuation_estimate | integer|null | — | — |
| verified | boolean | yes | — |
| verified_price_per_sqm | integer|null | — | — |
No examples provided.