Skip to main content
Glama
bbarabe

AwardWallet MCP

by bbarabe

AwardWallet MCP

CI Latest release License: MIT PRs welcome

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.

  1. Sign in to AwardWallet, then open Create a business account.

  2. Give the business access to your loyalty accounts. On the business site (business.awardwallet.com), click Members at the top, then Request full access.

  3. 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.

  4. 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.

  5. 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.

  1. Download awardwallet-mcp.mcpb.

  2. Double-click the file. You can also drag it onto the Claude Desktop window, or use Settings → Extensions → Advanced settings → Install Extension…

  3. Paste your API key when asked, then finish the installation.

  4. 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.

  1. Install Node.js (the "LTS" version) from nodejs.org. It's a normal installer, and you only need it once.

  2. Download awardwallet-mcp.mjs. Save it somewhere it can stay, such as a new Documents\AwardWallet folder.

  3. In ChatGPT, open Settings → MCP servers → Add server and fill in:

    • Name: AwardWallet

    • Type: 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_KEY set to your API key

  4. 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 = true instead of AW_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.mjs

Save 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 status

Credentials are resolved in this order:

  1. environment variable (AW_API_KEY);

  2. AW_API_KEY_FILE;

  3. 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.mjs

ChatGPT desktop / Codex CLI (they share ~/.codex/config.toml):

codex mcp add awardwallet -- node /absolute/path/to/awardwallet-mcp/dist/awardwallet-mcp.mjs

OpenClaw:

openclaw mcp add awardwallet --command node --arg /absolute/path/to/awardwallet-mcp/dist/awardwallet-mcp.mjs

For 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

get_status

read

Which APIs are configured (and where the credentials come from), demo/read-only mode, people and account counts

list_people

read

Connected AwardWallet users and business members, with ids and sharing levels

list_loyalty_accounts

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 expiringBy date.

get_loyalty_account

read

One account's properties, sub-accounts, update links and paginated transaction history

get_travel_timeline

read

Reservations in a date window: flights, hotels, cars, trains, cruises, events and more

search_loyalty_programs, get_loyalty_program

read

Programs AwardWallet supports and what it tracks for each

search_api_operations

read

Finds raw API operations and returns their input schemas

call_api_read_operation

read

Runs a read-only raw operation

call_api_write_operation

write

Runs a raw operation that changes data, signs in to a loyalty or mailbox account, or costs money

get_secure_input_result

read

Result of a request completed on the secure input page

create_connection_link

write

(opt-in, AW_CONNECT_LINKS=true) Creates an AwardWallet invitation link; needs AwardWallet's approval

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 (login --api <id> or environment variable)

Account Access

10

accountAccess / AW_API_KEY

Web Parsing (Loyalty)

9

webParsing / AW_WEB_PARSING_CREDENTIALS

Email Parsing

16

emailParsing / AW_EMAIL_PARSING_CREDENTIALS

Credit Card Bonus

1

creditCardBonus / AW_CC_BONUS_CREDENTIALS

Flight Award Search

3

flightAwardSearch / AW_FLIGHT_SEARCH_CREDENTIALS

Hotel Award Search

3

hotelAwardSearch / AW_HOTEL_SEARCH_CREDENTIALS

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, Origin and Sec-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:

  1. Set AW_SECURE_INPUT_PORT, then forward it (SSH tunnel, Tailscale Serve).

  2. Set AW_SECURE_INPUT_URL to the forwarded address, so the links use it.

Found a vulnerability? See SECURITY.md.

Configuration

Variable

Default

AW_API_KEY

from credential store

Account Access API key. AW_API_KEY_FILE reads it from a file instead.

AW_*_CREDENTIALS

from credential store

Paid APIs (table above); each also accepts _FILE

AW_MOCK_MODE

false

Built-in demo data; nothing is sent to AwardWallet

AW_READ_ONLY

false

Register read-only tools only

AW_CONNECT_LINKS

false

Offer create_connection_link

AW_CONNECT_REDIRECT_URL

–

Needed only if your business has several Redirect URLs configured

AW_EMAIL_API_REGION

us

eu keeps Email Parsing data in AwardWallet's EU infrastructure

AW_SECURE_INPUT_PORT

random

Fixed port for the secure input page

AW_SECURE_INPUT_URL

http://127.0.0.1:<port>

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; peopleOffset pages 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.mcpb

Path

Contents

src/tools/

The MCP tools

src/awardwallet/

API client, response types, demo data, summaries and date handling

src/catalog/

Raw API operations, one file per AwardWallet API, each with a Zod input schema

src/secure-input.ts

The local secret-entry page

src/cli.ts

login, logout, status

test/

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 login

  • Better 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 tools
call_api_read_operationCall AwardWallet API (read)A
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputNoThe operation's input: path parameters as top-level keys, plus `query` and `body` objects, as its schema from search_api_operations describes
operationIdYesOperation id from search_api_operations

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)A
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputNoThe operation's input: path parameters as top-level keys, plus `query` and `body` objects, as its schema from search_api_operations describes
operationIdYesOperation id from search_api_operations
collectSecretsNoAlso 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

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 accountA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountIdYesaccountId from list_loyalty_accounts
historyLimitNoMaximum history rows to return (0 for none)
historyOffsetNoHistory rows to skip, for paging through long histories

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 programA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesProgram code from search_loyalty_programs or an account's programCode, e.g. 'marriott'

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 resultA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
submissionIdYessubmissionId returned by call_api_write_operation

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 statusA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 timelineA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum reservations to return
typesNoOnly these reservation types
detailNosummary: one compact entry per reservation; full: AwardWallet's complete itinerary objects (much larger)summary
userIdNoConnected user whose trips to list (from list_people). Omit to combine everyone who shares trips.
endDateNoLast date to include, YYYY-MM-DD (default: 12 months after startDate)
pageTokenNonextPageToken from a previous result for the same userId
startDateNoFirst date to include, YYYY-MM-DD (default: today)

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and non-destructive behavior, so the 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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 accountsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoProgram type
sortNoprogram: A-Z; balance: largest first; expiration: soonest first; lastChange: most recent firstprogram
limitNoMaximum accounts to return
ownerNoCase-insensitive match on the account owner's name (users can share family members' accounts)
userIdNoOnly accounts shared by this connected user (userId from list_people)
programNoCase-insensitive match on the program name or code, e.g. 'marriott', 'skymiles', 'amex'
memberIdNoOnly accounts of this business member (memberId from list_people)
expiringByNoOnly accounts where something (points, a certificate or other sub-account, elite status) expires from today through this date, inclusive, YYYY-MM-DD
minBalanceNoOnly accounts with at least this balance
peopleOffsetNoWith more than 30 people, how many to skip (see the pagination note in the result)
problemsOnlyNoOnly accounts whose last update failed (bad credentials, lockout, provider error, ...)
expiringWithinDaysNoSame as expiringBy, counted in days from today

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and 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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose5/5

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.

Usage Guidelines5/5

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 peopleA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 operationsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiNoLimit to one API
limitNoMaximum matches with full schemas
queryNoWhat you want to do, e.g. 'award flights to Tokyo', 'parse a confirmation email', 'refresh an account balance'
accessNoLimit to read-only or to write operations

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so 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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 programsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoProgram type
limitNoMaximum matches
queryYesProgram or company name or code

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 11 tool updatesv0.1.0
    • First observedcall_api_read_operation
    • First observedcall_api_write_operation
    • First observedget_loyalty_account
    • First observedget_loyalty_program
    • First observedget_secure_input_result
    • First observedget_status
    • First observedget_travel_timeline
    • First observedlist_loyalty_accounts
    • First observedlist_people
    • First observedsearch_api_operations
    • First observedsearch_loyalty_programs

TDQS

A4.1/5.0

Scored across 11 tools

Disambiguation4/5

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.

Naming Consistency5/5

All tools use snake_case with consistent verb-first naming (get_, list_, search_, call_) and no mixed conventions; the pattern is predictable and readable.

Tool Count5/5

11 tools is well-scoped for an API wrapper, covering status, core entities, search, generic API calls, and secure input without excessive fragmentation.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A 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.
    4
    MIT
  • F
    license
    A
    quality
    B
    maintenance
    A 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.
    9
    1
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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