MCP tools reference
Immobiliare.it MCP tools
12 tools for Immobiliare.it on the Cotlet MCP server. Your agent picks them from tools/list.
- MCP server
- https://cotlet.dev/mcp/v1
- Connects with
- Your own Immobiliare.it account (email or social sign-in), as a private advertiser or a house hunter
- Integration page
- Immobiliare.it
| Endpoint | Access | Description |
|---|---|---|
| immobiliare_list_listings | read | Your Published listings with contract, price, address, visibility and number of views. |
| immobiliare_get_listing | read | Full listing: category, type, contract, address, characteristics, price, description, photos, floor plans and URL. |
| immobiliare_list_conversations | read | Conversations in Messages, with the listing, the other person, the last message and any visit request. |
| immobiliare_get_conversation | read | Every message in a conversation, plus the visit request details: in person or remote, days and time slots. |
| immobiliare_list_saved_listings | read | Listings you saved with the heart icon, your notes on them, and whether they were removed. |
| immobiliare_save_search | write | Save a search by name to get an email or notification for every new matching listing. |
| immobiliare_create_listing | write | Post a new listing with free BASE visibility. It goes live after the editorial review, up to 48 hours. |
| immobiliare_update_listing | write | Change fields of one of your listings, as with Edit this listing. |
| immobiliare_delete_listing | write | Remove one of your listings from the portal for good. |
| immobiliare_reply_to_conversation | write | Send a reply as you in a Messages conversation. |
| immobiliare_contact_advertiser | write | Send a first message to whoever posted a listing; the conversation then lives in Messages. |
| immobiliare_request_visit | write | Ask the advertiser for a viewing. Not a booking: they contact you to confirm. |
List listings
readMCP tool immobiliare_list_listings
Returns the listings in your Published listings, with the number of views the portal shows for each. Filter by sale or rent. Pass next_cursor back as cursor for the next page. Use listing_id from each item in the other tools.
Parameters
| Name | Type | Description |
|---|---|---|
| contract | enum | sale, rent or all. Default: all. |
| limit | integer | 1 to 100. Default: 50. |
| cursor | string | Next page cursor from the previous call. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "immobiliare_list_listings",
"arguments": {
"contract": "all",
"limit": 50
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"listings": [
{
"listing_id": "118734552",
"title": "Two-room flat, Bologna",
"contract": "sale",
"price": 239000,
"address": "Via Example 5, Bologna",
"visibility": "BASE",
"views": 412,
"url": "https://www.immobiliare.it/annunci/118734552/"
},
{
"listing_id": "118790021",
"title": "Studio, Milano",
"contract": "rent",
"price": 950,
"address": "Via Example 10, Milano",
"visibility": "BASE",
"views": 96,
"url": "https://www.immobiliare.it/annunci/118790021/"
}
],
"next_cursor": null
},
"isError": false
} Get listing
readMCP tool immobiliare_get_listing
Returns one listing as the portal shows it. Works for your own listings and for any public listing, so your agent can read a flat before it asks for a visit.
Parameters
| Name | Type | Description |
|---|---|---|
| listing_id required | string | Your listing ID from list_listings, or any public listing ID. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "immobiliare_get_listing",
"arguments": {
"listing_id": "listing_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"listing_id": "118734552",
"category": "residential",
"property_type": "apartment",
"contract": "sale",
"price": 239000,
"address": "Via Example 5, Bologna",
"characteristics": {
"surface_m2": 68,
"rooms": 2,
"bathrooms": 1,
"floor": 2
},
"description": "Bright two-room flat near the centre.",
"photo_count": 12,
"url": "https://www.immobiliare.it/annunci/118734552/"
},
"isError": false
} List conversations
readMCP tool immobiliare_list_conversations
Lists conversations in Messages, most recent first. Filter by listing_id to see only the people who wrote about one listing. Each item flags whether it has a visit request. Pass next_cursor back as cursor for the next page.
Parameters
| Name | Type | Description |
|---|---|---|
| listing_id | string | Only conversations about this listing. |
| limit | integer | 1 to 100. Default: 50. |
| cursor | string | Next page cursor from the previous call. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "immobiliare_list_conversations",
"arguments": {}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"conversations": [
{
"conversation_id": "c_58210934",
"listing_id": "118734552",
"with": "Marco R.",
"last_message": "Is the flat still available?",
"last_message_at": "2026-10-10T15:10:00+02:00",
"has_visit_request": true
}
],
"next_cursor": null
},
"isError": false
} Get conversation
readMCP tool immobiliare_get_conversation
Returns all messages of one conversation, oldest first, so your agent reads the thread in order. If the person asked for a visit, the request shows the mode, the days and the time slots they offered.
Parameters
| Name | Type | Description |
|---|---|---|
| conversation_id required | string | Conversation ID from list_conversations. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "immobiliare_get_conversation",
"arguments": {
"conversation_id": "conversation_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"conversation_id": "c_58210934",
"listing_id": "118734552",
"messages": [
{
"message_id": "m_903114100",
"from": "them",
"body": "Is the flat still available?",
"sent_at": "2026-10-10T15:10:00+02:00"
}
],
"visit_request": {
"mode": "in_person",
"days": [
"2026-10-17"
],
"time_slots": [
"10:00-12:00"
]
}
},
"isError": false
} List saved listings
readMCP tool immobiliare_list_saved_listings
Returns your saved listings with the note you wrote on each and a removed flag for listings that left the portal. Use ad_id from each item with get_listing, contact_advertiser and request_visit.
Parameters
| Name | Type | Description |
|---|---|---|
| limit | integer | 1 to 100. Default: 50. |
| cursor | string | Next page cursor from the previous call. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "immobiliare_list_saved_listings",
"arguments": {}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"saved": [
{
"ad_id": "117220481",
"title": "Three-room flat, Torino",
"price": 285000,
"note": "Check the heating",
"removed": false
},
{
"ad_id": "116004417",
"title": "Two-room flat, Torino",
"price": 199000,
"note": "",
"removed": true
}
],
"next_cursor": null
},
"isError": false
} Save search
writeMCP tool immobiliare_save_search
Saves the filters of an Immobiliare.it results URL under a name, as the save search option does. The portal then alerts you to new matching listings. It reaches no one, and the saved search can be removed in your personal area, so it runs without asking.
Parameters
| Name | Type | Description |
|---|---|---|
| name required | string | Name of the saved search. |
| search_url required | string | Immobiliare.it results URL with your filters set. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "immobiliare_save_search",
"arguments": {
"name": "Jane Doe",
"search_url": "https://example.com"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"name": "Torino under 300k",
"status": "saved"
},
"isError": false
} MCP tool immobiliare_create_listing
Creates a listing from the details you give and returns its ID with status in_review. The portal reviews it before it goes live, which can take up to 48 hours. Photos and floor plans are uploaded from the URLs you pass. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| category required | string | Property category, e.g. residential or commercial. |
| property_type required | string | Type within the category, e.g. apartment, villa, office. |
| contract required | enum | sale or rent. |
| address required | string | Street address and town of the property. |
| characteristics required | object | Surface, rooms, bathrooms, floor and other features. |
| price required | integer | Price in EUR; monthly rent for rentals. |
| description required | string | Listing text. |
| photo_urls | string[] | Photos to upload, by URL. |
| floor_plan_urls | string[] | Floor plans to upload, by URL. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "immobiliare_create_listing",
"arguments": {
"category": "category",
"property_type": "property type",
"contract": "sale",
"address": "address",
"characteristics": "characteristics",
"price": 1,
"description": "description"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"listing_id": "118790021",
"status": "in_review",
"visibility": "BASE",
"url": "https://www.immobiliare.it/annunci/118790021/"
},
"isError": false
} Update listing
writeMCP tool immobiliare_update_listing
Changes only the fields you pass and returns the updated values. The listing keeps its ID and URL. It reaches no one directly and the old value goes back with one more call, so it runs without asking.
Parameters
| Name | Type | Description |
|---|---|---|
| listing_id required | string | Listing ID from list_listings. |
| fields required | object | Any of price, description, characteristics, photo_urls, floor_plan_urls. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "immobiliare_update_listing",
"arguments": {
"listing_id": "listing_8c41d2",
"fields": "fields"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"listing_id": "118734552",
"updated": [
"price",
"description"
],
"price": 239000,
"status": "online"
},
"isError": false
} MCP tool immobiliare_delete_listing
Deletes the listing from the portal. It cannot be undone with another call; you would publish it again. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| listing_id required | string | Listing ID from list_listings. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "immobiliare_delete_listing",
"arguments": {
"listing_id": "listing_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"listing_id": "118790021",
"status": "deleted"
},
"isError": false
} MCP tool immobiliare_reply_to_conversation
Sends a message in an existing conversation under your name and returns its ID and time. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| conversation_id required | string | Conversation ID from list_conversations. |
| body required | string | Reply text. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "immobiliare_reply_to_conversation",
"arguments": {
"conversation_id": "c_58210934",
"body": "Hello, the flat is still available. I can show it on Saturday at 10:00 or 11:30. Which suits you?"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"conversation_id": "c_58210934",
"listing_id": "118734552",
"message_id": "m_903114208",
"sent_at": "2026-10-10T16:42:00+02:00",
"status": "sent"
},
"isError": false
} MCP tool immobiliare_contact_advertiser
Writes to the advertiser of one public listing, as the contact form does. The conversation then appears in list_conversations. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| ad_id required | string | ID of any public listing on immobiliare.it, from its URL (/annunci/{id}/). |
| body required | string | Message text. |
| phone | string | Phone number to be contacted at. Optional. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "immobiliare_contact_advertiser",
"arguments": {
"ad_id": "ad_8c41d2",
"body": "body"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"conversation_id": "c_58301177",
"ad_id": "117220481",
"status": "sent",
"sent_at": "2026-10-10T17:05:00+02:00"
},
"isError": false
} MCP tool immobiliare_request_visit
Sends a visit request with the mode, the days and the time slots you are free. It is a request, not a booking: the advertiser contacts you to confirm. Time slots are those the form offers. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| ad_id required | string | ID of any public listing on immobiliare.it, from its URL (/annunci/{id}/). |
| mode required | enum | in_person or remote (video call with the agent). |
| days required | string[] | Days you are available, as YYYY-MM-DD. |
| time_slots required | string[] | Time slots you are available, as offered on the form. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "immobiliare_request_visit",
"arguments": {
"ad_id": "117220481",
"mode": "in_person",
"days": [
"2026-10-18",
"2026-10-19"
],
"time_slots": [
"09:00-12:00"
]
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"ad_id": "118734552",
"mode": "remote",
"days": [
"2026-10-19",
"2026-10-20"
],
"time_slots": [
"18:00-19:00"
],
"status": "requested"
},
"isError": false
}