Koskamo

Every Room MCP

An official MCP server by Evryroom that allows AI agents to search for residential properties for sale and rent across Europe and the UAE. It supports filtering listings, viewing details, comparing homes, managing shortlists, and revealing seller information. It integrates with Claude, ChatGPT, and other MCP clients via Streamable HTTP, supporting both OAuth and API key authentication.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Every Room MCP logo, by EvryroomVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Evryroom
You need:Free, no accountOn a Team or Enterprise plan, an owner adds it under Organization settings firstCustom servers depend on your ChatGPT plan; some plans need Developer mode turned on under Settings, AppsAn agent that cannot sign in can use an API key instead. Make one in your account and send it as a bearer token.
MCP endpoint (Streamable HTTP)
https://evryroom.com/mcp
Vendor documentation

What you can do with it

  • Search for homes for sale or rent in specific markets with filters
  • Compare multiple listings side by side based on price or size
  • Save properties to shortlists and manage saved searches
  • Reveal seller contact information using plan credits or API keys

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
evryroom 1.0.0
MCP protocol
2025-06-18
Tools
13 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Every Room lists homes for sale and to rent from portals and agencies across its markets, on one map. Start with list_markets for the market codes. Use find_area to turn a place name into area slugs, then search_listings. Use get_listing for photos and the description, and compare_listings to weigh a shortlist. Give the person each listing's url: the page on Every Room where they can see it on the map and reveal the seller. reveal_seller opens the seller's details and spends one of the person's reveals; ask them first. When it returns revealed: false, pass on its message and upgrade_url. Prices filter in euros; a rent filters per month. The account tools (my_account, save_listing, my_saved_listings, save_search, my_saved_searches, reveal_seller and the removals) work once the person signs in to Every Room; calling one starts the sign-in.

Tools

13 advertised

list_markets — List markets
Advertised by the server during the last successful anonymous check.
Advertised read-only

The countries Every Room covers, with how many homes are for sale and to rent in each, the currency, and which filters work there. Call this first to get the two-letter market codes the other tools take.

list_markets input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_markets annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_area — Find an area
Advertised by the server during the last successful anonymous check.
Advertised read-only

Turn a place name into the area slugs search_listings filters on, with how many homes each area has. Example: country "ae", text "marina" finds dubai-marina.

find_area input schema
{
  "type": "object",
  "required": [
    "country",
    "text"
  ],
  "properties": {
    "deal": {
      "enum": [
        "sale",
        "rent"
      ],
      "type": "string",
      "description": "Count only homes for sale, or only to rent."
    },
    "text": {
      "type": "string",
      "description": "A neighbourhood, district or town name, in any spelling."
    },
    "country": {
      "type": "string",
      "description": "Two-letter market code from list_markets."
    }
  },
  "additionalProperties": false
}
find_area annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_listings — Search homes
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search homes for sale or to rent in one market. Returns 24 listings a page, newest first unless sorted, with price, size, rooms, place and a photo. Up to 4 pages per search: narrow with filters rather than paging. Prices filter in euros: the sale price, or the rent per month (also in markets that quote rent per year).

search_listings input schema
{
  "type": "object",
  "required": [
    "country"
  ],
  "properties": {
    "deal": {
      "enum": [
        "sale",
        "rent"
      ],
      "type": "string",
      "description": "For sale or to rent. Defaults to sale where the market has it."
    },
    "kind": {
      "enum": [
        "apartment",
        "house",
        "land",
        "commercial",
        "garage",
        "other"
      ],
      "type": "string"
    },
    "near": {
      "type": "object",
      "required": [
        "lat",
        "lon",
        "km"
      ],
      "properties": {
        "km": {
          "type": "number",
          "description": "Radius, 0.05 to 100 km."
        },
        "lat": {
          "type": "number"
        },
        "lon": {
          "type": "number"
        }
      },
      "description": "Only homes within a radius of a point."
    },
    "page": {
      "type": "integer",
      "maximum": 4,
      "minimum": 1
    },
    "sort": {
      "enum": [
        "newest",
        "price_asc",
        "price_desc",
        "ppm2"
      ],
      "type": "string",
      "description": "ppm2 sorts by price per square metre, cheapest first."
    },
    "text": {
      "type": "string",
      "description": "Words to find in the title or place, e.g. \"penthouse\" or \"sea view\"."
    },
    "town": {
      "type": "string",
      "description": "A town name exactly as listings carry it."
    },
    "areas": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Area slugs from find_area. A home in any of them matches."
    },
    "min_m2": {
      "type": "number",
      "description": "Minimum floor area in square metres."
    },
    "country": {
      "type": "string",
      "description": "Two-letter market code from list_markets."
    },
    "setting": {
      "type": "array",
      "items": {
        "enum": [
          "beach",
          "sea_view",
          "waterside",
          "mountains"
        ],
        "type": "string"
      },
      "description": "What is around the home; every one listed must hold. Only where list_markets says setting_filter."
    },
    "min_beds": {
      "type": "integer",
      "description": "Minimum bedrooms; in markets where list_markets says rooms, minimum rooms."
    },
    "min_baths": {
      "type": "integer"
    },
    "max_price_eur": {
      "type": "number",
      "description": "Sale price, or rent per month, in euros."
    },
    "min_price_eur": {
      "type": "number",
      "description": "Sale price, or rent per month, in euros."
    }
  },
  "additionalProperties": false
}
search_listings annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_listing — Get a listing
Advertised by the server during the last successful anonymous check.
Advertised read-only

Everything public about one listing: title, description, all photos, price, size, rooms, place and similar homes. Seller contact is not included.

get_listing input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "description": "A listing id from search_listings."
    }
  },
  "additionalProperties": false
}
get_listing annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
compare_listings — Compare listings
Advertised by the server during the last successful anonymous check.
Advertised read-only

Two to six listings side by side: price, euros per square metre, size, rooms, place and age of the ad.

compare_listings input schema
{
  "type": "object",
  "required": [
    "ids"
  ],
  "properties": {
    "ids": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "maxItems": 6,
      "minItems": 2,
      "description": "Listing ids from search_listings."
    }
  },
  "additionalProperties": false
}
compare_listings annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
my_account — My account
Advertised by the server during the last successful anonymous check.
Advertised read-only

The signed-in person's Every Room account: their plan and how many seller reveals are left this week, their shortlists and their saved searches. Needs sign-in.

my_account input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
my_account annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
save_listing — Save a listing
Advertised by the server during the last successful anonymous check.

Save a listing to one of the person's shortlists, the same lists the heart on evryroom.com saves to. Without `list`, it goes to their first list (made for them if they have none); a `list` name that does not exist yet becomes a new list. Needs sign-in.

save_listing input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "description": "A listing id from search_listings."
    },
    "list": {
      "type": "string",
      "description": "A shortlist name. Optional."
    }
  },
  "additionalProperties": false
}
save_listing annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
remove_saved_listing — Remove a saved listing
Advertised by the server during the last successful anonymous check.
Advertised destructive

Take a listing out of the person's shortlists: out of the named `list`, or out of every list of theirs that holds it. Needs sign-in.

remove_saved_listing input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer"
    },
    "list": {
      "type": "string",
      "description": "Only this shortlist. Optional."
    }
  },
  "additionalProperties": false
}
remove_saved_listing annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
my_saved_listings — My saved listings
Advertised by the server during the last successful anonymous check.
Advertised read-only

The listings in the person's shortlists, newest first: every list, or only the one named. Needs sign-in.

my_saved_listings input schema
{
  "type": "object",
  "properties": {
    "list": {
      "type": "string",
      "description": "Only this shortlist. Optional."
    }
  },
  "additionalProperties": false
}
my_saved_listings annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
save_search — Save a search
Advertised by the server during the last successful anonymous check.

Save a search under a name, with the same filters as search_listings. It appears in the person's saved searches on evryroom.com. Needs sign-in.

save_search input schema
{
  "type": "object",
  "required": [
    "name",
    "country"
  ],
  "properties": {
    "deal": {
      "enum": [
        "sale",
        "rent"
      ],
      "type": "string",
      "description": "For sale or to rent. Defaults to sale where the market has it."
    },
    "kind": {
      "enum": [
        "apartment",
        "house",
        "land",
        "commercial",
        "garage",
        "other"
      ],
      "type": "string"
    },
    "name": {
      "type": "string",
      "description": "What to call it, e.g. \"2-bed Marina under 6k\"."
    },
    "near": {
      "type": "object",
      "required": [
        "lat",
        "lon",
        "km"
      ],
      "properties": {
        "km": {
          "type": "number",
          "description": "Radius, 0.05 to 100 km."
        },
        "lat": {
          "type": "number"
        },
        "lon": {
          "type": "number"
        }
      },
      "description": "Only homes within a radius of a point."
    },
    "page": {
      "type": "integer",
      "maximum": 4,
      "minimum": 1
    },
    "sort": {
      "enum": [
        "newest",
        "price_asc",
        "price_desc",
        "ppm2"
      ],
      "type": "string",
      "description": "ppm2 sorts by price per square metre, cheapest first."
    },
    "text": {
      "type": "string",
      "description": "Words to find in the title or place, e.g. \"penthouse\" or \"sea view\"."
    },
    "town": {
      "type": "string",
      "description": "A town name exactly as listings carry it."
    },
    "areas": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Area slugs from find_area. A home in any of them matches."
    },
    "min_m2": {
      "type": "number",
      "description": "Minimum floor area in square metres."
    },
    "country": {
      "type": "string",
      "description": "Two-letter market code from list_markets."
    },
    "setting": {
      "type": "array",
      "items": {
        "enum": [
          "beach",
          "sea_view",
          "waterside",
          "mountains"
        ],
        "type": "string"
      },
      "description": "What is around the home; every one listed must hold. Only where list_markets says setting_filter."
    },
    "min_beds": {
      "type": "integer",
      "description": "Minimum bedrooms; in markets where list_markets says rooms, minimum rooms."
    },
    "min_baths": {
      "type": "integer"
    },
    "max_price_eur": {
      "type": "number",
      "description": "Sale price, or rent per month, in euros."
    },
    "min_price_eur": {
      "type": "number",
      "description": "Sale price, or rent per month, in euros."
    }
  },
  "additionalProperties": false
}
save_search annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
my_saved_searches — My saved searches
Advertised by the server during the last successful anonymous check.
Advertised read-only

The person's saved searches, newest first, each with the link that reopens it. Needs sign-in.

my_saved_searches input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
my_saved_searches annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
delete_saved_search — Delete a saved search
Advertised by the server during the last successful anonymous check.
Advertised destructive

Delete one of the person's saved searches by its id from my_saved_searches. Needs sign-in.

delete_saved_search input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer"
    }
  },
  "additionalProperties": false
}
delete_saved_search annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
reveal_seller — Reveal the seller
Advertised by the server during the last successful anonymous check.

Reveal who is selling or letting a listing: the portal or agency it is advertised on, the agent, the ad reference and the link to the original ad, plus the ad's own text. Spends one reveal from the person's Every Room plan (Search US$9.99 a week (5 sellers), Pro US$21.99 a week (20 sellers)), or their one free reveal; a listing already revealed costs nothing. Ask the person before spending one. Without reveals left it returns revealed: false with an upgrade_url for the person to open. Needs sign-in.

reveal_seller input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "description": "A listing id from search_listings."
    }
  },
  "additionalProperties": false
}
reveal_seller annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1100 ms
95th percentile latency
1100 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1100 ms · metadata changed · 13 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http every-room-mcp https://evryroom.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add every-room-mcp --url https://evryroom.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable every-room-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "every-room-mcp": {
      "url": "https://evryroom.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "every-room-mcp": {
      "type": "streamableHttp",
      "url": "https://evryroom.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start every-room-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "every-room-mcp": {
      "type": "http",
      "url": "https://evryroom.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http every-room-mcp https://evryroom.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "every-room-mcp": {
      "url": "https://evryroom.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "every-room-mcp": {
      "serverUrl": "https://evryroom.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Every Room MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Every Room MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing