AwardWallet MCP
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., "@AwardWallet MCPWhich of my points or certificates expire this year?"
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.
AwardWallet MCP
Ask Claude or ChatGPT about your airline miles, hotel points and credit-card rewards tracked in AwardWallet:
"Which of my points, certificates or elite statuses expire before December 31?"
"What's my Marriott balance and status, and how many nights until the next level?"
"Show the last 50 transactions on my Delta account."
"What trips do we have coming up, with confirmation numbers?"
"Which accounts have update problems?"
It runs on your own computer, and your AwardWallet key stays there.
Unofficial. This project is not affiliated with or endorsed by AwardWallet. It uses AwardWallet's published APIs with a key you create.
Get started (no coding needed)
Step 1: Get your AwardWallet API key
You need an AwardWallet account with AwardWallet Plus. The API key comes from a free AwardWallet Business account linked to your personal account; you sign in to both with the same login.
Sign in to AwardWallet, then open Create a business account.
Give the business access to your loyalty accounts. On the business site (business.awardwallet.com), click Members at the top, then Request full access.
Approve the request. AwardWallet emails you a link to authorize it. Once you approve, all your loyalty accounts are shared with the business, including ones you add later. Until then the business lists you with no accounts, and your assistant will find nothing.
Optional: add family. On the business site, use Members → Add new member to invite them. Each person approves in their own AwardWallet account and chooses how much to share; "Read all" is enough for this app.
Copy your API key from business.awardwallet.com/profile/api.
Step 2: Add it to your AI app
Claude Desktop
Works on Windows and Mac. Claude Desktop includes everything needed to run it.
Download awardwallet-mcp.mcpb.
Double-click the file. You can also drag it onto the Claude Desktop window, or use Settings → Extensions → Advanced settings → Install Extension…
Paste your API key when asked, then finish the installation.
Ask Claude: "Which of my AwardWallet points or certificates expire this year?"
To change the key later, go to Settings → Extensions → AwardWallet → Configure.
ChatGPT desktop app (Codex or Work)
ChatGPT's Codex and Work modes can use apps like this one that run on your computer.
Install Node.js (the "LTS" version) from nodejs.org. It's a normal installer, and you only need it once.
Download awardwallet-mcp.mjs. Save it somewhere it can stay, such as a new
Documents\AwardWalletfolder.In ChatGPT, open Settings → MCP servers → Add server and fill in:
Name:
AwardWalletType: STDIO
Command:
node, with the full path to the file you saved as its argument. For example,C:\Users\you\Documents\AwardWallet\awardwallet-mcp.mjs, or on a Mac/Users/you/Documents/AwardWallet/awardwallet-mcp.mjs.Environment variable:
AW_API_KEYset to your API key
Select Restart. Then ask ChatGPT about your points.
If the form doesn't have a place for the argument or the environment variable, add the server to ChatGPT's settings file instead. The file is config.toml, in the .codex folder of your home folder: C:\Users\you\.codex\config.toml on Windows, ~/.codex/config.toml on a Mac. Paste this, with your own path and key:
[mcp_servers.awardwallet]
command = "node"
args = ['C:\Users\you\Documents\AwardWallet\awardwallet-mcp.mjs']
[mcp_servers.awardwallet.env]
AW_API_KEY = "paste-your-key-here"ChatGPT stores that key in plain text in its settings file. If you'd rather keep it in your computer's credential store, use the developer setup instead.
Try it first with sample data
You don't need an AwardWallet key to see how it works. Demo mode uses a made-up family with eight accounts, a few certificates and some trips, and sends nothing to AwardWallet.
Claude Desktop: leave the API key empty and switch on Demo mode in the extension's settings.
ChatGPT: use the environment variable
AW_MOCK_MODE=trueinstead ofAW_API_KEY.
Good to know
Balances aren't live. They're AwardWallet's latest update of each account; results show when that was.
What each person shares matters. Their sharing level ("Read numbers", "Read balances" or "Read all") controls what you see.
Free (non-Plus) AwardWallet members show less. Their history and expiration dates stay hidden unless the Business account has a paid subscription.
Trips need more. The travel timeline needs a paid Business subscription and AwardWallet's approval.
Privacy:
The app runs on your computer and talks only to AwardWallet.
Your key stays in Claude Desktop's secure settings (or ChatGPT's settings file).
Passwords for AwardWallet's paid services are never typed into the chat; a one-time page opens on your computer for them.
Read-only mode. Add
AW_READ_ONLY=true(Claude Desktop: the Read-only switch) to let the assistant look but never change anything. It's a good idea with autonomous agents.
Something not working? Open an issue. Please don't include your API key or personal details.
Related MCP server: Splitwise MCP Server
For developers
Build from source
Requires Node.js 20.10 or later.
git clone https://github.com/bbarabe/awardwallet-mcp.git
cd awardwallet-mcp
npm install
npm run build # dist/awardwallet-mcp.mjsSave the API key in your OS credential store (Windows Credential Manager, macOS Keychain or Linux Secret Service). login checks the key with AwardWallet first; status shows what it can see:
node dist/awardwallet-mcp.mjs login
node dist/awardwallet-mcp.mjs statusCredentials are resolved in this order:
environment variable (
AW_API_KEY);AW_API_KEY_FILE;the credential store.
logout --all removes stored credentials. The Claude Desktop extension can't read the credential store (it ships without the native keyring module), so it uses its own settings.
Connect from the command line
In the commands below, replace /absolute/path/to/awardwallet-mcp with the folder you cloned.
Claude Code:
claude mcp add --scope user awardwallet -- node /absolute/path/to/awardwallet-mcp/dist/awardwallet-mcp.mjsChatGPT desktop / Codex CLI (they share ~/.codex/config.toml):
codex mcp add awardwallet -- node /absolute/path/to/awardwallet-mcp/dist/awardwallet-mcp.mjsOpenClaw:
openclaw mcp add awardwallet --command node --arg /absolute/path/to/awardwallet-mcp/dist/awardwallet-mcp.mjsFor an autonomous agent, set AW_READ_ONLY=true. On a headless Linux machine without a keyring, pass AW_API_KEY through the agent's secret mechanism or AW_API_KEY_FILE.
Claude Desktop without the extension: add a server to claude_desktop_config.json with command node and the path to dist/awardwallet-mcp.mjs as its argument. That server reads the key saved by login.
Any other MCP client: it's a standard stdio server. Run node dist/awardwallet-mcp.mjs.
Demo data: use AW_MOCK_MODE=true anywhere, for example claude mcp add awardwallet-demo -e AW_MOCK_MODE=true -- node ….
Tools
Tool | Access | What it does |
| read | Which APIs are configured (and where the credentials come from), demo/read-only mode, people and account counts |
| read | Connected AwardWallet users and business members, with ids and sharing levels |
| read | Balances, elite status, update problems and everything that expires (points, certificates and other sub-accounts, elite status). Filter by person, program, type, balance, or an |
| read | One account's properties, sub-accounts, update links and paginated transaction history |
| read | Reservations in a date window: flights, hotels, cars, trains, cruises, events and more |
| read | Programs AwardWallet supports and what it tracks for each |
| read | Finds raw API operations and returns their input schemas |
| read | Runs a read-only raw operation |
| write | Runs a raw operation that changes data, signs in to a loyalty or mailbox account, or costs money |
| read | Result of a request completed on the secure input page |
| write | (opt-in, |
Every tool has readOnlyHint/destructiveHint annotations, and read-only mode doesn't register the write tools.
Every AwardWallet API
Besides the free Account Access API, AwardWallet sells APIs by contract. Add their credentials to enable them in the catalog tools:
API | Operations | Credential ( |
10 |
| |
9 |
| |
16 |
| |
1 |
| |
3 |
| |
3 |
|
Paid-API credentials are username:password. Inputs are validated against schemas transcribed from AwardWallet's documentation, and only the validated value is sent.
Current gaps:
Security-question and one-time-code answers can't be supplied yet.
The Email Parsing browser-redirect endpoint isn't included.
The travel timeline covers connected users only.
Secure input page
call_api_write_operation never accepts a password or token as an argument. It returns a one-time link like http://127.0.0.1:<port>/secure/<token>: the user types the secret there, the server sends it straight to AwardWallet, and get_secure_input_result returns the response.
How the page protects secrets:
It listens on 127.0.0.1 only and validates
Host,OriginandSec-Fetch-Site.It runs no scripts.
It shows where the secret will be used, and asks for confirmation before sending a password without TLS.
Links are single-use and expire after 15 minutes.
Secrets are never logged or stored, and they're redacted from anything returned.
To reach the page on a remote host:
Set
AW_SECURE_INPUT_PORT, then forward it (SSH tunnel, Tailscale Serve).Set
AW_SECURE_INPUT_URLto the forwarded address, so the links use it.
Found a vulnerability? See SECURITY.md.
Configuration
Variable | Default | |
| from credential store | Account Access API key. |
| from credential store | Paid APIs (table above); each also accepts |
|
| Built-in demo data; nothing is sent to AwardWallet |
|
| Register read-only tools only |
|
| Offer |
| – | Needed only if your business has several Redirect URLs configured |
|
|
|
| random | Fixed port for the secure input page |
|
| Public base URL of that page when tunneled |
Limits
Rate limit. AwardWallet allows 20 requests per rolling 10 minutes for each user, member or account. The server caches identical reads for a minute. It fetches accounts for up to 30 people per call;
peopleOffsetpages through larger businesses.Result size. Results are capped at 60,000 characters, with valid-JSON truncation and pagination (
limit,historyOffset,pageToken).
Develop and release
npm test # unit + end-to-end tests (demo data, no network, no credentials)
npm run typecheck
npm run inspect # MCP Inspector against the build (set AW_MOCK_MODE=true for demo data)
npm run pack:mcpb # dist/awardwallet-mcp.mcpbPath | Contents |
| The MCP tools |
| API client, response types, demo data, summaries and date handling |
| Raw API operations, one file per AwardWallet API, each with a Zod input schema |
| The local secret-entry page |
|
|
| Unit tests, and end-to-end tests that run the built server over stdio |
To release, bump the version in package.json, mcpb/manifest.json and src/server.ts, then push a matching tag (for example v0.2.0). The release workflow tests, builds, and attaches awardwallet-mcp.mcpb and awardwallet-mcp.mjs to a new GitHub release.
Contributing
Issues and pull requests are very welcome: bugs, questions, ideas, docs or code. Start by opening an issue; CONTRIBUTING.md covers setup, conventions and the PR checklist.
Some ideas where help would be great:
Answering AwardWallet security questions and one-time codes through the secure input page
Letting the Claude Desktop extension read keys saved with
loginBetter summaries for more itinerary types, and more providers' date formats
Real-world reports of what your accounts look like through the tools, and what's missing
Please don't include API keys, passwords or personal loyalty data in issues or tests.
License
MIT. Not affiliated with AwardWallet. "AwardWallet" is a trademark of its owner.
Available Tools
11 toolscall_api_read_operationCall AwardWallet API (read)ARead-onlyIdempotent
Runs a read-only AwardWallet API operation (access=read in search_api_operations) and returns AwardWallet's JSON response. Refuses write operations. API reference: https://awardwallet.com/api/main.
| Name | Required | Description | Default |
|---|---|---|---|
| input | No | The operation's input: path parameters as top-level keys, plus `query` and `body` objects, as its schema from search_api_operations describes | |
| operationId | Yes | Operation id from search_api_operations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so safety is covered. The description adds genuinely new behavioral context: writes are refused rather than attempted, and the return value is AwardWallet's raw JSON, plus a reference URL for the upstream contract.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the tool does and its hard constraint, then the discovery source and reference link. No 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?
No output schema exists, and the description correctly states the response is AwardWallet's JSON, which is enough. Error handling and pagination behavior are unaddressed, and the nested input object is left entirely to the schema, but for a generic passthrough call the essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already explains that input carries path params plus query/body and that operationId comes from search_api_operations. The description only restates the discovery source, adding no syntax or format detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (runs), a specific resource (a read-only AwardWallet API operation), and the mechanism (access=read in search_api_operations). It also explicitly distinguishes itself from the write sibling by stating it 'Refuses write operations'.
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?
Tells the agent the operation must come from search_api_operations and that writes are rejected, which implicitly routes write intent to call_api_write_operation. It stops short of naming that alternative explicitly or stating when the read path is preferred over the many dedicated get_/list_ tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call_api_write_operationCall AwardWallet API (write)ADestructive
Runs an AwardWallet API operation that creates, changes or deletes data, signs in to a loyalty or mailbox account, or starts billable work (access=write in search_api_operations). When it needs a password or token, it returns a one-time link to a local page where the user types it, so the secret never passes through the conversation. API reference: https://awardwallet.com/api/main.
| Name | Required | Description | Default |
|---|---|---|---|
| input | No | The operation's input: path parameters as top-level keys, plus `query` and `body` objects, as its schema from search_api_operations describes | |
| operationId | Yes | Operation id from search_api_operations | |
| collectSecrets | No | Also ask for the operation's optional secret fields (e.g. a loyalty password for member pricing) on the secure page. Required secrets are always asked for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/non-idempotent/open-world, but the description adds genuinely non-obvious behavior: secrets are collected via a one-time local link so they never traverse the conversation, and some operations start billable work. This is exactly the kind of context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation class, then the secret-handling caveat, then a reference URL. Dense and purposeful, though the long first clause packs several distinct behaviors into one sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the safety profile, the secret round-trip, and billable side effects, and points to the API reference. It does not describe the conditional secure-link return value in detail, but annotations and schema cover most needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so operationId and input are fully documented in the schema; the description adds only an indirect hint about secret collection (related to collectSecrets). Baseline 3 is appropriate when the schema carries parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (runs an AwardWallet API write operation) and enumerates the operation classes it covers (create/change/delete, sign-in, billable work), explicitly scoping itself to access=write in search_api_operations. This cleanly separates it from the sibling call_api_read_operation.
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 access=write qualifier paired with the read sibling implicitly tells the agent when to pick this tool, and it directs the agent to search_api_operations for the operationId. It stops short of explicitly naming call_api_read_operation or stating exclusions in prose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_loyalty_accountGet loyalty accountARead-onlyIdempotent
Returns one loyalty account in full: balance, every tracked property (elite status, account number, points to next level, ...), sub-accounts such as individual cards, links to update it on AwardWallet, and its transaction history, paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | accountId from list_loyalty_accounts | |
| historyLimit | No | Maximum history rows to return (0 for none) | |
| historyOffset | No | History rows to skip, for paging through long histories |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered. The description adds real value beyond them: it discloses that the response includes full tracked properties, sub-accounts, an AwardWallet update link, and paginated transaction history, which tells the agent the payload is broad and history is paged.
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?
A single dense sentence, front-loaded with the core action and result before the field enumeration. The trailing ellipsis makes the field list slightly open-ended, but there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does list the main response components and pagination. It is nearly complete for a read tool whose annotations already cover safety, though exact paging semantics and any error/permission behavior are unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so accountId, historyLimit and historyOffset are already documented in the schema. The description mentions pagination but adds no parameter-level detail (units, paging interaction) beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Returns one loyalty account') and enumerates the payload contents (balance, tracked properties, sub-accounts, transaction history), which clearly separates it from the list_loyalty_accounts sibling by emphasizing a single account. It never names the sibling, so it falls just short of full differentiation.
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?
There is no when-to-use guidance, no prerequisites, and no alternatives named. The only routing hint ('accountId from list_loyalty_accounts') lives in the schema, not the description, so the agent gets no usage context from the text itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_loyalty_programGet loyalty programARead-onlyIdempotent
Returns what AwardWallet knows about one loyalty program: its login fields, the properties it tracks (elite status, expiration, ...), how many elite levels it has, and what AwardWallet can do with it (transaction history, itineraries, reservation lookup, expiration tracking).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Program code from search_loyalty_programs or an account's programCode, e.g. 'marriott' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds real value on the read side by disclosing what the payload contains (login fields, tracked properties, elite level count, supported operations like transaction history and reservation lookup) — meaningful context given there is no output schema. It stops short of describing behavior for an unknown or invalid code.
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?
One front-loaded sentence that leads with the verb and resource before enumerating returned data. The parenthetical list is dense but each item earns its place by describing output, since no output schema exists; there is no filler or restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description compensates well by enumerating returned fields and capabilities, so an agent knows what it gets back. The remaining gap is error behavior for an unrecognized code, which is minor against annotations that already cover safety.
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 single parameter has 100% schema description coverage, including the pattern constraint and a source example, so the schema does the heavy lifting. The description mentions only 'one loyalty program' without adding format or lookup detail beyond what the schema already supplies, which is the baseline case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Returns) and a clearly scoped resource (what AwardWallet knows about one loyalty program), then enumerates the kinds of data returned. It implicitly distinguishes itself from get_loyalty_account and search_loyalty_programs by focusing on program metadata rather than an account or a search, though it never names those siblings explicitly.
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 when-to-use guidance, no exclusions, and no routing to alternatives. The only pointer to how a code is obtained (search_loyalty_programs or an account's programCode) lives in the schema, not the description, so the description itself offers no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_secure_input_resultGet secure input resultARead-onlyIdempotent
Returns the status of a request waiting on the secure input page (waiting, completed, failed, cancelled or expired) and, once completed, AwardWallet's response.
| Name | Required | Description | Default |
|---|---|---|---|
| submissionId | Yes | submissionId returned by call_api_write_operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false). The description adds genuinely new behavioral context beyond them: the exact state machine (waiting/completed/failed/cancelled/expired) and the fact that the response payload is only populated once completed, which tells the agent when to stop polling.
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?
One tightly written sentence with the core action front-loaded and the state enumeration folded into a parenthetical; no filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully summarizes the return value (status plus AwardWallet's response once completed). For a simple one-param read tool this is nearly complete, though it omits any polling cadence or error-handling guidance.
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?
There is a single parameter at 100% schema description coverage, and the schema already documents that submissionId is the value returned by call_api_write_operation (including its 32-char pattern). The description adds nothing about the parameter, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Returns the status of a request waiting on the secure input page') and even enumerates the possible states, so the agent knows exactly what it gets. It does not, however, distinguish itself from the sibling get_status, leaving a small ambiguity about which status tool applies.
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?
Usage is only implied: the schema note that submissionId comes from call_api_write_operation hints this is the follow-up poll after starting a write flow, but the description itself never says when to call it, when not to, or how it relates to get_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusAwardWallet connection statusARead-onlyIdempotent
Shows which AwardWallet APIs this server can use and where each credential comes from, whether demo or read-only mode is on, and how many people and accounts the AwardWallet Business account can see. Useful to explain missing data or configuration errors.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, openWorld and non-destructive traits, so the bar is lower; the description still adds real value by disclosing what the response reveals (which APIs are usable, credential source, mode flags, entity counts) and its diagnostic role. It stops short of 5 only because it says nothing about auth requirements or caching/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?
A single front-loaded sentence that packs the return contents and the diagnostic use case without filler. It is slightly dense with enumerations but every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description carries the burden of describing what the agent gets back, and it does so (APIs, credential sources, mode, counts) plus the reason to call it. Only missing element is any hint about field naming or error semantics.
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 tool takes zero parameters, which sets the baseline at 4; there is no input surface that needs further explanation.
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 names a clear verb (shows) and enumerates concrete resources: available AwardWallet APIs, credential provenance, demo/read-only mode, and people/account counts. It is distinguishable from the sibling list/search tools, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear diagnostic context ('Useful to explain missing data or configuration errors'), telling the agent when this tool is the right call. It does not name alternatives or state when not to use it, so it stops short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_travel_timelineGet travel timelineARead-onlyIdempotent
Lists trips from AwardWallet's travel timeline (flights, hotels, car rentals, trains, buses, cruises, ferries, transfers, parking and events) with dates, confirmation numbers, travelers and locations, sorted by start date, for a date window (default: today through 12 months ahead). Only connected users who share trips are covered, and AwardWallet requires a paid Business subscription with timeline export approval.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum reservations to return | |
| types | No | Only these reservation types | |
| detail | No | summary: one compact entry per reservation; full: AwardWallet's complete itinerary objects (much larger) | summary |
| userId | No | Connected user whose trips to list (from list_people). Omit to combine everyone who shares trips. | |
| endDate | No | Last date to include, YYYY-MM-DD (default: 12 months after startDate) | |
| pageToken | No | nextPageToken from a previous result for the same userId | |
| startDate | No | First date to include, YYYY-MM-DD (default: today) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive behavior, so the description's added value is the access prerequisites (paid Business subscription plus export approval) and the coverage limitation (only connected users who share trips). That is meaningful behavioral context beyond the structured fields, though pagination and rate-limit behavior are left to 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and scoping, then qualifications. The parenthetical enumeration of ten reservation types is bulky but earns its place by pre-empting type questions. Two sentences, no 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?
Covers purpose, default window, ordering, coverage limits and subscription prerequisites for a 7-parameter tool with no output schema. Return shape is partly covered by the detail enum in the schema; overall the agent has enough to call it correctly, with only pagination semantics unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented, giving a baseline of 3. The description restates the default window and type list rather than adding syntax or format detail beyond what the schema provides, so it neither clarifies nor detracts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists trips from AwardWallet's travel timeline'), enumerates the covered reservation types, and specifies ordering ('sorted by start date') and the default date window. An agent can distinguish it from list_people or list_loyalty_accounts without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete activation conditions: only connected users who share trips are covered, and a paid Business subscription with timeline export approval is required. It also implies how to use userId ('from list_people', omit to combine everyone). It stops short of naming alternate tools for overlapping needs, so it falls just shy of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_loyalty_accountsList loyalty accountsARead-onlyIdempotent
Lists loyalty accounts (airline miles, hotel points, credit-card rewards, rentals, shopping, ...) with balance, elite status, last change, update status and everything that expires on them (points, certificates and other sub-accounts such as free nights or companion passes, elite status), one compact row per account, plus a summary of upcoming expirations and accounts with update problems. Filter by person, program, type, balance or an expiration date. For one account's full properties and transaction history use get_loyalty_account.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Program type | |
| sort | No | program: A-Z; balance: largest first; expiration: soonest first; lastChange: most recent first | program |
| limit | No | Maximum accounts to return | |
| owner | No | Case-insensitive match on the account owner's name (users can share family members' accounts) | |
| userId | No | Only accounts shared by this connected user (userId from list_people) | |
| program | No | Case-insensitive match on the program name or code, e.g. 'marriott', 'skymiles', 'amex' | |
| memberId | No | Only accounts of this business member (memberId from list_people) | |
| expiringBy | No | Only accounts where something (points, a certificate or other sub-account, elite status) expires from today through this date, inclusive, YYYY-MM-DD | |
| minBalance | No | Only accounts with at least this balance | |
| peopleOffset | No | With more than 30 people, how many to skip (see the pagination note in the result) | |
| problemsOnly | No | Only accounts whose last update failed (bad credentials, lockout, provider error, ...) | |
| expiringWithinDays | No | Same as expiringBy, counted in days from today |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so safety is covered. The description adds genuinely useful behavioral context: the row-based result shape, the accompanying summary of upcoming expirations and problem accounts, and a pointer to the pagination note tied to peopleOffset. It does not cover rate limits or result ordering nuances beyond the schema, keeping it at 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and result contents, followed by filter axes and the sibling pointer. The first sentence is dense with parentheticals but every clause carries information; slightly heavy but no 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?
With 12 optional parameters, no output schema and only annotations for safety, the description carries the return-shape burden well by describing compact rows plus the expirations/problems summary. It stops short of explaining the pagination result note it references, a minor gap for a tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 12 parameters with enums, defaults and format patterns. The description restates the filter dimensions (person, program, type, balance, expiration date) but adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource, enumerates what each row contains (balance, elite status, last change, update status, expiring sub-accounts), and explicitly names the sibling get_loyalty_account as the differentiator. An agent can distinguish it from get_loyalty_account and search_loyalty_programs without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use this tool for listing/row-level views, use get_loyalty_account for one account's full properties and transaction history. It also enumerates the available filter axes, so the agent knows what narrowing is possible.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_peopleList peopleARead-onlyIdempotent
Lists the people whose loyalty accounts your AwardWallet Business account can see: connected AwardWallet users (with the account and trip access each one granted) and members you added in the business interface, with how many accounts each has. Returns the userId and memberId values other tools accept.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds genuine scope context beyond that: whose data is visible, that per-user account/trip access grants are included, and that each person's account count is reported. It does not mention pagination or result-size limits, keeping it out of 5 territory.
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?
A single sentence, front-loaded with the verb and resource, then the population definitions and return values. Every clause carries information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description carries the full load and does explain what comes back (userId, memberId, access grants, account counts). It omits any note on result size, ordering, or pagination, which is a minor but real gap for a list endpoint.
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 tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. The description correctly spends no space restating parameter semantics and instead documents the output identifiers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (people), and crisply enumerates the two populations covered: connected AwardWallet users and members added in the business interface. It also names the key returned identifiers (userId, memberId), making it distinguishable from account-oriented siblings like list_loyalty_accounts.
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?
Usage is clearly implied by 'Returns the userId and memberId values other tools accept', which tells the agent this is the entry point for obtaining identifiers needed elsewhere. It lacks an explicit when-not or a named alternative, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_api_operationsSearch AwardWallet API operationsARead-onlyIdempotent
Searches the raw AwardWallet API operations this server can call, across the Account Access, Web Parsing (Loyalty), Email Parsing, Credit Card Bonus, Flight Award Search and Hotel Award Search APIs (https://awardwallet.com/api/main). Returns each match's id, whether it reads or writes, its documentation link and the JSON Schema of its input. An empty query lists every available operation briefly.
| Name | Required | Description | Default |
|---|---|---|---|
| api | No | Limit to one API | |
| limit | No | Maximum matches with full schemas | |
| query | No | What you want to do, e.g. 'award flights to Tokyo', 'parse a confirmation email', 'refresh an account balance' | |
| access | No | Limit to read-only or to write operations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real value beyond that: it discloses the return shape (id, read/write flag, doc link, input JSON Schema) and hints at truncation behavior via 'limit = maximum matches with full schemas' and the brief-listing fallback for empty queries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose before the enumeration of covered APIs and return fields. The list of six API names and the doc URL are somewhat bulky but carry genuine routing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by naming the returned fields and the empty-query fallback, so an agent knows what to expect. Combined with full schema coverage for inputs, nothing essential is missing for a search tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description echoes the meaning of results and mentions the empty-query case, but adds little syntax or semantics for the four parameters beyond what the schema (including the query examples and enum descriptions) already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (searches) and resource (the raw AwardWallet API operations this server can call), and scopes it to the six named upstream APIs. It is clearly a discovery/meta tool, cleanly distinguishable from the call_api_* siblings that execute operations.
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 gives clear usage context: query with intent phrasing, and 'an empty query lists every available operation briefly', which tells the agent how to enumerate. It stops short of explicitly stating when to prefer this over call_api_read_operation or call_api_write_operation (i.e., 'use this first to find the operation to call').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_loyalty_programsSearch loyalty programsARead-onlyIdempotent
Searches the loyalty programs AwardWallet supports by name or code (e.g. 'hyatt', 'avios', 'membership rewards'), optionally by type. Returns program codes for get_loyalty_program.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Program type | |
| limit | No | Maximum matches | |
| query | Yes | Program or company name or code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, open-world behavior, so the bar is lower. The description adds real context beyond them: results are scoped to AwardWallet-supported programs and the return value is program codes. It omits pagination/limit behavior and empty-result handling, keeping it from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler, front-loading the core action and ending with the output/routing detail. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly discloses the return value (program codes), the searchable dimensions, and the consumer tool. It is complete enough to invoke correctly, though limit/pagination and no-match behavior are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by giving concrete query examples ('hyatt', 'avios', 'membership rewards') that illustrate acceptable name/code inputs, and notes the optional type filter — beyond what the schema's generic 'Program type'/'Program or company name or code' text conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Searches) and resource (loyalty programs AwardWallet supports) plus the searchable fields (name or code, optionally type). It also distinguishes itself from the sibling get_loyalty_program by explaining that it returns the codes that tool consumes.
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 closing clause 'Returns program codes for get_loyalty_program' implicitly routes the agent: use this to discover codes, then call get_loyalty_program. There is no explicit when-not guidance or naming of alternatives beyond that, so it falls just short of 5.
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.
11 tool updates
v0.1.0- First observed
call_api_read_operation - First observed
call_api_write_operation - First observed
get_loyalty_account - First observed
get_loyalty_program - First observed
get_secure_input_result - First observed
get_status - First observed
get_travel_timeline - First observed
list_loyalty_accounts - First observed
list_people - First observed
search_api_operations - First observed
search_loyalty_programs
TDQS
Scored across 11 tools
Specific read tools for loyalty accounts, programs, and timeline are clearly distinct, but the generic search_api_operations and call_api_read/write_operation create ambiguity about when to use a specific tool versus a raw API call, and get_status partially overlaps with search_api_operations' inventory.
All tools use snake_case with consistent verb-first naming (get_, list_, search_, call_) and no mixed conventions; the pattern is predictable and readable.
11 tools is well-scoped for an API wrapper, covering status, core entities, search, generic API calls, and secure input without excessive fragmentation.
Read coverage is thorough for people, loyalty accounts, programs, and trips, and generic read/write operations fill gaps for mutations, but dedicated tools for common write operations (e.g., creating/updating accounts) are absent, forcing agents to use lower-level API calls.
Maintenance
Related MCP Connectors
Search award flights and cash fares, optimize points, and predict fares inside ChatGPT and Claude.
Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.
Read and update your Everway trips and itineraries from any MCP-compatible AI assistant.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server for interacting with YNAB (You Need A Budget). Provides tools for accessing budget data through MCP-enabled clients like Claude Desktop.4MIT
- FlicenseAqualityBmaintenanceA standalone MCP server that provides complete access to the Splitwise API, enabling natural language management of expenses, groups, friends, and notifications in MCP-compatible clients like Claude Desktop and VS Code Copilot.91-
- FlicenseNot gradedqualityCmaintenanceA secure, read-only MCP server that empowers Claude Desktop and AI agents to safely query and inspect local SQLite databases.-
- AlicenseNot gradedqualityCmaintenanceA local MCP server that connects Claude to the WHOOP Developer API, allowing natural language queries about recovery, sleep, strain, workouts, and body measurements. All data stays on your machine with read-only access.MIT