Skip to main content
Glama
ExpertVagabond

plaid-devx-mcp

plaid-devx-mcp

A sandbox-first Model Context Protocol server for developers integrating Plaid. Twenty tools in two groups:

  • 13 sandbox integration tools. Create a test Item, read accounts, balances, auth numbers, identity, sync transactions with cursor paging, break and repair the login, fire webhooks, search institutions, create Link tokens. Built on the official plaid Node SDK. Access tokens stay in a server-side vault; the model only ever sees an item_id.

  • 7 docs-quality tools. Search and describe every endpoint from the official OpenAPI spec, generate minimal curl and Node requests, search and fetch plaid.com/docs as Markdown, and run a drift check that cross-references the OpenAPI spec, the official Postman collection and the docs site. No credentials needed for this group.

No keys are stored in this repo. The server reads PLAID_CLIENT_ID and PLAID_SECRET from the environment and refuses PLAID_ENV=production unless you also set PLAID_ALLOW_PRODUCTION=1.

Why this exists

Plaid's Developer Relations team owns the docs, the sample apps, the Postman collection and the feedback loop from developers back to Product. Every one of those is a thing that drifts: an endpoint ships in the OpenAPI spec before its docs anchor exists, a Postman request keeps calling an endpoint after it is deprecated, a externalDocs link points at a page that now 404s. Plaid's own MCP server (the Dashboard MCP) covers production diagnostics; the twenty-odd community plaid-mcp repos all do the same thing, connect my bank and read my transactions. Nothing covered the developer's first hour in sandbox, and nothing treated the docs surface as something you can test. This server does both, and the drift check is the release checklist I would run at Plaid every week.

Related MCP server: MinuteMail MCP

Install

Requires Node 20+.

git clone https://github.com/ExpertVagabond/plaid-devx-mcp
cd plaid-devx-mcp
npm install
npm run build

Free sandbox credentials: sign up at dashboard.plaid.com/signup, open Developers > Keys, copy the client_id and the Sandbox secret. Sandbox is free and needs no production approval.

Claude Desktop / Claude Code / Cursor config:

{
  "mcpServers": {
    "plaid-devx": {
      "command": "node",
      "args": ["/absolute/path/to/plaid-devx-mcp/dist/index.js"],
      "env": {
        "PLAID_CLIENT_ID": "your_client_id",
        "PLAID_SECRET": "your_sandbox_secret",
        "PLAID_ENV": "sandbox"
      }
    }
  }
}

Leave the env block out and the seven docs tools still work; the sandbox tools return a message telling you where to get keys.

Environment variables:

variable

default

purpose

PLAID_CLIENT_ID, PLAID_SECRET

unset

Plaid API keys. Sandbox secret recommended.

PLAID_ENV

sandbox

sandbox or production. Production also needs PLAID_ALLOW_PRODUCTION=1.

PLAID_DEVX_CACHE

~/.cache/plaid-devx-mcp

Disk cache for the OpenAPI spec (3 MB), Postman collection (1.6 MB) and llms-full.txt (6.5 MB); 24 h TTL, stale copy used if offline.

Tools

Sandbox integration (credentials required)

tool

Plaid endpoint(s)

what it does

plaid_sandbox_item_create

/sandbox/public_token/create + /item/public_token/exchange

One call to a working Item. Supports override_username (user_custom, user_transactions_dynamic), products, webhook URL. Returns item_id; the access token stays in the vault.

plaid_items_list

(local)

Items created this session, no tokens printed.

plaid_accounts_get

/accounts/get

Accounts with type, subtype, mask, balances.

plaid_balance_get

/accounts/balance/get

Real-time balances, optional account_ids filter.

plaid_transactions_sync

/transactions/sync

Follows has_more until complete, returns added/modified/removed plus next_cursor. max_pages safety cap.

plaid_auth_get

/auth/get

ACH, wire, EFT, BACS numbers.

plaid_identity_get

/identity/get

Account-holder names, emails, phones, addresses.

plaid_item_get

/item/get

Item status, products, consent expiry, current error.

plaid_item_remove

/item/remove

Invalidates the token and forgets it.

plaid_sandbox_fire_webhook

/sandbox/item/fire_webhook

Fire SYNC_UPDATES_AVAILABLE, DEFAULT_UPDATE, etc. at your webhook.

plaid_sandbox_reset_login

/sandbox/item/reset_login

Force ITEM_LOGIN_REQUIRED to test update mode.

plaid_institutions_search

/institutions/search

Find institution_id, OAuth flag, supported products.

plaid_link_token_create

/link/token/create

For the real Link UI flow (web/mobile).

Every Plaid error comes back as error_type / error_code / error_message / request_id with a link to the errors reference, not as a stack trace.

Docs quality (no credentials)

tool

source

what it does

plaid_api_search

OpenAPI

Keyword search across path, summary, description. Deprecated hidden by default.

plaid_api_describe

OpenAPI

Request fields with required flag, type, enum; 200 example; docs link; deprecation.

plaid_api_request_example

OpenAPI

Minimal valid body from the required fields, rendered as curl and as plaid Node code against sandbox.

plaid_api_stats

OpenAPI

Spec version, live/deprecated/hidden counts, all 31 sandbox-only endpoints.

plaid_docs_search

plaid.com/docs/llms.txt

Search the page index Plaid publishes for LLMs.

plaid_docs_fetch

plaid.com/docs/*/index.html.md

Fetch any docs page as Markdown, paged by offset.

plaid_drift_check

OpenAPI + Postman + docs

Endpoints missing from Postman, Postman hitting deprecated or unknown endpoints, placeholder or missing externalDocs, endpoints absent from llms-full.txt, and with live: true the 404 pages and missing anchors. Markdown or JSON.

Plus one MCP prompt (plaid-quickstart) and one resource (plaid-devx://quickstart).

Five-prompt walkthrough

With the server connected and sandbox keys set, ask your MCP client:

  1. "Create a sandbox Item at First Platypus Bank with transactions and auth." plaid_sandbox_item_create runs /sandbox/public_token/create then /item/public_token/exchange and returns item_id.

  2. "List its accounts and the routing numbers for the checking account." plaid_accounts_get then plaid_auth_get. Sandbox routing number is 011401533.

  3. "Sync all transactions and total the spend by category." plaid_transactions_sync pages through has_more; the model sums personal_finance_category.primary. On a brand-new Item the first sync can be empty for a few seconds while Plaid fetches history; ask again.

  4. "Simulate the user changing their bank password, then show me the Item error and what my app should do." plaid_sandbox_reset_login then plaid_item_get shows ITEM_LOGIN_REQUIRED; the fix is Link update mode with a new link_token (plaid_link_token_create with an access_token).

  5. "Run the docs drift check and give me the three fixes you would ship first." plaid_drift_check with live: true. See the findings below for what it returns today.

Or use the plaid-quickstart prompt, which sends all five in order.

What the drift check found (2026-09-14, OpenAPI 2020-09-14_1.740.1)

Full report: reports/drift-2026-09-14.md. Highlights:

  • 92 live endpoints have no request in the official Postman collection (262 requests, 210 unique paths, against 296 live endpoints). The whole /cashflow_report/*, /protect/*, /cra/loans/* and /fdx/* families are absent.

  • 5 Postman requests call endpoints the spec marks deprecated (/categories/get, three /cra/monitoring_insights/*, /credit/bank_income/refresh), and 1 Postman request calls a path that is not in the spec at all (/transfer/platform/document/submit).

  • 15 live endpoints have externalDocs: none as a placeholder and 18 have no externalDocs at all, so SDKs generated from the spec ship without a docs link for 33 endpoints.

  • 4 externalDocs pages return 404 (/api/products/beta/, /api/products/issues, /api/profile/), covering 10 endpoints.

  • 36 externalDocs anchors do not exist on the page they point at. The four /cashflow_report/* endpoints use camelCase anchors (#cashflowReportGet) while every other anchor on that page is lowercase; /cashflow_report does not appear anywhere in docs/llms-full.txt either.

  • 76 live endpoints are never mentioned in docs/llms-full.txt, the file Plaid publishes for LLM consumption.

  • Three docs pages are referenced both with and without a trailing slash (/api/products/auth, /api/products/issues, /api/products/signal).

Method note: "anchor missing" means the id is absent from the server-rendered HTML of a page that does contain ids for its other endpoints. Deprecated and x-hidden-from-docs endpoints are excluded from every count.

Tests

$ npm test

 ✓ tests/spec-units.test.ts (7 tests) 8ms
 ✓ tests/sandbox-tools.test.ts (21 tests) 132ms
 ✓ tests/docs-tools.test.ts (12 tests) 123ms

 Test Files  3 passed (3)
      Tests  40 passed (40)

$ npx tsc --noEmit   # clean

The sandbox tools are tested end to end through a real MCP client over an in-memory transport against a local node:http mock of sandbox.plaid.com (tests/helpers/mock-plaid.ts), so request bodies, headers and error mapping are asserted, not stubbed. The docs tools run against a 14-endpoint subset of the real spec (tests/fixtures/mini-openapi.yml, generated by scripts/make-fixture.py) and a fake fetcher.

Live sandbox: PLAID_CLIENT_ID=... PLAID_SECRET=... npm run smoke runs the five-prompt walkthrough against sandbox.plaid.com and prints PASS/FAIL per step. npm run drift regenerates the report from live sources.

Security notes

  • The access token is never returned in a tool result. Tools take item_id; the vault is process memory and dies with the server.

  • plaid_docs_fetch only fetches https://plaid.com/ URLs.

  • Production is opt-in twice (PLAID_ENV=production and PLAID_ALLOW_PRODUCTION=1).

  • Balance calls are billable in production; the tool description says so.

License

MIT. Not affiliated with Plaid Inc. Plaid, the OpenAPI spec and the Postman collection are Plaid's; this project only reads them.

Available Tools

20 tools
plaid_accounts_getGet accounts for an ItemB

Calls /accounts/get. Returns account ids, names, types, subtypes, masks and balances.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesitem_id from plaid_sandbox_item_create (or a raw access_token you already hold)

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. 'Returns' implies a read-only operation, but the description does not explicitly disclose whether the call is non-mutating, what prerequisites exist beyond item_id, or any rate limit or error behavior. This is thin behavioral coverage for a tool with zero annotation support.

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 with no filler: the endpoint is front-loaded and the return fields are listed compactly. Every word provides useful information.

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?

The tool is simple (one parameter, fully documented in the schema) and the description lists the returned fields, which is helpful. However, with no annotations and no output schema, it omits explicit read-only guarantees, error behavior, and any guidance on choosing this over related Plaid siblings, leaving some gaps for the agent.

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 input schema already has 100% description coverage for item_id, noting it can come from plaid_sandbox_item_create or be a raw access_token. The description adds no additional parameter meaning beyond what the schema states, so it sits at the baseline.

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

Purpose4/5

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

Clearly identifies the endpoint /accounts/get and the resource (accounts), and enumerates the returned fields (ids, names, types, subtypes, masks, balances). However, it does not call out how this differs from sibling tools like plaid_balance_get or plaid_identity_get, so the agent must infer distinctions from the name and schema.

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

Usage Guidelines3/5

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

The description implies when to use the tool by listing account metadata and balances, but it never explicitly compares with alternatives such as plaid_balance_get, plaid_auth_get, or plaid_transactions_sync, and offers no exclusion criteria. It is enough to suggest a use case but not to route the agent away from similar tools.

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

plaid_api_describeDescribe one endpointA

Request fields (required flag, type, enum, one-line description), a 200 response example from the spec, deprecation status and the docs link for a path such as /transactions/sync.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesEndpoint path, e.g. /accounts/get
include_response_fieldsNoAlso list response schema fields

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavior on its own. It states what the tool returns (request fields, response example, deprecation status, docs link), which is transparent about its output. However, it does not explicitly state that the operation is read-only or that it has no side effects. While 'describe' strongly implies a read operation, the absence of an explicit statement is a minor gap, though not contradictory.

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?

The description is a single sentence that efficiently lists the key outputs (request fields, response example, deprecation status, docs link) and includes a concrete example. It is front-loaded with the core purpose and avoids unnecessary words. Slightly dense but well-structured; loses a point for cramming multiple items into one sentence without visual separation.

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 simple read-only tool with only two parameters, both fully documented in the schema, and no output schema, the description covers the essential information an agent needs: what details are returned and an example. It doesn't describe the exact response format, but since it says 'a 200 response example from the spec', that is clear enough. Minor omission: no mention of error cases or pagination, but these are unlikely for a describe tool. Overall, adequately complete.

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 both parameters (path, include_response_fields) are already fully documented in the input schema. The description adds no additional meaning beyond the schema—it merely reiterates the concept of a path with an example. Since the schema handles parameter semantics completely, a 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 clearly states the tool's action ('describe') and resource ('one endpoint'), and enumerates the specific details it returns (request fields, 200 response example, deprecation status, docs link). It is unambiguous and gives a concrete example path. However, it does not explicitly differentiate from sibling tools like plaid_api_request_example or plaid_api_search, so it falls short of a 5.

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

Usage Guidelines3/5

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

The description implies usage: if you need structured endpoint details (fields, response example, deprecation), use this tool. But it provides no explicit guidance on when to prefer this over siblings like plaid_api_search or plaid_api_request_example, and offers no exclusions or alternative routing. It is not misleading, but the context is only implied.

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

plaid_api_request_exampleGenerate a minimal request (curl + Node)A

Builds the smallest valid request body for an endpoint from the OpenAPI required fields, then renders it as a curl command and a plaid-node snippet against sandbox.plaid.com. Override fields with body.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoFields to merge over the generated placeholders
pathYes
formatNoboth

TDQS

A3.5/5.0
Behavior3/5

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

No annotations exist, so the description carries the burden. It discloses that output targets sandbox.plaid.com and that fields can be overridden with body, implying generation rather than execution. However, it does not explicitly state that no network call is made, whether credentials are needed, or what the response format is beyond snippets.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two sentences with no filler. The core behavior is stated first, and the override mechanism is appended efficiently. Every clause adds information.

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?

The description covers the tool's main behavior and output well, but with no output schema and no annotations, it should also clarify the format parameter's options and whether the tool executes requests. It is adequate for a simple generator but leaves a few operational details 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 coverage is only 33%, so the description must compensate. It adds meaning for body ('Override fields with body') and path ('for an endpoint'), but the format parameter is not described, despite having an enum and default. The title hints at curl/Node, but the schema's format control is left implicit.

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 ('Builds'), a specific resource ('smallest valid request body for an endpoint'), and the concrete outputs ('curl command and a plaid-node snippet'). This clearly distinguishes it from sibling tools like plaid_api_describe or plaid_docs_search.

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 explicit when-to-use guidance, alternatives, or exclusions are provided. An agent must infer that this is for generating example requests, and nothing distinguishes it from nearby search/describe tools.

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

plaid_api_statsSpec overviewA

Version of the OpenAPI spec in use, endpoint counts (live, deprecated, hidden, sandbox-only) and the full list of sandbox-only endpoints.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal the exact informational content delivered, which implies a safe, read-only operation, but it does not explicitly state that no mutation occurs, nor does it mention any access requirements or side effects beyond the output itself.

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 conveys all the important output categories in a logical order, starting with the spec version and ending with the sandbox-only endpoint list. There is no filler or redundancy.

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?

This is a simple parameterless informational tool with no output schema. The description fully enumerates what the agent will receive (version, counts, sandbox-only list), so nothing necessary for invoking or interpreting the tool 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, so the empty schema fully covers the input side. The description adds no parameter details, but none are needed; baseline 4 is appropriate for a parameterless tool.

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 clearly states what the tool reports: the OpenAPI spec version, endpoint counts across categories, and the list of sandbox-only endpoints. It is specific enough to distinguish this informational tool from siblings like plaid_api_search and plaid_api_describe, though it lacks an explicit verb such as 'returns' or 'gets'.

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?

The description explains what the tool provides but gives no guidance on when to use it versus the many sibling tools. There is no mention of intended context, alternatives, or exclusions, leaving the agent to infer when this stat-overview tool is appropriate.

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

plaid_auth_getGet account and routing numbersA

Calls /auth/get. Returns ACH (and wire/BACS/EFT where present) numbers for depository accounts on the Item.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesitem_id from plaid_sandbox_item_create (or a raw access_token you already hold)

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden; it clearly says the tool calls /auth/get and returns numbers, indicating a read operation with no obvious side effects. It also discloses the 'where present' caveat and the depository-account scope, which are useful behavioral details.

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 front-load the endpoint and the return value, with no redundant or filler wording. Every phrase 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?

For a one-parameter read tool with no output schema, the description plus the schema's item_id guidance is nearly complete. It could additionally note response structure or prerequisite Item state, but these are minor gaps.

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 item_id schema description already explains where to get the value. The tool description adds no parameter-level detail, so the baseline of 3 applies.

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

Purpose5/5

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

The description names the exact endpoint, /auth/get, and specifies the concrete deliverable: ACH (and wire/BACS/EFT where present) numbers for depository accounts. This is sufficiently distinct from siblings like plaid_accounts_get and plaid_balance_get, which target different data.

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

Usage Guidelines3/5

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

The description establishes what data the tool returns, so an agent can infer when it is relevant, but it never states when to choose this tool over alternatives or provides exclusions. Usage guidance is implied by the return type rather than explicit.

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

plaid_balance_getGet real-time balancesA

Calls /accounts/balance/get, the only endpoint that always hits the institution for a fresh balance (billable per call in production).

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesitem_id from plaid_sandbox_item_create (or a raw access_token you already hold)
account_idsNoLimit to these account ids

TDQS

A4.2/5.0
Behavior4/5

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

The description adds critical behavioral context: it always hits the institution and is 'billable per call in production'. Since no annotations are provided, this is essential for agents to understand the cost implication and real-time nature, which is not evident from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

The description is a single, focused sentence that conveys the key purpose and a critical caveat (billable). It is front-loaded with the main action and differentiator, with no wasted words.

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?

Given the simplicity of the tool (2 params, no output schema), the description covers the essential operational context: real-time nature, cost implications, and endpoint identity. It doesn't cover error cases or pagination, but with such a lean schema, this is sufficient.

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 schema has 100% coverage for both parameters, so the description does not need to add much. However, the description could clarify that item_id can be an access_token, but the schema already says 'or a raw access_token you already hold', so it adds no extra value.

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 clearly states the specific endpoint (/accounts/balance/get) and its unique role as the only endpoint that always fetches a fresh balance from the institution. This distinguishes it from siblings like plaid_accounts_get which likely returns cached balances.

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 explicitly notes the endpoint is 'the only endpoint that always hits the institution for a fresh balance', which implies when to use it (when fresh data is needed). However, it does not mention alternatives or when not to use it (e.g., when cached is acceptable).

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

plaid_docs_fetchFetch a docs page as MarkdownA

Every plaid.com/docs page is also served as Markdown at /index.html.md. Returns that text, truncated to max_chars, optionally starting at an offset for paging.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesA plaid.com/docs URL, e.g. https://plaid.com/docs/transactions/
offsetNo
max_charsNo

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and discloses key behaviors: the Markdown source endpoint, truncation by max_chars, and offset-based paging. It does not mention error handling, auth, or rate limits, but the core read-only behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two sentences, front-loaded with the core action and source, followed by concise parameter behavior. No filler; every sentence contributes.

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 straightforward fetch tool with three simple parameters and no output schema, the description covers the source, retrival mechanism, and both optional parameters. It lacks explicit notes on error cases or unsupported URLs, but the essentials for correct invocation are all present.

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 only 33% (url is documented). The description compensates by explaining that max_chars truncates the returned text and offset supports paging, adding semantic value beyond the schema's field descriptions. It could more precisely define character units, but the intent is clear.

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 clearly states a specific verb ('Fetch') and resource ('a docs page as Markdown'), and explains the underlying mechanism via index.html.md. This clearly distinguishes it from siblings like plaid_docs_search, which would find pages rather than fetch a page content.

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 says 'Every plaid.com/docs page' establishes the scope of applicability and the behavior for paging/truncation. It does not explicitly identify sibling alternatives or exclusions, but the usage context is clear enough for an agent to know when to invoke this tool.

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

plaid_drift_checkOpenAPI vs Postman vs docs drift checkA

Cross-checks the official OpenAPI spec against the official Postman collection and plaid.com/docs: endpoints missing from Postman, Postman requests hitting deprecated or unknown endpoints, placeholder or missing externalDocs links, endpoints absent from llms-full.txt and, with live=true, externalDocs pages that 404 and anchors that do not exist on the page. This is the maintenance checklist a DevRel engineer would run before each release.

ParametersJSON Schema
NameRequiredDescriptionDefault
liveNoFetch each externalDocs page (about 60 requests) to verify status and anchors
formatNomarkdown
include_llms_fullNoDownload docs/llms-full.txt (about 6 MB) to check endpoint mentions

TDQS

A4.3/5.0
Behavior4/5

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

There are no annotations, so the description carries the full burden. It discloses substantial behavior: which drift checks are performed and that live=true expands behavior to 404 and anchor verification. It does not mention auth needs, network cost, or report shape, but as a read-only check tool these omissions are minor.

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 dense, front-loaded list sentence covers the tool's purpose, followed by a useful release-process framing sentence. No filler, though the comma-separated list is long enough that it requires a second read to parse all cases.

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 read-only drift-check tool with only optional parameters and no output schema, the description lists the checks and the schema defines options/defaults. Missing details like exact report structure are secondary; enough context is present to select and invoke it 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 covers live and include_llms_full with descriptions; format is only an enum. The description adds context to live by tying it to externalDocs 404/anchor checks and to include_llms_full by mentioning endpoints absent from llms-full.txt. It adds no separate semantics for format, but the enum itself provides usable choices.

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 opens with a specific verb and resource scope: 'Cross-checks the official OpenAPI spec against the official Postman collection and plaid.com/docs'. It then enumerates distinct drift categories (missing endpoints, deprecated/unknown endpoints, externalDocs links, llms-full.txt coverage), which clearly differentiates it from sibling tools like plaid_api_search and plaid_docs_fetch.

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

Usage Guidelines4/5

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

It establishes a clear usage context: 'the maintenance checklist a DevRel engineer would run before each release'. It does not name alternatives or state when not to use it, but the role and timing are explicit enough for an agent to decide when this tool is appropriate.

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

plaid_identity_getGet account-holder identityA

Calls /identity/get. Returns names, emails, phone numbers and addresses the institution holds for each account.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesitem_id from plaid_sandbox_item_create (or a raw access_token you already hold)

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries full responsibility for behavioral disclosure. It implies a read-only operation via 'returns', but does not explicitly state that no side effects occur, that permissions may be needed, or that the item must be in a specific state. The description is accurate but minimal, leaving some behavioral uncertainty.

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 extremely concise—two short sentences that directly state the operation and output. Every word adds value, and the endpoint is front-loaded. No filler or redundancy.

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, the description covers the essential output (the four data types). It does not mention error conditions or authentication requirements, but these are likely secondary for a simple get. Given the simplicity, the description is sufficient, though it could mention that the item must be active or that results vary by institution.

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 schema fully documents the single parameter (item_id) with a clear description, so the description adds no extra parameter meaning. Since schema coverage is 100%, a baseline of 3 is appropriate; the description does not need to restate parameter details.

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 explicitly names the API endpoint (/identity/get) and the exact data returned (names, emails, phone numbers, addresses). This distinguishes it from siblings like plaid_accounts_get or plaid_auth_get, which focus on different data. The purpose is unambiguous and action-specific.

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 guidance on when to use this tool versus alternatives. It does not explain what differentiates identity data from account or balance data, nor does it mention prerequisites like a valid item_id or a linked item. An agent must infer when this tool is appropriate.

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

plaid_item_getGet Item statusA

Calls /item/get. Shows available/billed products, consent expiration, the current error (if any) and webhook URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesitem_id from plaid_sandbox_item_create (or a raw access_token you already hold)

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read-only operation through 'Get' and 'Shows', but it does not explicitly state that no state is modified, nor does it address authentication requirements, rate limits, or error behavior beyond mentioning that an error may be present.

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 a single, tightly written sentence that leads with the endpoint and immediately enumerates the returned fields. Every word adds value and there is no redundancy or 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?

For a simple one-parameter read tool with no output schema, the description adequately covers what the tool does and what information it returns. It does not discuss usage exclusions or side effects, but these are minor given the tool's low 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%, and the one parameter (item_id) is already well documented in the schema, including its provenance. The description adds no additional parameter-level meaning, so the baseline of 3 applies.

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

Purpose5/5

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

The description names the exact endpoint (/item/get), identifies the resource (item), and lists the specific status information returned: available/billed products, consent expiration, current error, and webhook URL. This clearly distinguishes it from siblings like plaid_item_remove or plaid_items_list.

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

Usage Guidelines3/5

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

The description makes it clear this is a status-reading tool, so when an agent needs item status, this is the natural choice. However, it does not explicitly state when not to use it or compare it with alternatives such as plaid_items_list or plaid_drift_check.

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

plaid_item_removeRemove an ItemA

Calls /item/remove, invalidating the access_token, and forgets it in the vault. In production this stops billing for the Item.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesitem_id from plaid_sandbox_item_create (or a raw access_token you already hold)

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure. It is transparent about the destructive side effects: invalidating the access_token, forgetting the item in the vault, and stopping billing in production. It does not explicitly flag irreversibility or mention auth requirements, but the key destructive behavior is clearly exposed.

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 two concise sentences that front-load the core action and then add the important operational consequence. There is no filler or repetition 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?

For a simple one-parameter removal tool with no annotations and no output schema, the description covers the operation, the endpoint, the side effects on access tokens and vault storage, and the production billing impact. It could add a note on irreversibility or response behavior, but the essential information is 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?

The schema already covers the single parameter item_id with a helpful description, so schema coverage is 100%. The tool description itself adds no parameter-specific meaning, which fits the baseline of 3 for high schema coverage.

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 states the specific endpoint (/item/remove), the resource (Item), and the concrete effects: invalidating the access_token, forgetting it in the vault, and stopping billing in production. This clearly distinguishes it from read-only siblings like plaid_item_get and from sandbox reset tools.

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

Usage Guidelines3/5

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

The description gives useful context by noting that in production this stops billing, which implies the removal scenario. However, it does not explicitly state when to use this tool versus alternatives, such as plaid_sandbox_reset_login for a non-destructive reset, nor does it list exclusions.

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

plaid_items_listList Items created in this sessionA

Lists item_ids the vault knows about (no tokens are returned).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does state that no tokens are returned, which is helpful, but it omits that the tool only lists items created in the current session (a key limitation) and does not clarify that it is a read-only operation. The phrase 'the vault knows about' is ambiguous and could mislead an agent into thinking it lists all known items, when the title suggests session-only scope.

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 a single, concise sentence that front-loads the action and includes the key behavioral note about tokens. There is no wasted wording, and it is appropriately brief for a zero-parameter tool.

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 simple list tool with no parameters and no output schema, the description is mostly sufficient. However, it does not clarify the session-specific scope or differentiate from plaid_item_get, which could lead to incorrect selection. Given the large set of sibling tools, a note on when to use this versus alternatives would improve completeness.

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 trivially 100% (empty properties). Per the rubric, the baseline is 4. The description adds no parameter-specific information, but none is needed since no parameters exist.

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 clearly states the action ('Lists') and the resource ('item_ids'), and explicitly notes that tokens are not returned. This distinguishes it from tools that retrieve full item details or tokens, such as plaid_item_get or plaid_auth_get, making the purpose unambiguous.

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 guidance is given on when to use this tool versus the many sibling tools. It does not mention that this is specifically for items created in the current session, nor does it contrast with plaid_item_get or other item-related tools. The title hints at session scope, but the description does not reinforce it, leaving the agent without clear selection criteria.

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

plaid_sandbox_fire_webhookFire a test webhook (sandbox only)A

Calls /sandbox/item/fire_webhook so you can exercise your webhook handler. The Item must have been created with a webhook URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesitem_id from plaid_sandbox_item_create (or a raw access_token you already hold)
webhook_codeNoSYNC_UPDATES_AVAILABLE

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden, and it does so well: it states the REST call, the prerequisite webhook URL, and the intended side effect of driving the user's handler. It does not go into response or error behavior, but for a sandbox webhook trigger these are minor omissions.

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: one front-loads the endpoint and purpose, the other gives the key prerequisite. There is no filler and every sentence 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?

For a 2-parameter, no-output-schema sandbox test action, the description gives the endpoint, reason to call it, and the item validity condition. It could note that a webhook callback will actually be delivered and maybe mention the default event, but those are inferable from the name and schema defaults.

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 schema already documents item_id's allowed source (item_create or raw access_token) and webhook_code's enum/default. The description adds a useful validity constraint on item_id: it must belong to an Item created with a webhook URL, which is not present in the schema and materially affects whether the call succeeds.

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 names the exact endpoint (/sandbox/item/fire_webhook) and the real purpose ('exercise your webhook handler'), so an agent immediately knows what operation this performs. The title's 'sandbox only' also separates it from production Plaid tools, and no sibling tool overlaps with webhook-trigger testing.

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 explicitly says when to use the tool (to exercise a webhook handler) and gives a necessary precondition (the Item must have been created with a webhook URL). It does not name specific alternatives or say 'do not use in production,' but the sandbox-only title and the unique webhook-testing purpose provide enough situational guidance.

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

plaid_sandbox_item_createCreate a sandbox Item (public_token -> access_token in one step)A

Creates a test Item without going through Link: calls /sandbox/public_token/create then /item/public_token/exchange. Stores the access_token in the server vault and returns an item_id you pass to every other tool. Sandbox test institutions: ins_109508 (First Platypus Bank, default), ins_109509 (Tartan Bank), ins_109510 (Houndstooth Bank), ins_109511 (Tattersall Federal Credit Union). Use override_username "user_custom" with custom_user_json to shape the data, or "user_transactions_dynamic" for changing transactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
webhookNoWebhook URL to attach to the Item
productsNoProducts to initialise the Item with
institution_idNoSandbox institution idins_109508
override_passwordNoPassword for the test user (pass_good by default; the custom JSON for user_custom)
override_usernameNoSandbox test user, e.g. user_good (default), user_custom, user_transactions_dynamic

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the disclosure burden. It reveals the multi-step behavior (two API calls), the side effect (access_token stored in server vault), and the return artifact (item_id). It does not cover idempotency or failure behavior, but the important state-changing effects are named.

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 four tightly packed sentences, each earning its place: the core flow, the side effect/return value, the institution list, and the username guidance. It is front-loaded with the main purpose.

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?

Given no output schema, it adequately communicates the return value (item_id) and the state change (stored access_token), plus defaults for institution and usage examples. The unsupported custom_user_json reference is a gap in accuracy, but overall the agent can execute the tool safely.

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?

Because schema coverage is 100%, the baseline is 3. The description adds value by mapping sandbox institution IDs to names and explaining username scenarios, but it also references custom_user_json, which is not a declared parameter in the schema, making the guidance partly misleading.

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 opens with a specific verb-resource pair: creates a test Item without Link. It distinguishes itself from siblings like plaid_link_token_create and item management tools by explaining it performs the public-token-to-access-token exchange in one step.

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 clearly says this is the no-Link sandbox creation route and that the returned item_id is consumed by every other tool, so an agent knows when to choose it. It does not explicitly enumerate exclusions, such as production use, but the sandbox-only framing makes the intended context clear.

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

plaid_sandbox_reset_loginForce ITEM_LOGIN_REQUIRED (sandbox only)A

Calls /sandbox/item/reset_login to put the Item into the error state a real user hits when their bank password changes. Use it to test your update-mode Link flow.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesitem_id from plaid_sandbox_item_create (or a raw access_token you already hold)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and does a good job: it discloses that the tool calls a mutation endpoint, forces an error state, and simulates a credential-change scenario. It stops short of documenting side effects such as whether the access token is invalidated or how the error state is cleared, but the core behavior is transparent.

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 concise sentences accomplish the task: the first tells what happens technically, the second tells why an agent would call it. No filler or repetition of the schema.

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 one-parameter sandbox utility with no output schema, the description is nearly complete: endpoint, effect, sandbox constraint, and intended flow. It could add what a successful response looks like, but this is a minor gap for a test-only 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?

The body adds no parameter guidance, but the input schema already covers item_id 100%, including the source of the id (plaid_sandbox_item_create or raw access_token). With full schema coverage, the description need not repeat this, 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?

The description names the exact endpoint and the specific effect: putting the Item into the ITEM_LOGIN_REQUIRED error state that follows a bank-password change. This clearly differentiates it from siblings such as plaid_sandbox_fire_webhook and plaid_item_remove.

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 explicitly states the intended use case: testing the update-mode Link flow. The title adds the sandbox-only constraint, but the description does not spell out exclusions or direct an agent to an alternative when update-mode testing is not the goal.

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

plaid_transactions_syncSync transactions (cursor-based)A

Calls /transactions/sync and follows has_more until the update is complete, so you get one consistent snapshot. Pass the returned next_cursor on later calls to get only changes. On a brand-new Item the first call can return zero transactions while Plaid is still fetching; the SYNC_UPDATES_AVAILABLE webhook (or a retry after a few seconds in sandbox) signals data is ready.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoTransactions per page
cursorNoCursor from a previous call. Omit for the initial full sync.
item_idYesitem_id from plaid_sandbox_item_create (or a raw access_token you already hold)
max_pagesNoSafety cap on pages fetched in one call

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that the tool follows pagination until complete, that initial syncs may return empty for new Items, and that a webhook signals readiness. It does not mention auth, rate limits, or side effects, but as a sync operation the behavior is sufficiently disclosed for typical use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two sentences that are dense with information and front-load the core behavior. No wasted words; the key behavioral details and usage notes are efficiently delivered.

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?

The description covers the main aspects an agent needs: pagination behavior, cursor usage, and the initial-empty-Item caveat. It does not explicitly describe the return shape (e.g., contains transactions and next_cursor), but given the tool's name and context, this is a minor omission. Overall, it is sufficiently complete for a sync tool.

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 value by clarifying the cursor parameter ('Omit for the initial full sync') and describing max_pages as a 'Safety cap', which supplements the schema. This lifts it above baseline without being redundant.

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 clearly states it calls /transactions/sync and follows has_more until complete, providing a consistent snapshot. It distinguishes itself from sibling tools by focusing on transaction syncing and incremental updates via cursor, making its purpose unambiguous.

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 explains when to use it (initial full sync vs. subsequent incremental syncs with a cursor) and notes that a brand-new Item may return zero transactions initially, suggesting waiting for a webhook or retrying. It provides clear context for usage but does not explicitly mention alternatives, though no sibling directly competes.

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. 20 tool updatesv0.1.0
    • First observedplaid_accounts_get
    • First observedplaid_api_describe
    • First observedplaid_api_request_example
    • First observedplaid_api_search
    • First observedplaid_api_stats
    • First observedplaid_auth_get
    • First observedplaid_balance_get
    • First observedplaid_docs_fetch
    • First observedplaid_docs_search
    • First observedplaid_drift_check
    • First observedplaid_identity_get
    • First observedplaid_institutions_search
    • First observedplaid_item_get
    • First observedplaid_item_remove
    • First observedplaid_items_list
    • First observedplaid_link_token_create
    • First observedplaid_sandbox_fire_webhook
    • First observedplaid_sandbox_item_create
    • First observedplaid_sandbox_reset_login
    • First observedplaid_transactions_sync

TDQS

A4.1/5.0

Scored across 20 tools

Disambiguation5/5

Each tool targets a distinct resource and action: core data endpoints (accounts, balance, transactions, auth, identity), item lifecycle (create, get, list, remove), sandbox testing controls (fire webhook, reset login), API spec exploration (search, describe, request example, stats), docs access, and a drift check. Even similar tools like accounts_get vs balance_get are clearly differentiated by purpose and description.

Naming Consistency5/5

All tools consistently use the 'plaid_' prefix followed by a noun phrase and an action verb (e.g., plaid_accounts_get, plaid_transactions_sync, plaid_sandbox_item_create). The naming pattern is uniform and predictable, making it easy to infer tool purpose from the name alone.

Tool Count5/5

With 20 tools, the server covers a broad set of Plaid development features without feeling bloated. Each tool has a clear role in the developer workflow—from item creation to sandbox controls, API exploration, and documentation—so the count is well-scoped and appropriate for the server's purpose.

Completeness5/5

The tool surface covers the full lifecycle: item creation (via sandbox or Link), data retrieval for accounts, balances, transactions, auth, and identity, item management (get, list, remove), sandbox testing (webhook firing, login reset), API spec introspection, docs access, and release-readiness drift checking. No obvious gaps are apparent for commonly used Plaid endpoints.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP servers for the Plaid API, providing tools to access Plaid financial data and documentation. Includes an authenticated API server for account, transaction, and investment operations, and an unauthenticated docs server for searching Plaid documentation.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Ephemeral mailboxes and a mock OAuth IdP for testing email and auth flows — 39 API-driven tools covering mailboxes, mails, attachments, domains, teams, and mock identities.
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Provides a universal developer operations and diagnostics toolkit with sandboxed code execution, algorithm stress testing, security secret scanning, AST-based code fixes, and a visual dashboard for ERD, port/process inspection, and differential testing.
    28
    20 npm
    3
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to call real API endpoints and verify responses against OpenAPI specs, supporting contract testing, auth presets, spec diffing, and health checks.
    8
    49 npm
    MIT