Fless Apartment Hunt
Apartment hunting in DC, Maryland and Virginia: research cities, build pre-filled hunt links.
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"mcp": {
"url": "https://mcp.fless.io/mcp"
}
}
}Remote endpoints
https://mcp.fless.io/mcpstreamable-httpTool inventory
Tools (11)
🟢search_cities(query)
List cities where Fless operates (live + coming soon). Returns ids needed for hunts.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Optional name/state filter"
}
}
}🟢get_city_overview(city)
Neighborhood-level overview of a live city: median rents (1BR/2BR), walk/transit/bike scores per neighborhood.
Input Schema
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City slug or name, e.g. 'alexandria'"
}
},
"required": [
"city"
]
}🟢get_neighborhood(city, neighborhood)
Full detail for one neighborhood: rents, scores, POI counts, descriptions, nearby neighborhoods.
Input Schema
{
"type": "object",
"properties": {
"city": {
"type": "string"
},
"neighborhood": {
"type": "string",
"description": "slug or name"
}
},
"required": [
"city",
"neighborhood"
]
}🟢get_hunt_requirements(city)
Every hunt field, enum, and rule; canonical amenity keys; binary restrictions (55+, pets, smoking); transparent credit pricing. Read this before collecting a hunt brief.
Input Schema
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Optional city to pin the brief to"
}
}
}🟢build_hunt_link(hunt_params, channel)
Validate a hunt brief and get a URL that pre-fills the full hunt form for the human. Works with partial briefs (missing_fields lists what to collect).
Input Schema
{
"type": "object",
"properties": {
"hunt_params": {
"type": "object",
"description": "Hunt brief per get_hunt_requirements (city_id, min_price, max_price, bedrooms, move_in_date, proximity_criteria[], amenities{}, additional_questions[])"
},
"channel": {
"type": "string",
"description": "Your product name, e.g. 'claude', 'openclaw'"
}
},
"required": [
"hunt_params"
]
}🟢check_hunt_link(token)
Aggregate status of a hunt link (created/opened/started) — no personal data.
Input Schema
{
"type": "object",
"properties": {
"token": {
"type": "string"
}
},
"required": [
"token"
]
}🟢request_city(city, state)
Request that Fless expand to a new city. Use when the user's target city is not currently served (Washington, DC / Maryland / Virginia only). Returns the total request count for that city. No account or email needed.
Input Schema
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name, e.g. 'Houston'",
"maxLength": 100
},
"state": {
"type": "string",
"description": "2-letter US state code, e.g. 'TX'",
"pattern": "^[A-Z]{2}$"
}
},
"required": [
"city",
"state"
]
}🟢get_city_request_stats
See which cities have been requested most. Useful for telling users whether their city has demand.
Input Schema
{
"type": "object",
"properties": {}
}🟢search(query)
Search Fless content (cities, neighborhoods, hunt guide). Returns citable ids for fetch.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string"
}
},
"required": [
"query"
]
}🟢fetch(id)
Fetch full content by id from search: markdown text + canonical url for citations.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "city:<slug> | neighborhood:<city>:<nb> | doc:hunt-how-to"
}
},
"required": [
"id"
]
}🟡submit_error_report(error_type, tool_name, error_code, what_happened, what_expected)
Report a problem with Fless tools or data so we can fix it. Include: the tool you called, the error code from the error contract if present, what happened vs what you expected. Do NOT include personal data.
Input Schema
{
"type": "object",
"properties": {
"error_type": {
"type": "string",
"enum": [
"tool_error",
"bad_data",
"missing_city",
"documentation",
"auth",
"rate_limit",
"other"
],
"description": "What kind of problem this is."
},
"tool_name": {
"type": "string",
"enum": [
"search_cities",
"get_city_overview",
"get_neighborhood",
"get_hunt_requirements",
"build_hunt_link",
"check_hunt_link",
"request_city",
"get_city_request_stats",
"search",
"fetch",
"submit_error_report",
"website",
"docs",
"other"
],
"description": "The tool (or surface) the problem occurred on."
},
"error_code": {
"type": "string",
"pattern": "^[A-Z][A-Z0-9_]{0,63}$",
"description": "Error code from the error contract, if present (e.g. CITY_NOT_FOUND). Omit when absent."
},
"what_happened": {
"type": "string",
"minLength": 10,
"maxLength": 1000,
"description": "Factual description of what happened (plain text, no personal data, 10-1000 chars)."
},
"what_expected": {
"type": "string",
"maxLength": 500,
"description": "What you expected to happen instead (optional)."
}
},
"required": [
"error_type",
"tool_name",
"what_happened"
]
}