Skip to main content
Glama
chrischall

honeybook-mcp

by chrischall

HoneyBook MCP

CI npm license

A Model Context Protocol server that connects Claude to the HoneyBook client portal, giving you natural-language access to contracts and invoices sent by your wedding vendors.

WARNING

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

What you can do

Ask Claude things like:

  • "Paste your magic link — I'll connect to your HoneyBook portal."

  • "Show me every unsigned contract."

  • "What invoices do I have due in the next month?"

  • "Summarize the contract from Silk Veil Events."

  • "Give me a deep link to sign the photographer's contract."

  • "What has the planner sent me this month? Read me the checklist."

  • "Reply to Ivy's last message and ask about the rehearsal time."

  • "When is my next Zoom with the planner, and what's the link?"

  • "What have I paid so far, and what's still owed?"

Related MCP server: WealthGuard MCP

Requirements

  • Claude Desktop or Claude Code

  • Node.js 22 or later

  • Magic-link emails from the wedding vendors that use HoneyBook

  • ContextMint Bridge browser extension — in Chrome, download the chrome zip from the releases page and load it unpacked (chrome://extensions → Developer mode → Load unpacked). Safari isn't available yet (it will ship inside the ContextMint app, which has no public download), so use Chrome for now. Used by use_magic_link to snapshot the session out of your signed-in vendor portal tab.

Acknowledgement of Terms

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

1. This server accesses your own HoneyBook workspace. Every request is dispatched through your own signed-in browser session via the ContextMint Bridge extension. It does not — and cannot — access anyone else's workspace.

2. HoneyBook's Terms of Service govern your use of this server, just as they govern your direct use of honeybook.com. The clauses most relevant here:

In connection with your use of the Service you will not engage in or use any data mining, robots, scraping or similar data gathering or extraction methods.

And: users may not "modify, copy, frame, scrape, rent, lease, loan, sell, distribute or create derivative works based on the Service or the Service Content."

You are agreeing to those terms — read by the maintainer 2026-05-23 — every time you invoke a tool in this server. HoneyBook's ToS broadly prohibits data mining and scraping; this MCP is an unofficial automation tool and HoneyBook has not granted it an exception.

3. Personal, single-business use only. This project is not affiliated with, endorsed by, sponsored by, or in partnership with HoneyBook, Inc. It is a personal automation tool that an individual HoneyBook account holder can use to drive their own workspace. Do not use it on behalf of another business, do not bulk-extract HoneyBook's directory or template content, and do not create a derivative SaaS product on top of it.

4. Stability is not guaranteed. This server calls internal HoneyBook endpoints that HoneyBook may change without notice. It may break.

5. You accept full responsibility for any consequences of using this server in connection with your HoneyBook account — rate limiting, account warnings, suspension, or any enforcement action HoneyBook takes. HoneyBook can detect automated traffic and may block your IP or workspace. If HoneyBook objects to your use, stop using this server.

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

Installation

From source

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

Add to Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

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

No environment variables are required. The optional ones below tune how writes are confirmed — see Confirmations.

Sessions

HoneyBook has no public client-portal API. This MCP reuses the same auth state your browser has after clicking a vendor's magic link, via the ContextMint Bridge browser extension.

One-time setup:

  1. Install ContextMint Bridge from its releases page: in Chrome, load the chrome zip unpacked. Safari isn't available yet (it will ship inside the ContextMint app, which has no public download) — use Chrome for now. ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer — fetchproxy's own README (fetchproxy#extension) points to it. Its source is public at nullnet-app/contextmint-bridge: build it yourself, or check a release zip against the .sha256 file published beside it (shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256).

  2. Click each vendor's magic link in your normal browser. That signs you into their *.hbportal.co portal.

Per-vendor activation:

  1. Make sure the vendor's portal tab is open (the magic link from their email).

  2. In Claude, call use_magic_link with the magic-link URL — the tool asks the ContextMint Bridge extension to snapshot the auth fields out of the page's localStorage["HONEYBOOK_REACT_CURR_USER"], then closes the bridge. The tab only has to be open and signed in; nothing is read off a live request. No headless browser is spawned.

  3. All other tools use the most-recently-activated session by default. Pass origin explicitly when multiple vendors are active.

Sessions are stored in memory and persisted to ~/.honeybook-mcp/sessions.json (mode 0600) so they survive MCP restarts. Re-run use_magic_link when a session expires.

A vendor can send a second, different shape of link:

https://<vendor>.hbportal.co/flow/<flowId>?hash=…&userId=…

That one does not sign you into the portal. It opens a single questionnaire and stores a per-flow credential — HoneyBook calls it weak auth — under localStorage["HONEYBOOK_REACT_WEAK_AUTH_<flowId>"]. Capture it with use_flow_link and read it with get_flow.

The two credential kinds are kept apart on purpose, in two files and two stores:

portal session

flow credential

capture tool

use_magic_link

use_flow_link

link shape

/app/link/resolve/…

/flow/<flowId>?hash=…

stored in

~/.honeybook-mcp/sessions.json

~/.honeybook-mcp/flows.json

can read

workspaces, files, invoices, payment methods

that one questionnaire

Each tool refuses the other's link shape by name, and a portal tool asked to run with only a flow credential says so rather than failing later with an opaque HoneyBook error. list_active_sessions reports both kinds, separately.

get_flow makes the same two calls the questionnaire page does: the public GET /api/v2/flow/<flowId>/minimal for the vendor company id, then GET /api/v2/client/flow/<flowId>/active?ctxc=<companyId>. If the first does not carry a company id it stops there and says so — calling /active without ctxc answers a bare 400 that reads like an expired credential.

One thing to expect: the storage key contains the flow id, so every new questionnaire is a new key in the declared fetchproxy scope. The extension gates on the scope you approved at pair time, so it asks you to re-approve once per questionnaire. That is the extension working, not a fault.

Available tools

Tools that touch a vendor accept an optional origin argument (e.g. https://acme.hbportal.co). When only one session is active it is inferred.

Tool

What it does

Permission

use_magic_link

Capture a session from a magic-link URL

Confirm

list_active_sessions

Show active credentials, split by kind

Auto

use_flow_link

Capture a questionnaire (flow) credential

Confirm

get_flow

Read one questionnaire and its answers

Auto

list_workspace_files

Files from one vendor; filter by type

Auto

get_workspace_file

Full detail for one file

Auto

get_workspace

Workspace detail + status flags

Auto

list_payment_methods

Saved payment methods (brand, last 4, expiry)

Auto

sign_contract

Deep link to sign in portal (after you confirm)

Confirm

pay_invoice

Deep link to pay in portal (after you confirm)

Confirm

list_projects

Your projects with a vendor + their workspace ids

Auto

get_project

Project details: date, location, people, custom fields

Auto

list_messages

Messages (or the activity log) in a workspace, newest first

Auto

get_message

One message in full: body, attachments, delivery status

Auto

send_message

Send or reply through the portal (after you confirm)

Confirm

mark_messages_seen

Mark feed items seen (reads never do this on their own)

Auto

list_meetings

Scheduled meetings with join links, latest time wins

Auto

list_tasks

Tasks the vendor assigned you, with counts

Auto

list_notes

Notes the vendor shared

Auto

list_attachments

Loose images, files and bookmarks in a workspace

Auto

list_payments

Payment schedule with paid/unpaid totals

Auto

send_message is the one tool that acts on your behalf: it creates the same send_workspace_message job the portal's Activity composer creates and waits for HoneyBook to finish it, so the vendor receives a normal HoneyBook email. Until you confirm it only previews the recipients, subject and body — see Confirmations.

Confirmations

sign_contract, pay_invoice and send_message ask you to confirm before they act. A client that can show an MCP confirmation prompt (Claude Code) shows one. On a client that cannot (claude.ai, Claude Desktop), the first call does nothing and returns a preview plus a confirmToken; only a repeat call with the same arguments and that token proceeds. A token works once, and is refused if anything it covers changed between the two calls (the file's title, the message body, the workspace's recipients).

variable

default

MCP_CONFIRM_MODE

ask-user

What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). ask-user: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. auto: the same two steps, but the model may use the token after reviewing the preview itself. refuse: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt, unless MCP_CONFIRM_ELICITATION=off. An unrecognised value is treated as refuse.

MCP_CONFIRM_ELICITATION

on

off never sends a confirmation prompt, so every client gets the MCP_CONFIRM_MODE path. Set it for a client that declares it can show prompts but never does (the gated call hangs — opencode 2.0.x). Any other value stays on, with a stderr warning.

MCP_CONFIRM_TTL_SECONDS

600

How long a token stays valid.

MCP_CONFIRM_SECRET

random per process

Signing key; set it only if tokens must survive a server restart.

Troubleshooting

  • "HoneyBook auth expired" — re-open the vendor's magic link in Chrome and re-run use_magic_link.

  • "No active HoneyBook session" — call use_magic_link first.

  • "No active HoneyBook portal session. N flow (questionnaire) credentials are active" — you captured a /flow/ link but the tool you called needs a client-portal one. Run use_magic_link with an /app/link/resolve/… link, or use get_flow to read the questionnaire.

  • "that is a questionnaire (flow) link, not a client-portal link" — use use_flow_link for it.

  • "no auth hash for flow …" — the link you passed had lost its ?hash= parameter (the page rewrites the URL after it loads). Re-copy the original link out of the vendor email.

  • "HoneyBook error 400 … NOT an auth failure" on get_flow — a required input was missing, not your credential. Usually a pinned HONEYBOOK_API_VERSION that has gone stale: unset it so the live value is read from /api/gon. Re-running use_flow_link will not help.

  • "no context id for flow …" — HoneyBook's public /minimal route did not return the vendor company id the questionnaire read needs. Also not a credential problem.

  • "fetchproxy capture failed" — install ContextMint Bridge, then open the vendor's magic link in that browser.

  • "fetchproxy capture timed out" — the extension found no signed-in portal tab to read. Open the vendor's magic link, confirm the portal page has loaded, then retry.

  • "no confirmed browser session" — the extension is connected but has not approved this MCP. Open the ContextMint Bridge popup and approve the pair code it shows, then retry.

  • "this browser … cannot serve the … capability" — the browser you paired lacks an API the capture needs. Nothing is wrong with the MCP or your pairing, and retrying or re-approving will not help: run it from a browser that provides the API (for example Chrome).

  • "localStorage keys not in declared set" — the MCP now reads a storage key your existing pairing doesn't cover. See Upgrading from 0.4.4 or earlier. Retrying will not help, and this is not a version problem.

Upgrading from 0.4.4 or earlier

0.4.5 requires a one-time re-approval in the browser extension. HoneyBook moved the client-portal session out of localStorage["jStorage"] into localStorage["HONEYBOOK_REACT_CURR_USER"], so 0.4.5 reads a different storage key. The extension approves a MCP's declared scope at pair time, so an existing pairing does not cover the new key and every capture is refused with:

localStorage keys not in declared set: HONEYBOOK_REACT_CURR_USER

To fix it, once:

  1. Open the ContextMint Bridge extension popup.

  2. Revoke honeybook-mcp.

  3. Re-run use_magic_link — a fresh pair code appears.

  4. Approve it in the popup. You are approving the new scope.

Nothing else changes: existing sessions in ~/.honeybook-mcp/sessions.json keep working, and a re-capture is only needed if the session itself has expired.

Security

  • Sessions are captured locally — auth tokens never leave your machine

  • ~/.honeybook-mcp/sessions.json is written with mode 0600; directory with mode 0700

  • Write tools (sign_contract, pay_invoice, send_message) ask you to confirm first (see Confirmations); sign_contract and pay_invoice return portal deep links rather than signing/paying headlessly

Development

npm test        # run tests
npm run build   # tsc + esbuild bundle

License

MIT

Available Tools

22 tools
get_flowA
Read-only

Read a HoneyBook questionnaire (flow) — its pages, questions and any answers already submitted — using a credential captured by use_flow_link. Requires a flow credential; a client-portal session will NOT work here, and vice versa. Defaults to the most recently captured flow. Makes two calls: the public /api/v2/flow//minimal for the vendor company id, then /api/v2/client/flow//active, passing that id as ?ctxc= when /minimal supplied one. A questionnaire larger than the default ceiling answers with its size and top-level keys instead; call again with view="raw" for the whole thing.

NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "raw" returns the upstream payload unprojected. compact returns the questionnaire unless it exceeds a byte ceiling, in which case it answers with its size and top-level keys instead; "raw" returns the full payload however large (may exceed MCP size limits).
flow_idNoFlow id to read. Omit to use the most recently captured flow credential. Run `list_active_sessions` to see the active flow ids.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnly/openWorld, but the description adds substantial behavior: the two-call sequence to the public /minimal then /active endpoints with the ?ctxc= parameter, the default-to-latest-flow behavior, and the size-ceiling fallback that returns size and top-level keys until view="raw" is requested. This is real operational context beyond the annotations.

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

Conciseness4/5

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

Front-loads purpose and credential requirements, then layers the two-call mechanics and fallback behavior. Every sentence is informative, though the low-level endpoint paths are more implementation detail than an agent strictly needs to select and invoke the tool.

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

Completeness5/5

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

With no output schema, the description still explains the response shape (compact projection vs raw payload), the truncation fallback, and the credential environment. An agent has everything needed to call it and interpret a size-only response.

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 description coverage is 100%, so both params are already documented, and the description largely restates the compact/raw distinction. It does add workflow meaning by framing view="raw" as the recovery step after a ceiling-truncated response, which links the parameter to observable behavior rather than repeating it.

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

Purpose5/5

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

States a specific verb and resource ('Read a HoneyBook questionnaire (flow)') and enumerates what is returned — pages, questions and submitted answers. This distinguishes it cleanly from generic siblings like get_project or get_workspace, and it ties the tool to the flow credential realm.

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

Usage Guidelines5/5

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

Explicitly states the prerequisite (a credential captured by `use_flow_link`), the exclusion ('a client-portal session will NOT work here, and vice versa'), the default behavior ('most recently captured flow'), and points to `list_active_sessions` for ids. When-to-use and when-not are both spelled out.

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

get_messageA
Read-only

Read one message in full: body (plain text by default, or the original HTML), sender, recipients, attachments and per-recipient delivery status.

NameRequiredDescriptionDefault
formatNoBody format. Default "text".
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.
message_idYesThe message _id from list_messages.
workspace_idYesThe workspace _id (from list_projects, or .workspace._id on any workspace_file).

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description earns credit beyond that by enumerating what the read yields, including per-recipient delivery status and optional original HTML, which is real behavioral context. Permissions and pagination/limits remain unstated, keeping it below a 5.

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

Conciseness5/5

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

A single front-loaded sentence with zero filler; the return contents are enumerated compactly after the verb and scope.

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

Completeness4/5

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

With no output schema, the description usefully carries the return-value burden by listing the fields returned. It is nearly complete for an agent to call it correctly, missing only caveats about session/origin handling and any size or access limits.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented, including the format enum and its "text" default. The description only echoes the text-vs-HTML format choice and adds nothing about origin, workspace_id, or message_id. Baseline 3 is appropriate.

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

Purpose5/5

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

Specific verb ("Read") plus resource ("one message") and an explicit scope of what is returned: body, sender, recipients, attachments, delivery status. This cleanly distinguishes it from list_messages and send_message among the siblings.

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?

"Read one message in full" implies the single-message vs list case, but no alternative is named and there are no stated conditions or prerequisites (e.g., when to prefer list_messages first, or auth/session needs). Usage is inferable but not spelled out.

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

get_projectA
Read-only

Project details — the portal's Overview "Project details" card plus the people on it: name, date, time, timezone, location, guest count, custom fields, cover image, and each participant's name / email / phone / role. view="raw" returns the untrimmed response (large: it embeds the vendor's account).

NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "raw" returns the upstream payload unprojected. compact returns the Overview card plus participants; "raw" returns the untrimmed /details response, which embeds the vendor's whole account.
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.
project_idYesThe project (event) _id from list_projects.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds genuine behavioral value by warning that view="raw" is large and embeds the vendor's whole account — useful for cost/context budgeting, though it says nothing about pagination or errors.

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?

Purpose and return contents are front-loaded, followed by the one non-obvious caveat about raw. Two sentences, no filler, no repetition of the name.

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

Completeness4/5

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

No output schema exists, so the description carries the burden of describing the return shape — and it does, enumerating fields and the compact/raw difference. It omits error/empty-project behavior and session/origin prerequisites, which the schema only hints at.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents project_id, origin, and both view values including the 'embeds the vendor's account' caveat. The description's view="raw" note mostly restates the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific resource (project details) and enumerates exactly what is returned — Overview card fields plus participants. An agent can distinguish it from list_projects, which is referenced in the schema's project_id description.

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

Usage Guidelines3/5

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

Usage is implied: fetch a single project by id, presumably after list_projects. There is no explicit when-to-use/when-not statement and no alternative tool is named, so the agent must infer the routing.

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

get_workspaceB
Read-only

Get full detail for a workspace (vendor project). Includes status flags like has_sent_files, has_signed_files, has_paid_payments.

NameRequiredDescriptionDefault
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.
workspace_idYesThe workspace _id (found on any workspace_file under .workspace._id).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the useful detail that status flags like has_sent_files, has_signed_files, and has_paid_payments are included, but it does not describe permissions, rate limits, or other behavioral traits.

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

Conciseness5/5

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

Two tight sentences with no wasted words. The core purpose is front-loaded, followed immediately by useful return-value examples.

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 getter with full schema coverage and annotations, the description is largely complete. It hints at return contents via status flags, though without an output schema it could say more about what 'full detail' includes.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters fully. The description adds no additional syntax, format, or semantic detail beyond what the schema provides.

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

Purpose4/5

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

The description states a specific verb ('Get') and resource ('full detail for a workspace'), and clarifies the domain alias '(vendor project)'. It does not differentiate from siblings like get_project or get_workspace_file, so it stops 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 Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as get_project or get_workspace_file. The implied context ('full detail') is minimal, leaving the agent to infer usage from the name alone.

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

get_workspace_fileA
Read-only

Get detail for one workspace file. Returns a compact summary by default (metadata, vendor, event, pricing totals, payment schedule, agreement presence). Use section to drill into a specific part of the file: "pricing" for full line items + tax/svc detail, "agreement" for contract HTML + signatures, "payments" for full payment-schedule detail, "all" for the pruned full response, or "raw" for the entirely-unpruned response (may exceed MCP size limits on proposal-class files).

NameRequiredDescriptionDefault
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.
file_idYesThe file _id from list_workspace_files.
sectionNoWhich view to return. Default "summary" (~5-15 kB). Others return focused sections of the raw response.

TDQS

A4.3/5.0
Behavior4/5

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

With readOnlyHint and openWorldHint already declaring the safety profile, the description adds real behavior: the default is a compact summary (~5-15 kB) and 'raw' may exceed MCP size limits on proposal-class files. This size/side-effect context goes beyond the annotations usefully.

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

Conciseness4/5

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

Purpose is front-loaded, followed by enumerated section semantics. Slightly long but every clause earns its place; minor redundancy between naming the section and describing its content.

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

Completeness4/5

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

No output schema exists, so the description must carry return-value context, and it does by describing what each section returns. Adequate for a single-file detail tool, though the origin parameter and its session dependency are not elaborated here.

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% (baseline 3), and the description still adds meaning by spelling out what each section returns (line items + tax/svc, contract HTML + signatures, full payment schedule), which the enum description does not fully capture.

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

Purpose5/5

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

States a specific verb+resource ('Get detail for one workspace file') and clarifies its scope versus the list sibling (single file, not a list). The default response shape is described, so an agent immediately knows what this returns relative to list_workspace_files.

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

Usage Guidelines4/5

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

Gives clear guidance on when to use each `section` value (pricing for line items, agreement for contract HTML, raw for unpruned). It does not explicitly name alternative tools, but the drill-down guidance is actionable and context is clear.

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

honeybook_healthcheckVerify credentials and upstream reachabilityA
Read-onlyIdempotent

Resolves the credential the way real tools do, then makes one authenticated request to api.honeybook.com. Reports which source supplied the credential, whether api.honeybook.com accepted it, the round-trip time, and a plain-English hint distinguishing 'no credential' from 'credential rejected' from 'a api.honeybook.com-side problem'. Read-only; never returns the credential itself. Call this when a real tool fails and you want to know which hop broke.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark it read-only and idempotent, and the description adds substantial behavior beyond that: it makes exactly one authenticated request, reports the credential source and acceptance, never returns the credential, and distinguishes failure categories. This goes well beyond the annotation hints and avoids any contradiction.

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

Conciseness5/5

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

Four sentences, each carrying distinct information: what action is performed, what is reported, read-only/credential safety, and when to call it. There is no filler, repetition, or schema duplication.

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

Completeness5/5

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

With no parameters, no output schema, and no nested objects, the description carries the full burden of explaining the tool. It covers purpose, behavior, output contents, safety properties, and invocation timing. Nothing an agent needs to correctly invoke and interpret this 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, with schema coverage at 100%, so the baseline is 4. The description adds no parameter-level detail because none is needed, but it does explain what the tool does with its implicit credential input, which is contextually relevant.

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 a specific verb ('resolves', 'makes', 'reports') and a concrete resource (api.honeybook.com), and clearly frames the tool as a credential/upstream healthcheck. This distinguishes it from all sibling tools, which are operational actions like list_messages or pay_invoice.

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

Usage Guidelines4/5

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

The description gives explicit guidance: 'Call this when a real tool fails and you want to know which hop broke.' This clearly tells an agent when to use it, though it does not enumerate exclusions or name alternative diagnostic tools if any exist.

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

list_active_sessionsA
Read-only

List the HoneyBook credentials currently active in this MCP, split by kind: portalSessions (captured via use_magic_link — read workspaces, files, invoices, payment methods) and flowCredentials (captured via use_flow_link — weak auth scoped to ONE questionnaire). The two are not interchangeable. No API call.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds two useful facts beyond them: 'No API call' (no rate limit, no network side effects) and that flowCredentials is 'weak auth scoped to ONE questionnaire'. It does not discuss caching or freshness of the listed credentials, so not a 5.

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

Conciseness4/5

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

Three dense sentences, front-loaded with the core action and then the two-way split. Every clause carries information, though the parenthetical capability lists make it slightly heavy for a no-argument discovery tool.

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

Completeness5/5

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

No output schema exists, yet the description names the two return keys (portalSessions, flowCredentials) and what each represents, so an agent knows the response shape and how to interpret it. Combined with the safety annotations, nothing needed to call this correctly is missing.

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

Parameters4/5

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

Zero parameters, so the baseline is 4. There is nothing for the description to clarify about inputs, and it does not attempt to.

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?

Specific verb ('List') plus precise resource ('HoneyBook credentials currently active in this MCP'), further decomposed into the two returned keys. An agent can distinguish this from get_workspace, use_magic_link, and the other siblings without opening any schema.

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

Usage Guidelines4/5

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

The description explains what each credential kind grants access to and warns 'The two are not interchangeable', which is real guidance for choosing a credential. It falls short of explicitly stating when to call this tool versus a sibling (e.g., as a precondition check before use_magic_link), so it is context-rich but not full when/when-not routing.

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

list_attachmentsA
Read-only

Loose images, files and bookmarks shared in a workspace — the portal's Files tab, minus the contracts/invoices/proposals that list_workspace_files covers.

NameRequiredDescriptionDefault
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.
workspace_idYesThe workspace _id (from list_projects).

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered and the description only needs to add context. It contributes scope semantics (what the set excludes, the 'portal Files tab' mental model) but says nothing about pagination, ordering, or volume limits of the result set.

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

Conciseness5/5

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

A single sentence with an em-dash gloss; the scoping exclusion is front-loaded and every clause earns its place. No boilerplate or repetition of the tool name.

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 list tool with full schema coverage and annotations, the description supplies the key missing piece — what is and is not in the result. With no output schema present it could also sketch the returned shape, but the content-type framing largely compensates.

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% with only two parameters, so the schema already documents workspace_id and origin fully. The description adds no parameter-level meaning (no format, enumeration, or default guidance), so the baseline 3 applies.

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

Purpose4/5

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

The description names the exact resource returned (loose images, files and bookmarks in a workspace) and explicitly contrasts it with list_workspace_files, which covers contracts/invoices/proposals. The listing action itself is only implied by the tool name rather than stated verb-first, but the scope is 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?

It states the exclusion boundary against a named alternative — the contracts/invoices/proposals belong to list_workspace_files — which effectively routes the agent to the right sibling. It stops short of an explicit when-to-use/when-not statement or any prerequisite (e.g. session/origin requirement).

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

list_meetingsA
Read-only

Meetings the vendor has scheduled in a workspace (consultations, Zoom calls, walkthroughs): title, start/end, timezone, join link and password. Derived from the workspace feed, so a rescheduled meeting shows its latest time. Sorted by start.

NameRequiredDescriptionDefault
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.
workspace_idYesThe workspace _id (from list_projects).

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and openWorldHint=true, so the description correctly focuses on traits beyond that: it discloses the feed-derived source of truth, that rescheduled meetings surface their latest time, and that results are sorted by start. Pagination and volume limits are not disclosed, keeping it short of a 5.

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

Conciseness5/5

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

Two sentences, densely packed with resource scope, return fields, freshness semantics and sort order, with the core purpose front-loaded. No filler or restatement of the name.

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 list tool with full schema coverage and no output schema, the description supplies return fields, ordering and freshness semantics, which is most of what an agent needs. Missing pagination/result-count behavior keeps it from perfect.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (origin, workspace_id) are already fully documented in the schema. The description adds only an implicit workspace scoping notion and no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

Names the concrete resource ('meetings the vendor has scheduled in a workspace'), enumerates the sub-types it covers (consultations, Zoom calls, walkthroughs), and lists the returned fields. No sibling tool covers meetings, so the boundary is unambiguous.

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

Usage Guidelines3/5

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

Usage is implied by the workspace scoping and the note that data comes from the workspace feed, but the description never states when to reach for this tool versus alternatives or what happens if workspace_id is unknown. With no competing meeting tool the gap is minor, but no explicit routing guidance is given.

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

list_messagesA
Read-only

List the messages (and optionally the activity log) in a workspace — the portal's Activity tab. Returns compact cards (sender, subject, preview, seen state, attachments), newest first; call get_message for a full body. Reading does NOT mark anything as seen.

NameRequiredDescriptionDefault
kindNo"messages" (default): emails and portal messages. "activity": everything else — meetings scheduled, files signed, payments, reminders, AI recaps. "all": both.
limitNoMax items to return (default 50).
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.
workspace_idYesThe workspace _id (from list_projects, or .workspace._id on any workspace_file).

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real behavioral context beyond that: results are compact cards rather than full bodies, they are ordered newest first, and critically that reading does NOT mark anything seen — a non-obvious side-effect guarantee relevant to a mailbox tool.

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 tightly packed sentences with zero filler; the core scope and return shape are front-loaded and the alternative tool plus the seen-state caveat follow immediately after.

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?

Although no output schema exists, the description compensates by enumerating the returned card fields (sender, subject, preview, seen state, attachments) and the ordering. Combined with full parameter coverage and clear annotations, an agent has everything needed to call this correctly.

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

Parameters3/5

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

Schema description coverage is 100% and the enum for kind is fully documented in the schema, so the baseline is 3. The description restates the messages/activity split but adds no format, default, or interaction detail beyond what the schema already provides.

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

Purpose5/5

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

States a specific verb (List) and resource (messages/activity log in a workspace) and grounds it in the UI surface ('the portal's Activity tab'). It also names the sibling that returns full content (get_message), so an agent can separate it from adjacent tools without opening a schema.

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

Usage Guidelines4/5

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

Explicitly routes the agent to get_message 'for a full body' and clarifies that reading does not mark items seen, implicitly contrasting with mark_messages_seen. It does not, however, say when to prefer this over other listing siblings (list_attachments, list_payments, list_tasks) or address the activity vs messages choice in prose beyond the schema.

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

list_notesB
Read-only

Notes the vendor has shared with you in a workspace (meeting notes, AI recaps) — the portal's Notes tab.

NameRequiredDescriptionDefault
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.
workspace_idYesThe workspace _id (from list_projects).

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds that notes are vendor-shared and scoped to a workspace, but says nothing about pagination, ordering, or the multi-session origin behavior that the schema hints at.

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 front-loaded clause with a scoping anchor and concrete examples; no filler, no repetition of schema/annotations.

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 filtered-list read tool with full schema coverage and annotations, the description is adequate but thin: no return-shape hint (and none available, since no output schema), no pagination or empty-result behavior, and no sibling contrast. Enough to call it, not enough to call it confidently.

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

Parameters3/5

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

Schema description coverage is 100%, so both workspace_id and origin are already documented in the schema (including the 'from list_projects' hint and the single-session condition). The description adds no parameter-level meaning, so the baseline 3 applies.

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

Purpose4/5

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

Clear verb+resource: it lists notes shared by the vendor in a workspace, and concretely anchors them (meeting notes, AI recaps, the portal's Notes tab). It does not name or contrast any sibling (e.g. list_workspace_files, list_attachments), so it stops short of the 5.

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, when-not-to-use, or alternative routing is given. The parenthetical domains imply what content is returned but never say when to prefer list_notes over list_workspace_files or list_messages.

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

list_payment_methodsA
Read-only

List saved payment methods for your client account with a vendor: id, type, brand, last 4, expiry and whether it is the default. Empty array if none are saved. view="raw" returns the untrimmed records (billing name/address and Stripe references).

NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "raw" returns the upstream payload unprojected. compact returns only the card-on-file fields; "raw" returns the untrimmed records, including billing name/address and Stripe references.
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds genuine behavioral context beyond that: the empty-array outcome when nothing is saved, and that view="raw" exposes untrimmed records including billing name/address and Stripe references, which is sensitive-data disclosure the annotations do not convey.

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

Conciseness4/5

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

Three tight sentences, front-loaded with purpose, then edge case, then the view flag. The raw-view clause largely duplicates the schema's own view description, which is the only minor waste.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the returned fields and the empty-result case, and annotations cover the read-only profile. It leaves the origin parameter's session behavior to the schema, which is acceptable given the schema documents it fully.

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 view enum is fully documented in the schema, including the compact/raw distinction. The description restates the raw-view behavior but adds no syntax, defaults, or constraints the schema lacks, 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?

States a specific verb and resource ('List saved payment methods') scoped to a client account with a vendor, and enumerates the returned fields. This clearly separates it from the sibling list_payments, which deals with payments rather than stored instruments.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: an agent can infer it retrieves saved cards, but there is no explicit when-to-use, no exclusion, and no pointer to list_payments or other siblings for related data. The empty-array note is the only boundary condition given.

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

list_paymentsA
Read-only

Payment schedule for a workspace — the portal's Payments tab: each file's payments with amount, due date, paid/pending state, how it was paid and the invoice number, plus paid/unpaid totals per currency. To pay one, use pay_invoice.

NameRequiredDescriptionDefault
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.
workspace_idYesThe workspace _id (from list_projects).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real context beyond that: it discloses the return shape (per-file payments with state, method, invoice number) and the aggregation behavior (paid/unpaid totals per currency), which an agent needs to interpret results.

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

Conciseness4/5

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

Front-loaded with the resource and scope, then the return contents, then the routing note. The field enumeration is long-ish but each item is genuinely informative about output, so little is wasted.

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

Completeness4/5

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

With no output schema, the description carries the burden of explaining returns and does so well, including the per-currency totals. It leaves pagination/sorting behavior unstated, a minor gap for a list tool.

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

Parameters3/5

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

Schema description coverage is 100%, so both workspace_id and origin are already documented in the schema; the description adds no syntax or format detail beyond the implied workspace scope. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('Payment schedule for a workspace') and goes further by enumerating the returned fields (amount, due date, paid/pending, method, invoice number, per-currency totals). It is immediately distinguishable from the write-side sibling pay_invoice, which it names.

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?

Explicitly routes the write action away from this tool ('To pay one, use pay_invoice'), giving the agent a clear read-vs-pay decision. It does not, however, distinguish this from other list-style siblings such as list_payment_methods or explain when a caller would reach for this versus the Payments tab in general.

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

list_projectsA
Read-only

List your projects with a vendor (HoneyBook calls them events): name, date, booked flag and the workspace_id that every other workspace tool takes. This is the portal's project switcher.

NameRequiredDescriptionDefault
pageNoPage number; omit for the first page.
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered; the description adds value beyond that by enumerating the returned fields (name, date, booked flag, workspace_id). It omits pagination/sorting behavior, which matters given the 'page' parameter, keeping it below a 5.

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

Conciseness5/5

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

Two tightly packed sentences with no filler; the identity of the tool ('List your projects') is front-loaded, followed by terminology, return shape, and role. Every clause earns its place.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the returned fields and the cross-tool purpose of workspace_id, making it largely self-sufficient for a simple, unauthenticated-safe list tool. The only gap is pagination behavior implied by the 'page' parameter.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters ('page' and 'origin') are already fully documented in the schema, making 3 the baseline. The description's mention of workspace_id pertains to the response, not to an input parameter, so it adds no parameter-level meaning.

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

Purpose5/5

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

States a specific verb and resource ('List your projects') and immediately clarifies the vendor's own terminology ('HoneyBook calls them events'), removing ambiguity for an agent trained on the generic term. It also names the returned fields and frames itself as the 'portal's project switcher', which separates it from the singular get_project sibling.

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

Usage Guidelines4/5

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

The description gives clear context for when to reach for it: to obtain the workspace_id that 'every other workspace tool takes', and to act as a project switcher. It does not, however, name any alternative (e.g. get_project for a single item) or state exclusions, so it falls short of a 5.

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

list_tasksA
Read-only

Tasks the vendor has assigned to you in a workspace — the portal's Tasks tab — with the today / this week / overdue / completed counts and any task groups. Sorted by due date.

NameRequiredDescriptionDefault
pageNoPage number (default 1).
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.
per_pageNoPage size (default 50).
curr_dateNoYYYY-MM-DD the counts are bucketed against (default: today).
workspace_idYesThe workspace _id (from list_projects).

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the read-only and open-world safety profile, so the bar is lower. The description adds real behavioral context: it discloses what is returned (today/this week/overdue/completed counts plus task groups) and the ordering (sorted by due date), which the agent cannot infer from annotations or 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?

A single front-loaded sentence with no filler: it identifies the resource first, then scope, then return content and ordering. Every clause carries information.

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

Completeness4/5

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

No output schema exists, so the description carries the burden of explaining the return shape, and it does (counts and task groups, sorted by due date). Pagination and session/origin handling are left to the schema, which is acceptable given full schema coverage.

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 the schema already documents all five parameters including the curr_date bucketing and workspace_id source. The description's reference to 'today / this week / overdue' counts loosely reinforces curr_date semantics but adds no syntax or format detail beyond the schema.

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

Purpose5/5

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

States a specific resource (tasks), scope (vendor-assigned to you in a workspace), and even maps it to a concrete UI location (the portal's Tasks tab). No sibling tool overlaps with tasks, so the agent can identify it unambiguously.

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

Usage Guidelines3/5

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

Usage is implied by the description (list tasks for a workspace) but there is no explicit when-to-use, when-not-to-use, or named alternative. No sibling competes for this resource, so the gap is mild rather than harmful.

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

list_workspace_filesA
Read-only

List all files a vendor has shared with you (contracts, invoices, brochures, proposals). Optionally filter by file_type. Follows every page; returns { files, complete } — complete:false means some files could not be fetched. Each file is a light summary row by default (id, title, type, status, sent date, workspace, payment/acceptance flags); call get_workspace_file with its _id for pricing, contract or payments, or pass view="all" for every pruned file object (large).

NameRequiredDescriptionDefault
viewNoDefault "summary": one light row per file. "all": each file object with the heavy vendor-side company fields pruned (can be hundreds of kB per proposal).
originNoPortal origin (e.g. https://<vendor>.hbportal.co) to target. Optional — defaults to the most recently activated session.
file_typeNoFilter to one file type. Omit to return all.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint, so the description carries the rest and does so well: it discloses pagination behavior ("Follows every page"), the exact return shape { files, complete }, and the meaning of complete:false. It also warns that view="all" produces large payloads (hundreds of kB per proposal) and enumerates the default summary row fields.

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?

Front-loaded with the core action, then streamed as tight clauses covering filtering, pagination, return shape, and the drill-down path. Every sentence carries information; nothing is redundant with the schema or annotations.

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

Completeness5/5

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

No output schema exists, yet the description fully specifies the return envelope, the failure signal (complete:false), default vs. full row shape, and the follow-up tool. Nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds value beyond the schema by describing the default summary row contents and the size tradeoff of view="all". It does not restate origin's session-defaulting behavior, which stays in the schema.

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

Purpose5/5

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

States a specific verb+resource (list all files a vendor has shared) and enumerates the domain objects (contracts, invoices, brochures, proposals). It is immediately distinguishable from the sibling get_workspace_file, which it explicitly names as the drill-down alternative.

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

Usage Guidelines5/5

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

Gives explicit routing: use this list tool by default, call get_workspace_file with a row's _id when pricing/contract/payment details are needed, and only pass view="all" when every pruned file object is required. Optional file_type filtering is also covered with an omit-to-return-all default.

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

mark_messages_seenA
DestructiveIdempotent

Mark feed items as seen (what the portal does when you open the Activity tab). list_messages and get_message never do this on their own.

NameRequiredDescriptionDefault
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.
message_idsYesFeed item _ids from list_messages.
workspace_idYesThe workspace _id (from list_projects, or .workspace._id on any workspace_file).

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety and repeatability profile is covered. The description adds useful context that this mirrors an implicit portal side effect, but it never explains what 'seen' means to recipients or whether the change is reversible, leaving the destructive hint unelaborated.

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 waste; the core action is front-loaded and the clarifying sibling comparison follows. Every clause earns its place.

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?

No output schema exists and this is a destructive mutation, yet the description omits what happens to the items afterward and whether other users are affected. The portal-behavior analogy partially compensates, but gaps remain for an operation flagged destructive.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (origin, message_ids, workspace_id) are already fully documented with sourcing hints. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Mark feed items as seen') and anchors it to a familiar behavior ('what the portal does when you open the Activity tab'). It also explicitly distinguishes itself from list_messages and get_message, so an agent can tell it apart from read siblings without opening any schema.

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

Usage Guidelines4/5

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

The note that list_messages and get_message 'never do this on their own' strongly signals when this tool is needed (to advance the seen state after reading). However, there is no explicit when-not guidance and no mention of batching or prerequisites such as an active session.

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

pay_invoiceA
Read-only

Pay an invoice from a vendor. In v1 this returns a deep link to the HoneyBook portal instead of paying headlessly — it moves no money itself; the user pays in their browser. It still asks the user to confirm before handing over the link: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

NameRequiredDescriptionDefault
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.
file_idYesThe invoice file _id from list_workspace_files (file_type=invoice).
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.

TDQS

A4.3/5.0
Behavior5/5

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

Adds rich behavior beyond the annotations: it explicitly states no money moves, returns a portal deep link, and details the confirmation flow including the two-step preview/confirmToken fallback. This is consistent with readOnlyHint=true (no server-side mutation) and openWorldHint=true (external portal), so there is no contradiction and substantial added context.

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

Conciseness4/5

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

Front-loads the core action and the critical v1 caveat in the first sentence. The remainder is dense and readable, though the em-dash clauses and parenthetical about MCP_CONFIRM_MODE make it slightly sprawling for a single paragraph.

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

Completeness4/5

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

With no output schema, the description does the work of describing the return (deep link, or preview + confirmToken) and the confirmation handshake. It is nearly complete, though it does not describe the shape/format of the returned link or the preview payload.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents file_id, origin, and confirmToken in detail, establishing a baseline of 3. The description reinforces the confirmToken lifecycle but adds little parameter detail the schema does not already carry.

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?

Opens with a specific verb+resource ('Pay an invoice from a vendor') and immediately disambiguates the behavior an agent would otherwise assume by naming a sibling-adjacent concept (list_payments vs this action). The v1 caveat makes clear this is the payment action, distinct from the read-only listing tools.

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

Usage Guidelines4/5

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

Explains the operational context (v1 returns a deep link; user pays in browser) and the confirmation modes, referencing MCP_CONFIRM_MODE. However, it never explicitly names an alternative tool or states a when-not-to-use condition, so routing against siblings like list_payments is left to inference.

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

send_messageA
Destructive

Send a message to the vendor (and the other members of the workspace) through the HoneyBook portal, exactly as the Activity tab composer does. HoneyBook emails it to every recipient. Pass reply_to_message_id to reply in-thread (the subject is inherited). Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). If HoneyBook has not finished sending within about a minute the result has status "pending" and a task_id; if it did not answer the send request at all the status is "unknown". Either way the message may still be delivered, so check list_messages before resending.

NameRequiredDescriptionDefault
bodyYesMessage text. Plain text is sent as-is (line breaks preserved). Simple HTML formatting (p, br, b, i, a href, lists, tables) is kept; other tags are shown as text and attributes other than an http(s)/mailto link are dropped.
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.
subjectNoRequired for a new message; optional on a reply.
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
workspace_idYesThe workspace _id (from list_projects, or .workspace._id on any workspace_file).
reply_to_message_idNoA message _id from list_messages to reply to.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark it as destructive, non-idempotent and open-world, and the description goes well beyond that: it discloses the two-step confirmation fallback, the pending/task_id and unknown outcomes, and the fact that a message may still be delivered even when send status is uncertain. This is exactly the extra context annotations cannot carry.

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

Conciseness4/5

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

Dense and front-loaded — the purpose and audience come first, then confirmation mechanics, then failure modes. It is longer than average but nearly every clause carries operational information an agent needs; only the parenthetical about MCP_CONFIRM_MODE could be trimmed.

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

Completeness5/5

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

No output schema exists, and the description compensates by describing the response categories (confirmation-required preview with confirmToken, pending with task_id, unknown) and the retry guidance. Nothing essential to invoking it correctly is missing.

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

Parameters4/5

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

With 100% schema description coverage the baseline is 3, but the description adds real meaning: reply_to_message_id inherits the subject, confirmToken is phase-2-only and must never be invented or reused, and the call must repeat with identical arguments.

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 a specific verb (Send), resource (a message), audience (the vendor and other workspace members), and channel (HoneyBook portal / Activity composer). It is trivially distinguishable from siblings like list_messages or get_message.

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

Usage Guidelines5/5

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

It covers when this tool applies, how the confirmation requirement must be satisfied in each client mode, that a repeat call with confirmToken is required, and how to recover from uncertain delivery ('check list_messages before resending'). Explicit behavioral routing rather than implied usage.

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

sign_contractA
Read-only

Sign a contract you received from a vendor. In v1 this returns a deep link to the HoneyBook portal instead of signing headlessly — it signs nothing itself; the user signs in their browser. It still asks the user to confirm before handing over the link: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

NameRequiredDescriptionDefault
originNoPortal origin (e.g. https://<vendor>.hbportal.co). Optional when only one session is active.
file_idYesThe agreement file _id from list_workspace_files (file_type=agreement).
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.

TDQS

A4.2/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true and openWorldHint=true, and the description adds substantial context beyond that: it discloses that signing happens in the browser, that the tool hands over a deep link, and that a confirmation gate (elicitation or two-step confirmToken) is always enforced. This is exactly the behavioral detail an agent needs and it is consistent with the read-only annotation.

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?

It is front-loaded with the purpose and the important correction that it does not sign, but the middle sentences are dense with nested parentheticals about confirmation modes. Slightly longer than necessary, though every clause carries real information.

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

Completeness5/5

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

With no output schema, the description does the work of explaining what comes back (a deep link) and the two-phase confirmation contract. For a deceptively named tool with no output schema, this is complete enough to call correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so origin, file_id and confirmToken are already fully documented in the schema. The description restates the confirmToken fallback and references MCP_CONFIRM_MODE, which adds a little framing but is largely redundant with the schema, so the baseline 3 applies.

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

Purpose5/5

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

The description opens with a specific verb+resource ('Sign a contract you received from a vendor') and then immediately corrects a natural misreading by stating it returns a deep link and signs nothing itself. This makes the tool's true function unambiguous and distinguishes it from the other session/link 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?

It implies the use case (a contract from a vendor) and explains the confirmation flow, but never names an alternative or states when to pick this over siblings like use_magic_link or use_flow_link. The when-to-use context is implied rather than explicit.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv1.2.7
    • Changedlist_workspace_files1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Default \"summary\": one light row per file. \"all\": each file object with the heavy vendor-side company fields pruned (can be hundreds of kB per proposal).",
        +  "enum": [
        +    "summary",
        +    "all"
        +  ],
        +  "type": "string"
        +}
    • Changedsend_message1 field changed
      • changedInput schema / properties / body / description
        Previous value: -"Message text. Plain text is sent as-is (line breaks preserved); HTML is passed through."New value: +"Message text. Plain text is sent as-is (line breaks preserved). Simple HTML formatting (p, br, b, i, a href, lists, tables) is kept; other tags are shown as text and attributes other than an http(s)/mailto link are dropped."
  2. 1 tool updatev1.2.2
    • Changeduse_magic_link1 field changed
      • changedInput schema / properties / magic_link_url / description
        Previous value: -"Full magic-link URL from the vendor's HoneyBook email, e.g. https://<vendor>.hbportal.co/app/workspace_file/<id>/...  Used only to derive the portal origin; you must already have this URL open in a Chrome tab with the fetchproxy extension installed."New value: +"Full magic-link URL from the vendor's HoneyBook email, e.g. https://<vendor>.hbportal.co/app/workspace_file/<id>/...  Used only to derive the portal origin; you must already have this URL open in a Chrome tab with the ContextMint Bridge extension installed."
  3. 4 tool updatesv1.2.1
    • Changedlist_payment_methods1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"raw\" returns the upstream payload unprojected. compact returns only the card-on-file fields; \"raw\" returns the untrimmed records, including billing name/address and Stripe references.",
        +  "enum": [
        +    "compact",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • Changedpay_invoice2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
    • Changedsend_message2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to actually send. Without it the tool returns a preview of what would go out.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
    • Changedsign_contract2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added value: +{
        +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
        +  "type": "string"
        +}
  4. 21 tool updatesv1.0.0
    • Changedget_flow1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_message1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_project1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_workspace1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_workspace_file1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedhoneybook_healthcheck1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_attachments1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_meetings1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_messages1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_notes1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_payment_methods1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_payments1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_projects1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_tasks1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_workspace_files1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmark_messages_seen1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedpay_invoice1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsend_message1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsign_contract1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changeduse_flow_link1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changeduse_magic_link1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  5. 2 tool updatesv0.10.1
    • Changedget_flow2 fields changed
      • removedInput schema / properties / section
        Removed value: -{
        -  "description": "Default \"summary\" returns the questionnaire unless it exceeds a byte ceiling, in which case it answers with its size and top-level keys instead. \"raw\" returns the full payload however large (may exceed MCP size limits).",
        -  "enum": [
        -    "summary",
        -    "raw"
        -  ],
        -  "type": "string"
        -}
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"raw\" returns the upstream payload unprojected. compact returns the questionnaire unless it exceeds a byte ceiling, in which case it answers with its size and top-level keys instead; \"raw\" returns the full payload however large (may exceed MCP size limits).",
        +  "enum": [
        +    "compact",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • Changedget_project2 fields changed
      • removedInput schema / properties / section
        Removed value: -{
        -  "description": "Default \"summary\".",
        -  "enum": [
        -    "summary",
        -    "raw"
        -  ],
        -  "type": "string"
        -}
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"raw\" returns the upstream payload unprojected. compact returns the Overview card plus participants; \"raw\" returns the untrimmed /details response, which embeds the vendor's whole account.",
        +  "enum": [
        +    "compact",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
  6. 14 tool updatesv0.9.0
    • Addedget_flow
    • Addedget_message
    • Addedget_project
    • Addedhoneybook_healthcheck
    • Addedlist_attachments
    • Addedlist_meetings
    • Addedlist_messages
    • Addedlist_notes
    • Addedlist_payments
    • Addedlist_projects
    • Addedlist_tasks
    • Addedmark_messages_seen
    • Addedsend_message
    • Addeduse_flow_link

TDQS

A3.8/5.0

Scored across 22 tools

Disambiguation4/5

Most tools target a distinct resource+action (get_workspace, list_messages, pay_invoice, sign_contract), and descriptions carefully separate the portal-session vs flow-credential families. However, there is real conceptual overlap between get_workspace (a 'vendor project') and get_project (the portal's Overview), and between list_workspace_files and list_attachments, which could cause occasional misselection.

Naming Consistency4/5

Nearly the entire set follows a snake_case verb_noun convention (list_projects, get_message, send_message, sign_contract, pay_invoice, mark_messages_seen). The only deviation is honeybook_healthcheck, which uses a server-prefixed style rather than a verb_noun form.

Tool Count4/5

22 tools is on the heavy side but justified by a genuinely broad client-portal domain spanning credentials, projects, workspaces, files, payments, messages, tasks, notes and meetings. No tool appears obviously redundant.

Completeness3/5

Read coverage is thorough across the portal, but write/action coverage is thin: clients cannot submit questionnaire answers (get_flow only reads them), upload or share files, or perform most mutating actions beyond messaging, signing and paying. These gaps could cause dead ends for common client workflows.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers