Comprehensive Model Context Protocol server for managing Home Assistant through AI assistants.
PropertyList — Spanish Property MLS is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
First-party Spanish and Portuguese property listings with notary-verified prices.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http propertylist-spanish-property-mls-mcp https://mcp.propertylist.es/mcp
# 2 — ask your agent for something these tools do
# search_properties, find_properties_by_description, autocomplete_location and 28 more
PropertyList — Spanish Property MLS costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http propertylist-spanish-property-mls-mcp https://mcp.propertylist.es/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
31 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
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. Free use, with or without an API key, is for an assistant answering a person's questions and has a daily allowance of results. Reading listings in bulk
| Parameter | Type | Required | Notes |
|---|---|---|---|
| search_type | string | no | Listing market. Defaults to 'for-sale'. |
| location | string | no | 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. |
| location_id | integer | no | Area id from autocomplete_location. Takes precedence over location. A group id (a region or coast, type group) searches every area in the group. |
| features | array | no | Only listings with ALL of these: pool (any pool), private_pool (tagged private or heated pool), communal_pool (tagged communal pool), sea_view, garden (private, landscaped or communal), parking (garag |
| property_types | string | no | Comma-separated slugs: apartments, villas, penthouses, plots, townhouses, commercial. |
| bedrooms_min | integer | no | — |
| bedrooms_max | integer | no | — |
| bathrooms_min | integer | no | — |
| price_min | integer | no | Minimum price in euros (sale) or monthly euros (rent). |
| price_max | integer | no | Maximum price in euros (sale) or monthly euros (rent). |
| page | integer | no | — |
| page_size | integer | no | — |
| language | string | no | Preferred language for property titles and description excerpts. |
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"). The matcher translates 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 matc
| Parameter | Type | Required | Notes |
|---|---|---|---|
| brief | string | yes | Plain-English (or Spanish) description of what the user is looking for. 10-500 chars. |
| language | string | no | — |
Look up property areas (city, suburb, urbanisation, or a group of areas such as a region or a coast) by free-text name. Returns up to 10 matches with id, name, type, the parent province/city and the number of listings, biggest first, so a group that covers a whole region (e.g. 'Region of Murcia') comes before the city of the same name. Use this to resolve place names before calling search_properti
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Free-text place name. 2+ characters. |
| provinces | string | no | Optional comma-separated province ids to scope the search. |
| search_type | string | no | Market the listing counts and the ranking are for. Defaults to 'for-sale'. |
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 or photos. To contact the listing agency, use submit_enquiry - direct phone or email details are not part of the payload. Works without an API key up to a daily
| Parameter | Type | Required | Notes |
|---|---|---|---|
| reference | string | yes | PropertyList reference, e.g. 'PLE-12345'. |
| language | string | no | — |
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:
| Parameter | Type | Required | Notes |
|---|---|---|---|
| location | string | yes | Place name (city, suburb, or urbanisation). e.g. 'Marbella'. |
| search_type | string | no | — |
| property_types | string | no | Optional comma-separated slugs: apartments, villas, penthouses, plots, townhouses. |
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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| location | string | yes | Place name (city, suburb, or urbanisation). e.g. 'Estepona'. |
| limit | integer | no | — |
Get a valuation for a property or area in Spain, Portugal or Cyprus from recorded market data, not asking prices. Returns the €/m² (price_per_sqm) 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. Check verified before citing. It is true ONLY for Spanish figures
| Parameter | Type | Required | Notes |
|---|---|---|---|
| location | string | no | Municipality / city name, e.g. "Marbella". Ignored if a reference is given. |
| property_type | string | no | Optional segment slug: apartment, villa, penthouse, townhouse, plot. Defaults to the municipality-wide figure. |
| build_sqm | integer | no | Built size in m² to value. Optional. |
| reference | string | no | Value a specific PropertyList listing by reference (uses its municipality, type and size). Optional. |
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. This is the supported way to contact a listing agency - direct phone or email details are not exposed by other tools. Works without an API key u
| Parameter | Type | Required | Notes |
|---|---|---|---|
| reference | string | yes | PropertyList listing reference the enquiry is about, e.g. 'PLE-12345'. |
| name | string | yes | Enquirer's full name. |
| string | yes | Enquirer's email address. | |
| phone | string | yes | Enquirer's phone number (with country code where possible). |
| message | string | no | Optional message / what they want to know or arrange (e.g. a viewing). |
| language | string | no | Preferred language for the agency to reply in. |
Listings similar to one property: same market (sale or rent), same town, same kind of home, a similar number of bedrooms and a price within about 25%. Closest in price first. Use it for "show me alternatives to PL12345" or "anything like this but cheaper?". Every property carries oracle_verified and oracle_attestation_url, as in search_properties.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| reference | string | yes | Reference of the listing to find alternatives to, e.g. PL12345. |
| limit | integer | no | — |
| language | string | no | Language for titles and description excerpts. |
Live listings whose asking price has been reduced recently, biggest reduction first. Each listing carries the price before the cut, the price now, the reduction in euros and percent, and when it was cut. Use for "what has dropped in price in Estepona this month?" or to spot motivated sellers. Filters work as in search_properties (location, type, bedrooms, price). A location we do not hold returns
| Parameter | Type | Required | Notes |
|---|---|---|---|
| location | string | no | Place name, e.g. 'Marbella'. Omit for every area. |
| search_type | string | no | Defaults to 'for-sale'. |
| property_types | string | no | Comma-separated slugs: apartments, villas, penthouses, plots, townhouses, commercial. |
| bedrooms_min | integer | no | — |
| price_max | integer | no | Maximum CURRENT price in euros (sale) or monthly euros (rent). |
| days | integer | no | How far back to look for reductions. |
| min_percent | number | no | Only reductions of at least this percentage. |
| limit | integer | no | — |
| language | string | no | — |
Search PropertyList's guides on buying, selling and renting in Spain: taxes such as ITP, IBI and non-resident income tax, the NIE, the buying process, laws and area guides. Use it for how-to, cost and legal questions, then call get_guide for the page. Spanish words need their accents (for example tributación, tasación).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | 1 to 6 keywords work best, e.g. "NIE number" or "IBI". |
| language | string | no | Language of the guides: en (default) or es. |
| limit | integer | no | — |
Read one PropertyList guide. Answer from its text and link its url. If last_reviewed is set, say the page was checked on that date; if it is null, say the page shows no review date. If truncated is true, call again with offset set to next_offset. It is general information, not legal or tax advice.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | yes | The guide on info.propertylist.es: a full URL from search_guides, or its path (/docs/...). |
| max_chars | integer | no | Most characters of text to return (default 12000). |
| offset | integer | no | Where to continue a long page: the next_offset of the previous call. |
List recent enquiries (leads) for YOUR agency's CRM - newest first. Use when the agent asks what has just come in (e.g. "what came in today?"). This is the enquiry inbox: an enquiry that arrived from the portal, a website or a microsite. Once an agent starts working a person they live on a pipeline board instead - for those, use my_pipeline. An agency that works everything off the boards can have
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | integer | no | — |
| since | string | no | ISO date/time - only leads created on or after this. Optional. |
| property_reference | string | no | Only leads about this listing reference. Optional. |
List the cards on YOUR agency's CRM pipeline boards (Kanban), with each board's own stage names and card counts. Boards: lead, buyer, seller, tenant, nurture (each card is a contact) and property (each card is a listing). Stage names are whatever the agency renamed them to, so read them from the reply rather than assuming. Call with no pipeline for a summary of every board - use this to answer "
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pipeline | string | no | Which board. Omit for a summary of all of them. |
| stage | string | no | Only cards in this stage. Match on the stage name as it reads on the board (case-insensitive); closed stages such as Won or Lost can be asked for by name. Optional. |
| limit | integer | no | Cards per stage. Counts are always the full stage total, whatever this is set to. |
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 a linked PropertyList account (or an agency API key); only ever searches the calling agency's own contacts.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Name, company, email or phone fragment to search for. |
| limit | integer | no | — |
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 a linked PropertyList account (or an agency API key); only ever returns the calling agency's own properties.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| status | string | no | Listing status. Defaults to 'online'. 'draft' covers listings not yet published (new + in review); 'all' returns every status. |
| reference | string | no | A specific listing reference. Optional. |
| limit | integer | no | — |
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 a linked PropertyList account (or an agency API key).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Contact's first name (or full name). |
| surname | string | no | Contact's surname. Optional. |
| string | no | Email address. Optional but recommended (used for de-duplication). | |
| phone | string | no | Phone number. Optional. |
| company_name | string | no | Company name (for a business contact). Optional. |
Start a new property listing in YOUR agency's CRM from a description. Use when the agent is describing a property they have taken on and wants it in the system. Creates a DRAFT. It is never published and never appears on the portal from here: the agent adds photographs and the energy rating in the CRM and publishes it themselves. The response includes a direct link to the draft. Location is reso
| Parameter | Type | Required | Notes |
|---|---|---|---|
| description | string | yes | The property description, in the language the agent wrote it. |
| location | string | no | Town, suburb or urbanisation, e.g. "Nueva Andalucia" or "Menara Beach". |
| property_type | string | no | apartment, villa, penthouse, townhouse, plot or commercial. |
| search_type | string | no | Whether it is for sale or for long-term rent. Defaults to for-sale. |
| price | integer | no | Asking price in euros, or monthly rent for a rental. |
| bedrooms | integer | no | — |
| bathrooms | integer | no | — |
| build_sqm | integer | no | Built area in square metres. |
| plot_sqm | integer | no | Plot size in square metres. |
| headline | string | no | Short headline for the listing. Optional. |
| language | string | no | Language the description is written in. Defaults to the agency language. |
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 a linked PropertyList account (or an agency API key).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| note | string | yes | The note text to record. |
| contact_id | integer | no | Contact to attach the note to (from find_contacts). Optional if a property reference is given. |
| property_reference | string | no | Listing reference to attach the note to. Optional if a contact_id is given. |
The full picture of one client in YOUR agency's CRM: contact details, where they sit on the pipeline boards, the agents they belong to, their saved searches, their enquiries, recent notes and history, viewings with outcomes, listings already sent to them, when they were last in touch and what is booked next. Get the contact_id from find_contacts or my_pipeline first. Use this before advising an a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| contact_id | integer | yes | The contact id, from find_contacts or my_pipeline. |
The listings that fit one client's search in YOUR agency's CRM: your own listings first, then shared MLS listings your agency can sell, newest first. Each listing says whether it is your own. Uses the client's saved search (or, if none is saved, the search their latest debrief described), the same search the CRM runs for that client. A client with no search returns an explanation rather than a gu
| Parameter | Type | Required | Notes |
|---|---|---|---|
| contact_id | integer | yes | The client, from find_contacts or my_pipeline. |
| limit | integer | no | — |
| language | string | no | Language for listing titles and excerpts. |
The clients in YOUR agency's CRM whose saved search fits one listing: who to call about it. Works for your own listings and for shared MLS listings your agency can sell. Only online listings can be matched (a saved search only ever shows online stock); a draft returns an explanation. Clients are listed with their assigned agent, pipeline stage and the search they matched on. Use get_contact on an
| Parameter | Type | Required | Notes |
|---|---|---|---|
| property_reference | string | yes | Listing reference, e.g. PL12345. |
| limit | integer | no | — |
Checks YOUR agency's own listings for what is holding them back, and lists the ones with problems, most problems first: - stale: online for 90 days or more, no enquiry in the last 60 days and no price change in the last 90 - too_few_photos: fewer than the 5 photos a listing needs to publish - no_energy_rating - missing_description: no Spanish or no English description - no_price:
| Parameter | Type | Required | Notes |
|---|---|---|---|
| status | string | no | — |
| issue | string | no | Only listings with this problem. Optional. |
| limit | integer | no | — |
Stage a move of a client's card to another step on a pipeline board they are already on (buyer, seller, lead or tenant), as dragging the card on the CRM board does. Returns a preview and an action_id; NOTHING changes until you call confirm_action with that id, after the agent has said yes. Use the stage name as it reads on the board (my_pipeline lists them). Putting a client on a board they are n
| Parameter | Type | Required | Notes |
|---|---|---|---|
| contact_id | integer | yes | The client, from find_contacts or my_pipeline. |
| pipeline | string | yes | — |
| stage | string | yes | The step to move to, as named on the board. |
| offer_amount | integer | no | Euros, for an offer stage. Optional. |
| property_reference | string | no | The listing the offer is on, if the card has none. Optional. |
Stage qualifying a client, as the CRM's Qualified popup does: tags them as a buyer, seller or tenant, puts them on that pipeline board and takes them off the Lead board. Returns a preview, including what it will COST (a place on the Buyer board uses a free place or one credit), and an action_id; NOTHING changes or is charged until you call confirm_action with that id, after the agent has said yes.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| contact_id | integer | yes | The client, from find_contacts or my_pipeline. |
| board | string | no | The board to put them on. Optional. |
Stage assigning one of YOUR agency's listings to a colleague. Returns a preview and an action_id; NOTHING changes until you call confirm_action with that id, after the agent has said yes. Only an agency admin (or someone allowed to edit every listing), or the agent the listing is assigned to now, may move it; an unassigned listing can be taken by anyone who may edit listings. Name the colleague a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| reference | string | yes | The listing reference. |
| colleague | string | yes | The colleague's name, e.g. 'Sarah Lopez'. |
Stage putting one of YOUR agency's listings online (it goes into approval, as the CRM's Publish button does), taking it offline, or marking it sold. Returns a preview, including any credit cost (a private, unshared listing costs credits to publish), and an action_id; NOTHING changes until you call confirm_action with that id, after the agent has said yes. Publishing checks what the CRM checks (ph
| Parameter | Type | Required | Notes |
|---|---|---|---|
| reference | string | yes | The listing reference. |
| status | string | yes | — |
| sale_price | integer | no | Achieved price in euros, for sold. Optional. |
| hide_sale_price | boolean | no | For sold: do not record the price. Optional. |
Stage an email from the agent to one of their clients with listings attached, as the CRM sends listings (it appears on the client's timeline). You write the subject and message, in the client's language. Returns a preview with the address, subject, message and listings, and an action_id; NOTHING is sent until you call confirm_action with that id, after the agent has read it and said yes. Listings
| Parameter | Type | Required | Notes |
|---|---|---|---|
| contact_id | integer | yes | The client, from find_contacts. |
| property_references | array | yes | — |
| subject | string | yes | — |
| message | string | yes | The email text, in the client's language. The listings are attached below it. |
Stage a viewing in the agent's own CRM diary, with the client and the listing on it. Returns a preview and an action_id; NOTHING is saved until you call confirm_action with that id, after the agent has said yes. The listing can be the agency's own or a shared MLS listing. This only books the agent's diary: for an MLS listing, the listing agency is not contacted, so the agent arranges access with
| Parameter | Type | Required | Notes |
|---|---|---|---|
| contact_id | integer | yes | The client, from find_contacts. |
| property_reference | string | yes | — |
| starts_at | string | yes | ISO 8601 date and time, e.g. '2026-10-08T11:00'. |
| duration_minutes | integer | no | — |
| notes | string | no | Optional. |
Make a change you staged with move_pipeline_stage, qualify_lead, assign_listing, set_listing_status, send_listings_to_contact or schedule_viewing. Call it ONLY after showing the agent the preview and hearing them say yes. It can charge credits and send email, exactly as the preview said. Everything is checked again first; if the client, listing or stage has changed so the action no longer applies
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action_id | integer | yes | The action_id from the preview. |
Drop a change you staged and the agent does not want. Nothing in the CRM changes; the action_id can no longer be confirmed. An unconfirmed preview also lapses by itself after 30 minutes. Requires a linked PropertyList account: the change is made in the agent's own name, with their CRM permissions, so an agency API key alone cannot make it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action_id | integer | yes | The action_id from the preview. |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install PropertyList — Spanish Property MLS or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
This listing is an address its publisher runs, and you connect to it directly — this marketplace is not in the path. The scanner reads packages and public source, and an address is neither. So there is no grade — not a withheld one, an unmeasured one.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 0.1.1.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish PropertyList — Spanish Property MLS can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.