aa-mcp-server
Provides read-only access to American Airlines AAdvantage account data including mile balance, Loyalty Points progress, transaction history, upcoming trips, travel credits, and partner offers via aa.com APIs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@aa-mcp-serverWhat's my current mile balance?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
aa-mcp-server
An MCP server that gives Claude (or any MCP-compatible LLM) read-only access to your American Airlines AAdvantage account — mile balance, Loyalty Points progress, transaction history, upcoming trips, travel credits, and partner offers.
This is not a browser-automation wrapper. The server discovers and calls aa.com's underlying JSON APIs directly using session cookies extracted from a Chromium login. All HTTP traffic uses curl_cffi with Chrome TLS impersonation to satisfy aa.com's Akamai Bot Manager.
Tools
Tool | Endpoint | Returns |
|
| Name, AAdvantage #, mile balance, status, cobranded card, business memberships |
|
| LP YTD, last-year totals, tier thresholds, next-status delta |
|
| DOB, partners list, sales city, mile expiration, million-miler stats |
|
| Mile/LP transaction history (date range, paginated, searchable) |
|
| Reservations with record locators |
|
| Full reservation: segments, passengers, tickets, costs, change/cancel eligibility (requires lead-passenger name) |
|
| Alternative flights for a reservation with a ±6-day price carousel, per-cabin pricing ( |
|
| Single-passenger ticket credits |
|
| Multi-passenger / itinerary credits |
|
| Dashboard partner promotions |
|
| Account notifications |
| — | Saved-session info: AA #, token expiry, cookie count |
| CDP | Pulls cookies from a logged-in Chromium and persists them |
Related MCP server: Amadeus Agent
Setup
pip install aa-mcp-serverOne-time auth
aa.com is fronted by Akamai Bot Manager — you can't log in via headless requests. The flow:
Launch a real Chromium with a persistent profile and a remote-debugging port:
aa-auth-browser # default account aa-auth-browser personal # named accountLog into aa.com (and complete 2FA if prompted) in the window that opens.
Copy the cookies into the MCP store:
aa-mcp-server --extract-session defaultOr call the
save_session_from_browserMCP tool from Claude.
The cookies live in ~/.aa-mcp/accounts/<account>/session.json. The chromium profile lives in ~/.aa-mcp/chrome-profiles/<account>/. To refresh after expiry, relaunch aa-auth-browser (the saved profile auto-refreshes the access_token cookie when you visit any aa.com page) and re-run --extract-session.
AA_MCP_CHROMIUM=<path-to-chrome.exe> overrides the auto-discovery if your Chromium is somewhere unusual.
Multi-account
Every tool takes an optional account parameter. Omit it to use the default account.
get_account_summary() # default
get_account_summary(account="spouse")Running
aa-mcp-server # stdio transport
aa-mcp-server --setup # show account status & setup hints
aa-mcp-server --extract-session NAME # save cookies from running ChromiumAdd to your MCP client config (e.g. Claude Desktop):
{
"mcpServers": {
"aa": {
"command": "aa-mcp-server"
}
}
}Limitations
Read-only. No booking, no award redemption, no profile edits.
Cookie expiry. The
access_tokenJWT lives ~45 min; therefresh_tokencookie typically ~30 days. Visiting any aa.com page in the saved Chromium profile silently refreshes both. After a long gap, re-extract.GraphQL coverage. Only the
GetCustomerpersisted query is wired up. Expanding requires capturing additional sha256Hashes from the browser bundle — easy but a per-feature task.One region tested. All testing has been on US-locale aa.com. International locales may require different
refererpaths.
License
MIT
mcp-name: io.github.thehesiod/aa
Available Tools
13 toolscheck_auth_statusB
Check the saved AA session for an account — token expiry, AAdvantage #, cookie count.
Args: account: Account name (optional, uses default).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It does not disclose whether the tool modifies state, whether a session must exist, or what happens on failure. It implies a read-only check but is not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear one-line summary and an 'Args' section. It front-loads the key purpose, but the parameter documentation could be more detailed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to detail return values. However, it lacks context on prerequisites (e.g., need for a saved session) and potential errors, which are important for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to the 'account' parameter by stating it is optional and uses a default. This goes beyond the schema's minimal definition, though it is brief.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'check' and the resource 'saved AA session', and lists specific return fields (token expiry, AAdvantage #, cookie count). This distinguishes it from sibling tools that deal with other account details or actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'get_profile_details' or 'save_session_from_browser'. Does not mention prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_summaryB
Member info: name, AAdvantage #, mile balance, status, cobranded card, business memberships.
Args: account: Account name (optional, uses default).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description partially discloses behavior by listing returned fields. However, it does not mention read-only nature, authentication needs, or side effects. The 'get' in the name implies read-only but is not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using two lines to summarize output and the argument. It is front-loaded with the key info. Minor improvement could be a more structured format.
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 value details are not needed. However, given the context (siblings like check_auth_status, get_profile_details), the description does not help the agent choose this tool over others. It lacks when to use it context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional parameter with 0% description coverage. The description adds minimal information: 'Account name (optional, uses default).' It does not explain what 'account' refers to or what the default value is, adding little value 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 clearly states the tool returns member info including name, AAdvantage number, mile balance, status, etc. It uses specific verb+resource and lists fields, but does not differentiate from siblings like get_profile_details or get_mile_activity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. It only notes the account parameter is optional and uses a default, but does not explain prerequisites or when this summary is appropriate over other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flight_creditsC
Flight credits (single-passenger ticket credits from cancelled flights).
Args: locale: Locale code (default en_US). account: Account name (optional, uses default).
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | en_US | |
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description implies read-only behavior but does not explicitly state idempotency, authorization requirements, or whether the tool modifies state.
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?
Very concise, with purpose stated upfront and parameters listed. Could be slightly more structured but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of a sibling tool for trip credits and no output schema explanation, the description is incomplete. Lacks context on when to query flight vs trip credits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. Description only lists parameter names with defaults, adding no additional meaning about valid locale codes or account naming conventions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it retrieves flight credits from cancelled flights. However, it does not differentiate from sibling tool 'get_trip_credits', which may be similar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like get_trip_credits or get_account_summary. Simply lists parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_loyalty_points_progressC
Elite status progress — Loyalty Points YTD + last-year EQDs/EQMs/EQSs + tier thresholds.
Args: account: Account name (optional, uses default).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose behavioral traits. It states the tool returns data (read-only implied) but does not mention authentication requirements, rate limits, side effects, or that no changes are made. The output schema exists, but the description adds no behavioral context beyond the data listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences) with no wasted words. Front-loaded with the output purpose, followed by the parameter. Slightly improved structure could show parameter info as a bullet, but it is already efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single optional parameter and existence of output schema, the description is adequate but incomplete. It omits usage guidance and behavioral details, and acronyms (EQDs, EQMs, EQSs) are not expanded, potentially confusing agents unfamiliar with airline jargon.
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?
With 0% schema description coverage, the description must compensate. It explains the account parameter is optional and uses a default, adding meaning beyond the schema's type and default empty string. However, it does not specify what the default account is, leaving some ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns elite status progress including Loyalty Points YTD, last-year EQDs/EQMs/EQSs, and tier thresholds. This distinguishes it from sibling tools like get_mile_activity (miles) and get_account_summary (broader account info). However, it lacks an explicit verb like 'Retrieves' or 'Gets,' relying on the tool name for action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., get_mile_activity or get_account_summary). The description only notes the account parameter is optional, with no when/when-not or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mile_activityA
AAdvantage mile / loyalty-point transaction history.
Returns activity cards with date, type (Flight/Bank/Promo/Misc), miles earned/used, loyalty points, partner code, and transaction description.
Args: from_date: YYYY-MM-DD inclusive (default: 180 days ago). to_date: YYYY-MM-DD inclusive (default: today). starting_index: 0-based offset for pagination. page_size: Max records (server caps ~50). search_string: Free-text filter on transaction description. sort_direction: "asc" or "desc" by activity_date. account: Account name (optional, uses default).
| Name | Required | Description | Default |
|---|---|---|---|
| from_date | No | ||
| to_date | No | ||
| starting_index | No | ||
| page_size | No | ||
| search_string | No | ||
| sort_direction | No | desc | |
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that records are returned as activity cards with selected fields, includes pagination details (starting_index, page_size with server cap ~50), and describes filtering (search_string). While it does not explicitly mention authentication or rate limits, it is fairly transparent for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description starts with a clear one-sentence summary, followed by parameter docs in a bullet-like format. It is well-structured and front-loaded, though a bit verbose. Each sentence adds value, but minor trimming could improve conciseness.
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 (not shown in detail), so the description does not need to explain return values. It covers all parameters, pagination, and filtering. It lacks explicit error handling or exact output format details, but is otherwise complete for the use case.
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?
Despite 0% schema description coverage, the tool description provides detailed semantics for all 7 parameters: data types, defaults, inclusive date format YYYY-MM-DD, allowed values for sort_direction ('asc'/'desc'), and usage notes (server caps page_size ~50, optional account). This fully compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns AAdvantage mile/loyalty-point transaction history with specific fields (date, type, miles earned/used, etc.). This distinguishes it from siblings like get_account_summary or get_loyalty_points_progress, which cover summaries or progress rather than detailed transaction history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving transaction history in a date range, but does not explicitly state when to use it over alternatives, nor does it mention when not to use it. The sibling list provides indirect context, but the description itself lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notificationsC
Account notifications panel.
Args: account: Account name (optional, uses default).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only mentions an optional parameter and does not disclose read-only nature, auth requirements, or behavioral traits like pagination or notification types.
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?
Very concise at two sentences with clear parameter listing. Minimal waste, but the first sentence is a fragment ('Account notifications panel') which slightly reduces clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 optional param, output schema exists), the description covers the basics but lacks explanation of the panel contents or behavior. For a get-tool, more context about what is returned would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds 'Account name' for the parameter, which the schema already shows as a string with a default. Schema description coverage is 0%, so description must compensate. It adds minimal value beyond the schema properties.
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 phrase 'Account notifications panel' hints at retrieving notifications, but lacks a clear verb like 'retrieve' or 'get'. It is not tautological but is vague. Sibling tools are similar (get_account_summary, etc.), but 'notifications' is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. The description does not mention any prerequisites, context, or exclusions. With multiple sibling get-tools, this omission reduces usability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_partner_offersC
Partner offers / promotions on the dashboard.
Args: account: Account name (optional, uses default).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It fails to disclose any behavioral traits such as read-only nature, authentication requirements, rate limits, or destructive actions. The description is insufficient for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short, which avoids fluff, but it lacks necessary detail. While concise, it is under-specified for an agent to understand the tool's behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is an output schema (not shown), the description does not need to detail return values, but it omits high-level context about what partner offers are, how they are displayed, or any filtering logic. The description is incomplete for smooth agent selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description only mentions 'account' is optional and uses default, but does not define what account means, what the default resolves to, or how it affects results. With 0% schema description coverage, more semantic detail is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it retrieves partner offers/promotions on the dashboard, which is clear and specific. However, it does not elaborate on whether it lists or shows details, and it does not distinguish itself from sibling tools like get_flight_credits beyond the unique noun.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or context. The description simply states what it does without indicating appropriate usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profile_detailsA
Detailed profile: DOB, partners, sales city, mile expiration, million-miler stats.
Args: account: Account name (optional, uses default).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes the output fields but does not mention that the tool is likely read-only, require authentication, or have any side effects. This is adequate but lacks explicit safety or behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and every word adds value. No unnecessary repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, output schema exists), the description adequately covers purpose and parameter. It could mention that it's a read operation, but overall it is complete enough for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the single parameter 'account' as optional with a default, adding clear meaning beyond the schema which has 0% description coverage. This compensates well for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a detailed profile with specific fields (DOB, partners, sales city, mile expiration, million-miler stats). The verb 'get' and resource 'profile details' are explicit, and the listed fields distinguish it from siblings like get_account_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use it (for detailed profile) and notes the account parameter is optional with a default. However, it does not explicitly state when not to use the tool or compare it to siblings like get_account_summary, leaving some ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reservation_by_locatorA
Full reservation details by record locator + lead passenger name.
Returns the complete viewres payload: passengers (with passengerID like "01.01"), itinerary slices and segments (flight numbers, times, fare codes, booking codes), tickets (one per passenger), cost summary, eligibilityFlags (cancel / change / partial-reshop), and eligibleProducts (deep links to change-flow URLs).
The underlying endpoint validates first+last name against the lead passenger on the PNR, so both are required even when authenticated.
Args: record_locator: 6-character PNR (e.g., "UHJHHT"). last_name: Lead passenger last name (e.g., "Mohr"). first_name: Lead passenger first name (e.g., "Alexander"). account: Account name (optional, uses default).
| Name | Required | Description | Default |
|---|---|---|---|
| record_locator | Yes | ||
| last_name | Yes | ||
| first_name | Yes | ||
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes validation of first+last name against lead passenger and lists return fields. Since no annotations exist, description carries burden; could explicitly state read-only but adequately covers behavioral aspects.
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?
Well-structured: summary, return contents, behavioral note, parameter list. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive for a lookup tool; covers purpose, behavior, parameters, and return fields. Output schema exists so return details are bonus.
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?
With 0% schema coverage, description adds examples and explanations for all parameters (e.g., '6-character PNR', lead passenger name), significantly enhancing 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?
Clearly states 'Full reservation details by record locator + lead passenger name', specifying the verb, resource, and lookup method. Unique among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage as a lookup tool but does not provide explicit when-to-use or alternatives. No exclusions or comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trip_creditsB
Trip credits (multi-passenger / itinerary-level credits).
Args: locale: Locale code (default en_US). account: Account name (optional, uses default).
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | en_US | |
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose behavioral traits such as being read-only, authentication requirements, rate limits, or error handling. The description only states the functional purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, with a brief purpose statement followed by parameter arguments in a clear format. No unnecessary words, and the purpose is front-loaded. Could be improved by structuring the args more readably.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low parameter count and existence of an output schema, the description is mostly adequate. However, it misses usage guidelines and behavioral transparency, making it incomplete for an agent to use without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides basic meaning for 'locale' (default en_US) and 'account' (optional, uses default), but lacks details on format, allowed values, or behavior. Adequate but not rich.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves 'Trip credits' and specifies they are 'multi-passenger / itinerary-level credits,' which distinguishes it from the sibling tool 'get_flight_credits' that likely operates per passenger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'get_flight_credits' or 'get_account_summary.' The context signals indicate sibling tools exist but the description does not help the agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upcoming_tripsC
Upcoming flight reservations with record locators.
Args: account: Account name (optional, uses default).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose whether the tool is read-only, if it has side effects, or any other behavioral traits. The phrase 'Upcoming flight reservations' weakly implies a read operation, but this is not explicit, missing important transparency.
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: first establishes purpose, second describes the parameter. No wasted words, front-loaded with the core functionality. Ideal structure for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (one optional param, output schema exists), the description is mostly adequate for retrieval. However, it omits what 'upcoming' means (e.g., time window) and any default behavior like sorting. The presence of the output schema helps, but a bit more context would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It adds that 'account' is an account name and defaults if omitted, providing basic semantics. However, this is minimal and does not explain format or allowed values beyond the schema type 'string'.
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 'Upcoming flight reservations with record locators' clearly indicates the tool retrieves a list of upcoming flight reservations that include record locators. This distinguishes it from siblings like get_reservation_by_locator (single reservation) and search_change_flights (search/modify). However, it lacks a specific verb like 'list' or 'get', so it's not maximally explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only explains the optional account parameter ('Account name (optional, uses default).') but provides no guidance on when to use this tool versus alternatives like get_reservation_by_locator or search_change_flights. There is no mention of prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_session_from_browserA
Pull cookies from a logged-in Chromium (started by aa-auth-browser) and save them.
Workflow:
Run
aa-auth-browser <account>to launch Chromium with --remote-debugging-port.Log into aa.com in that browser.
Call this tool — it connects to the debug port via CDP and saves all aa.com cookies.
Args: account: Account name to associate with the saved cookies. Default: "default". port: Chromium remote-debugging port as a string. Empty/omitted uses the default (9224, matches aa-auth-browser). Pass as string to avoid MCP type-coercion issues with some clients.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | default | |
| port | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains the tool connects via CDP, saves all aa.com cookies, and depends on an external browser session. Does not specify overwrite behavior, but overall transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured: one-liner purpose, numbered workflow, then parameter docs. Every sentence adds value, no fluff, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (requires prior steps, state-changing), the description covers prerequisites, workflow, and parameters. There is an output schema, so return value need not be explained. Could mention multiple runs, but overall complete.
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 has 0% description coverage. The description adds value by explaining each parameter's purpose (account name, port) and details why port should be passed as string, with defaults clearly stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool pulls cookies from a Chromium browser started by aa-auth-browser and saves them. It includes a workflow that differentiates it from sibling tools (e.g., check_auth_status are read-only queries).
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?
Explicit workflow steps are provided: run aa-auth-browser, log in, then call this tool. While no direct alternatives are mentioned, the context makes usage clear. Lacks explicit when-not-to-use, but strong for its purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_change_flightsA
Search alternative flights for an existing reservation (the "change flight" flow).
Returns the full reshop payload: a ±6-day price carousel around departure_date, plus up to 40 flight options with per-cabin pricing (flightCells contain fare, netPrice = delta vs paid, cabinType, fareType, changeType, seatsLeft).
The endpoint allows changing origin city, destination city, and date in a single query — AA validates against the original fare rules and either returns SUCCESS or an error. Negative netPrice means you'd be issued a travel credit; positive means additional payment due. Change fees are usually $0 (waived on non-Basic- Economy fares).
PRICING SCOPE: All numbers are TOTAL for every passenger on the PNR. This
endpoint does not support per-passenger pricing. To change only some passengers
on a multi-pax booking, the PNR typically has to be split first via an agent
(the divideEligible flag on the reservation indicates whether the self-serve
split is allowed; partial reshop without a split usually requires a phone agent).
Args: record_locator: 6-character PNR (e.g., "UHJHHT"). last_name: Lead passenger last name. first_name: Lead passenger first name. departure_date: New departure date (YYYY-MM-DD). origin_airport: New origin airport (3-letter IATA — can differ from original). destination_airport: New destination airport (3-letter IATA — can differ from original). slice_index: Which slice of the reservation to change (0 = first; matters for round-trips). carousel_days: Include the ±6-day min-price grid in the response (default True). account: Account name (optional, uses default).
| Name | Required | Description | Default |
|---|---|---|---|
| record_locator | Yes | ||
| last_name | Yes | ||
| first_name | Yes | ||
| departure_date | Yes | ||
| origin_airport | Yes | ||
| destination_airport | Yes | ||
| slice_index | No | ||
| carousel_days | No | ||
| account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Describes return payload structure and pricing behavior. Does not explicitly state that this is a pure search (read-only) operation, which could cause ambiguity about side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with high-level purpose first, then detailed return description, warnings, and parameter list. Slightly long but each section adds necessary information. Concise for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, no annotations, and output schema existence, the description covers return format, pricing details, split PNR caveats, and parameter explanations thoroughly. Leaves minimal gaps for agent understanding.
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?
Despite 0% schema coverage, the 'Args' section explains each parameter with format and constraints (e.g., 6-character PNR, YYYY-MM-DD for dates, meaning of slice_index and carousel_days). Adds significant value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'search alternative flights for an existing reservation (the 'change flight' flow)', with specific verb and resource. Distinguished from sibling tools like get_reservation_by_locator which is about viewing reservations, not changing.
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?
Explains when to use for change flight flow, gives context on pricing scope and PNR splitting. Does not explicitly state when not to use, but provides enough context with alternatives like needing an agent for partial changes.
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.
13 tool updates
v0.1.0- First observed
check_auth_status - First observed
get_account_summary - First observed
get_flight_credits - First observed
get_loyalty_points_progress - First observed
get_mile_activity - First observed
get_notifications - First observed
get_partner_offers - First observed
get_profile_details - First observed
get_reservation_by_locator - First observed
get_trip_credits - First observed
get_upcoming_trips - First observed
save_session_from_browser - First observed
search_change_flights
TDQS
Scored across 13 tools
Tools target distinct domains like auth, account summary, credits, loyalty, and reservations. Minor overlap between get_flight_credits and get_trip_credits, and get_account_summary vs get_profile_details, but descriptions clarify differences.
Almost all tools follow a consistent verb_noun pattern (get_, check_, save_, search_). The naming is predictable and clear, with only minor deviation like 'search_change_flights'.
13 tools is well-scoped for an airline account management server, covering account info, credits, loyalty, notifications, offers, profile, reservations, and session management without being excessive.
Covers account info, credits, loyalty, and reservation retrieval well, but lacks core operations like booking, canceling, or actually changing reservations (only search for changes). Notable gaps in flight lifecycle management.
Maintenance
Related MCP Connectors
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Search award flights and cash fares, optimize points, and predict fares inside ChatGPT and Claude.
Flight search MCP server providing search, pagination, and itinerary details for AI assistants.
Related MCP Servers
- AlicenseBqualityBmaintenanceA Claude Desktop MCP server that helps you track flights in real-time using Flightradar24 data. Perfect for aviation enthusiasts, travel planners, or anyone curious about flights overhead!25 npm47MIT
- FlicenseNot gradedqualityDmaintenanceA proof-of-concept MCP server that allows LLM agents to query live flight booking information via Amadeus, including cheapest tickets, destinations, and airline routes.1-
- FlicenseBqualityDmaintenanceMCP server that bridges Claude to Monarch Money for personal-finance analysis and lightweight edits.18-
- AlicenseAqualityCmaintenanceAn MCP server that enables any AI agent to call Claude using your existing Max/Pro subscription via OAuth, avoiding additional API billing.11MIT