Apartment Hunter MCP Server
Provides local persistent storage for apartment listings, profiles, notifications, and price history using SQLite.
Click on "Install 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., "@Apartment Hunter MCP ServerFind new apartments matching my saved profile"
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.
Apartment Hunter
Legal Disclaimer: This is a private automation tool for personal use only. By using this software, you agree to the Legal Disclaimer and Fair Use Policy.
Apartment Hunter is a powerful aggregator and search platform for rental apartments. It automates finding, filtering, and scoring housing options without manually checking websites every hour. Currently, the system only supports data from krisha.kz, but the architecture allows for easy extension. It supports precise polygon-based geographic search, semantic text search (RAG), and LLM-powered quality scoring.
Quick Start
# 1. Start the MCP server for Codex Desktop / Claude
uv run apartment-hunter-mcp
# 2. Or run the data ingestion pipeline manually
uv run apartment-hunter-ingestAI Skills
The project includes specialized AI skills in .agents/skills to enhance your AI assistant:
apartment-search: Domain workflow for apartment search, ingestion, monitoring, and translating listing jargon.
city-district-context-kz: Provides context on Kazakhstan cities and districts (transport, pricing, livability).
html-report-generator: Generates a visual HTML report of apartments with photos and links, and launches it on localhost.
How to use skills: You don't need to manually install these skills. Simply open this project folder using your favorite AI CLI (like Antigravity CLI / Codex CLI) and the agent will automatically discover and load the skills from the local workspace.
Related MCP server: @striderlabs/mcp-airbnb
Use Cases
Agents / MCP: Connect it to Codex Desktop to chat with your apartment database ("Show me 2-bedroom apartments near Megapark under 500k, sort by newest").
Precise Geography: Stop relying on inaccurate text search. Draw a polygon on a map, pass the coordinates, and only get apartments strictly within that exact boundary.
AI Scoring: Automatically rate apartments out of 10 based on renovation quality, furniture condition, and specific user preferences using Vision LLMs.
Market Monitoring: Run ingestion periodically (e.g. via cron) to track price drops and immediately catch new listings before they are rented out.
Architecture Philosophy
This is a Library-First project. The core logic is built as a reusable, source-agnostic Python library. All site-specific scraping and adapters are isolated plugins, ensuring the core remains stable and extensible.
License
Available Tools
15 toolsanalyze_apartmentA
Run LLM analysis on a specific apartment.
Scores the apartment 0-10 based on price/quality ratio, condition, location, and other factors. Returns score, pros, cons, and summary. Forces re-analysis even if already analyzed.
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it forces re-analysis, which is a behavioral trait. However, it does not mention potential costs, latency, or rate limits associated with LLM usage, leaving some transparency gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient with 4 sentences, front-loaded with the main purpose. Minor redundancy (e.g., 'apartment' repeated).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The observation of output schema (not visible but known) covers return values. However, the missing parameter explanation and lack of behavioral details like cost/speed make it slightly incomplete for a tool involving LLM analysis.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter source_id is required but not explained in the description. With 0% schema coverage, the description should clarify what the source_id refers to (e.g., an apartment ID or URL), but it only vaguely mentions 'specific apartment'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs LLM analysis on a specific apartment, scoring it on several factors and returning structured results. It distinguishes itself from siblings like compare_apartments and get_apartment_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions that the tool forces re-analysis even if already analyzed, implying it should be used when a fresh analysis is needed. It does not provide explicit when-not-to-use or alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_apartmentsA
Compare 2-5 apartments side by side.
Provide a list of source_ids to compare their key characteristics.
| Name | Required | Description | Default |
|---|---|---|---|
| source_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It mentions comparing key characteristics but does not specify what those characteristics are, nor any behavioral details like read-only nature or side effects. Adequate but could be more explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, no fluff, and front-loads the primary purpose. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not detail return values. It covers the core action and constraint (2-5 apartments). Minor gap: no indication of error handling for invalid numbers of source_ids.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description adds value by referring to 'source_ids' and explaining they are lists to compare. However, it does not provide format or origin details, missing an opportunity to fully compensate for the schema lacking descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compares apartments side by side, with a specific number range (2-5), distinguishing it from sibling tools like 'analyze_apartment' or 'get_apartment_details' which focus on single apartments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description instructs to provide a list of source_ids, making the when-to-use clear (comparing multiple apartments). However, it does not explicitly mention when not to use it or compare with alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_search_profileB
Create a search profile for ongoing apartment monitoring.
The profile defines filters and preferences. The ingestion pipeline will use these profiles to fetch new apartments and send notifications.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City name in Russian, e.g. 'Алматы', 'Астана' | |
| name | Yes | Human-readable profile name, e.g. 'Алматы 2к до 300т' | |
| rooms | No | List of room counts, e.g. [1, 2] | |
| sources | No | Source names, e.g. ['krisha.kz']; defaults to all registered adapters | |
| area_max | No | ||
| area_min | No | ||
| keywords | No | Semantic search keywords for RAG matching | |
| polygons | No | List of polygons. Each polygon is a list of [lat, lon] floats forming a closed shape. | |
| districts | No | Optional list of district names | |
| furniture | No | True=with furniture, False=without, None=any | |
| has_photo | No | Only with photos | |
| min_score | No | Minimum LLM score for notifications (0.0-10.0) | |
| price_max | No | ||
| price_min | No | ||
| owner_only | No | Only from owners (no agencies) | |
| nl_description | No | Free-text description for semantic re-ranking (e.g. 'светлая квартира с новым ремонтом') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully communicate behavioral traits. It only states creation and purpose but omits details like idempotency, permissions, rate limits, or side effects (e.g., whether existing profiles are overwritten). The agent lacks key safety information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the purpose. However, given 16 parameters, it could be more structured to highlight key parameters or defaults. Still, it is efficient and avoids unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite high parameter count and an output schema (not detailed), the description does not explain the output (e.g., profile ID), required parameters, or defaults. For a creation tool with many options, this insufficiently prepares the agent for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so baseline is 3. The description mentions 'filters and preferences' but does not elaborate on any specific parameters beyond what the schema provides. It adds no additional meaning to the parameter definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a search profile for ongoing apartment monitoring, specifying that it defines filters and preferences for the ingestion pipeline to fetch apartments and send notifications. This distinctly sets it apart from sibling tools like list_search_profiles or delete_search_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for setting up ongoing monitoring but does not explicitly mention when to use it over alternatives like search_by_profile or when not to use it. No exclusions or alternative guidance is provided, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_search_profileC
Delete a search profile by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| profile_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not disclose destructive nature, permanence, or required permissions for deletion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise and front-loaded, but may be too terse for a deletion operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite simplicity, description lacks information on return value or confirmation, and missing behavioral details for a destructive action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%; description only says 'by ID' without explaining what profile_id is (e.g., format, source), adding no meaningful semantics beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Delete', resource 'search profile', and method 'by ID', differentiating from siblings like create_search_profile and list_search_profiles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives, no when-not or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_apartment_photosA
Download apartment photos locally so the AI agent can inspect them.
Returns the absolute paths of the downloaded images. You (the AI) can then
use your view_file tool on these paths to visually analyze the apartment.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| source_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description fully describes the behavior: downloads photos, returns absolute paths, and implies the photos are saved locally. It doesn't cover permissions or error handling, but the core action is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, no wasted words. The description is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present (though unknown), the description covers return values adequately. However, it lacks parameter explanations and does not address edge cases like missing photos or errors, making it incomplete for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% coverage and the description does not mention any parameters. The agent receives no guidance on what source_id or limit mean, leaving them to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool downloads apartment photos locally and returns absolute paths for inspection. It clearly distinguishes from sibling tools like search or analysis because it's about downloading for visual inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells when to use the tool (when the AI needs to inspect photos) and instructs the next step (use view_file on the returned paths). It doesn't explicitly state when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_apartment_detailsA
Get full details for a specific apartment by its source_id (e.g. 'krisha:1013405508').
Returns all available fields including LLM analysis, price history, and photos.
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions that the tool returns 'LLM analysis, price history, and photos,' but does not specify whether the operation is read-only, any authorization requirements, or potential side effects. This leaves significant ambiguity for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two short sentences. The first sentence immediately states the purpose and parameter, and the second sentence lists the key return fields. No superfluous information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single parameter, output schema exists), the description covers the essential aspects: what it does, the parameter format, and the scope of returned data. It does not mention limitations or error conditions, but these are less critical for a straightforward retrieval tool with a well-defined output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no description for the 'source_id' parameter (0% coverage), so the description must compensate. It does so effectively by providing a concrete example ('krisha:1013405508'), clarifying the expected format. However, it only gives one example, which may not cover all possible source_id patterns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: get full details for a specific apartment by source_id. It uses a specific verb ('Get') and resource ('apartment details'), and distinguishes itself from sibling tools like get_price_history or search_apartments by focusing on comprehensive retrieval with all available fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a source_id and need full details, but does not explicitly state when to avoid this tool or mention alternative tools for more specific queries (e.g., get_price_history for price-only data). The example format aids understanding but lacks exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_new_apartmentsA
Get apartments discovered in the last N hours (default: 24).
Shows the most recent apartments sorted by score.
| Name | Required | Description | Default |
|---|---|---|---|
| since_hours | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the time filter and sorting, but omits details like pagination, result limits, or behavior when no new apartments exist. This is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the key behavior. Every word adds value; no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (which explains return values) and the tool's simplicity (one optional parameter), the description covers the main functionality. Minor gaps like pagination details are acceptable since the output schema likely handles them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only a parameter name and default. The description adds critical meaning by explaining that 'since_hours' is in hours and that the default is 24. With 0% schema description coverage, the description compensates well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves apartments discovered within a recent time window (default 24 hours), sorted by score. This distinguishes it from sibling tools like 'get_top_apartments' (likely all-time) and 'search_apartments' (query-based).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for recent discoveries but does not provide explicit when-to-use or when-not-to-use guidance, nor does it name alternative tools. It is clear but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_historyC
Get price change history for an apartment.
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden for behavioral disclosure. It does not mention that the operation is read-only, nor any side effects, rate limits, or auth requirements. The description is too minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but lacks necessary detail. It is not optimally structured to convey key information upfront.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter and no annotations, the description is incomplete. Even though an output schema exists, the description does not hint at the return format. The tool needs more context for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the single parameter 'source_id'. The schema only shows it is a required string, leaving the agent guessing its meaning (e.g., apartment ID vs external ID).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves price change history for an apartment, using a specific verb and resource. However, it does not elaborate on what the history includes, but it is sufficient to distinguish from siblings like get_apartment_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like compare_apartments or get_apartment_details. There is no mention of prerequisites or context for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statsA
Get statistics about the apartment database.
Shows total apartments, new apartments, analyzed count, average prices, scores, etc.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Lacks details on data freshness, performance implications, auth requirements, or any side effects. Only states it shows statistics, which is minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with purpose. No redundant phrasing. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and an output schema expected, the description provides sufficient context for a simple stats retrieval tool. Ends with 'etc.' hinting at more fields, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Description adds value by listing the types of statistics returned, beyond the schema. Baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it retrieves statistics about the apartment database, listing specific metrics like total apartments, new apartments, analyzed count, average prices, and scores. Distinct from sibling tools that focus on individual properties or comparisons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies use when needing aggregate database statistics, but does not specify when to use versus other analytical siblings like analyze_apartment or compare_apartments. No explicit when-not or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_apartmentsA
Get top-rated apartments sorted by LLM score.
Returns the highest-scored apartments, optionally filtered by city, rooms, or price. Only returns apartments that have been analyzed.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| limit | No | ||
| rooms | No | ||
| price_max | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full weight. It discloses that only analyzed apartments are returned and that results are sorted by LLM score. However, it does not mention read-only nature, pagination, or any side effects, leaving gaps for a mutation-free tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loaded with the main action. Each sentence adds value, but the third sentence about filtering is slightly redundant with the second. No wasted words overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no annotations, and an output schema present, the description covers most but not all essential aspects. Missing explanation for 'limit' and sorting direction. Adequate for basic use but lacks full detail for confident tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It explains three parameters (city, rooms, price_max) but misses the 'limit' parameter, and does not clarify the 'rooms' array's meaning (e.g., number of bedrooms) or price_max semantics. Adds some value but incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get top-rated apartments sorted by LLM score', specifying the verb, resource, and sorting criterion. It distinguishes from siblings like 'get_new_apartments' and 'search_apartments' by focusing on top-rated analyzed apartments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use (to get highest-scored apartments) and mentions optional filters (city, rooms, price). However, it lacks explicit when-not-to-use guidance or direct comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_search_profilesA
List all active search profiles.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses 'active' filter, a behavioral trait beyond schema. No annotations provided, so description partially covers transparency but omits read-only guarantee or auth needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no waste. Front-loads purpose effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for simple list with no params and existing output schema. Lacks mention of sorting or pagination, but acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, schema coverage 100%. Description adds nothing but is appropriate for zero-parameter case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'list' action on 'search profiles' with 'active' filter. Distinct from siblings like create_search_profile and delete_search_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use vs alternative tools (e.g., search_by_profile). No prerequisites or conditions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_ingestionA
Run the data ingestion pipeline.
Fetches new apartments from all sources for the specified profile (or all active profiles if none specified), analyzes them, and sends notifications. This may take several minutes depending on the number of pages to scrape.
| Name | Required | Description | Default |
|---|---|---|---|
| profile_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that the operation fetches, analyzes, notifies, and may take several minutes. However, it does not specify side effects like data mutation, permission requirements, or cancellability, which are important for a pipeline run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences plus a one-sentence warning. Front-loaded with the primary action, no redundant information, and easy to parse. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, return values need not be explained. The description covers the core functionality and behavior (time consumption). However, it could be more complete by mentioning error handling or impact on existing data, but overall sufficient for a pipeline tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description explains the single parameter profile_id: it specifies the profile to run for, or if null, all active profiles. This adds meaningful context beyond the schema's type definition, though format details are not provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs the data ingestion pipeline, detailing actions: fetches, analyzes, notifies. It uses a specific verb 'run' and resource 'data ingestion pipeline,' effectively distinguishing it from sibling tools like analyze_apartment or search_apartments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: run ingestion to process apartments for a profile or all profiles. It mentions the time-consuming nature but lacks explicit guidance on when to use versus alternatives or when not to use. No exclusions or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_apartmentsA
Search apartments by structured filters.
Returns a list of apartments matching the given criteria. Use this for precise filtering by price, rooms, area, district, etc. For free-text queries like 'cozy apartment near park', use semantic_search instead.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| rooms | No | ||
| area_max | No | ||
| area_min | No | ||
| district | No | ||
| min_score | No | ||
| price_max | No | ||
| price_min | No | ||
| owner_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It mentions 'structured filters' and returns a list, but lacks details on pagination, ordering, error handling, or required permissions. It is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences that are front-loaded and efficient: purpose, then return type, then usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (9 optional parameters) and presence of an output schema, the description is incomplete. It does not explain default behaviors, parameter interactions, or constraints. Could be more detailed while remaining concise.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% coverage (no parameter descriptions). The description compensates by listing example filters (price, rooms, area, district), but not all 9 parameters are covered, and no format or constraints are given. Adds some value but not fully compensatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches apartments by structured filters and distinguishes it from semantic_search. It uses a specific verb ('Search') and resource ('apartments'), and explicitly contrasts with a sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool (precise filtering by price, rooms, etc.) and when to use an alternative ('use semantic_search instead'). This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_by_profileA
Show apartments matching a search profile, ranked by semantic similarity.
Uses the profile's hard filters (price, rooms, polygon) AND the nl_description for semantic re-ranking via ChromaDB vector search. Pass hours=0 to return all stored apartments for this profile (no time filter).
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | ||
| limit | No | ||
| profile_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the use of hard filters and vector search, and explains the hours=0 behavior. It does not explicitly state if the tool is read-only, but the action 'Show' implies no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences plus a note, all front-loaded with the main purpose. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (semantic search with profile), the description explains the core logic and key parameter behavior. The presence of an output schema covers return values, so completeness is high. A minor gap is the lack of explanation for the limit parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 3 parameters with 0% description coverage. The description provides meaningful context for hours (explaining the special value 0 disables time filter), but does not explain limit or profile_id beyond their roles as inputs. Baseline is 3 due to lack of schema descriptions, and the description partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool shows apartments matching a search profile, ranked by semantic similarity. It distinguishes itself from sibling tools like search_apartments and semantic_search by specifying it uses a profile's hard filters and nl_description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool (when you have a profile) and gives a specific tip about hours=0. However, it does not explicitly state when not to use it or mention alternatives, though the sibling list implies differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_searchB
Search apartments by natural language query using semantic/vector search.
Examples: 'уютная квартира с видом на горы рядом с метро', 'большая квартира с евроремонтом в центре'. Optionally filter by city, max price, or room count.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| query | Yes | ||
| rooms | No | ||
| n_results | No | ||
| price_max | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the use of semantic/vector search but does not disclose key behaviors such as result ranking, pagination, error handling, or whether queries are case-sensitive. The description is minimal and leaves behavior largely inferred.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with purpose, followed by examples and available filters. It avoids redundancy but could be slightly more structured (e.g., separate sections). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, 0% schema coverage, no annotations, and an output schema (not shown), the description is too brief. It does not clarify what the output contains or how results are returned. For a semantic search tool, missing details like relevance scores or result format limit completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It mentions optional filters (city, max price, room count) and provides examples, but does not explain the 'n_results' parameter or the exact format of filter values. The examples add some value beyond the schema, but for 5 parameters, more detail is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('search') and resource ('apartments'), specifies the method ('semantic/vector search'), and distinguishes from sibling tools like 'search_apartments' (likely keyword-based) and 'search_by_profile'. Examples illustrate the type of queries supported, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples and mentions optional filters, but does not explicitly guide when to use this tool versus alternatives (e.g., keyword-based search or profile-based search). It implies use for natural language queries but lacks explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have distinct purposes, but `semantic_search` and `search_apartments` could be confused without reading descriptions. Also `analyze_apartment` and `get_apartment_details` overlap slightly.
The majority follow a clear verb_noun pattern in snake_case. `semantic_search` is the main deviation, being adjective_noun, but it still reads naturally.
With 15 tools, the server covers all major apartment hunting workflows (discovery, analysis, monitoring, comparison) without being overwhelming.
Core operations like search, details, analysis, and profile management are covered. Missing an update search profile tool is a minor gap, but the set handles the primary use cases.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server giving Claude AI access to 22+ NYC public-record databases for real estate due diligence
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for Stessa rental-property accounting platform, enabling AI agents to query properties, portfolios, banking, documents, and tenancies via natural language.MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Airbnb — lets AI agents search listings, check availability, manage reservations, and book stays via browser automation.19MIT
- FlicenseNot gradedqualityDmaintenanceMCP server exposing portfolio AI tools including semantic search, evaluation framework, and prompt management, enabling natural language interaction with these services via Claude Desktop.
- FlicenseNot gradedqualityCmaintenanceA production-grade MCP server enabling Claude to perform comprehensive NJ real estate workflows including property search, valuation, neighborhood intelligence, investment analysis, and agent tools via 20 tools and 15+ data sources.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ai-engineers-guild/apartment-hunter'
If you have feedback or need assistance with the MCP directory API, please join our Discord server