idealista-mcp
This server lets you interact with your Idealista messaging inbox through an MCP interface, using a manually launched Chrome session.
Session & counters:
check_sessionverifies authentication;get_countersreturns unread and starred conversation counts.List conversations:
list_conversationsfetches the first inbox page;list_pendingscans the full inbox for conversations awaiting your reply, with age/limit filters and fail-closed unknown entries.Read messages:
get_conversationretrieves the most recent N messages from a specific conversation.Draft & send messages:
draft_messagecreates a draft and returns recipient name and last message for review;send_messagesends it only after explicit confirmation and recipient-name matching.Network capture:
capture_start/capture_stopcapture XHR/Fetch requests to idealista.com, optionally including structural response bodies.Safety notes: sending is write-only and guarded; message content from third parties may be wrapped in nonces; no automatic read-marking or retries are performed.
Click on "Deploy 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., "@idealista-mcp show me conversations awaiting my reply"
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.
idealista-mcp
MCP server for Idealista messaging. Connects to a Chrome instance you run yourself via Chrome DevTools Protocol (CDP). No browser is launched automatically.
Requirements
Node.js >= 20
Google Chrome (or Chromium) installed
An Idealista account, already logged in inside the Chrome profile you launch
Related MCP server: linkedin-mcp
Start Chrome with remote debugging
You must close any existing Chrome instance before running these commands — if Chrome is already open, the debugging port will not be exposed.
macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--remote-debugging-port=9222 \
--user-data-dir="$HOME/.config/chrome-idealista"Linux
google-chrome \
--remote-debugging-port=9222 \
--user-data-dir="$HOME/.config/chrome-idealista"Windows (PowerShell)
& "C:\Program Files\Google\Chrome\Application\chrome.exe" `
--remote-debugging-port=9222 `
--user-data-dir="$env:USERPROFILE\chrome-idealista"Use a dedicated --user-data-dir so this profile is separate from your everyday Chrome. Log into Idealista inside this instance; the server reuses those cookies.
Install
This package is not published to npm. Install from source:
git clone https://github.com/0p3rador/ide4lista-mcp
cd ide4lista-mcp
npm install
npm run build
npm linkMCP client configuration
Option A — installed via npm link (recommended for development)
{
"mcpServers": {
"idealista": {
"command": "ide4lista-mcp",
"env": {
"IDEALISTA_CDP_ENDPOINT": "http://localhost:9222"
}
}
}
}Option B — absolute path to the built file
{
"mcpServers": {
"idealista": {
"command": "node",
"args": ["/absolute/path/to/idealista-mcp/dist/index.js"],
"env": {
"IDEALISTA_CDP_ENDPOINT": "http://localhost:9222"
}
}
}
}Replace /absolute/path/to/idealista-mcp with the directory where you cloned the repo.
Environment variables
Variable | Default | Description |
|
| Chrome DevTools Protocol endpoint |
|
| Idealista domain ( |
|
| Draft expiry in ms (5 min). Must be positive. |
|
| Pause between paginated list requests in ms. Must be positive. |
|
| Max XHR entries buffered by |
Tools
Tool | Effect | Notes |
| Read — checks authentication status | Uses |
| Read — unread count + starred conversations | Lightweight alternative to listing |
| Read — first page of inbox | Returns |
| Read — conversations awaiting your reply | Paginates full inbox; respects |
| Read — recent messages, descending | Fetches N messages newest-first |
| Read — creates an in-memory draft | Returns draft_id + last message for review |
| WRITE — sends a message | Requires |
| Read — begins XHR capture | Pass |
| Read — returns captured requests | Stops capture; error if none was active |
Sending a message: required flow
draft_message(conversation_id, text)
→ returns { draft_id, recipient_name, last_message, ... }
Review the draft and last_message carefully.
send_message(draft_id, confirmed: true, recipient_name: "<exact name from draft>")
→ returns { sent: true, messageId, conversationId }send_message is the only tool that writes data. It requires confirmed: true and a recipient_name that matches the draft exactly — this guards against sending to the wrong person. Drafts expire after IDEALISTA_DRAFT_TTL_MS ms.
If send_message returns a network error, the message may or may not have been delivered. Do not retry automatically — check get_conversation first. If the draft is marked ambiguous, create a new one with draft_message only after confirming the original did not arrive.
Security notes
capture_start with include_body: true dumps third-party personal data (names, phone numbers, message content) into the model context. Do not share, log, or republish this output.
External message content is wrapped in <mensaje_externo_NONCE> tags. The nonce changes per call and the closing tag is escaped out of the content, which reduces the risk of injected text breaking out of the delimited block. This is a partial mitigation, not a guarantee.
Limits and terms of service
This tool automates access to your own Idealista account. Automated access may conflict with Idealista's terms of service. Use it at a human pace, for your own account only.
mark-as-read is not implemented deliberately. Whether GET /messages triggers server-side read marking is unverified — do not assume this server leaves conversations unread.
Available Tools
10 toolscapture_startA
Inicia captura de XHR/Fetch a idealista.com. Usa capture_stop para obtener resultados.
Inputs: include_body.
capture_stopA
Detiene la captura y devuelve el buffer. Error explícito si no hay captura activa.
Inputs: no named parameters.
check_sessionA
Verifica si hay sesión activa. Usa /menu-api y valida body.me.name. Devuelve { authenticated, method, name? }.
Inputs: no named parameters.
draft_messageC
Crea borrador. Resuelve destinatario desde /detail. Devuelve último mensaje (más reciente) para contexto de aprobación.
Inputs: text (required), conversation_id (required).
get_conversationA
Obtiene los N mensajes más recientes de una conversación, en orden descendente (messages[0] = más reciente).
Inputs: conversation_id (required), size.
get_countersA
Devuelve mensajes no leídos y conversaciones destacadas. Alternativa ligera a listar todo cuando no hay Socket.IO.
Inputs: no named parameters.
list_conversationsB
Primeras 20 conversaciones vía /conversations/list. Incluye hasPrevious/hasNext para saber si hay más páginas.
Inputs: no named parameters.
list_pendingA
Busca conversaciones pendientes de respuesta (último mensaje es del interlocutor, no mío). Páginas la lista completa con pausa de 1.5 s entre páginas. Devuelve entradas 'pending' y 'unknown' (fail-closed). AVISO: las entradas 'unknown' deben revisarse manualmente — nunca alimentar una respuesta automática sin verificar.
Inputs: limit, max_age_days.
open_loginA
Abre la página de login de Idealista. Devuelve inmediatamente.
Inputs: no named parameters.
send_messageA
Envía usando draft_id. El borrador se elimina SOLO tras éxito 200. En sesión caducada, el borrador sobrevive. AVISO: el servidor no deduplica — no reintentar si hay error de red ambiguo (puede duplicar).
Inputs: draft_id (required), confirmed (required), recipient_name (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Each tool targets a distinct resource or action: authentication (open_login, check_session), conversation summaries (get_counters), conversation listing (list_conversations, list_pending), message retrieval (get_conversation), and message flow (draft_message, send_message). The capture pair is clearly separate. No two tools appear to do the same thing.
Most tool names follow a clean verb_noun pattern (draft_message, open_login, check_session, get_conversation, send_message). However, capture_start and capture_stop invert this pattern, using noun_verb instead of the expected start_capture/stop_capture, creating a minor inconsistency.
At 10 tools, the set is well-scoped for a messaging/automation server. Each tool serves a clear purpose in the login→list→read→draft→send workflow, plus a debugging capture pair. Nothing feels redundant or unnecessary.
The core messaging lifecycle is well covered: authentication, session validation, conversation listing, message reading, draft creation, sending, and pending detection. Minor gaps remain such as no logout, no mark-as-read, and no way to manage or delete drafts, but agents can work around these.
Maintenance
Related MCP Connectors
Your LinkedIn inbox, connections and video views for AI. Works with any CRM. Drafts only.
Connect any IMAP/SMTP mailbox to Claude & ChatGPT: search, read, sort, draft. Sends only with OK.
Control your Chrome from chat: open websites, read what's on the page, click buttons, and fill in f…
I send and manage WhatsApp Web messages through your linked session
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables token-efficient browser automation for AI chats like ChatGPT, Gemini, and Claude, allowing reading responses, sending messages, waiting for streaming replies, and bridging conversations between tabs via Chrome DevTools Protocol.5MIT
- AlicenseNot gradedqualityCmaintenanceEnables sending LinkedIn messages and invitations, reading conversations, and managing outreach through natural language by automating a real LinkedIn session via a Chrome extension.23 npmMIT
- AlicenseBqualityBmaintenanceEnables AI agents to drive the user's already-running Google Chrome through a WebSocket bridge, listing and switching tabs, navigating, clicking, typing, scrolling, extracting DOM, taking screenshots, and evaluating JavaScript. It works without restarting Chrome and preserves all existing logins, cookies, and 2FA sessions.256 npmMIT
- AlicenseNot gradedqualityCmaintenanceLets local AI agents drive the Chrome browser a user already has open, including signed-in sessions, by listing tabs, reading page text and actionable elements, then clicking, filling, selecting, scrolling, navigating, and capturing viewport screenshots without exporting cookies. Runs as a dependency-free local stdio process over Native Messaging, with per-tab leases, automatic reconnection, and pause/write-action controls.MIT