NC Keys — Northern Cyprus property
Server Details
Northern Cyprus property listings for rent and sale: search by region, price, layout. Read-only.
- Status
- Healthy
- Uptime
- 100.0% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 3 tools
The three tools have clearly distinct purposes: filtered search across listings, retrieval of a single listing by id, and discovery of region/sub-region taxonomy. There is no overlap or ambiguous boundary between them.
All tool names follow a consistent snake_case verb_noun pattern: get_listing, list_regions, search_listings. The convention is predictable and easy to parse.
Three tools is well-scoped for a read-only property search server. Each tool serves a necessary function without redundancy, and the set stays within the typical 3-15 range.
The surface covers the core discovery lifecycle: region taxonomy, filtered listing search, and detailed single-listing retrieval. For a read-only property search domain, no obvious operation is missing.
Available Tools
3 toolsget_listingGet one listingARead-onlyIdempotentInspect
Full details of one listing by id (e.g. 'c-152' or 'b-7'): full description, photos, dates. If latest_id is set, this is an older copy of a reposted listing — use the newest one instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id from search_listings, e.g. 'c-152' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuine contextual behavior beyond that: the repost/staleness signal via latest_id and the concrete return payload (photos, dates), which an agent wouldn't infer from the annotations alone.
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 core purpose and followed by an edge-case warning; no filler. Slightly compressed by the parenthetical examples, but every clause 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?
For a single-parameter read tool with an output schema, rich annotations, and a documented id format, the description covers purpose, return highlights, and the one real edge case (reposted/stale listings). Nothing needed to invoke it correctly is missing.
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 100% and there is only one parameter whose format is already documented in the schema ('Listing id from search_listings, e.g. c-152'). The description's id examples are redundant with the schema, so baseline 3 applies.
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?
Specific verb+resource ('Full details of one listing by id') with concrete id examples and an enumeration of what's returned (description, photos, dates). An agent can distinguish this from search_listings and list_regions without opening a schema.
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?
Gives a clear conditional: if latest_id is set, the record is a stale copy of a reposted listing and the newest should be used instead. It stops short of explicitly stating the retrieval workflow (e.g. 'get ids from search_listings first'), though the schema description on `id` carries that routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_regionsList regions and areasARead-onlyIdempotentInspect
Regions and areas of Northern Cyprus with the number of current listings (rent and sale), names in English and Russian. Use to pick region / sub_region for search_listings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds content context (listing counts, bilingual names), but nothing about caching, ordering, or data freshness. Adequate but modest value beyond annotations.
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 tight sentences with no waste. The content (what it returns) is front-loaded before the actionable routing instruction.
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?
An output schema exists, so return structure needn't be explained, and the description still summarizes the payload usefully. An agent has what it needs to call this zero-arg lookup 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?
Zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The description's mention of returned fields is not a parameter concern.
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?
Specific verb+resource ('Regions and areas of Northern Cyprus') with scope detail (listing counts, English/Russian names). It implicitly separates itself from get_listing/search_listings by being a reference lookup, though it never names those siblings directly.
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?
Explicitly states when to use it: 'Use to pick `region` / `sub_region` for search_listings.' That routes the agent to the correct downstream tool. It stops short of stating when NOT to use it or naming other alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_listingsSearch property listingsARead-onlyIdempotentInspect
Search current property listings in Northern Cyprus. All filters are optional and accept English, Russian or Turkish spellings (e.g. region 'Kyrenia' or 'Гирне'). Returns up to limit listings (featured first, then newest by default) with a one-line summary, url and contact_url. Example: long-term rent of a 2+1 in Iskele up to £700 → deal='Rent', region='iskele', layout='2+1', price_max=700, price_period='month'.
| Name | Required | Description | Default |
|---|---|---|---|
| deal | No | Sale or Rent | |
| kind | No | Property type(s), e.g. ['villa', 'house'] | |
| sort | No | recommended = featured first, then newest | recommended |
| type | No | Property type | |
| limit | No | How many listings to return, 1–10 | |
| cursor | No | next_cursor from a previous call, for more results | |
| layout | No | 'studio', '1+1', '2+1', '3+1', or '4+' for 4 or more bedrooms | |
| poster | No | Only listings where the author says they are the owner / an agent / the developer | |
| region | No | girne (Kyrenia), iskele, famagusta, lefkosha (Nicosia), guzelyurt, lefke | |
| area_min | No | Minimum area in m² | |
| currency | No | Currency of price_min/max, default GBP | |
| features | No | Amenities mentioned in the listing; all must match | |
| has_photo | No | Only listings with photos | |
| price_max | No | Maximum price in `currency` | |
| price_min | No | Minimum price in `currency` | |
| sub_region | No | Area within a region, e.g. 'Long Beach', 'Bogaz', 'Esentepe', 'Alsancak' (see list_regions) | |
| deposit_max | No | Rent: max number of deposits; 0 = no deposit only | |
| price_period | No | month = monthly rent, day = daily/holiday rent, total = sale price |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, safe, non-open-world semantics, so the description only needs to add what annotations cannot. It does: multilingual query normalization, the default ordering ('featured first, then newest'), and the limit cap behavior are all disclosed. Pagination via cursor is only implied by the schema, not narrated.
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?
Four compact sentences: purpose first, then language/filter behavior, then return shape and ordering, then a concrete example. Nothing is redundant and every sentence carries information an agent needs given 18 optional parameters.
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 a full output schema and complete annotation coverage, the description only needs to frame the call, and it does so well. It does not explain pagination flow (cursor/next_cursor) or the distinction between region and sub_region resolution, both of which would help given the parameter count.
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 100%, so the baseline is a 3, but the description genuinely adds meaning beyond the schema: filters accept English/Russian/Turkish spellings ('Kyrenia' or 'Гирне') and sort='recommended' is explained as featured-first. The example maps natural-language intent onto concrete parameter values (deal, region, layout, price_max, price_period).
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?
States a specific verb+resource ('Search current property listings in Northern Cyprus') and the filtering/return behavior, so it is clearly a multi-result search rather than a by-id fetch. It never names the siblings get_listing or list_regions, so the differentiation from them is left to inference.
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?
Says all filters are optional and gives a full worked query example, which conveys when this tool is the right call. It stops short of explicit routing guidance (e.g. 'use list_regions to resolve a sub_region name, use get_listing for details on one result'), so no exclusions or alternatives are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
search_listings4 fields changed- added
Input schema / properties / deposit_maxAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Rent: max number of deposits; 0 = no deposit only", + "title": "Deposit Max" +} - added
Input schema / properties / featuresAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "pool", + "private_pool", + "sea_view", + "beach", + "garden", + "pets", + "furnished", + "land" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Amenities mentioned in the listing; all must match", + "title": "Features" +} - added
Input schema / properties / kindAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "apartment", + "villa", + "house", + "townhouse", + "penthouse" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Property type(s), e.g. ['villa', 'house']", + "title": "Kind" +} - added
Input schema / properties / posterAdded value: +{ + "anyOf": [ + { + "enum": [ + "owner", + "agent", + "developer" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Only listings where the author says they are the owner / an agent / the developer", + "title": "Poster" +}
3 tool updates
- First observed
get_listing - First observed
list_regions - First observed
search_listings
Related MCP Connectors
Live Northern Cyprus (KKTC/TRNC) property listings and asking-price data. Read-only, 8 tools.
Read-only European property search by location, price, size and features. No sign-in required.
North Cyprus car rental (Kıbrıs araç kiralama): live availability, prices, company info, booking.
New-build homes in Cyprus: projects by place, budget and distance to the sea, and buying costs.
61
Related MCP Servers
AlicenseAqualityAmaintenanceAI-native property MCP for Northern Cyprus (KKTC). Search live listings, get the price index, compare cities and districts, estimate rental yield, and look up KKTC title-deed (koçan) procedures — all sourced live from evlek.app.1256 npmMIT- AlicenseAqualityAmaintenanceVacation rental software. A signed stay offer on the host's own domain. Agents discover a host domain, verify an Ed25519-signed offer (VRP), and send the guest to that domain to book and pay the host. Do not compare hosts or prices. HemmaBo + VRP, 6 runtime tools: 2 HemmaBo tools, 2 host onboarding tools, and 2 VRP verification tools. Not an OTA. Not a marketplace.76280 npm4Apache 2.0
- AlicenseNot gradedqualityCmaintenanceA public, read-only server that lets any AI agent or MCP client check vacation-rental prices, availability, day-by-day calendars and booking links for properties in Puerto Viejo de Talamanca, Costa Rica, with no credentials required. It never creates, changes or cancels bookings and never exposes guest or reservation data.GPL 3.0
- AlicenseAqualityCmaintenanceEnables searching and browsing ss.ge real estate listings with filters, counters, full card details, and geo/city data via MCP tools.611 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.