plaid-devx-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@plaid-devx-mcpcreate a sandbox test item and list its accounts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
plaidNode SDK. Access tokens stay in a server-side vault; the model only ever sees anitem_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 buildFree 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 |
| unset | Plaid API keys. Sandbox secret recommended. |
|
|
|
|
| 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 |
|
| One call to a working Item. Supports |
| (local) | Items created this session, no tokens printed. |
|
| Accounts with type, subtype, mask, balances. |
|
| Real-time balances, optional |
|
| Follows |
|
| ACH, wire, EFT, BACS numbers. |
|
| Account-holder names, emails, phones, addresses. |
|
| Item status, products, consent expiry, current error. |
|
| Invalidates the token and forgets it. |
|
| Fire |
|
| Force |
|
| Find |
|
| 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 |
| OpenAPI | Keyword search across path, summary, description. Deprecated hidden by default. |
| OpenAPI | Request fields with required flag, type, enum; 200 example; docs link; deprecation. |
| OpenAPI | Minimal valid body from the required fields, rendered as curl and as |
| OpenAPI | Spec version, live/deprecated/hidden counts, all 31 sandbox-only endpoints. |
| plaid.com/docs/llms.txt | Search the page index Plaid publishes for LLMs. |
| plaid.com/docs/*/index.html.md | Fetch any docs page as Markdown, paged by offset. |
| OpenAPI + Postman + docs | Endpoints missing from Postman, Postman hitting deprecated or unknown endpoints, placeholder or missing |
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:
"Create a sandbox Item at First Platypus Bank with transactions and auth."
plaid_sandbox_item_createruns/sandbox/public_token/createthen/item/public_token/exchangeand returnsitem_id."List its accounts and the routing numbers for the checking account."
plaid_accounts_getthenplaid_auth_get. Sandbox routing number is011401533."Sync all transactions and total the spend by category."
plaid_transactions_syncpages throughhas_more; the model sumspersonal_finance_category.primary. On a brand-new Item the first sync can be empty for a few seconds while Plaid fetches history; ask again."Simulate the user changing their bank password, then show me the Item error and what my app should do."
plaid_sandbox_reset_loginthenplaid_item_getshowsITEM_LOGIN_REQUIRED; the fix is Link update mode with a newlink_token(plaid_link_token_createwith anaccess_token)."Run the docs drift check and give me the three fixes you would ship first."
plaid_drift_checkwithlive: 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: noneas a placeholder and 18 have noexternalDocsat all, so SDKs generated from the spec ship without a docs link for 33 endpoints.4
externalDocspages return 404 (/api/products/beta/,/api/products/issues,/api/profile/), covering 10 endpoints.36
externalDocsanchors 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_reportdoes 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 # cleanThe 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_fetchonly fetcheshttps://plaid.com/URLs.Production is opt-in twice (
PLAID_ENV=productionandPLAID_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 toolsplaid_accounts_getGet accounts for an ItemB
Calls /accounts/get. Returns account ids, names, types, subtypes, masks and balances.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | item_id from plaid_sandbox_item_create (or a raw access_token you already hold) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. '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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Endpoint path, e.g. /accounts/get | |
| include_response_fields | No | Also list response schema fields |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Fields to merge over the generated placeholders | |
| path | Yes | ||
| format | No | both |
TDQS
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.
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.
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.
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.
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.
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_searchSearch Plaid API endpointsA
Keyword search over every endpoint in the official Plaid OpenAPI spec (path, summary, description). Deprecated endpoints are hidden unless asked for.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | e.g. "transactions sync", "webhook sandbox", "identity" | |
| include_deprecated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose a behavioral trait: deprecated endpoints are hidden unless include_deprecated is set. However, it does not mention any other behaviors such as return format, ranking, or pagination. The description adds some value but remains minimal; for a read-only search tool, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the core purpose and then the key behavioral nuance. Every word earns its place with no fluff or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 3 parameters, no output schema, and no annotations. The description covers what it searches and the deprecated behavior, but does not describe the output format or any limitations (e.g., how results are returned, whether pagination is handled). An agent might need to infer the output, which could be risky. It is acceptable for a simple search tool but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only 'query' has an example description). The tool description does not explicitly explain 'limit' or 'include_deprecated', though it indirectly references the latter via 'deprecated endpoints are hidden unless asked for'. It adds no semantics for 'limit' (e.g., default, range, purpose). Given low schema coverage, the description should compensate but does not, leaving the agent with incomplete parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (keyword search) and the resource (every endpoint in the official Plaid OpenAPI spec), including the fields searched (path, summary, description). It distinguishes itself from siblings like plaid_docs_search or plaid_institutions_search by explicitly targeting the OpenAPI spec, and notes deprecated endpoints are hidden by default. This is a specific verb+resource with scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this is for searching endpoints by keyword across the OpenAPI spec. It implies the use case of finding endpoints, but does not explicitly state when to prefer it over alternatives like plaid_api_describe or plaid_docs_search, nor does it mention any exclusions. Since the context is clear but exclusions/alternatives are absent, it fits 'clear context, no exclusions'.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | item_id from plaid_sandbox_item_create (or a raw access_token you already hold) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | item_id from plaid_sandbox_item_create (or a raw access_token you already hold) | |
| account_ids | No | Limit to these account ids |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | A plaid.com/docs URL, e.g. https://plaid.com/docs/transactions/ | |
| offset | No | ||
| max_chars | No |
TDQS
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.
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.
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.
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.
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.
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_docs_searchSearch Plaid docs pagesA
Searches the page index Plaid publishes at plaid.com/docs/llms.txt (guides, API reference, Link, webhooks, errors). Returns page titles and URLs; fetch one with plaid_docs_fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it provides useful behavioral detail: it searches a specific index, covers the content categories, returns titles and URLs, and points to the fetch tool. It does not mention error/empty-result behavior, but nothing in the description is misleading or hidden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the source, scope, output, and the follow-up action with zero filler. The most important action and output are front-loaded and the sibling handoff is concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential call context: what is searched, where the index comes from, what is returned, and what to do next. It leaves out minor details like pagination or empty-result edge cases, but the tool is simple enough that this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the two parameters, but the description never mentions 'query semantics' or 'limit' beyond the schema. The only useful parameter clue is indirect via the word 'Searches', which is insufficient for the low-coverage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('searches'), a precise resource ('the page index Plaid publishes at plaid.com/docs/llms.txt'), and names the output ('page titles and URLs'). It also differentiates from plaid_docs_fetch as a follow-up, so an agent can distinguish this search tool from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool: to discover docs pages and then fetch one with plaid_docs_fetch, explicitly naming the follow-up alternative. It lacks an explicit 'when not to use' guidance against plaid_api_search, but the scope is clear enough for correct routing.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | Fetch each externalDocs page (about 60 requests) to verify status and anchors | |
| format | No | markdown | |
| include_llms_full | No | Download docs/llms-full.txt (about 6 MB) to check endpoint mentions |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | item_id from plaid_sandbox_item_create (or a raw access_token you already hold) |
TDQS
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.
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.
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.
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.
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.
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_institutions_searchSearch institutionsA
Calls /institutions/search. In sandbox this returns the test banks; in production it searches the full network. Useful for finding institution_id and OAuth status.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Institution name, e.g. "Chase" or "Platypus" | |
| products | No | Only institutions supporting these products | |
| country_codes | No |
TDQS
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 add valuable context: sandbox returns test banks while production searches the full network. However, it does not describe output format, pagination, authentication needs, or rate-limit behavior, which would further help an agent understand what happens when calling this endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the endpoint, environment difference, and practical use case with no filler. The most important information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a relatively simple search tool with three schema-documented parameters and no nested objects. The description covers the sandbox/production distinction and the key use cases, which is sufficient for an agent to decide to call it; the lack of an output schema is mitigated by the stated purpose of finding institution_id and OAuth status.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description itself adds no parameter-level detail, but the schema covers query with an example and products with an enum and a one-line explanation. country_codes lacks a real description beyond its default, and schema description coverage is only moderate at 67%, so the description does not compensate but is not badly deficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact API endpoint, /institutions/search, and identifies the tool's output purpose: finding institution_id and OAuth status. It is clearly distinct from siblings like plaid_items_list or plaid_transactions_sync, though it does not explicitly name an alternative tool to differentiate from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is useful: discovering institution IDs and OAuth status, and it notes sandbox behavior vs production behavior. It does not provide explicit when-not-to-use guidance or name alternatives, but the use case is stated directly rather than left to inference.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | item_id from plaid_sandbox_item_create (or a raw access_token you already hold) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | item_id from plaid_sandbox_item_create (or a raw access_token you already hold) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_link_token_createCreate a Link tokenA
Calls /link/token/create. Use this when you want the real Link UI (web or mobile) instead of the sandbox shortcut. Pass the returned link_token to Plaid Link on the client; when Link returns a public_token, exchange it with /item/public_token/exchange. Sandbox Link accepts user_good / pass_good.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | Your stable id for the end user (client_user_id) | devx-user-1 |
| webhook | No | ||
| language | No | en | |
| products | No | ||
| client_name | No | plaid-devx-mcp demo | |
| redirect_uri | No | Required for OAuth institutions; must be registered in the Dashboard | |
| country_codes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the two-step flow (link_token then public_token exchange) and sandbox credentials, which is useful. However, it does not disclose side effects, rate limits, or what happens on the Plaid side when a token is created. The description adds some behavioral context but not rich detail; a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences and front-loads the core purpose and usage. The sandbox credentials sentence is useful but could be considered extra; still, it earns its place for testing. No wasted words, though the flow explanation could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a token-creation tool with no output schema, the description covers the main flow, the alternative, and sandbox credentials. It does not explain the return value shape (link_token field) or OAuth redirect requirements beyond the schema, but the schema covers redirect_uri. The description is complete enough for an agent to call it correctly in the common case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 29%, so the description must compensate. It does not explain any of the 7 parameters beyond what the schema already provides. The schema already documents user_id, redirect_uri, and defaults, but the description adds no parameter-level meaning. With low coverage and no compensation, a 3 is the baseline for adequate but not helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Calls /link/token/create'), the resource (Link token), and the intended use case (real Link UI vs sandbox shortcut). It also names the sibling tool it is not (sandbox shortcut), which distinguishes it from plaid_sandbox_item_create. An agent can tell this apart from siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool ('when you want the real Link UI (web or mobile) instead of the sandbox shortcut') and gives the follow-up flow: pass the returned link_token to Plaid Link, then exchange the public_token with /item/public_token/exchange. It also provides sandbox credentials (user_good / pass_good), which is actionable context for testing. This is clear when-to-use guidance with an alternative implied.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | item_id from plaid_sandbox_item_create (or a raw access_token you already hold) | |
| webhook_code | No | SYNC_UPDATES_AVAILABLE |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| webhook | No | Webhook URL to attach to the Item | |
| products | No | Products to initialise the Item with | |
| institution_id | No | Sandbox institution id | ins_109508 |
| override_password | No | Password for the test user (pass_good by default; the custom JSON for user_custom) | |
| override_username | No | Sandbox test user, e.g. user_good (default), user_custom, user_transactions_dynamic |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | item_id from plaid_sandbox_item_create (or a raw access_token you already hold) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Transactions per page | |
| cursor | No | Cursor from a previous call. Omit for the initial full sync. | |
| item_id | Yes | item_id from plaid_sandbox_item_create (or a raw access_token you already hold) | |
| max_pages | No | Safety cap on pages fetched in one call |
TDQS
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.
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.
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.
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.
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.
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.
20 tool updates
v0.1.0- First observed
plaid_accounts_get - First observed
plaid_api_describe - First observed
plaid_api_request_example - First observed
plaid_api_search - First observed
plaid_api_stats - First observed
plaid_auth_get - First observed
plaid_balance_get - First observed
plaid_docs_fetch - First observed
plaid_docs_search - First observed
plaid_drift_check - First observed
plaid_identity_get - First observed
plaid_institutions_search - First observed
plaid_item_get - First observed
plaid_item_remove - First observed
plaid_items_list - First observed
plaid_link_token_create - First observed
plaid_sandbox_fire_webhook - First observed
plaid_sandbox_item_create - First observed
plaid_sandbox_reset_login - First observed
plaid_transactions_sync
TDQS
Scored across 20 tools
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.
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.
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.
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
Related MCP Connectors
Sandbox workspace tools: search, file read, DB queries, integrations. Returns synthetic data.
AI-callable tools for API mocking, testing, monitoring, security, and automation.
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Public agentic AI doctrine tools plus authenticated architecture, design, and spec validators.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP 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.-

MinuteMail MCPofficial
AlicenseNot gradedqualityAmaintenanceEphemeral 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- AlicenseBqualityAmaintenanceProvides 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.2820 npm3MIT
- AlicenseAqualityCmaintenanceEnables AI agents to call real API endpoints and verify responses against OpenAPI specs, supporting contract testing, auth presets, spec diffing, and health checks.849 npmMIT