Fless Apartment Hunt

Apartment hunting in DC, Maryland and Virginia: research cities, build pre-filled hunt links.

Rate this Server

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-http

Tool inventory

Tools (11)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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"
  ]
}

Recent observations

verifiedversion not recorded11 tools