Skip to main content
Glama

Server Details

Group flight quotes for parties of 10 or more passengers.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
codeblockssk/easygroupflights-mcp
GitHub Stars
0
Server Listing
easygroupflights MCP

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: search vs retrieve offer (search_flights vs get_offer), prepare vs execute for both flight offers and group quotes (prepare_flight_offer/send_flight_offer, prepare_group_quote/request_group_quote), plus a standalone service_info. The prepare/confirm_token pattern cleanly separates dry-run validation from the actual send.

Naming Consistency5/5

All tools follow a uniform egf_verb_noun snake_case convention (egf_get_offer, egf_prepare_flight_offer, egf_send_flight_offer, etc.). Verbs are used consistently for the same action class (get, prepare, send, request, search).

Tool Count5/5

Seven tools is well-scoped for a flight-offer and group-quote service. Each tool earns its place with no redundancy, and the count avoids both thinness and bloat.

Completeness4/5

The surface covers the full lifecycle: search public fares, retrieve a specific offer, prepare and email a flight offer, and prepare and submit a group quote, with an info tool for context. Booking/payment is absent but appears deliberately out of scope, leaving only minor gaps.

Available Tools

7 tools
egf_get_offerGet one flight offerA
Read-onlyIdempotent
Inspect

Returns one fare from a recent flight search, by its offer_id: the per-person price, the flights, a booking link and the time until which the offer_id is valid. Works for 30 minutes after the search.

ParametersJSON Schema
NameRequiredDescriptionDefault
offer_idYesoffer_id of a fare, exactly as the flight search returned it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
priceNoPer person, in currency.
returnNoLocal return departure, ISO 8601 (YYYY-MM-DDTHH:MM).
carriersYes
currencyYesISO 4217 code.
offer_idYes
departureNoLocal departure, ISO 8601 (YYYY-MM-DDTHH:MM).
stops_outNo
stops_backNo
booking_urlYesAbsolute https link where the traveller books this fare.
valid_untilYesISO 8601 date-time. After it, search again: the price is live.
flight_numbersYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and non-destructive behavior, so the safety profile is covered. The description adds genuinely new behavioral context: the offer_id has a hard 30-minute TTL after the originating search. It omits what the API returns for an expired id, but for an annotated read tool this is solid.

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?

Two sentences, front-loaded with the identity and payload of the resource, followed by the one operational constraint. No filler or restated boilerplate.

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?

An output schema exists, so return values need not be spelled out (though the description helpfully previews them), and annotations carry the safety profile. The remaining gap is error/TTL-expiry behavior, but the definition is otherwise sufficient for correct invocation.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter is fully documented, so the schema does the heavy lifting — baseline 3. The description's only added nuance is that the id must come from a recent search, which overlaps with the 30-minute TTL statement rather than expanding on the parameter itself.

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

Purpose5/5

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

States a specific verb (gets/returns) and resource (one fare/offer by offer_id) and enumerates what comes back: per-person price, flights, booking link, validity window. The phrase 'from a recent flight search' cleanly separates it from egf_search_flights and the prepare_* siblings.

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

Usage Guidelines4/5

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

It supplies a concrete usage window — 'Works for 30 minutes after the search' — which tells the agent exactly when this tool is callable. It stops short of naming an alternative for expired/absent offer_ids or pointing at egf_prepare_flight_offer for new offers.

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

egf_get_service_infoAbout easygroupflightsA
Read-onlyIdempotent
Inspect

Describes easygroupflights for one market: who it serves, how group fares differ from public tickets, what happens after a quote is requested, and how to reach a person. Submits nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketNoWhich market to describe. Defaults to en.

Output Schema

ParametersJSON Schema
NameRequiredDescription
domainYes
marketYes
contactYes
websiteYesAbsolute https URL of the market's site.
languageYes
group_minimumYesSeated travellers needed for a group fare.
max_reply_hoursYes
typical_reply_hoursYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds real value beyond them by describing the informational nature of the response (service coverage, fare differences, post-quote process, contact path) and reinforcing "Submits nothing" so the agent knows no state change occurs.

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 sentence, front-loaded with the core purpose and ending on the disambiguating "Submits nothing." Every clause conveys distinct content, with no redundancy or filler.

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

Completeness5/5

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 one optional parameter is fully documented in the schema. For a low-complexity informational tool, the description supplies everything needed to select and call it correctly.

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

Parameters3/5

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

Schema coverage is 100% with the enum documented as "Which market to describe. Defaults to en." The description only echoes "for one market" and adds no syntax, fallback, or behavior detail beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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

Names a specific verb (Describes) and resource (easygroupflights) and enumerates the exact content covered: who it serves, fare differences, post-quote flow, and human contact. This clearly separates it from the action-oriented siblings (search, prepare, request, send), which an agent can see 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.

Usage Guidelines4/5

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

The clause "Submits nothing" tells the agent this is an informational read, not a transaction, which implicitly routes transactional needs to the prepare/request/send siblings. However, no sibling is named and there is no explicit statement of when to prefer this over egf_get_offer or egf_search_flights.

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

egf_prepare_flight_offerPrepare a flight offer emailA
Read-onlyIdempotent
Inspect

Checks an email that would send one fare from a flight search to the traveller as a formal offer, and returns who it goes to and what it offers, with a confirmation_token valid for 15 minutes. Nothing is sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoTraveller's name, used to address the email.
emailYesWhere to send the offer.
adultsNoAdults on the offer. Defaults to 1.
infantsNoLap infants on the offer.
messageNoA sentence or two of context for the traveller, e.g. why this option was chosen.
childrenNoChildren on the offer.
offer_idYesoffer_id of the chosen fare, exactly as the flight search returned it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
emailYesWhere the offer would go.
priceNoPer person, when the search is still held.
adultsYes
infantsYes
carriersNo
childrenYes
offer_idYes
departureNoLocal departure, ISO 8601 (YYYY-MM-DDTHH:MM).
expires_atYesISO 8601 date-time after which the token is refused.
confirmation_tokenYesAuthorises sending exactly this email.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and non-open-world, so the safety profile is covered. The description adds genuinely new behavior: it returns a confirmation_token valid for 15 minutes, states what the result contains, and reassures that nothing is sent.

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 dense sentence with the preview-and-no-send guarantee front and center; every clause earns its place. Slightly awkward phrasing ('Checks an email that would send') but no wasted text.

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?

With an output schema present, return values need not be re-explained, and the description adds the token validity window and the no-side-effect guarantee. For a 7-param tool it is complete enough, though it could name the follow-up send step.

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

Parameters3/5

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

Every parameter is already documented at 100% schema coverage, so the schema carries the semantics. The description only alludes to 'who it goes to', adding no syntax or format detail beyond the structured fields, so baseline 3 applies.

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 action (checks/prepares an email offer) on a specific resource (a fare from a flight search), and describes what it returns (recipient, offered fare, confirmation_token). It distinguishes itself from the write path only implicitly via 'Nothing is sent' rather than by naming the send sibling.

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 token plus 'Nothing is sent' implies this is a preview/dry-run step that precedes an actual send (likely egf_send_flight_offer), but neither the alternative nor the when-to-use condition is named explicitly. Usage is inferable but not stated.

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

egf_prepare_group_quotePrepare a group flight quote requestA
Read-onlyIdempotent
Inspect

Checks a group flight enquiry for 10 or more seated travellers and returns the exact brief that would go to a human specialist, with a confirmation_token valid for 15 minutes. Nothing is sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoAnything that shapes the fare: what the group is (school trip, wedding, sports team, conference), baggage or equipment needs, budget, who pays, whether names are known yet.
emailYesWhere the quote is sent. Required.
phoneYesContact number in international form, e.g. +441244568183. Required: a group specialist may phone to confirm details.
adultsYesTravellers aged 16 or over.
marketNoWhich market handles the enquiry: en (easygroupflights.com), pl (grupoweloty.pl) or at (gruppenfluege.at). Defaults to en.
originYesDeparture airport as an IATA code, e.g. ["LHR"]. Several codes are allowed when the group converges from more than one city.
youthsNoTravellers aged 12–15.
infantsNoUnder 2, travelling on an adult lap. They do not occupy a seat and do not count towards the group of 10.
childrenNoTravellers aged 2–11, each in their own seat.
last_nameNoOrganiser's surname.
first_nameNoOrganiser's first name.
cabin_classNoDefaults to economy.
destinationYesArrival airport as an IATA code, e.g. ["BCN"].
return_dateNoReturn date, ISO 8601 (YYYY-MM-DD). Omit for a one-way group booking.
youths_agesNoAge of each youth, one entry per youth.
children_agesNoAge of each child, one entry per child.
return_originNoReturn leg departure airports, if the group flies home from somewhere other than the destination.
departure_dateYesOutbound date, ISO 8601 (YYYY-MM-DD).
return_destinationNoReturn leg arrival airports, if travellers go home to a different city.
date_flexibility_daysNoHow many days either side of the given dates the group can move. 0 means fixed dates.

Output Schema

ParametersJSON Schema
NameRequiredDescription
cabinYes
seatsYesSeated travellers; lap infants excluded.
adultsYes
domainYesThe market whose desk handles the enquiry.
marketYes
originYes
youthsYes
infantsYes
childrenYes
reply_toYesWhere the quote will be emailed.
expires_atYesISO 8601 date-time after which the token is refused.
destinationYes
return_dateNoISO 8601 date (YYYY-MM-DD). Absent for one way.
departure_dateYesISO 8601 date (YYYY-MM-DD).
confirmation_tokenYesAuthorises sending exactly this brief.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds genuinely new behavior: the 10-seated-traveller eligibility rule, the 15-minute token lifetime, and the explicit assurance that nothing is dispatched. It omits what happens after the token expires or whether the token is the handoff to the write step.

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?

Two sentences, zero filler, and the eligibility condition and no-side-effect guarantee are front-loaded where an agent will read them. Nothing is redundant.

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?

With an output schema present, return values need not be explained, and the description still flags the token semantics. Given 20 parameters at full schema coverage and rich annotations, the definition is sufficient, though the handoff to egf_request_group_quote remains unstated.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 20 parameters, including the infant-lap rule and perpendicular fields like youths_ages. The description only adds the aggregate '10 or more seated travellers' rule, which is a modest semantic gain over the schema baseline.

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 verb (checks/prepares) and resource (group flight enquiry) plus the key scope condition (10 or more seated travellers) and the output (a brief plus confirmation_token). The closing 'Nothing is sent' implicitly separates it from the write siblings egf_request_group_quote and egf_send_flight_offer, but no sibling is named, so differentiation relies on inference.

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 only implied: the 10+ seated-traveller threshold and 'nothing is sent' suggest this is the dry-run step before egf_request_group_quote, but the description never says when to use it versus that sibling or what to do with the token. No prerequisites or exclusions are stated.

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

egf_request_group_quoteSend a group flight quote requestAInspect

Sends a prepared group flight enquiry to a human specialist, who replies by email with a written quote, usually within about 2 hours. Takes only the confirmation_token from preparing it; it returns a confirmation, not a price, and books or charges nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
idempotency_keyNoOptional. Any unique string for this request, such as a UUID. Calling again with the same key and the same arguments returns the first result instead of sending again. Kept for 24 hours.
confirmation_tokenYesconfirmation_token returned when this write was prepared. Valid for 15 minutes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
cabinYes
seatsYesSeated travellers; lap infants excluded.
adultsYes
domainYesThe market whose desk handles the enquiry.
marketYes
originYes
statusYesThe enquiry reached the specialist desk. Nothing is booked or charged.
youthsYes
infantsYes
childrenYes
reply_toYesWhere the quote will be emailed.
destinationYes
return_dateNoISO 8601 date (YYYY-MM-DD). Absent for one way.
departure_dateYesISO 8601 date (YYYY-MM-DD).
max_reply_hoursYes
typical_reply_hoursYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (non-read-only, open-world, non-destructive, not idempotent), the description discloses that delivery goes to a human specialist by email, the expected turnaround of about 2 hours, and that it neither books nor charges. These are substantive behavioral facts an agent cannot infer from the structured fields.

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?

Two tight sentences with no filler, front-loading what the tool does and following with the key constraint and the no-charge clarification. Every clause carries information.

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

Completeness5/5

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

For a single-required-param write tool with an output schema present, the description supplies the missing flow context (prepare-then-send), the async human turnaround, and the side-effect boundaries. Nothing an agent needs to invoke it correctly 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 coverage is 100%, so parameters are already documented, giving a baseline of 3. The description adds flow-level meaning by stating the confirmation_token must originate from the prepare call and that it is the only input taken, which helps the agent chain the two tools correctly.

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

Purpose5/5

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

States a specific verb (sends) and resource (a prepared group flight enquiry), and the word "prepared" plus "confirmation_token from preparing it" clearly distinguishes it from the sibling egf_prepare_group_quote. An agent can tell this is the send step of a two-phase flow 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 Guidelines4/5

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

It establishes the precondition that a prepare step must have run first ("Takes only the confirmation_token from preparing it") and clarifies the outcome boundary (returns confirmation, not a price, books or charges nothing). It does not explicitly name egf_prepare_group_quote as the required precursor, so the routing is left slightly implicit.

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

egf_search_flightsSearch flights for a small partyA
Read-onlyIdempotent
Inspect

Searches live public fares for 1 to 9 travellers and returns options with per-person prices, carriers and stops, cheapest first, each with an offer_id valid for 30 minutes. Results come in pages: pass next_cursor back as cursor, with the same route and dates, for more.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoFares per page. Defaults to 10.
cursorNonext_cursor from the previous page of this search. Omit for the first page.
originYesDeparture airport, IATA code, e.g. VIE.
passengersNoHow many people are travelling, 1 to 9. Defaults to 1.
destinationYesArrival airport, IATA code, e.g. BCN.
return_dateNoReturn date, ISO 8601 (YYYY-MM-DD). Omit for one way.
departure_dateYesOutbound date, ISO 8601 (YYYY-MM-DD).

Output Schema

ParametersJSON Schema
NameRequiredDescription
faresYes
totalYesFares the search found, across all pages.
originYes
currencyYesISO 4217 code every price is in.
passengersYes
destinationYes
next_cursorNoPass as cursor for the next page. Absent on the last page.
return_dateNoISO 8601 date (YYYY-MM-DD). Absent for one way.
departure_dateYesISO 8601 date (YYYY-MM-DD).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, openWorld), so the bar is lower, and the description adds genuinely useful behavior: results are cheapest-first, each offer_id is valid for only 30 minutes, and results are paginated. It does not mention rate limits or caching, keeping it short of 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?

Two sentences, zero waste: the first front-loads purpose and result shape, the second handles pagination. Every clause earns its place.

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?

An output schema exists, so return values need not be re-explained, yet the description still summarizes them usefully alongside the critical 30-minute offer_id validity and pagination contract. Only the absence of routing guidance to sibling tools leaves a gap.

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 coverage is 100%, so the baseline is 3, but the description adds real value by explaining that the cursor must be replayed with the same route and dates — a constraint the schema's cursor text does not convey. It still adds nothing on limit or passengers beyond the schema.

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

Purpose5/5

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

States a specific verb (Searches), resource (live public fares), and scope (1 to 9 travellers), plus what is returned (per-person prices, carriers, stops). An agent can immediately tell this is the search entry point among siblings like egf_get_offer and egf_prepare_flight_offer.

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?

Gives clear pagination usage (pass next_cursor back as cursor with the same route/dates) but never states when to use this tool versus alternatives such as egf_prepare_group_quote for parties larger than 9 or egf_get_offer to fet up an offer. Usage is implied rather than routed.

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

egf_send_flight_offerEmail a flight offerAInspect

Emails a prepared flight offer to the traveller as a formal offer they can accept. Takes only the confirmation_token from preparing it, and sends a real email.

ParametersJSON Schema
NameRequiredDescriptionDefault
idempotency_keyNoOptional. Any unique string for this request, such as a UUID. Calling again with the same key and the same arguments returns the first result instead of sending again. Kept for 24 hours.
confirmation_tokenYesconfirmation_token returned when this write was prepared. Valid for 15 minutes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
emailYesWhere the offer went.
replyYesThe fare service's own confirmation.
statusYes
offer_idYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, so the safety profile is partly covered. The description adds the crucial real-world effect that it 'sends a real email' to an external party and produces an actionable 'formal offer they can accept', which an agent needs to know is not a dry run. It does not discuss failure modes, but that is largely handled by the schema.

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?

Two tight sentences with no filler; the purpose and the 'real email' warning are front-loaded, and the workflow dependency follows immediately.

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?

With an output schema present, return values need not be described, and the schema covers token expiry and idempotency. What remains is a prerequisite and the fact a real external email is dispatched, both of which are stated; only edge-case failure behavior is absent.

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

Parameters3/5

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

Schema coverage is 100%: both confirmation_token (with its 15-minute validity) and idempotency_key (with its retry semantics) are fully documented in the schema. The description adds only that the token comes from the preparation step, which is a marginal gain over the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

Specific verb+resource ('Emails a prepared flight offer to the traveller') that clearly distinguishes it from the sibling egf_prepare_flight_offer by the word 'prepared' and the explicit dependency on the token from preparation. An agent can tell the send step apart from the prepare step without opening either schema.

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

Usage Guidelines4/5

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

The line 'Takes only the confirmation_token from preparing it' establishes the prerequisite (egf_prepare_flight_offer must run first) and the sequencing. It stops short of stating when NOT to use it or naming alternatives outright, so it is clear context rather than explicit routing.

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. 1 tool update
    • Changedegf_prepare_group_quote1 field changed
      • changedInput schema / properties / phone / description
        Previous value: -"Contact number in international form, e.g. +441244568183. Required — the agent may call to confirm details."New value: +"Contact number in international form, e.g. +441244568183. Required: a group specialist may phone to confirm details."
  2. 6 tool updates
    • Addedegf_get_offer
    • Addedegf_prepare_flight_offer
    • Addedegf_prepare_group_quote
    • Changedegf_request_group_quote24 fields changed
      • removedInput schema / properties / adults
        Removed value: -{
        -  "description": "Travellers aged 16 or over.",
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • removedInput schema / properties / cabin_class
        Removed value: -{
        -  "description": "Defaults to economy.",
        -  "enum": [
        -    "economy",
        -    "business"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / children
        Removed value: -{
        -  "description": "Travellers aged 2–11, each in their own seat.",
        -  "minimum": 0,
        -  "type": "integer"
        -}
      • removedInput schema / properties / children_ages
        Removed value: -{
        -  "description": "Age of each child, one entry per child.",
        -  "items": {
        -    "type": "integer"
        -  },
        -  "type": "array"
        -}
      • addedInput schema / properties / confirmation_token
        Added value: +{
        +  "description": "confirmation_token returned when this write was prepared. Valid for 15 minutes.",
        +  "type": "string"
        +}
      • removedInput schema / properties / date_flexibility_days
        Removed value: -{
        -  "description": "How many days either side of the given dates the group can move. 0 means fixed dates.",
        -  "minimum": 0,
        -  "type": "integer"
        -}
      • removedInput schema / properties / departure_date
        Removed value: -{
        -  "description": "Outbound date, YYYY-MM-DD.",
        -  "type": "string"
        -}
      • removedInput schema / properties / destination
        Removed value: -{
        -  "description": "Arrival airport as an IATA code, e.g. [\"BCN\"].",
        -  "items": {
        -    "pattern": "^[A-Za-z]{3}$",
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / email
        Removed value: -{
        -  "description": "Where the quote is sent. Required.",
        -  "type": "string"
        -}
      • removedInput schema / properties / first_name
        Removed value: -{
        -  "description": "Organiser's first name.",
        -  "type": "string"
        -}
      • removedInput schema / properties / infants
        Removed value: -{
        -  "description": "Under 2, travelling on an adult lap. They do not occupy a seat and do not count towards the group of 10.",
        -  "minimum": 0,
        -  "type": "integer"
        -}
      • removedInput schema / properties / last_name
        Removed value: -{
        -  "description": "Organiser's surname.",
        -  "type": "string"
        -}
      • removedInput schema / properties / market
        Removed value: -{
        -  "description": "Which market handles the enquiry: en (easygroupflights.com), pl (grupoweloty.pl) or at (gruppenfluege.at). Defaults to en.",
        -  "enum": [
        -    "en",
        -    "pl",
        -    "at"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / note
        Removed value: -{
        -  "description": "Anything that shapes the fare: what the group is (school trip, wedding, sports team, conference), baggage or equipment needs, budget, who pays, whether names are known yet.",
        -  "type": "string"
        -}
      • removedInput schema / properties / origin
        Removed value: -{
        -  "description": "Departure airport as an IATA code, e.g. [\"LHR\"]. Several codes are allowed when the group converges from more than one city.",
        -  "items": {
        -    "pattern": "^[A-Za-z]{3}$",
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / phone
        Removed value: -{
        -  "description": "Contact number in international form, e.g. +441244568183. Required — the agent may call to confirm details.",
        -  "type": "string"
        -}
      • removedInput schema / properties / return_date
        Removed value: -{
        -  "description": "Return date, YYYY-MM-DD. Omit for a one-way group booking.",
        -  "type": "string"
        -}
      • removedInput schema / properties / return_destination
        Removed value: -{
        -  "description": "Return leg arrival airports, if travellers go home to a different city.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / return_origin
        Removed value: -{
        -  "description": "Return leg departure airports, if the group flies home from somewhere other than the destination.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / youths
        Removed value: -{
        -  "description": "Travellers aged 12–15.",
        -  "minimum": 0,
        -  "type": "integer"
        -}
      • removedInput schema / properties / youths_ages
        Removed value: -{
        -  "description": "Age of each youth, one entry per youth.",
        -  "items": {
        -    "type": "integer"
        -  },
        -  "type": "array"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "origin",
        -  "destination",
        -  "departure_date",
        -  "adults",
        -  "email",
        -  "phone"
        -]New value: +[
        +  "confirmation_token"
        +]
      • changedOutput schema / properties / departure_date / description
        Previous value: -"YYYY-MM-DD."New value: +"ISO 8601 date (YYYY-MM-DD)."
      • changedOutput schema / properties / return_date / description
        Previous value: -"YYYY-MM-DD. Absent for one way."New value: +"ISO 8601 date (YYYY-MM-DD). Absent for one way."
    • Changedegf_search_flights7 fields changed
      • changedInput schema / properties / departure_date / description
        Previous value: -"Outbound date, YYYY-MM-DD."New value: +"Outbound date, ISO 8601 (YYYY-MM-DD)."
      • changedInput schema / properties / return_date / description
        Previous value: -"Return date, YYYY-MM-DD. Omit for one way."New value: +"Return date, ISO 8601 (YYYY-MM-DD). Omit for one way."
      • changedOutput schema / properties / departure_date / description
        Previous value: -"YYYY-MM-DD."New value: +"ISO 8601 date (YYYY-MM-DD)."
      • removedOutput schema / properties / fares / items / properties / booking_url
        Removed value: -{
        -  "type": "string"
        -}
      • changedOutput schema / properties / fares / items / properties / departure / description
        Previous value: -"Local departure, YYYY-MM-DDTHH:MM."New value: +"Local departure, ISO 8601 (YYYY-MM-DDTHH:MM)."
      • changedOutput schema / properties / fares / items / properties / return / description
        Previous value: -"Local return departure, YYYY-MM-DDTHH:MM."New value: +"Local return departure, ISO 8601 (YYYY-MM-DDTHH:MM)."
      • changedOutput schema / properties / return_date / description
        Previous value: -"YYYY-MM-DD. Absent for one way."New value: +"ISO 8601 date (YYYY-MM-DD). Absent for one way."
    • Changedegf_send_flight_offer9 fields changed
      • removedInput schema / properties / adults
        Removed value: -{
        -  "description": "Adults on the offer. Defaults to 1.",
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • removedInput schema / properties / children
        Removed value: -{
        -  "description": "Children on the offer.",
        -  "minimum": 0,
        -  "type": "integer"
        -}
      • addedInput schema / properties / confirmation_token
        Added value: +{
        +  "description": "confirmation_token returned when this write was prepared. Valid for 15 minutes.",
        +  "type": "string"
        +}
      • removedInput schema / properties / email
        Removed value: -{
        -  "description": "Where to send the offer.",
        -  "type": "string"
        -}
      • removedInput schema / properties / infants
        Removed value: -{
        -  "description": "Lap infants on the offer.",
        -  "minimum": 0,
        -  "type": "integer"
        -}
      • removedInput schema / properties / message
        Removed value: -{
        -  "description": "A sentence or two of context for the traveller, e.g. why this option was chosen.",
        -  "type": "string"
        -}
      • removedInput schema / properties / name
        Removed value: -{
        -  "description": "Traveller's name, used to address the email.",
        -  "type": "string"
        -}
      • removedInput schema / properties / offer_id
        Removed value: -{
        -  "description": "offer_id of the chosen fare, exactly as the flight search returned it.",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "offer_id",
        -  "email"
        -]New value: +[
        +  "confirmation_token"
        +]
  3. 8 tool updates
    • Addedegf_get_service_info
    • Addedegf_request_group_quote
    • Addedegf_search_flights
    • Addedegf_send_flight_offer
    • Removedget_service_info
    • Removedrequest_group_quote
    • Removedsearch_flights
    • Removedsend_flight_offer
  4. 4 tool updates
    • Changedget_service_info1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "contact": {
        +      "properties": {
        +        "email": {
        +          "type": "string"
        +        },
        +        "phone": {
        +          "type": "string"
        +        },
        +        "whatsapp": {
        +          "type": "string"
        +        },
        +        "whatsapp_url": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "email",
        +        "phone",
        +        "whatsapp",
        +        "whatsapp_url"
        +      ],
        +      "type": "object"
        +    },
        +    "domain": {
        +      "type": "string"
        +    },
        +    "group_minimum": {
        +      "description": "Seated travellers needed for a group fare.",
        +      "type": "integer"
        +    },
        +    "language": {
        +      "type": "string"
        +    },
        +    "market": {
        +      "enum": [
        +        "en",
        +        "pl",
        +        "at"
        +      ],
        +      "type": "string"
        +    },
        +    "max_reply_hours": {
        +      "type": "integer"
        +    },
        +    "typical_reply_hours": {
        +      "type": "integer"
        +    },
        +    "website": {
        +      "description": "Absolute https URL of the market's site.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "market",
        +    "domain",
        +    "website",
        +    "language",
        +    "group_minimum",
        +    "typical_reply_hours",
        +    "max_reply_hours",
        +    "contact"
        +  ],
        +  "type": "object"
        +}
    • Changedrequest_group_quote4 fields changed
      • changedInput schema / properties / dateFlexibilityDays / description
        Previous value: -"How many days either side of the given dates the group can move. 0 means fixed dates. Flexibility often buys a better group fare, so ask."New value: +"How many days either side of the given dates the group can move. 0 means fixed dates."
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Optional. Any unique string for this request, such as a UUID. Calling again with the same key and the same arguments returns the first result instead of sending again. Kept for 24 hours.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • changedInput schema / properties / note / description
        Previous value: -"Anything that shapes the fare: what the group is (school trip, wedding, sports team, conference), baggage or equipment needs, budget, who pays, whether names are known yet. Worth asking for — it is what lets the agent quote accurately first time."New value: +"Anything that shapes the fare: what the group is (school trip, wedding, sports team, conference), baggage or equipment needs, budget, who pays, whether names are known yet."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "adults": {
        +      "type": "integer"
        +    },
        +    "cabin": {
        +      "enum": [
        +        "economy",
        +        "business"
        +      ],
        +      "type": "string"
        +    },
        +    "children": {
        +      "type": "integer"
        +    },
        +    "departure_date": {
        +      "description": "YYYY-MM-DD.",
        +      "type": "string"
        +    },
        +    "destination": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "domain": {
        +      "description": "The market whose desk handles the enquiry.",
        +      "type": "string"
        +    },
        +    "infants": {
        +      "type": "integer"
        +    },
        +    "market": {
        +      "enum": [
        +        "en",
        +        "pl",
        +        "at"
        +      ],
        +      "type": "string"
        +    },
        +    "max_reply_hours": {
        +      "type": "integer"
        +    },
        +    "origin": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "reply_to": {
        +      "description": "Where the quote will be emailed.",
        +      "type": "string"
        +    },
        +    "return_date": {
        +      "description": "YYYY-MM-DD. Absent for one way.",
        +      "type": "string"
        +    },
        +    "seats": {
        +      "description": "Seated travellers; lap infants excluded.",
        +      "type": "integer"
        +    },
        +    "status": {
        +      "description": "The enquiry reached the specialist desk. Nothing is booked or charged.",
        +      "enum": [
        +        "submitted"
        +      ],
        +      "type": "string"
        +    },
        +    "typical_reply_hours": {
        +      "type": "integer"
        +    },
        +    "youths": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "market",
        +    "domain",
        +    "origin",
        +    "destination",
        +    "departure_date",
        +    "adults",
        +    "youths",
        +    "children",
        +    "infants",
        +    "seats",
        +    "cabin",
        +    "reply_to",
        +    "typical_reply_hours",
        +    "max_reply_hours"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_flights4 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "next_cursor from the previous page of this search. Omit for the first page.",
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Fares per page. Defaults to 10.",
        +  "maximum": 20,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / properties / passengers / description
        Previous value: -"How many people are travelling. 10 or more is a group — use request_group_quote."New value: +"How many people are travelling, 1 to 9. Defaults to 1."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "currency": {
        +      "description": "ISO 4217 code every price is in.",
        +      "type": "string"
        +    },
        +    "departure_date": {
        +      "description": "YYYY-MM-DD.",
        +      "type": "string"
        +    },
        +    "destination": {
        +      "type": "string"
        +    },
        +    "fares": {
        +      "items": {
        +        "properties": {
        +          "back_trip_id": {
        +            "description": "\"0\" for one way.",
        +            "type": "string"
        +          },
        +          "booking_url": {
        +            "type": "string"
        +          },
        +          "carriers": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "departure": {
        +            "description": "Local departure, YYYY-MM-DDTHH:MM.",
        +            "type": "string"
        +          },
        +          "fare_id": {
        +            "type": "string"
        +          },
        +          "flight_numbers": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "price": {
        +            "description": "Per person, in currency.",
        +            "type": "number"
        +          },
        +          "rank": {
        +            "description": "1 is the cheapest.",
        +            "type": "integer"
        +          },
        +          "return": {
        +            "description": "Local return departure, YYYY-MM-DDTHH:MM.",
        +            "type": "string"
        +          },
        +          "stops_back": {
        +            "type": "integer"
        +          },
        +          "stops_out": {
        +            "type": "integer"
        +          },
        +          "there_trip_id": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "rank",
        +          "carriers",
        +          "flight_numbers",
        +          "fare_id",
        +          "there_trip_id",
        +          "back_trip_id"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "next_cursor": {
        +      "description": "Pass as cursor for the next page. Absent on the last page.",
        +      "type": "string"
        +    },
        +    "origin": {
        +      "type": "string"
        +    },
        +    "passengers": {
        +      "type": "integer"
        +    },
        +    "return_date": {
        +      "description": "YYYY-MM-DD. Absent for one way.",
        +      "type": "string"
        +    },
        +    "session_id": {
        +      "description": "The search session the fare and trip ids belong to.",
        +      "type": "string"
        +    },
        +    "total": {
        +      "description": "Fares the search found, across all pages.",
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "origin",
        +    "destination",
        +    "departure_date",
        +    "passengers",
        +    "currency",
        +    "session_id",
        +    "total",
        +    "fares"
        +  ],
        +  "type": "object"
        +}
    • Changedsend_flight_offer2 fields changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Optional. Any unique string for this request, such as a UUID. Calling again with the same key and the same arguments returns the first result instead of sending again. Kept for 24 hours.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "email": {
        +      "description": "Where the offer went.",
        +      "type": "string"
        +    },
        +    "fare_id": {
        +      "type": "string"
        +    },
        +    "reply": {
        +      "description": "The fare service's own confirmation.",
        +      "type": "string"
        +    },
        +    "status": {
        +      "enum": [
        +        "sent"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "email",
        +    "fare_id",
        +    "reply"
        +  ],
        +  "type": "object"
        +}
  5. 4 tool updates
    • First observedget_service_info
    • First observedrequest_group_quote
    • First observedsearch_flights
    • First observedsend_flight_offer

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables agents to search airports and find group meetup flights for multiple travelers with optimal pricing and arrival windows.
    139 npm
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables tracking flights and grouping them into trips, with tools to create, list, and manage trips and flight bookings.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI clients to search discounted private-jet empty-leg flights, retrieve flight details, obtain booking links, estimate charter prices, and submit charter enquiries.
    MIT
  • A
    license
    C
    quality
    F
    maintenance
    Enables searching and retrieving detailed flight information using the Duffel API, supporting various flight types and flexible search parameters for efficient travel planning.
    3
    231
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.