Skip to main content
Glama
chrischall

Credit Karma MCP

by chrischall

Credit Karma MCP

CI npm license

A Model Context Protocol server that connects Claude to Credit Karma, giving you natural-language access to your transactions, spending patterns, and account summaries.

WARNING

AI-developed project. This codebase was entirely built and is actively maintained by Claude Code. No human has audited the implementation. Review all code and tool permissions before use.

What you can do

Ask Claude things like:

  • "Sync my latest transactions"

  • "What did I spend on food last month?"

  • "Show me my top merchants this year"

  • "How much did I spend in March compared to February?"

  • "Which accounts have the most activity?"

  • "What are my account balances?"

  • "Run a SQL query against my transactions"

Related MCP server: BudgetBakers MCP Server

Requirements

Acknowledgement of Terms

By using this MCP server, you acknowledge and agree to the following:

1. This server accesses your own Credit Karma account. Every request is dispatched through your own signed-in browser tab via the ContextMint Bridge extension. You are the one logged in. It does not — and cannot — access anyone else's account.

2. Credit Karma's Terms govern your use of this server, just as they govern your direct use of creditkarma.com. The clauses most relevant here:

You must not sell, transfer, or assign your account to anyone else… you may not allow anyone else to log into our Services as you.

CK does contemplate third-party data retrieval at the user's direction (Section 3.7). There is no explicit anti-scraping clause in the membership agreement; Section 4.1 restricts copying or distributing CK content without express prior written consent.

You are agreeing to those terms — read by the maintainer 2026-05-23 — every time you invoke a tool in this server. Critically: this server runs as you, not as a third party logging in on your behalf. You direct the tool.

3. Personal, non-commercial use only. This project is not affiliated with, endorsed by, sponsored by, or in partnership with Intuit, Credit Karma, or any financial institution. It is a personal automation tool that reads your transaction history, spending categories, and account snapshots — the same data Credit Karma already shows you in their app. Do not use it on someone else's account, do not redistribute their content, and do not use it to make trading or lending decisions on behalf of others.

4. This server may break. Credit Karma rotates its internal endpoints; what works today may 404 tomorrow. This is the nature of unofficial integrations.

5. You accept full responsibility for any consequences of using this server in connection with your Credit Karma account — rate limiting, account warnings, suspension, or any enforcement action Intuit takes. If Credit Karma objects to your use, stop using this server. Do not commit your .env to git — your CK session/auth artifacts are credentials, and the Membership Agreement holds you responsible for their confidentiality.

This section is the maintainer's good-faith summary of the terms — it is not legal advice and does not modify or supersede Credit Karma's actual Membership Agreement.

Installation

1. Clone and build

git clone https://github.com/chrischall/creditkarma-mcp.git
cd creditkarma-mcp
npm install
npm run build

2. Configure

cp .env.example .env
# See "Authentication" below to get your CK_COOKIES value

3. Add to Claude

Claude Code — add to .mcp.json in your project:

{
  "mcpServers": {
    "creditkarma": {
      "command": "node",
      "args": ["/absolute/path/to/creditkarma-mcp/dist/index.js"]
    }
  }
}

Claude Desktop — edit ~/Library/Application Support/Claude/claude_desktop_config.json (Mac) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "creditkarma": {
      "command": "node",
      "args": ["/absolute/path/to/creditkarma-mcp/dist/index.js"],
      "env": {
        "CK_COOKIES": "CKTRKID=...; CKAT=eyJ...%3BeyJ...; ..."
      }
    }
  }
}

4. Restart Claude

Fully quit and relaunch. Then ask: "Sync my Credit Karma transactions".

Authentication

Credit Karma uses short-lived JWTs. This server handles automatic token refresh — you only need to set up credentials once (or when your session expires).

creditkarma-mcp tries three auth paths in priority order; whichever succeeds first is used. Existing setups keep working unchanged.

  1. CK_COOKIES env var (legacy). Set the full Cookie header in your Claude Desktop config or .env. This is the path shown in the config above.

  2. Saved session from ck_set_session. The tool saves the Cookie header to ~/.creditkarma-mcp/session (mode 0600; override the path with CK_SESSION_PATH), which the server reads back directly on every start — including from the .mcpb bundle. Paths 1 and 2 are both local: whichever holds the fresher refresh token wins.

  3. Browser fallback via ContextMint Bridge (no env vars needed — easiest onboarding). Used when neither is configured, or when the local session has expired or Credit Karma has rejected its refresh token: the server reads CKAT + CKTRKID cookies from your already-signed-in creditkarma.com tab via the ContextMint Bridge browser extension. After that read, all CK API calls go directly from Node — the extension is not in the request hot path. Install ContextMint Bridge (see Option A below), sign into creditkarma.com, and the MCP just works.

Set CK_DISABLE_FETCHPROXY=1 to opt out of the fallback (turns missing credentials into a hard error — useful in headless CI).

Getting your credentials (env-var path)

  1. Install ContextMint Bridge from its releases page. Chrome: download the chrome zip, unzip it, and load it unpacked at chrome://extensions (Developer mode → Load unpacked). Safari: it ships inside the ContextMint app, which has no public download link yet — use Chrome, or Option B, for now.

    ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer — fetchproxy's own README (Extension) points to it. Its source is public at nullnet-app/contextmint-bridge: build it yourself (npm run build), or check a release zip against the .sha256 file published beside it before loading it:

    shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256
  2. Sign into creditkarma.com in that browser.

  3. Leave CK_COOKIES unset in your Claude config.

The MCP reads the HttpOnly CKAT + CKTRKID cookies via chrome.cookies.get on the first tool call, then operates direct-to-API from Node. To re-auth (e.g. after Credit Karma signs you out), just sign back in to creditkarma.com. If the bridge in your browser can't read cookies, the MCP says so — use Chrome, or Option B.

Option B — manual (DevTools)

  1. Log in to creditkarma.com in Chrome

  2. Open DevTools → Network → click any request to creditkarma.com → Request Headers

  3. Right-click the cookie header → Copy value

Then either paste into CK_COOKIES in your Claude config / .env, or call ck_set_session from within Claude with the Cookie header value.

The server extracts the access and refresh JWTs from the CKAT cookie inside the header and refreshes the access token automatically as needed.

Session expiry

  • Access token: ~15 minutes (auto-refreshed transparently)

  • Refresh token: ~8 hours

  • When the refresh token expires:

    • fetchproxy path: sign back into creditkarma.com — the MCP re-reads fresh cookies on the next tool call.

    • env-var path: grab a fresh Cookie header from DevTools and update CK_COOKIES (or call ck_set_session).

Available tools

Tool

What it does

ck_set_session

Store credentials from your browser Cookie header (auto-extracts JWTs from the CKAT cookie)

ck_forget_session

Delete the saved-session file and clear in-memory credentials (local only; synced transactions are kept)

ck_sync_transactions

Sync transactions into the local SQLite database, then refresh account balances

ck_get_account_balances

Balance of every account: institution, type, last 4, current balance, available credit and credit limit (cards), as-of time and a stale flag. refresh: true fetches live first; include_matched: true also lists credit-report rows that duplicate a linked account

ck_list_transactions

List transactions with filters (date, account, category, merchant, amount)

ck_get_recent_transactions

Fetch the N most recent transactions

ck_get_spending_by_category

Spending totals grouped by category

ck_get_spending_by_merchant

Spending totals grouped by merchant

ck_get_account_summary

Transaction counts and totals by account

ck_query_sql

Run a read-only SQL query against the local database (returns at most max_rows rows, default 500 / max 5000, with truncated: true when there were more)

How it works

Transactions are synced from Credit Karma's GraphQL API into a local SQLite database (default: ~/.creditkarma-mcp/transactions.db). All query tools run against this local database — fast, offline-capable, and queryable with SQL.

Sync strategy: incremental by default (fetches since last sync date with a 30-day overlap for updates). Use force_full: true to walk the whole history with no date cutoff — it starts from the beginning, except that a repeated force_full continues a backfill that paused on max_pages. After a sync that failed or stopped on a stuck cursor, force_full restarts from page 1 (a plain call retries from the saved cursor).

Account balances: each sync also refreshes balances once, from two sources (a failure in either is reported in the result's balances, never thrown, and the transactions still sync):

  • Linked accounts — every type, including credit cards and loans — come from the account aggregator behind Credit Karma's Manage accounts page (Intuit's account vault, reached with a token Credit Karma issues). Each account is matched to your transaction account by its account id, and its as-of time is that account's own last refresh. Card rows include the credit limit; available credit is calculated as limit minus balance.

  • Credit cards and loans also come from your credit report (TransUnion by default; set CK_CREDIT_BUREAU=equifax to switch). These are as of the bureau's last report, usually 2–5 weeks old, with credit limits but no last 4. Closed accounts are dropped. When a credit-report account is clearly the same as a linked one (same lender, same credit limit, similar balance, the linked balance is at least as recent — and no other account fits), it is hidden as a duplicate; pass include_matched: true to see it. Doubtful pairs are never hidden.

Balances follow the transaction sign convention: assets are positive, money owed (card balances, loans) is negative; credit_limit and available_balance are positive. stale is true when balance_as_of is more than 7 days old for linked accounts, or 35 days for credit-report accounts.

Auto-refresh: if the access token has expired, the server automatically refreshes it before syncing. If the refresh token has also expired, it throws an error asking you to re-authenticate.

Database schema

transactions (id, date, description, status, amount, account_id, category_id, merchant_id, raw_json)
accounts     (id, name, type, provider_name, display, last4, account_urn,
              current_balance, available_balance, credit_limit,
              balance_as_of, balances_synced_at, balance_source, matched_account_id)
account_aliases (alias, account_id)
categories   (id, name, type)
merchants    (id, name)
sync_state   (key, value)

Configuration

Env var

Description

Default

CK_COOKIES

Full Cookie header from a signed-in creditkarma.com request

(unset — falls back to fetchproxy)

CK_DISABLE_FETCHPROXY

Set to 1 to skip the fetchproxy fallback (headless / CI)

(unset)

CK_DB_PATH

Path to SQLite database file

~/.creditkarma-mcp/transactions.db

CK_CREDIT_BUREAU

Credit report used for card and loan balances: transunion or equifax

transunion

CK_DEBUG

Set to 1 to trace auth to stderr — credential source, cookie names, JWT timings, and the token-refresh request/response. Never logs token or cookie values

(unset)

Troubleshooting

"CK auth: set CK_COOKIES, or call the ck_set_session MCP tool, or install the ContextMint Bridge extension…" — neither auth path is configured. Either fill in CK_COOKIES in your Claude config, or install ContextMint Bridge and sign into creditkarma.com in your browser.

"TOKEN_EXPIRED" — your refresh token has expired. Sign back into creditkarma.com (ContextMint Bridge path) or grab a fresh Cookie header from DevTools and update CK_COOKIES / call ck_set_session.

ck_healthcheck fails with a fresh sign-in — read its steps / failed_step: they report credential lookup, token validity, refresh and probe separately. A refresh failure reported as blocked at its CDN/WAF (Akamai) means the request never reached Credit Karma, and signing in won't help. A session rejected refresh means Credit Karma ended the session, even when the token looks new: an idle tab gets signed out. Sign in again. If a sign-in made moments ago fails the same way, restart with CK_DEBUG=1 and compare against docs/refresh-ground-truth.md.

"fetchproxy fallback failed" — the env-var path wasn't configured and the extension couldn't be reached. Confirm ContextMint Bridge is installed, you're signed into Credit Karma, and that it's running (open the extension popup). To disable the fallback, set CK_DISABLE_FETCHPROXY=1.

Sync returns 0 transactions — check that your auth is fresh. The refresh token inside the CKAT cookie expires after ~8 hours.

Tools not appearing — fully quit and relaunch Claude Desktop. In Claude Code, run /mcp to check server status.

"No such file or directory: dist/bundle.js" — run npm run build (not just tsc).

Security

  • Credentials are stored only in your saved-session file (~/.creditkarma-mcp/session, or CK_SESSION_PATH), Claude config / .env, or your browser's cookie jar (ContextMint Bridge path)

  • The saved-session file is written at mode 0600 (owner read/write only), in a 0700 directory, by ck_set_session and by every token-refresh rotation

  • ck_set_session refuses to save a refresh token whose JWT exp is already in the past — prevents stale credentials from polluting the saved session

  • The fetchproxy path reads cookies directly from the user's browser via chrome.cookies.get, but it is not memory-only: every token refresh rotates the session, and the rotated CKAT/CKTRKID Cookie header is saved to the saved-session file (~/.creditkarma-mcp/session, or CK_SESSION_PATH) at mode 0600 in a 0700 directory — fetchproxy-only users included — so a restart can recover without re-reading the browser. Call ck_forget_session (or delete that file) to remove it

  • The server never logs credentials (including under CK_DEBUG=1, which logs names, timings and redacted bodies only); warnings go to stderr only (stdout is reserved for the MCP JSON-RPC stream)

  • Only SELECT queries are permitted via ck_query_sql — no writes to Credit Karma. The query runs against a read-only connection, and node:sqlite's prepare() compiles only the FIRST statement of multi-statement input: anything after the first ; is silently ignored, never executed

Uninstall / Reset

The server keeps two things on disk. Neither is removed when you uninstall the extension or stop using it:

What

Default path

How to remove

Saved session — your full creditkarma.com Cookie header (working access + refresh tokens)

~/.creditkarma-mcp/session (CK_SESSION_PATH)

Call ck_forget_session, or delete the file

Synced transaction history (accounts, merchants, amounts, descriptions)

~/.creditkarma-mcp/transactions.db (CK_DB_PATH) plus any -wal / -shm sidecars

Quit the server, then delete the files (or the whole ~/.creditkarma-mcp/ directory)

ck_forget_session is local only: Credit Karma is not contacted, so sign out at creditkarma.com to invalidate the tokens themselves. If CK_COOKIES is set in your Claude config, remove it there too, and sign out of creditkarma.com in the browser if ContextMint Bridge is installed — otherwise the next call picks the session straight back up.

Development

npm test               # run the test suite (vitest)
npm run build          # compile TypeScript → dist/, bundle for MCPB
npm run test:watch     # watch mode
npm run test:coverage  # coverage report (CI enforces 100% on src/**)

Versions are bumped automatically by the Tag & Bump GitHub Action (.github/workflows/tag-and-bump.yml). Do not bump manually.

Pull requests

Changes land via PR, including for solo work — release notes are generated from merged PRs only (config in .github/release.yml). Apply one of these labels to every PR: enhancement, bug, security, refactor, documentation, test, dependencies, ci, or ignore-for-release (excludes from notes). The PR title becomes the changelog bullet, so write it like a user-facing entry.

Project structure

src/
  auth.ts               resolveAuth() — three-path priority (CK_COOKIES env / ck_set_session cache / fetchproxy), plus loadAuthIntoClient()
  client.ts             Credit Karma GraphQL client (auto-refresh, JWT helpers, cookie parser, balance operations)
  index.ts              MCP server entry point; bootstraps tokens from the saved session / CK_COOKIES
  db.ts                 SQLite schema, migrations, and upsert helpers
  vault.ts              Linked-account balances from Intuit's account vault
  creditReport.ts       Credit-report balances (cards and loans, weeks old)
  matching.ts           Pairs credit-report accounts with the linked accounts they duplicate
  json.ts               Small helpers for reading untyped API JSON
  transaction.graphql   Documents the transaction fields we read (sent as a persisted-query hash, not this text)
  tools/
    auth.ts             ck_set_session — refuses stale refresh tokens, saves ~/.creditkarma-mcp/session at 0600;
                        ck_forget_session — deletes it and clears in-memory credentials
    sync.ts             ck_sync_transactions — incremental sync with resume-on-failure
    query.ts            ck_list_transactions, ck_get_recent_transactions,
                        ck_get_spending_by_category, ck_get_spending_by_merchant,
                        ck_get_account_summary
    balances.ts         ck_get_account_balances + the balance refresh run by every sync
    sql.ts              ck_query_sql — SELECT-only escape hatch
tests/
  helpers.ts            Shared test helpers (fakeServer, makeJwt)
  auth.test.ts          resolveAuth + loadAuthIntoClient (mocks @fetchproxy/bootstrap)
  client.test.ts
  db.test.ts
  tools/
    auth.test.ts
    sync.test.ts
    query.test.ts
    sql.test.ts

License

MIT

Available Tools

11 tools
ck_forget_sessionA
DestructiveIdempotent

Forget the Credit Karma session on this machine: delete the saved-session file (~/.creditkarma-mcp/session, or CK_SESSION_PATH) that ck_set_session and token refreshes write, and clear the credentials held in memory. Use when the user stops using this server or wants their stored login removed. Local only — Credit Karma is not contacted, synced transactions are kept, and a CK_COOKIES value set in the host config is not changed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

The annotations already signal destructive and idempotent behavior, and the description adds substantial context beyond them: the exact file path (~/.creditkarma-mcp/session or CK_SESSION_PATH), in-memory credential clearing, no network contact, and preservation of synced transactions and host config values. This fully discloses 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense without redundancy: the primary action and file path come first, followed by the usage condition, then important exclusions. Every sentence adds operational value, and the caveats are separated clearly.

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

Completeness5/5

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

For a state-clearing destructive tool with no output schema, the description covers all an agent needs: exact target file, environment variable override, in-memory effect, local-only guarantee, and what is intentionally preserved. Nothing necessary for correct invocation or safe reasoning is missing.

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 has zero parameters and the schema coverage is 100%, so the schema carries no semantic burden. With no parameters to describe, the baseline of 4 applies; the description appropriately focuses on behavior instead of parameters.

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?

The description uses a specific verb ('Forget') and a clear resource ('Credit Karma session on this machine'), then spells out the concrete mechanism: deleting the saved-session file and clearing in-memory credentials. It also distinguishes the tool from its sibling ck_set_session by explicitly naming the session file both tools write to.

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?

The description states exactly when to use the tool: 'when the user stops using this server or wants their stored login removed.' It also clarifies boundaries by listing what is not affected (synced transactions, CK_COOKIES) and that it is local-only, preventing misuse as a remote logout.

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

ck_get_account_balancesA
Idempotent

Current balance of every account: institution, type, last 4, current balance, available credit and credit limit (cards), and the as-of time. Reads the local database (filled by ck_sync_transactions); pass refresh:true to fetch live first. source "linked" = a linked bank, card, loan or investment account, live from the account aggregator (refreshed about daily). source "credit_report" = a card or loan from the credit report (2–5 weeks old, no last 4); one that duplicates a linked account is hidden unless include_matched:true. Liabilities are negative, matching transactions; available credit is limit minus balance. stale is true past 7 days (linked) or 35 days (credit report).

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoFetch balances live before reading. Default false (local data only).
include_matchedNoAlso list credit-report rows that duplicate a linked account (each names it in matched_to). Default false.

TDQS

A4.6/5.0
Behavior5/5

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

Discloses rich behavior beyond the annotations: staleness thresholds (7 days linked, 35 days credit report), recency of credit-report data (2–5 weeks, no last 4), sign convention (liabilities negative, matching transactions), available-credit formula, and the default hiding of duplicate rows. Annotations only cover the safety profile; the description carries the substantive domain rules.

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 paragraph that is front-loaded with what the tool returns before the qualification rules. Every sentence carries information, though the lack of any separation between return-shape and parameter/source guidance makes it slightly harder to scan.

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

Completeness5/5

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

With no output schema and no annotations covering return semantics, the description fully documents the payload: field set, source provenance, freshness/staleness, sign convention, and duplicate handling. Nothing an agent needs to interpret the results is missing.

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, but the description adds meaning: refresh is framed as 'fetch live first' on top of local data, and include_matched is tied to the matched_to field and the duplicate-hiding default. This enriches both parameters beyond their schema text.

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 (get account balances) and immediately enumerates the returned fields (institution, type, last 4, current balance, available credit, credit limit, as-of time). It also anchors itself against siblings by noting the data comes from the local database filled by ck_sync_transactions, so an agent can distinguish it from summary/transaction tools.

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 clear operational context: pass refresh:true to fetch live first, and include_matched:true to surface credit-report duplicates. It explains the two source categories and their freshness, but never explicitly contrasts itself with siblings like ck_get_account_summary or ck_list_transactions, so there are no stated exclusions/alternatives.

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

ck_get_account_summaryB
Read-only

Return per-account debit, credit, and net totals.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoYYYY-MM-DD
start_dateNoYYYY-MM-DD

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile needs no restatement. The description adds the meaningful fact that results are aggregated per account into debit/credit/net figures rather than raw transactions. It omits any mention that the optional start_date/end_date bound the aggregation or what the default period is.

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 with zero filler, and the output shape (per-account debit/credit/net) leads immediately. It is appropriately sized for a two-optional-parameter read tool, though the terseness borders on under-specification rather than economy.

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

Completeness3/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 takes on responsibility for conveying what comes back, and it does so at a high level. However, for an aggregation tool with date-range parameters it should say whether the range filters the aggregation and what happens when the range is omitted.

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% (both params documented as YYYY-MM-DD), so the schema carries parameter semantics and the baseline is 3. The description never mentions that these totals are date-filterable at all, adding no meaning beyond the schema.

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?

Names a specific verb (Return) and a precisely scoped resource: per-account debit, credit, and net totals. This is clearer than a bare name restatement, but it never contrasts itself with close siblings such as ck_get_account_balances or ck_get_spending_by_category, so an agent must infer the distinction from the tool names alone.

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 at all: nothing says whether this is for reconciliation, reporting, or a date-bounded period, and no alternative (balances, spending-by-category, query_sql) is named or excluded. The agent is left to guess between several plausible sibling tools.

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

ck_get_recent_transactionsB
Read-only

Return the N most recent transactions. Convenience shortcut for ck_list_transactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of transactions to return (default 25; a whole number from 1 to 500)

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds almost no behavioral context beyond the annotations — it doesn't define what 'recent' means (ordering field), whether results are paginated, or what happens at the default limit, so it stays at the low end against an already-light bar.

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 short sentences, zero filler, with the core action front-loaded and the sibling relationship stated second. Nothing to trim.

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

Completeness3/5

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

For a single-parameter read-only tool with no output schema, the description covers the essentials but leaves the notion of 'recent' undefined and says nothing about result ordering or shape. Adequate, but with clear gaps an agent must infer.

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% — the limit parameter is fully documented with default, range, and bounds. The description mentions 'N' but adds no syntax or format detail beyond the schema, so the baseline of 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 (return the N most recent transactions) and explicitly relates it to the sibling ck_list_transactions as a shortcut. This lets an agent distinguish it from the general listing tool without opening either schema, though it doesn't clarify ordering or filtering differences.

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?

Calling it a 'convenience shortcut for ck_list_transactions' implies when to reach for it (quick recent-item retrieval), but it never states when to prefer the full tool instead or what the shortcut omits (filters, date ranges, pagination). Guidance is implied rather than explicit.

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

ck_get_spending_by_categoryB
Read-only

Group debit transactions by category and return totals.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoPartial account name filter
end_dateNoYYYY-MM-DD
start_dateNoYYYY-MM-DD

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description does add one meaningful behavioral constraint not in the structured fields: only debit transactions are aggregated, excluding credits and transfers. It says nothing about date-range defaults, session requirements, or what happens when parameters are omitted.

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 with the aggregation and the grouping dimension front-loaded. Zero filler and nothing redundant with the tool name.

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

Completeness3/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 some burden for explaining the return shape; it states that results are grouped by category with totals, which is helpful, but says nothing about ordering, category source, or how empty/no-data ranges are represented. Adequate but with a clear gap for an aggregation tool.

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% and all three parameters (account, start_date, end_date) carry their own descriptions, so the schema does the heavy lifting. The description adds no format, default, or interaction detail beyond what the schema already provides, which is the expected baseline here.

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 ('Group ... and return totals') and resource ('debit transactions by category'), which an agent can distinguish from the sibling ck_get_spending_by_merchant by the grouping dimension. It stops short of naming that sibling explicitly, so differentiation is inferential rather than stated.

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 guidance on when to use this versus ck_get_spending_by_merchant, ck_list_transactions, or ck_query_sql, and no mention of required context (e.g., setting a session first). Usage must be inferred entirely from the name and one-line purpose.

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

ck_get_spending_by_merchantB
Read-only

Return top merchants by total debit spend.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoDefault 25; a whole number from 1 to 500
categoryNoPartial category name filter
end_dateNoYYYY-MM-DD
start_dateNoYYYY-MM-DD

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, covering the safety profile, so the bar is lower. The description usefully clarifies the ranking semantics ('top' by total debit spend), but says nothing about what happens when date ranges are omitted, tie-breaking, or result shape.

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 sentence with no filler and the key qualifier ('by total debit spend') front-loaded. It is efficient, though arguably terse for a four-parameter aggregation tool that needs date-scope clarification.

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

Completeness3/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 annotations about returns, the description leaves the date-range default behavior unspecified — does omitting start_date/end_date mean all-time or a default period? That is a meaningful gap for a spending aggregation, though the core purpose is conveyed.

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

Parameters3/5

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

Schema coverage is 100%, with limit, category, start_date and end_date all documented in the schema, so the schema carries the parameter burden. The description adds no parameter detail (e.g., that start/end dates are optional or how 'top' ordering interacts with limit), 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 ('Return') and a well-defined resource ('top merchants by total debit spend'), including the aggregation dimension (debit spend). It implicitly distinguishes itself from ck_get_spending_by_category by grouping on merchants rather than categories, but it never names or explicitly contrasts that sibling.

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 guidance on when to pick this over ck_get_spending_by_category or ck_list_transactions, and no prerequisites or exclusions are stated. The agent must infer the use case from the tool name alone.

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

ck_healthcheckVerify credentials and upstream reachabilityA
Read-onlyIdempotent

Resolves the credential the way real tools do, then makes one authenticated request to creditkarma.com. Reports which source supplied the credential, whether creditkarma.com accepted it, the round-trip time, and a plain-English hint distinguishing 'no credential' from 'credential rejected' from 'a creditkarma.com-side problem'. Read-only; never returns the credential itself. Call this when a real tool fails and you want to know which hop broke — steps reports credential lookup, token validity, refresh and probe separately, and failed_step names the first that failed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/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 still adds real value beyond them: the guarantee that the credential itself is never returned, and a taxonomy of failure modes ('no credential' vs 'credential rejected' vs upstream problem) plus the steps/failed_step breakdown. Some of that last detail is return-shape information an output schema would normally carry.

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?

Purpose and the ordering of the probe are front-loaded, and the when-to-use clause lands at the end. It is dense but slightly long, with the em-dash clause packing return details that could be tighter.

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

Completeness5/5

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

With no output schema, the description must carry the return contract, and it does: credential source, acceptance, round-trip time, a plain-English hint, and the steps/failed_step fields. Nothing an agent needs to interpret the result correctly is missing.

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?

Zero-parameter tool, so the baseline is 4. The description correctly implies no inputs are needed to run the probe and describes only the outputs it produces.

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 sequence and resource: resolve the credential the way real tools do, then make one authenticated request to creditkarma.com. This clearly distinguishes it from the read/data siblings (ck_list_transactions, ck_get_account_summary) as a diagnostic probe rather than a data fetch.

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?

Explicit trigger given: 'Call this when a real tool fails and you want to know which hop broke.' It also names the failure-localization mechanism (steps, failed_step) that selects this tool over simply retrying a sibling.

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

ck_list_transactionsB
Read-only

List transactions with optional filters. Paginated.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoDefault 50; a whole number from 1 to 500
offsetNoDefault 0; a whole number, 0 or more
statusNoe.g. posted, pending, cancelled
accountNoPartial account name match
categoryNoPartial category name match
end_dateNoYYYY-MM-DD
merchantNoPartial merchant name match
max_amountNoMaximum absolute amount
min_amountNoMinimum absolute amount
start_dateNoYYYY-MM-DD

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description's only added behavior is 'Paginated', which is already implied by the limit/offset parameters in the schema; it omits default page size, total-count behavior, and result ordering.

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 short sentences, purpose front-loaded, zero filler. Nothing could be trimmed without losing information.

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

Completeness2/5

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

For a ten-parameter list tool with no output schema, the description is too thin: it never describes the returned transaction shape, sort order, or whether pagination metadata is returned. Combined with no sibling routing, an agent is left to infer the important behavior from the schema alone.

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 itself documents all ten filters, defaults, and formats; the baseline is therefore 3. The description adds nothing beyond 'optional filters'—no clarification of how filters combine (AND vs OR) or how date/amount ranges are interpreted.

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 and resource ('List transactions') plus scope ('with optional filters'), so an agent knows the operation immediately. However, it does nothing to distinguish itself from close siblings like ck_get_recent_transactions or ck_query_sql, which also return transaction data.

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?

'with optional filters' hints at the use case but there is no explicit when-to-use guidance, no exclusions, and no routing to alternatives such as ck_get_recent_transactions (recent-only) or ck_query_sql (arbitrary queries). An agent must guess which transaction reader to pick.

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

ck_query_sqlA
Read-only

Execute a raw SQL SELECT query (CTEs via WITH ... SELECT are supported) against the transactions database. Non-SELECT statements (INSERT, UPDATE, DELETE, DROP, etc.) are rejected. Returns at most max_rows rows (default 500, max 5000); a larger result comes back with truncated: true, so prefer aggregates or LIMIT/OFFSET paging. A query running longer than 10 s is stopped. Only the first statement runs. Tables: transactions, accounts, categories, merchants, sync_state.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesA SELECT SQL statement
max_rowsNoMost rows to return (default 500). Page larger results with LIMIT/OFFSET.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint/openWorldHint annotations by disclosing that non-SELECT statements are rejected, that only the first statement executes, the 10-second timeout, and the truncated:true flag on oversized results. These are exactly the behavioral traits an agent needs before issuing arbitrary SQL.

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?

Four dense sentences that are front-loaded with purpose and then layer constraints and return behavior. No filler, repetition, or ambiguity.

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

Completeness5/5

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

No output schema exists, and the description compensates by covering the row cap, truncation flag, timeout, statement handling, and available tables. An agent has everything needed to call this correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds real value by explaining the truncated:true return behavior tied to max_rows and recommending LIMIT/OFFSET paging, exceeding the schema's bare default and maximum notes.

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 action (execute a raw SQL SELECT) and resource (the transactions database), and enumerates available tables. It clearly positions itself as the raw-query escape hatch versus purpose-built siblings like ck_list_transactions and ck_get_spending_by_category.

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?

Provides operational context for correct use: SELECT-only, only the first statement runs, 10 s timeout, and the recommendation to prefer aggregates or LIMIT/OFFSET paging for large results. It does not explicitly compare itself to sibling tools or say when to prefer them, so it falls short of the top score.

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

ck_set_sessionA
Idempotent

Store a Credit Karma session to enable automatic token refresh. Pass the full Cookie header from a signed-in creditkarma.com request (Chrome DevTools → Network → any creditkarma.com request → Request Headers → right-click the cookie header → Copy value). For most users the easier onboarding path is to install the ContextMint Bridge extension and sign into creditkarma.com — the MCP reads the cookies automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
cookiesYesFull Cookie header from a signed-in creditkarma.com request (contains CKAT, CKTRKID, etc.)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare non-read-only, idempotent, non-destructive behavior, so the safety bar is lower. The description adds real context by revealing what is being persisted (a credential that drives automatic token refresh) and the required provenance of the value; it does not discuss overwrite semantics or failure behavior, but the idempotentHint covers re-writes.

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?

Purpose and payoff are front-loaded in the first sentence, followed by concrete acquisition steps and a simpler alternative. The DevTools click-path is long but each clause is actionable, so little is wasted.

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

Completeness5/5

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

For a one-parameter credential-ingestion tool with no output schema, this covers the essential questions: what the value is, where to get it, why to provide it, and an easier substitute. Annotations carry the mutation/idempotency profile, so nothing critical is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter's description already states it is the full Cookie header containing CKAT/CKTRKID. The description repeats that plus a harvesting procedure, which is operationally useful but adds little semantic meaning beyond the schema.

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

Purpose5/5

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

States a specific verb and resource ('Store a Credit Karma session') and adds the downstream purpose ('enable automatic token refresh'). An agent can distinguish this from sibling ck_forget_session and the read-oriented ck_* tools 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 clear onboarding context (call this during setup) and names an alternative path (ContextMint Bridge extension that reads cookies automatically). It does not explicitly say when not to call it or point to ck_forget_session for teardown, so it falls short of full routing guidance.

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

ck_sync_transactionsA
Idempotent

Sync Credit Karma transactions into the local SQLite database, then refresh account balances once (see ck_get_account_balances; a balance failure is reported in balances, never thrown; a call that pauses with more to fetch leaves balances to the call that finishes). Incremental by default (fetches since last sync + 30-day overlap for updates). There is no login flow: credentials are re-read from the saved session (ck_set_session), CK_COOKIES, or a signed-in creditkarma.com tab via the ContextMint Bridge extension; if none is usable it fails with an error saying how to sign back in. Bounded and resumable: when it pauses with more to fetch it returns another_run_needed:true and a note — run it again and it continues from where it stopped.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoPages this call may fetch before pausing (a deep backfill is hundreds). Overrides CK_SYNC_MAX_PAGES. Omit both for an unbounded sync.
force_fullNoIf true, walk the whole history with no date cutoff. Starts from the beginning, except that it continues a full backfill paused by max_pages. Also the way to restart after a sync that failed or stopped on a stuck cursor.

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations: incremental vs full behavior, the exact resumability contract (another_run_needed:true plus a note, continue from where it stopped), that a balance failure is reported in `balances` and never thrown, and how auth is resolved or how it fails. This is rich behavioral context an agent cannot get from readOnlyHint/openWorldHint/idempotentHint alone.

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 action before the parenthetical caveats, and every clause carries real information. The nested parentheses make it dense to parse, but it is appropriately sized for the complexity involved.

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

Completeness5/5

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

With no output schema, the description compensates by naming the response fields (`balances`, another_run_needed, a note) and the failure semantics. Auth prerequisites and resumption behavior are covered, so an agent has everything needed to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so max_pages and force_full are already fully documented in the schema. The description adds little parameter-specific detail beyond restating that force_full restarts from a failed/stuck sync. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb+resource: sync Credit Karma transactions into the local SQLite database, plus a balance refresh. It names the related sibling (ck_get_account_balances) and distinguishes itself from read-only siblings like ck_list_transactions by being the sync/persist 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?

Explains the default incremental mode (since last sync + 30-day overlap), when resumption applies, and that credentials come from ck_set_session/CK_COOKIES/bridge, not a login flow. It routes to ck_get_account_balances for balances, but does not explicitly state when to prefer force_full or a sibling over this tool.

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. 4 tool updatesv3.3.3
    • Addedck_get_account_balances
    • Changedck_get_recent_transactions4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Number of transactions to return (default 25)"New value: +"Number of transactions to return (default 25; a whole number from 1 to 500)"
      • addedInput schema / properties / limit / maximum
        Added value: +500
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
    • Changedck_get_spending_by_merchant4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Default 25"New value: +"Default 25; a whole number from 1 to 500"
      • addedInput schema / properties / limit / maximum
        Added value: +500
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
    • Changedck_list_transactions8 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Default 50"New value: +"Default 50; a whole number from 1 to 500"
      • addedInput schema / properties / limit / maximum
        Added value: +500
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / offset / description
        Previous value: -"Default 0"New value: +"Default 0; a whole number, 0 or more"
      • addedInput schema / properties / offset / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / offset / minimum
        Added value: +0
      • changedInput schema / properties / offset / type
        Previous value: -"number"New value: +"integer"
  2. 2 tool updatesv3.1.3
    • Addedck_forget_session
    • Changedck_query_sql1 field changed
      • addedInput schema / properties / max_rows
        Added value: +{
        +  "description": "Most rows to return (default 500). Page larger results with LIMIT/OFFSET.",
        +  "maximum": 5000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
  3. 1 tool updatev3.1.2
    • Changedck_sync_transactions1 field changed
      • changedInput schema / properties / force_full / description
        Previous value: -"If true, re-fetch all transactions from the beginning"New value: +"If true, walk the whole history with no date cutoff. Starts from the beginning, except that it continues a full backfill paused by max_pages. Also the way to restart after a sync that failed or stopped on a stuck cursor."
  4. 9 tool updatesv3.0.0
    • Changedck_get_account_summary1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedck_get_recent_transactions1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedck_get_spending_by_category1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedck_get_spending_by_merchant1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedck_healthcheck1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedck_list_transactions1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedck_query_sql1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedck_set_session1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedck_sync_transactions1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  5. 1 tool updatev2.7.0
    • Addedck_healthcheck
  6. 1 tool updatev2.5.0
    • Changedck_sync_transactions1 field changed
      • addedInput schema / properties / max_pages
        Added value: +{
        +  "description": "Pages this call may fetch before pausing (a deep backfill is hundreds). Overrides CK_SYNC_MAX_PAGES. Omit both for an unbounded sync.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
  7. 8 tool updatesv2.3.1
    • First observedck_get_account_summary
    • First observedck_get_recent_transactions
    • First observedck_get_spending_by_category
    • First observedck_get_spending_by_merchant
    • First observedck_list_transactions
    • First observedck_query_sql
    • First observedck_set_session
    • First observedck_sync_transactions

TDQS

A3.9/5.0

Scored across 11 tools

Disambiguation4/5

Most tools target distinct resources or aggregations (spending-by-category vs by-merchant vs account-summary vs balances are clearly separated). The one real overlap is ck_get_recent_transactions, which is explicitly a convenience shortcut for ck_list_transactions, and ck_query_sql is a generic escape hatch that can duplicate the analytics tools, but the descriptions make the intended boundaries clear.

Naming Consistency5/5

Every tool follows the same ck_ prefix and snake_case verb_noun pattern (ck_list_transactions, ck_get_account_balances, ck_sync_transactions, ck_set_session). No mixed conventions or stray camelCase.

Tool Count5/5

11 tools is well within the ideal range and each earns its place: data retrieval, aggregation, sync, session lifecycle, and diagnostics. Nothing feels padded or redundant enough to trim.

Completeness4/5

The surface covers the full read/analytics lifecycle: credential setup and teardown, sync, raw and filtered queries, categorical/merchant spending, account summaries and balances, plus a healthcheck for failure diagnosis. Minor gaps remain (no per-category or per-merchant detail drill-down, no budget/goal coverage), but core workflows have no dead ends.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables integration with Monarch Money to query financial data, analyze spending patterns, track budgets, and get personalized financial insights through conversational AI with Claude Desktop.
    11
    3
    ISC
  • A
    license
    A
    quality
    D
    maintenance
    Integrates Claude with the BudgetBakers Wallet API to access financial data including accounts, transactions, categories, and spending analytics.
    8
    7 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects Claude Desktop to Yodlee financial data, enabling account management, transaction queries, spending summaries, and audio narrations.
    1
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables Claude to query Empower/Personal Capital financial accounts, net worth, transactions, and asset allocation via natural language.
    5
    -