GeoArm Taxi — Tbilisi ⇄ Yerevan rides
Server Details
Book shared or private rides between Tbilisi and Yerevan: live prices, schedule, booking requests.
- Status
- Healthy
- Uptime
- 100.0% over 23 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
Each tool serves a clearly distinct function: reading offers (get_prices_and_schedule), placing a request (create_booking), checking its state (get_booking_status), and optional feedback (leave_feedback). The descriptions explicitly state the workflow order, so an agent cannot easily confuse them.
All four tools follow a strict verb_noun pattern (create_booking, get_booking_status, get_prices_and_schedule, leave_feedback). Consistent snake_case throughout with no deviations.
Four tools is a bit lean but fits the narrow Tbilisi⇄Yerevan ride-booking scope. Each tool earns its place; no redundancy, though the surface feels minimal.
The read-price → book → check-status → feedback lifecycle is covered, but there is no cancel or modify booking tool even though 'cancelled' is a valid status, leaving the passenger unable to change or retract a request. This is a notable gap an agent would hit.
Available Tools
4 toolscreate_bookingRequest a bookingAInspect
Sends a booking request for a ride between Tbilisi and Yerevan (a seat, or a whole vehicle) for the passenger. A booking is a request: it is NOT confirmed until a GeoArm Taxi dispatcher contacts the passenger to confirm it. Use the values from get_prices_and_schedule (point, time, car, currency), the passenger's real name and phone, and get the passenger's yes to the price first. Payment is in cash to the driver. Returns the booking number, what was booked, the total, and a status_token for get_booking_status.
| Name | Required | Description | Default |
|---|---|---|---|
| car | Yes | `sprinter` = a seat on the scheduled minibus (the default choice) | |
| dir | Yes | `tbs-evn` = Tbilisi → Yerevan, `evn-tbs` = Yerevan → Tbilisi | |
| lat | No | ||
| lng | No | ||
| pax | Yes | Passengers; at most `types[car].max` | |
| date | Yes | YYYY-MM-DD, today or later (Tbilisi date), at most a year ahead | |
| lang | No | The language we should use with the passenger (an unknown value is treated as `en`) | en |
| name | Yes | The passenger's name | |
| time | Yes | One of `schedule[dir]` from /api/config, or `other` for a time outside the timetable (whole vehicle; the dispatcher sets the price) | |
| agent | No | If an AI agent makes the booking: its name (e.g. `ChatGPT`, `Claude`). Shown to the dispatcher. When you leave it out, your MCP client's name is used. | |
| notes | No | Flight number, luggage, a child seat request and the like (longer text is cut to 1000 characters) | |
| phone | Yes | The passenger's phone in international format, e.g. +995 5xx xx xx xx | |
| point | Yes | A departure point id from `points[dir]` in /api/config, or `@addr` for pick-up from an address (extra fee, confirmed by the dispatcher) | |
| whole | No | `true` = the whole vehicle for this party at a timetable time: the total is `types[car].whole[currency]` from /api/config (not per passenger). Only when that price exists for the chosen currency; `pax` still says how many travel | |
| address | No | Required with `point: "@addr"` unless `lat`/`lng` are given | |
| currency | Yes | One of `currencies` from /api/config; the price is taken from the server |
Output Schema
| Name | Required | Description |
|---|---|---|
| number | No | The booking number |
| status | No | |
| booking | No | What was booked, as the server understood it |
| message | No | A sentence for the passenger, in `lang` |
| feedback | No | Optional, after you finish: where you may tell us in a few lines how this went (POST, see /api/agent-feedback). Never include the passenger's personal data. |
| telegram | No | A link the passenger can open to get the confirmation in Telegram |
| confirmed | No | Always false here: a dispatcher confirms later |
| status_url | No | |
| status_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: the booking is only a request, unconfirmed until a dispatcher contacts the passenger, and payment is cash to the driver. The annotations already declare non-readonly, non-destructive, non-idempotent, open-world behavior. What is not disclosed is the duplicate-submission consequence of idempotentHint=false (calling twice likely creates two bookings).
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?
Front-loads the action and the key caveat (a request, NOT confirmed), then prerequisites, payment, and return payload in short clauses. No wasted sentences despite the density of 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?
For a 16-parameter mutation with 9 required fields, the description supplies the sourcing rules, the confirmation caveat, the payment model, and the hand-off token. An output schema exists, so the brief return-value listing is a bonus rather than a necessity.
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 88%, so the schema already documents nearly every field; the description adds cross-reference meaning by telling the agent that point, time, car and currency come from get_prices_and_schedule values. It does not add format or validation detail beyond that, which is acceptable given the coverage baseline of 3.
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 and resource ('Sends a booking request for a ride between Tbilisi and Yerevan') plus the scope variants (a seat, or a whole vehicle). The sibling names get_booking_status and get_prices_and_schedule are used functionally, so an agent can tell this tool apart without opening any 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 explicit preconditions: source point/time/car/currency from get_prices_and_schedule, use the passenger's real name and phone, and obtain the passenger's yes to the price first. It also names the downstream sibling (get_booking_status via status_token), covering both when to call and what follows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_booking_statusBooking statusARead-onlyIdempotentInspect
The state of a booking request made with create_booking: received (not confirmed yet), confirmed, completed or cancelled. Needs the status_token create_booking returned. No personal data is returned.
| Name | Required | Description | Default |
|---|---|---|---|
| status_token | Yes | The status_token from create_booking |
Output Schema
| Name | Required | Description |
|---|---|---|
| dir | No | |
| pax | No | |
| date | No | |
| time | No | |
| number | No | |
| status | No | |
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive and closed-world behavior. The description adds two genuinely useful facts beyond them: the meaning of each returned state (not present in the schema, which has zero enums) and the privacy guarantee that no personal data is returned.
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 tight sentences, front-loaded with the resource and its state vocabulary, then the prerequisite token, then the privacy note. Every sentence carries distinct information and nothing is padded.
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, return values need no elaboration, and the description covers the two things the schema cannot: the semantics of each status value and the data-protection guarantee. An agent has everything needed to call 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 coverage is 100% for the single parameter and the schema already says 'The status_token from create_booking'. The description repeats that same provenance with no additional format, length, or sourcing nuance, so this is the baseline case where structured data does the work.
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 resource ('the state of a booking request') and explicitly ties it to the create_booking lifecycle, enumerating the four possible states (received, confirmed, completed, cancelled). An agent can distinguish this read-only status lookup from create_booking and get_prices_and_schedule without opening any 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?
Clearly implies the usage context: this is the follow-up call to create_booking, and it requires the status_token that create_booking returned. It provides a clear when-to-use signal but never names an alternative tool or states an explicit exclusion, so it stops short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_prices_and_schedulePrices, departure points and timesARead-onlyIdempotentInspect
The live GeoArm Taxi offer for rides between Tbilisi (Georgia) and Yerevan (Armenia): currencies; per car type (sprinter = a seat on the scheduled minibus, minivan, sedan) the seats, the price per passenger and the whole-vehicle price when there is one; the departure points (ids and English names) and departure times per direction; and the key facts. Read it before create_booking.
| Name | Required | Description | Default |
|---|---|---|---|
| direction | No | Only this direction: `tbs-evn` = Tbilisi → Yerevan, `evn-tbs` = Yerevan → Tbilisi. Leave it out for both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cars | Yes | |
| facts | Yes | |
| currencies | Yes | |
| directions | Yes | |
| address_pickup | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and openWorldHint=false, so safety is covered. The description adds useful context beyond them: the data is a 'live' offer, implying dynamic pricing/freshness rather than a cached static list, which matters for a pricing tool. It does not mention output shape, but an output schema exists.
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?
Front-loads the identity of the tool before the inventory of returned fields, and every clause is an informative item rather than filler. The long semicolon list makes it dense but not padded.
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 one-parameter read tool with rich annotations and an output schema, the description covers identity, scope, returned content, and workflow placement. An agent has everything needed to call it correctly and to know when to prefer it over its siblings.
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 100% and the single enum parameter already documents tbs-evn/evn-tbs and the both-directions default. The description reinforces 'per direction' departure times but adds no syntax or semantics beyond 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?
Names a specific resource set (live GeoArm Taxi offer for the Tbilisi–Yerevan route) and enumerates exactly what is returned: currencies, per-car-type seats and prices, departure points with ids, departure times per direction, and key facts. An agent can distinguish this read-only pricing tool from create_booking and get_booking_status 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'Read it before create_booking,' which names the sibling and the sequencing condition. It does not state when not to call it or how it differs from get_booking_status, so it falls just short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leave_feedbackTell us how it went (optional)AInspect
Optional, and only if your user and your own rules allow it: after you have read this site or booked a ride, tell GeoArm Taxi in a few lines what worked, what was missing and whether you would recommend it. Do not include any personal data of the person you act for: e-mail addresses, phone numbers and @handles are removed. Every note is read by a person; nothing you write is published or executed. At most 5 notes per address per day.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No | Optional: what your user asked for, in general words (for example: compare ways to get from Tbilisi to Yerevan). No names, phones or other personal data | |
| agent | Yes | Your name, for example ChatGPT or Claude | |
| model | No | Optional: the model or version, if you know it | |
| reason | No | Why | |
| worked | No | What was easy or clear on this site | |
| booking | No | Optional: the booking number, if you made one | |
| missing | No | What was missing, unclear or wrong, and what would have helped | |
| would_recommend | Yes | Would you recommend this service to a person who asked you for this trip? |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| message | No | A short thank-you |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring write/open-world/non-idempotent, the description carries real added context: PII redaction (e-mail addresses, phone numbers and @handles are removed), human review with no publication or execution, and a rate limit of at most 5 notes per address per day. This is exactly the kind of operational detail the annotations do not supply.
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 optionality and the preconditions are front-loaded, and each following sentence adds a distinct constraint (content, PII, review policy, rate limit). Slightly dense but no sentence is 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?
An output schema exists, so return values need not be explained, and the 8 parameters are fully described in the schema. The description supplies the remaining operational context (privacy handling, human review, quota) needed to invoke this tool responsibly.
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 100% across all 8 parameters, so the schema already documents each field and its limits. The description reinforces the no-personal-data rule and the general content expected, but adds no field-level syntax or format meaning beyond the 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?
The description states a specific verb and resource ('tell GeoArm Taxi... what worked, what was missing and whether you would recommend it'), which maps directly to the tool name leave_feedback. It is trivially distinguishable from siblings create_booking, get_booking_status and get_prices_and_schedule, which are booking/price operations rather than a feedback submission.
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?
It states the trigger condition clearly ('after you have read this site or booked a ride') and an explicit gate ('Optional, and only if your user and your own rules allow it'). No sibling tool is named as an alternative, but none of the siblings is a substitute for submitting feedback, so the routing gap is minor.
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.
2 tool updates
- Changed
create_booking1 field changed- added
Output schema / properties / feedbackAdded value: +{ + "description": "Optional, after you finish: where you may tell us in a few lines how this went (POST, see /api/agent-feedback). Never include the passenger's personal data.", + "format": "uri", + "type": "string" +}
- Added
leave_feedback
1 tool update
- Changed
create_booking2 fields changed- added
Input schema / properties / wholeAdded value: +{ + "default": false, + "description": "`true` = the whole vehicle for this party at a timetable time: the total is `types[car].whole[currency]` from /api/config (not per passenger). Only when that price exists for the chosen currency; `pax` still says how many travel", + "type": "boolean" +} - added
Output schema / properties / booking / properties / wholeAdded value: +{ + "description": "True when the whole vehicle was booked", + "type": "boolean" +}
3 tool updates
- First observed
create_booking - First observed
get_booking_status - First observed
get_prices_and_schedule
Related MCP Connectors
Search, quote and book Daytrip private door-to-door car transfers in 130+ countries.
Search minibus trips between Ukraine, Germany and Switzerland. Read-only.
Airport transfers: Novi Sad ↔ Belgrade Airport (BEG). Look up prices and book a ride.
Search Revamp's live Armenia catalog: stays, tours, restaurants; check availability; plan trips.
Related MCP Servers
- AlicenseAqualityDmaintenanceReal-time train, bus, ferry and private transfer prices between 40+ Italian cities4MIT
- AlicenseNot gradedqualityCmaintenanceLive intercity bus-trip search across Ukraine and Europe — real-time prices, seats, carriers, cheapest-day-of-month calendar, and trip details with passenger discounts. Read-only, no API key; also available as a hosted remote endpoint at https://mcp.soloway.com.ua/mcp.MIT
- AlicenseAqualityFmaintenanceEnables booking premium private chauffeur transfers in Paris and across Europe directly from AI agents. Provides tools to list vehicles, get quotes, book rides, and retrieve service information.4MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to compare and find the cheapest domestic and international flights, hotels, villas, trains and buses in Iran, with exact Toman prices, fare and cancellation rules, baggage details, seats left and hotel reviews. Also covers CIP lounges, eSIM plans, visas and tours, and is read-only, so it never books, holds seats or pays.384 PyPI2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.