Skip to main content
Glama

jolly-tur-mcp 🇹🇷

mcp-name: io.github.mohammad-abbasi-sh/jolly-tur-mcp

Unofficial read-only MCP server for Jolly Tur (jollytur.com), one of Türkiye's top-3 tour operators — hotel search with live prices, hotel detail and current campaigns.

Part of the "Turkey MCP factory". Not affiliated with Jolly Tur.

For AI agents

Add to your MCP client config (stdio):

{
  "mcpServers": {
    "jolly": {
      "command": "uvx",
      "args": ["jolly-tur-mcp"]
    }
  }
}

Or run locally: python -m jolly_mcp.server (needs mcp<2, curl-cffi).

Related MCP server: webhotelier-mcp

Tools

Tool

Description

jolly_search_hotels

Search hotels in a city — city slug ("antalya", "istanbul", "bodrum"…), check_in/check_out (YYYY-MM-DD, both needed for prices), page, hotel_name

jolly_get_hotel

Detail for one hotel — hotel_slug (e.g. "the-x-belek") or full URL

jolly_list_campaigns

Current campaigns from /kampanyalar (title + link)

Example output (jolly_search_hotels / Antalya, 2026-11-20 → 2026-11-22):

{"result_count": 1067, "count": 20,
 "hotels": [{"name": "The X Belek", "location": "Antalya, Serik, Belek, Kadriye",
 "rating": 9.6, "rating_count": 4186, "rating_text": "Mükemmel",
 "concept": "Ultra Her Åžey Dahil",
 "total_price_tl": 21576.0, "discounted_price_tl": 13377.12}]}

Notes:

  • Prices are Turkish Lira (TRY) for the requested stay; without dates the cards show no price (prices_available: false).

  • Searches are slow (~10–15s: the site renders results server-side per query, and the endpoint occasionally stalls — the server retries once). Prefer one search per question.

  • Data: Jolly's own listing/search flow (listing page + GetListPagePartials POST) — no key, no login, read-only.

Development

python3 -m venv .venv && .venv/bin/pip install "mcp<2" curl-cffi pytest
.venv/bin/python -m pytest tests/ -q
  • tests/test_hotels.py — offline, parses real captured pages

  • tests/test_live.py — 4 cautious live requests against jollytur.com

License

MIT

Available Tools

3 tools
jolly_get_hotelA

Detail for one Jolly hotel. hotel_slug: e.g. "the-x-belek" (from search results) or a full jollytur.com hotel URL.

NameRequiredDescriptionDefault
hotel_slugYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the disclosure burden. 'Detail for one hotel' strongly implies a non-mutating lookup, and an output schema exists so return values need not be explained. However, nothing is said about behavior for invalid or stale slugs, or about whether the full URL form is resolved via redirect/parsing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no waste, and the operation is stated before the parameter note. The only quibble is the elliptical first sentence, which reads as a note fragment rather than a full description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with an output schema, the essentials are covered: what it returns conceptually (hotel detail) and both accepted input formats with an example. Missing only edge-case behavior and explicit tie-in to the search workflow, which are minor at this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% (the single property is bare 'string'), so the description must compensate, and it does: it gives a concrete example slug ('the-x-belek') and an alternate accepted format, a full jollytur.com hotel URL. That materially extends what the schema conveys, though it does not say whether the bare slug or URL is preferred when both could work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific operation (fetch detail for a single hotel) and names the resource domain ('Jolly hotel'), which separates it from the sibling jolly_search_hotels and jolly_list_campaigns. The fragment phrasing ('Detail for one Jolly hotel') is slightly clipped but an agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(from search results)' hints at the intended workflow — call search first, then fetch detail by slug — but this is implied rather than stated as an explicit when-to-use rule. There is no guidance on when to prefer this over search results already returned, and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jolly_list_campaignsA

Current Jolly Tur campaigns from /kampanyalar (title + link).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral load; it does disclose the upstream source (/kampanyalar) and the shape of each item (title + link), which is useful. It does not state that the call is read-only, whether results are cached or live-scraped, or what happens on fetch failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence that front-loads the resource and tucks the return fields into parentheses; nothing is wasted. It is a fragment rather than a full sentence, which slightly reduces polish but not economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with an output schema already defining the return shape, the description covers what and where from. The only missing piece an agent might want is a hint about result volume or freshness, which is minor given the schema carries the rest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain and the baseline of 4 applies. The description correctly implies no filtering options exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (Jolly Tur campaigns), qualifies it as current, and even identifies the source path /kampanyalar, so the agent knows exactly what is returned. It implicitly contrasts with the hotel-oriented siblings, though it never names them explicitly, which keeps it just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit 'use this when...' statement or reference to the hotel siblings. Usage is strongly implied by the resource itself — a zero-argument listing call for campaign promotions — but the agent must infer that this is the entry point for deals rather than hotel lookup.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jolly_search_hotelsA

Search Jolly hotels in a city. city: slug like "antalya", "istanbul", "bodrum". check_in/check_out: YYYY-MM-DD (both needed for prices). page: results page (20 hotels/page). hotel_name: optional name filter (4+ chars). Returns hotels with rating, concept, campaigns and prices.

NameRequiredDescriptionDefault
cityYes
pageNo
check_inNo
check_outNo
hotel_nameNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does meaningful work: it discloses that prices only appear when both dates are supplied, that results are paginated at 20 hotels per page, that hotel_name needs 4+ characters, and what fields come back. Unstated behaviour such as authentication needs, sort order, or whether prices are per-room vs per-person keeps this below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence establishes purpose, then each parameter is addressed in a compact, consistently labelled clause followed by return fields. No filler and no repetition of structured data beyond the useful minimum.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter search tool with an output schema present, the description covers formats, the price precondition, pagination, and the result shape. Environment-level details like auth or rate limits are missing, but nothing an agent needs in order to construct a correct call is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it largely does: slug format with example values for city, YYYY-MM-DD format for the date pair, page semantics with page size, and a minimum length for hotel_name. Minor gaps remain, such as the default page value and whether dates are optional or merely required for pricing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Search Jolly hotels in a city" states a specific verb and resource, and the city-scoped framing implicitly separates it from jolly_get_hotel (single hotel) and jolly_list_campaigns. It stops short of naming a sibling explicitly, but an agent can tell these apart from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the agent learns it needs a city slug and that check_in/check_out are both required for prices, which is genuine conditional guidance. There is no explicit statement of when to prefer jolly_get_hotel, nor any mention of exclusions or failure modes for an invalid city.

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. 3 tool updatesv0.1.0
    • First observedjolly_get_hotel
    • First observedjolly_list_campaigns
    • First observedjolly_search_hotels

TDQS

A3.9/5.0

Scored across 3 tools

Disambiguation5/5

Each tool maps to a distinct operation: city-level search, single-hotel detail lookup, and campaign listing. There is no plausible way to confuse them, and the search-to-detail handoff (hotel_slug from search results) is explicitly documented.

Naming Consistency5/5

All three tools use the same jolly_<verb>_<noun> convention (jolly_search_hotels, jolly_get_hotel, jolly_list_campaigns). The server prefix is applied uniformly and verbs are used consistently for their action type.

Tool Count4/5

Three tools is on the thin side, but for a read-only hotel discovery server each tool earns its place and nothing is redundant. A small set of extra tools (e.g. destination/availability lookup) would round it out without bloat.

Completeness4/5

The core read-only lifecycle is covered: find hotels by city, drill into a hotel, and surface current promotions. Gaps remain around room/availability details and booking or filtering beyond name and city, but agents can work around these for search-oriented tasks.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    A read-only MCP server that lets AI assistants query the WebHotelier REST API for live hotel data, including property info, room availability, rates, calendars, and offers via natural language tools.
    8
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables MCP clients to search hotel availability, validate rates, create and retrieve bookings, simulate or execute cancellations, and browse destinations and hotel content through the Hotelbeds Booking and Content APIs. Includes a surface-and-reconfirm booking flow that re-validates live prices with a tolerance before confirming.
    9
    MIT