Skip to main content
Glama

Server Details

Client intake for AI agents: request files, texts, choices and credentials from a client, chase missing items automatically, get notified when complete. Hosted Streamable HTTP endpoint with OAuth 2.1 (PKCE, dynamic client registration); the same tools as the @briefgate/mcp npm package.

Ownership verified
Status
Healthy
Uptime
48.9% over 27 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.5/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a distinct resource and action: creation, update, listing, retrieval, and management of intakes, items, recipients, folders, and webhooks are cleanly separated. There is no ambiguity between get_intake_status and get_intake_results, or between update_intake and update_item.

Naming Consistency5/5

Every tool follows the same verb_noun snake_case pattern (e.g., define_intake, get_intake_results, create_folder, send_chase). While define_intake could arguably be create_intake, the verb choice is intentional and uniform across the entire set.

Tool Count5/5

13 tools is well within the ideal 3-15 range for a specialized intake-management server. Each tool addresses a distinct operational need without bloat or redundancy.

Completeness4/5

The lifecycle is well covered: creation, monitoring, retrieval, revision, reminders, and recipient/webhook management are all present. The only notable gap is the absence of a delete/archive tool for intakes, though the domain may intentionally avoid destructive operations via the API.

Available Tools

13 tools
add_itemsAdd items to an intakeAInspect

Add new items to an already-sent intake — for example, when you realise mid-project that you also need a favicon, social media assets, or additional credentials.

The client is notified about the new items. Existing items and their submitted values are not affected. Returns the updated intake object.

Items must follow the same key/type/label rules as define_intake (snake_case keys, type-specific constraints).

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesNew items to add. Same schema as define_intake items.
intake_idYesIntake ID returned by define_intake.

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsNo
statusNo
folder_idNo
follow_upNoHow to learn this intake is done — present unless a webhook already covers it. Mirrors FollowUpAdvice in client.ts.
intake_idNo
portal_urlNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false (mutation), destructiveHint=false (not destructive), and idempotentHint=false. The description adds important behavioral details: the client is notified, existing items are untouched, and returns the updated intake. It doesn't mention potential side effects like rate limits, but the client notification is a key behavioral trait not captured in annotations.

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

Conciseness5/5

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

The description is three short paragraphs: one for purpose with examples, one for behavioral notes, and one for validation rules. It is front-loaded with the core purpose, and every sentence adds value without unnecessary fluff.

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

Completeness4/5

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

For a mutation tool with 2 parameters and an output schema, the description is mostly complete. It specifies the items schema references another tool, mentions notification and non-impact on existing items, and returns the updated intake. The only minor gap is not detailing validation failure behavior (e.g., partial additions), but the output schema and schema coverage mitigate this.

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 fully documents the parameters and their properties. The description adds minimal extra meaning beyond referencing 'same rules as define_intake' and the snake_case key requirement, but since the schema covers it, a 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?

The description clearly states the verb ('Add') and resource ('items to an intake'), and specifies the exact use case: adding items after an intake has been sent, with examples. It distinguishes itself from siblings like update_intake and define_intake by focusing on post-send additions.

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

Usage Guidelines5/5

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

The description explicitly says when to use this tool: when you need to add items to an already-sent intake, and gives concrete examples. It also implicitly differentiates from define_intake (for initial definition) and update_item (for modifying existing items) by stating existing items are not affected.

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

create_folderCreate a folderAInspect

Create a new folder to group intakes, e.g. one per client.

Call list_folders first and reuse a matching folder — only create one when none of the existing folders fits. Fails with folder_exists if a folder with this name already exists; use list_folders to find it instead.

Returns the created folder { id, name, sort_order, intake_count, created_at }.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFolder name, e.g. the client's or project's name. Must be unique in your account.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
created_atNo
sort_orderNo
intake_countNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the duplicate-name error condition, the uniqueness requirement, and the exact return payload. This gives the agent clear expectations about side effects and failure behavior.

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?

Every sentence earns its place: purpose, usage guidance, error condition, and return value. The most important routing instruction is front-loaded, and the description is compact without being vague.

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

Completeness5/5

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

For a single-parameter creation tool with annotations and an output schema, the description covers the essential context: when to create, what happens on duplicates, and what the response contains. Nothing needed 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.

Parameters3/5

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

The schema already documents the 'name' parameter with uniqueness and examples, so coverage is 100%. The description adds the grouping use case but does not materially improve parameter understanding 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?

The description clearly states the tool creates a new folder to group intakes, with a concrete example ('one per client'). It distinguishes this tool from list_folders by framing creation as the fallback when no existing folder fits.

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 instructs the agent to call list_folders first, reuse a matching folder, and only create when none matches. It also names the duplicate error and directs the agent back to list_folders, leaving no ambiguity about when to use this tool.

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

define_intakeCreate client intakeA
Idempotent
Inspect

Create a new client intake request — a branded portal where the client submits logos, copy, files, credentials, and other assets. BriefGate sends the invite email and chases the client automatically until all items are collected.

Call this once at the start of a project, after you know what assets you need. Returns { intake_id, portal_url, status, follow_up }. Save intake_id — you need it for all follow-up calls.

AFTER CREATING AN INTAKE, SET UP HOW YOU WILL LEARN IT IS DONE. Nothing pushes to you on its own: MCP is request/response, so the server cannot wake you when the client finishes. Creating the intake and never checking again is the common failure — the completed work then sits in the portal until a human happens to look. The returned follow_up block tells you which of the two mechanisms applies:

  • follow_up.recommended = "webhook" — the account already has an endpoint; deliveries will arrive there and you need do nothing further.

  • follow_up.recommended = "schedule" — no endpoint is registered. If you control a service that can receive public HTTPS, register one with manage_webhook. Otherwise tell the user to set up a recurring check (cron, a systemd timer, a scheduled task in their agent host) that calls get_intake_status every follow_up.schedule.every_hours hours until follow_up.schedule.until, and offer to configure it for them.

Example: { "project_name": "Website for John Finance", "client": { "email": "john@example.com", "name": "John", "language": "cs" }, "due_date": "2026-08-15", "branding": { "accent_color": "#1B2A4A", "sender_name": "Radim" }, "items": [ { "key": "logo", "type": "image", "label": "Company logo", "constraints": { "formats": ["svg","png"], "min_width": 512 } }, { "key": "hero_copy", "type": "longtext", "label": "Homepage headline (2–3 sentences)", "constraints": { "max_chars": 400 } }, { "key": "wp_admin", "type": "secret", "label": "WordPress admin credentials" }, { "key": "photos", "type": "file_list", "label": "Photos (5–10 images)", "constraints": { "formats": ["jpg","png","heic"], "min_count": 5, "max_count": 15 } } ] }

Item types: text, longtext, file, file_list, image, color_list, select (one of options[]), multiselect (several of options[]; min_count/max_count in constraints), boolean, url, secret (encrypted; the value is shown only on the first retrieval), structured (requires schema with JSON Schema).

DECISIONS — questions for the account holder, not the client. An item with assignee="owner" and type select/multiselect is a question only the account holder can answer ("does the discounted plan cost 19 or 29?"). It can carry an optional "proposed" answer, e.g. proposed = { value: "19", rationale: "matches the competitor we benchmarked" }, which is stored separately from the account holder's answer and clearly labelled as a proposal.

get_intake_results returns the current answer with meta..decided_by: "owner" when the account holder answered in the dashboard, "agent_proposal" while only the proposal exists. A proposal cannot be confirmed through this API; only the account holder answers it. Item keys must be snake_case (e.g. "logo", "hero_copy", "ga4_id") — they become property names in get_intake_results.

ParametersJSON Schema
NameRequiredDescriptionDefault
sendNoWhether to send the invite email immediately. Default: true. Set to false to create a draft and call /v1/intakes/:id/send later.
itemsYesList of assets to collect. Each item has key, type, label, and optional constraints.
clientYesClient contact details.
brandingNoOverride account-level branding for this intake.
due_dateNoDeadline in YYYY-MM-DD format. Shown in the portal and used to escalate chase cadence.
templateNoTemplate slug to pre-populate items (e.g. "restaurant-website", "consulting-firm").
folder_idNoPut this intake in an existing folder from list_folders instead of leaving it unfiled. Folders group intakes by client or project — reuse one for a returning client rather than creating a duplicate with create_folder.
retentionNoHow long BriefGate keeps this intake after it is finished. Default: purged 90 days after the client completes. Use mode "on_delivery" when the intake holds anything sensitive (credentials, personal photos): the contents are then removed shortly after YOU collect them with get_intake_results, because at that point you already have the files and there is no reason for a copy to sit on our server. An intake you never collect still expires on the day count, so this can only ever delete data earlier, never later. Example: { "mode": "on_delivery" } — or { "mode": "days", "days": 7 } to just shorten the window.
email_copyNoYour own subject and intro lines, overriding the built-in translation for this intake. Placeholders: {sender}, {project}, {client}, {count}, {minutes}, {due}. An unknown placeholder is rejected rather than rendered literally to the client. Layout, button and footer stay as they are.
client_briefNoFree-text brief shown to the client at the top of the portal, above the requested items — information from you to them: an offer, instructions, or context for why you are asking for these items. Up to 5000 characters. Documents attached to the brief go through the REST endpoint POST /v1/intakes/:id/brief/files (dashboard or REST — not available through this MCP tool set).
project_nameYesHuman-readable project name shown in the invite email and portal heading.
chase_at_timeNoLocal time of day to send reminders at, "HH:MM" in the client's timezone (e.g. "07:00"). Anchors the cadence to a clock time instead of counting from the invite, and needs an interval measured in whole days. Naming a time deliberately overrides quiet hours, so "07:00" stays 07:00.
max_remindersNoReminders to send before the intake is marked stalled and handed back to you (default 3). An integer from 1 to 1000, or the string "unlimited" to keep reminding until the client finishes. Raise it for a rapid cadence, which would otherwise exhaust three attempts in minutes. A bounce or spam complaint always cancels the remaining reminders, whatever this is set to.
chase_intervalNoHow often to remind, only with chase_schedule="custom". Pair with chase_interval_unit. Defaults to every 3 days when omitted. The interval must work out to at least 5 minutes and at most 90 days.
chase_scheduleNoAutomated reminder cadence. default=T+2d,T+5d,T+9d,weekly. gentle=T+3d,T+8d,biweekly. aggressive=T+1d,T+3d,T+5d,every-other-day. custom=every chase_interval chase_interval_unit. off=no auto reminders.
auto_approve_hoursNoHours after submission before an item is auto-approved without agent review. Default: 72. Set to 0 to require explicit approval.
chase_interval_unitNoUnit for chase_interval. Defaults to "days".
respect_quiet_hoursNoHold reminders to the client's 08:00-19:00 local window (default true). A cadence of minutes or hours pauses overnight and resumes in the morning; set false to send around the clock.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo
noticesNoCadence caveats, present only when chase_schedule="custom" makes them relevant.
follow_upNoHow to learn this intake is done — present unless a webhook already covers it. Mirrors FollowUpAdvice in client.ts.
intake_idNo
portal_urlNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations, the description reveals important side effects: the invite email is sent, BriefGate chases the client automatically, and nothing pushes back because MCP is request/response. It also warns about the common failure of never checking, explains the follow_up block, and even flags the blank-name pitfall ('Hello,' to someone being asked for their admin password).

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

Conciseness4/5

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

The description is long, but the length is largely justified by 18 parameters, nested objects, and complex lifecycle behavior. It is front-loaded with the core purpose, then uses titled blocks and a concrete example; some content slightly repeats schema details, so it is not perfectly lean.

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?

Covers creation, the returned contract, follow-up setup, item and assignee semantics, naming constraints, and failure modes. An output schema exists, so the description does not need to enumerate return fields beyond the key { intake_id, portal_url, status, follow_up } shape. Nothing an agent needs to decide whether, when, or how to call it is missing.

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

Parameters5/5

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

The schema already covers 100% of parameters, but the description adds substantial meaning beyond it: a full example intake, snake_case key rule, semantics for each item type, assignee='owner' behavior, proposal/decided_by flow, retention nuances, and chase cadence details. This materially improves an agent's ability to construct correct requests.

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 'Create a new client intake request — a branded portal where the client submits logos, copy, files, credentials, and other assets' with a specific verb, resource, and outcome. The create-vs-manage distinction is clear from 'Call this once at the start of a project' and from the sibling tool names like update_intake and add_items.

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 says to call this once at the project start after the needed assets are known, and gives detailed post-create guidance on setting up follow-up via webhook or schedule. It does not explicitly name alternatives like update_intake for modifying an existing intake, so exclusion guidance is implied rather than fully stated.

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

get_intake_resultsCollect intake resultsA
Destructive
Inspect

Retrieve the typed submitted values from a client intake.

Files are returned as signed download URLs that expire after 24 hours.

Secrets (type=secret, e.g. passwords, API keys) are decrypted and included only in the first retrieval. Later calls return first_reveal: false in meta and omit the value, so the user should be ready to receive a secret before this tool is called on an intake that contains one.

Use only_new=true to get only items submitted since the last call (useful in webhook-driven workflows). Use include_pending=true to also return partially filled items.

Returns { results: { : }, meta: { : { type, status, submitted_at, first_reveal? } } }.

For a DECISION item (assignee=owner, type select/multiselect), results holds the current answer and meta..decided_by is "owner" (answered by the account holder) or "agent_proposal" (only a proposal exists). Proposals are returned even without include_pending. A proposal does not bump revision, so only_new returns decisions the account holder has answered or changed since the last call.

ParametersJSON Schema
NameRequiredDescriptionDefault
only_newNoReturn only items submitted or updated since the previous get_intake_results call. Default: false.
intake_idYesIntake ID returned by define_intake.
include_pendingNoInclude items not yet submitted (useful for partial progress checks). Default: false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYesKeyed the same as results.
statusYes
resultsYesKeyed by this intake's own item keys. A value's shape depends on that item's type.
intake_idYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations flag destructiveHint=true, readOnlyHint=false, and idempotentHint=false, and the description explains exactly why: secrets are decrypted and included only on the first call, later calls omit the value with first_reveal: false; files expire after 24 hours; and proposals are returned without include_pending yet don't bump revision, so they don't trigger only_new. This is rich behavioral disclosure fully consistent with 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?

The description is lengthy but well-structured: the purpose is front-loaded, and each paragraph addresses one distinct concern (files, secrets, flags, return shape, decision items). The explicit 'Returns { results ... }' block is partially redundant given the stated output schema, but every sentence carries distinct, non-fluff information that an agent needs.

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

Completeness5/5

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

For a tool with this much behavioral nuance — one-time secret reveal, signed URL expiry, and the interplay of proposals with only_new — the description covers the full calling surface: return shape, parameter effects, side effects, and edge cases like decided_by being 'owner' versus 'agent_proposal.' Nothing an agent needs to call 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 a baseline of 3 applies. The description adds real meaning beyond the schema: it explains only_new's 'since the last call' semantics and the revision/proposal nuance that affects it, and clarifies include_pending as partial-progress inclusion. intake_id is already self-explanatory from the schema, so the added value is concentrated but meaningful.

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 opening line 'Retrieve the typed submitted values from a client intake' uses a specific verb and resource, and it clearly distinguishes the tool from siblings like get_intake_status (status vs. values) and list_intakes. The remainder of the description reinforces exactly what data the tool returns (results plus meta), leaving no ambiguity about its core function.

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 concrete usage context: only_new is positioned 'useful in webhook-driven workflows,' include_pending is for 'partial progress checks,' and a precondition warns the user to be ready to receive a secret. However, it never names an alternative sibling or states when not to use this tool (e.g., versus get_intake_status), so explicit tool-routing guidance is missing.

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

get_intake_statusCheck intake progressA
Read-onlyIdempotent
Inspect

Check the completion status of a client intake — which items are submitted, pending, or need revision; the history of automated chase emails sent; and when the client last opened the portal.

Use this to decide whether to send a manual reminder (send_chase), request a revision (request_revision), or fetch results (get_intake_results). Returns per-item status and chase history.

This is also the call a scheduled check should make when no webhook is registered — see follow_up in the define_intake response for the cadence. When status becomes "completed", fetch the results with get_intake_results and carry on with the work that was waiting on them.

ParametersJSON Schema
NameRequiredDescriptionDefault
intake_idYesIntake ID returned by define_intake (e.g. "in_8f3k").

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
chasesYes
statusYes
due_dateNo
progressYes
intake_idNo
client_briefNoThe brief shown to the client above the requested items, if one is set.
client_last_seenNo

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, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful context beyond that: it mentions the tool returns chase history and last-open time, and it specifies the scheduled-check behavior ('This is also the call a scheduled check should make when no webhook is registered'). This enriches the agent's understanding without contradicting 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?

The description is efficiently written, with the core purpose in the first sentence and usage guidance following. It is front-loaded and each sentence earns its place, though there is slight redundancy in restating 'Returns per-item status and chase history' after already listing those items. Overall, it is compact and well-organized.

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 tool with a single parameter and an output schema, the description covers purpose, usage scenarios, and the scheduled-check exception. It references the defining tool (define_intake) and the result tool (get_intake_results), giving the agent a clear workflow. The only minor gap is that it doesn't describe pagination or volume limits, but that is likely covered by the output schema and the tool's simplicity.

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 description does not add new parameter information. It only restates that intake_id comes from define_intake, which is already in the schema. The baseline of 3 for high coverage applies, as the description does not need to compensate for missing schema documentation.

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 ('Check the completion status of a client intake') and enumerates the exact information returned (submitted/pending/revision status, chase email history, last portal open). It also names sibling tools to route selection, distinguishing it from get_intake_results, send_chase, and request_revision.

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 when to use this tool versus alternatives: 'Use this to decide whether to send a manual reminder (send_chase), request a revision (request_revision), or fetch results (get_intake_results).' It also provides a specific scheduled-check scenario with the cadence source ('follow_up in the define_intake response') and the follow-up action when status completes. No ambiguity.

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

list_foldersList foldersA
Read-onlyIdempotent
Inspect

List the folders in your account, used to group intakes by client or project.

Call this before create_folder or before setting folder_id on define_intake, update_intake, or list_intakes — reuse an existing folder for a returning client instead of creating a duplicate.

Returns { folders: [{ id, name, sort_order, intake_count, created_at }] }.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
foldersYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the return structure (folders array with fields) and the reuse context, which goes beyond annotations. No contradictions. A 4 is appropriate because the description contributes useful behavioral context on top of annotations.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the purpose and immediately followed by usage guidance and return format. No fluff, every sentence earns its place. The structure is efficient and easy to scan.

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

Completeness5/5

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

For a simple, parameterless read-only tool with an output schema, the description covers the purpose, usage timing, return structure, and even provides a reason to call it. Nothing an agent needs to invoke it correctly is missing. The description is complete and self-sufficient.

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

Parameters4/5

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

The tool has zero parameters, so there is nothing to describe. Schema coverage is trivially 100%. The baseline for 0 params is 4, and the description does not need to add parameter information since none exist. It correctly omits any param details.

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

Purpose5/5

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

The description clearly states it lists folders used for grouping intakes by client/project, with a specific verb and resource. It distinguishes itself from siblings by naming when to call it (before create_folder, etc.) and why (reuse existing folder). This fully clarifies the tool's purpose and differentiates it from alternatives.

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

Usage Guidelines5/5

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

The description explicitly instructs when to use the tool: 'Call this before create_folder or before setting folder_id on define_intake, update_intake, or list_intakes.' It also provides an anti-pattern (avoid creating duplicates) and names the alternative action (reuse existing folder). This is exemplary usage guidance.

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

list_intakesList intakesA
Read-onlyIdempotent
Inspect

List all intakes in your account, optionally filtered by status, client email, folder, or a text search.

Use this to get an overview of active projects, find a specific intake by the client's email when you have lost the intake_id, check how many intakes are currently in progress, or see what's in a folder from list_folders.

Returns { intakes: [...], total } where each intake includes intake_id, project_name, status, created_at, due_date, folder_id, and portal_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-text search: matches a substring of project name, client name, or client email.
limitNoMaximum number of results (1–100). Default: 20.
offsetNoPagination offset. Default: 0.
statusNoFilter by intake status. Omit to return all.
folder_idNoFilter by folder, using an id from list_folders. Pass the literal string "none" to see only intakes that are not in any folder.
client_emailNoFilter by client email address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
intakesYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already carry readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the description does not need to repeat those traits. It adds useful behavioral context by specifying account scope, optional filtering, and the exact response envelope with the fields included in each intake.

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

Conciseness4/5

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

The description is well structured and front-loaded: operation and filters first, then use cases, then return shape. The use-case sentence is slightly longer than strictly necessary, but each listed scenario earns its place by clarifying when an agent should call this 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?

For a list tool with six optional filters and zero required parameters, this description is complete: it states the operation, gives decision triggers, names the related list_folders tool, and documents the response shape. Annotations cover the safety and idempotency profile, so the agent has enough to call it correctly.

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

Parameters3/5

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

The input schema has 100% parameter description coverage, including details like q substring matching, limit range, folder_id 'none' semantics, and default values. The description only summarizes the filter categories and adds no new parameter-level meaning, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The first sentence clearly states the operation ('List all intakes in your account') and the filter dimensions available ('status, client email, folder, or a text search'). The return-shape sentence reinforces that this is a list-level tool, distinguishing it from single-intake siblings like get_intake_status and get_intake_results.

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 second paragraph gives concrete use cases: overviewing active projects, finding an intake by client email when intake_id is lost, counting in-progress intakes, and inspecting a folder from list_folders. It does not explicitly tell the agent when not to use this tool or route to single-intake alternatives, but the context is clear enough to guide selection.

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

manage_recipientsManage intake recipientsA
Destructive
Inspect

Add, remove, or reinstate a person who receives an intake's invite and reminders, alongside or instead of the primary client.

action="add" invites another address the same way also_notify does at define_intake time — its own message, its own bounce state; pass name to address it by name. action="remove" stops future reminders to that address. action="reinstate" is for a bounce that was wrong — the person did get the e-mail — and clears the bounce flag so reminders resume; if that address was the only one still being chased, the schedule is re-planned from now.

Fails if the address is not on the intake, or — for reinstate — if it never bounced in the first place.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoTheir name, used to address their copy. Only used with action="add".
emailYesThe recipient's e-mail address.
actionYesWhat to do with the address.
intake_idYesIntake ID returned by define_intake.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description reveals important side effects beyond the annotations: it stops future reminders, clears the bounce flag, re-plans the schedule if the reinstated address was the only one being chased, and fails under specific conditions. This gives the agent a much clearer picture of what mutating the recipient list entails.

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

Conciseness5/5

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

The description is front-loaded with the overall purpose, then unpacks each action in turn, and ends with failure conditions. There is no filler or repetition of schema text; every sentence contributes a distinct fact needed to choose and invoke an action.

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 an output schema present and annotations already signaling mutation, destructiveness, and idempotency, the description covers all operational essentials: action semantics, parameter roles, error conditions, and schedule re-planning. An agent has enough to call the tool correctly without additional inference.

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 parameters are already documented. The description adds useful semantic detail by explaining what each action actually does to the recipient and when name is relevant, which goes beyond the schema's brief field descriptions.

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 opening sentence names the resource (intake recipients) and the three operations (add, remove, reinstate), making the tool's purpose specific. It also distinguishes this from creation-time recipient setup by referencing 'also_notify does at define_intake time', so an agent understands this manages recipients after intake creation.

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?

Each action is tied to a concrete scenario: add invites, remove stops reminders, and reinstate clears a wrong bounce. The reference to define_intake's also_notify gives context for when this tool is the right post-creation choice, though it stops short of explicitly saying 'do not use for initial recipient setup'.

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

manage_webhookManage webhook endpointsA
Destructive
Inspect

Register, list, or remove a webhook endpoint so BriefGate pushes intake events to your service instead of you polling for them.

Use this ONLY if you control a service that can receive public HTTPS requests. An agent running in a terminal cannot — for that case do not register anything and check on a schedule with get_intake_status instead. A registered endpoint that cannot receive produces failing deliveries and a false impression that the work is being watched.

action="create" returns a signing "secret" exactly once. The receiving service needs it to verify the signature on every delivery (verifyWebhookSignature from @briefgate/mcp/webhook), and it cannot be shown again. If it is ever exposed, there is no rotation in place — delete the endpoint and create a new one, which issues a fresh secret.

Events: intake.completed (all required items in — the one to act on), item.submitted (a single item arrived), client.viewed (the client opened the portal), chase.bounced (a reminder failed to deliver), intake.overdue (the due date passed with required items outstanding — the one to act on when work is blocked), intake.stalled (fires only when the intake sets max_reminders; without it this event never arrives).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoHTTPS endpoint to deliver to. Required for action="create".
actionYesWhat to do. "list" needs no other argument.
eventsNoEvents to receive. Required for action="create". For "tell me when the client is done", this is ["intake.completed"].
formatNoPayload shape. "raw" (default) is the signed BriefGate envelope; "slack" and "discord" post a message those services render directly.
webhook_idNoEndpoint to remove. Required for action="delete".

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond the annotations. It discloses that the signing secret is returned exactly once and cannot be shown again, that there is no rotation, and that the remedy is to delete and recreate. It also explains event semantics, including that intake.stalled only fires when max_reminders is set. This is rich behavioral context that annotations alone do not provide.

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

Conciseness4/5

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

The description is well-structured with clear paragraphs for usage, secret handling, and events. It is longer than average, but every sentence carries important information. The front-loading of the core purpose and the explicit usage condition is effective. Slight deduction for the event list being somewhat dense, but it earns its place.

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?

Given the tool's complexity (5 params, 3 actions, 6 events, security implications), the description covers all critical aspects: when to use, what the secret is, event semantics, and action-specific parameter requirements. The output schema exists, so return values don't need explanation. Nothing essential is missing for an agent to invoke this tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the action-specific requirements (url required for create, webhook_id for delete), the meaning of the events array with a concrete example (["intake.completed"]), and the format options. It doesn't fully document every parameter's edge cases, but it meaningfully supplements 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?

The description opens with a specific verb and resource ('Register, list, or remove a webhook endpoint') and immediately states the purpose: pushing intake events instead of polling. It clearly distinguishes itself from sibling tools like get_intake_status by naming the alternative and the condition that selects it.

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

Usage Guidelines5/5

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

The description explicitly says when to use this tool ('ONLY if you control a service that can receive public HTTPS requests') and when not to ('An agent running in a terminal cannot — for that case do not register anything and check on a schedule with get_intake_status instead'). It also warns about the consequence of misuse (failing deliveries and false impression). This is exemplary usage guidance.

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

request_revisionRequest a revisionAInspect

Ask the client to resubmit a specific item with a note explaining what is wrong.

Use this after reviewing get_intake_results and finding an item that does not meet requirements — for example a blurry logo, copy that is too long, or a broken URL. The client is notified automatically and the item status moves to needs_revision.

Returns { status: "revision_requested", item_key }.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteYesPlain-language explanation shown to the client (e.g. "Logo is blurry — we need at least 512 px wide in SVG or PNG with a transparent background").
item_keyYesThe key of the item to revise (e.g. "logo", "hero_copy").
intake_idYesIntake ID returned by define_intake.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo
item_keyNo

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses the key behavioral side effects: the client is notified automatically and the item status moves to needs_revision, and it returns a specific object { status: 'revision_requested', item_key }. These details go beyond the annotations, which only indicate non-read-only, non-idempotent, non-destructive, and open-world behavior. The description also implies a write operation that cannot be idempotent, which aligns with annotations.

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

Conciseness5/5

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

The description is brief and front-loaded: the first sentence states the core action, the second gives usage context with examples, and the third reports the return value. No extraneous content; every sentence carries essential 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?

The description covers purpose, when to use, side effects, and return value. With the output schema already available and all parameters documented, this is sufficient for an agent to correctly invoke the tool in the expected workflow.

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

Parameters3/5

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

The input schema already describes all three required parameters (intake_id, item_key, note) with explanations, achieving 100% coverage. The description's examples (e.g., blurry logo, copy too long) illustrate usage but do not add new semantic constraints beyond what the schema provides, so it earns the baseline score.

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

Purpose4/5

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

The description clearly states the tool's action: asking the client to resubmit a specific item with an explanatory note. It provides concrete examples of what constitutes a revision-worthy item (blurry logo, overlong copy, broken URL), which helps the agent understand the intent. However, it does not explicitly differentiate from sibling tools like update_item, relying on the distinct verb 'request revision' rather than naming alternatives.

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 explicitly states when to use the tool: after reviewing get_intake_results and finding an item that does not meet requirements. It also notes the automatic client notification and status change to needs_revision. This gives clear usage context, but it doesn't provide when-not conditions or mention alternative tools such as update_item for direct edits.

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

send_chaseSend a reminderAInspect

Send a manual reminder to the client outside the automatic schedule.

Use when a deadline is approaching and the client has not responded to automatic reminders, or when you want to send an SMS after email attempts have failed. The automatic chase schedule continues after this call — this is an extra nudge, not a replacement.

Returns { sent: true }.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelNoDelivery channel. Email is the only one offered.
intake_idYesIntake ID returned by define_intake.

Output Schema

ParametersJSON Schema
NameRequiredDescription
sentNo

TDQS

A4.4/5.0
Behavior4/5

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

With annotations indicating it is not read-only (readOnlyHint=false), not idempotent, and not destructive, the description adds value by noting that the automatic schedule continues after this call, preventing the agent from thinking it disables automation. It also discloses the return value, though the output schema already provides that. The description doesn't mention potential side effects like duplicate reminders, but with the annotations, the bar is lower, and this is adequate.

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

Conciseness5/5

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

The description is concise with three sentences, front-loading the core purpose and usage context. It includes the return value in the last sentence, which is efficiently placed. No redundant information; every sentence contributes to understanding.

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

Completeness4/5

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

Given the tool's moderate complexity, the description covers purpose, usage, behavioral notes, and return value. The output schema already documents parameters and return type, so no further detail is needed. It could mention that channel is always 'email' but that's in the schema; the description is complete enough.

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

Parameters3/5

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

The schema already documents both parameters: channel is an enum limited to 'email', and intake_id references define_intake. The description does not add additional meaning beyond that, but since schema coverage is 100%, the baseline of 3 is appropriate. No further explanation is needed.

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

Purpose5/5

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

The description clearly states the verb (send), the resource (reminder), and the context (manual nudge outside automatic schedule). It distinguishes itself from automatic reminders and from sibling tools like update_intake or get_intake_status, so an agent can confidently select it for this specific action.

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 explicitly specifies when to use: when a deadline is approaching and the client has not responded, or when SMS is needed after email failures. It also clarifies that the automatic schedule continues, so the agent knows this is an extra nudge, not a replacement. This directly guides decision-making among alternatives.

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

update_intakeEdit intake settingsAInspect

Change settings on an intake that has already been sent — project name, due date, reminder cadence, quiet hours, which folder it's in, the client brief, or the client's name, phone, language, and timezone.

Use this instead of deleting and recreating the intake when a deadline moves or the chase cadence needs to change. If any of chase_schedule, chase_interval, chase_interval_unit, chase_at_time, max_reminders, respect_quiet_hours, due_date, or client.timezone is included, every pending reminder is cancelled and the schedule is re-planned from now — reminders already sent still count toward max_reminders. Raising max_reminders (or setting it to "unlimited") past the number already sent on a stalled intake reactivates it and resumes chasing.

The client's e-mail address cannot be changed here — the portal link and login are bound to it. Use manage_recipients to add, remove, or reinstate an address.

folder_id moves the intake to a different folder (an id from list_folders); set it to null to remove the intake from any folder. It never touches the chase schedule.

client_brief replaces the free-text brief shown to the client above the requested items; set it to null to clear it. Documents attached to the brief are managed via the dashboard or the REST endpoint POST /v1/intakes/:id/brief/files, not through this tool.

Fails if the intake is archived. At least one field must be given. Returns the full, updated intake object.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientNoClient fields to change. Email cannot be changed here — use manage_recipients.
due_dateNoDeadline in YYYY-MM-DD format. null clears it.
folder_idNoMove this intake to a different folder, using an id from list_folders. null removes it from any folder.
intake_idYesIntake ID returned by define_intake.
owner_noteNoPrivate note, never shown to the client. null clears it.
client_briefNoFree-text brief shown to the client at the top of the portal, above the requested items — information from you to them: an offer, instructions, or context. Up to 5000 characters. null clears it. Documents attached to the brief go through the REST endpoint POST /v1/intakes/:id/brief/files (dashboard or REST — not available through this MCP tool set).
project_nameNoHuman-readable project name shown to the client.
chase_at_timeNoAnchor reminders to this 24-hour local time in the client's timezone (e.g. "07:00"), overriding quiet hours. null clears it.
max_remindersNoCap on reminder attempts (1-1000), or "unlimited". Raising this above the number already sent reactivates a stalled intake.
chase_intervalNoHow often to remind, only meaningful with chase_schedule="custom". Pair with chase_interval_unit.
chase_scheduleNoAutomated reminder cadence. default=T+2d,T+5d,T+9d,weekly. gentle=T+3d,T+8d,biweekly. aggressive=T+1d,T+3d,T+5d,every-other-day. custom=every chase_interval chase_interval_unit. off=no auto reminders.
chase_interval_unitNoUnit for chase_interval.
respect_quiet_hoursNoWhether reminders pause outside 08:00-19:00 in the client's timezone.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations, it discloses critical side effects: including certain fields cancels all pending reminders and re-plans the schedule, raising max_reminders reactivates a stalled intake, and folder_id never touches the chase schedule. It also explains the email limitation and document attachment route, giving an agent accurate expectations.

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

Conciseness5/5

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

The description is long but every sentence carries operational value, and the main purpose is front-loaded before the caveats. It efficiently packs usage guidance, exclusions, side effects, and failure conditions without repetition.

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

Completeness5/5

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

For a tool with 13 parameters, nested objects, and significant side effects, the description covers input requirements, when to use alternatives, error conditions, and special cases like archived intakes and stalled reminders. The output schema exists, so not describing the return value is acceptable.

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 the baseline is 3, but the description adds cross-parameter behavior not visible in the schema: the reminder re-planning trigger, max_reminders reactivation semantics, and null-clearing behavior for folder_id and client_brief. This adds genuine meaning beyond the individual parameter descriptions.

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

Purpose5/5

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

The description uses a specific verb and resource ('Change settings on an intake that has already been sent') and enumerates exactly which fields can be modified. It clearly distinguishes itself from siblings like define_intake and manage_recipients by stating what this tool can and cannot do.

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 explicitly says to use this instead of deleting and recreating an intake when deadlines or chase cadence change, and it names manage_recipients as the alternative for changing the client email. It also gives constraints: fails if archived and at least one field must be provided.

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

update_itemEdit an itemA
Destructive
Inspect

Change one item on an intake that is already with the client — its type, label, hint, whether it is required, and which file formats it accepts.

Reach for this when the field turns out to be the wrong shape: you asked for an image and the client only has their logo as a PDF, or what you asked for as a line of text is really a file. Widening the accepted formats or switching the type unblocks them without adding a duplicate item and waiving the original.

The item key cannot be changed — results come back under it, so renaming would break whatever reads them. Add a new item instead.

If the client has already answered and the change would make their answer invalid, the call fails and nothing is touched. Repeat it with discard_submitted_value: true to clear the answer and ask them again. A change that leaves their answer valid (a new label, a wider limit) never discards anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
helpNoHint under the label. null clears it.
typeNo
labelNoHuman-readable label shown to the client.
optionsNo
patternNo
item_keyYesKey of the item to change.
requiredNo
intake_idYesIntake ID returned by define_intake.
constraintsNoSame shape as define_intake, e.g. { "formats": ["svg","png","pdf"] }. null clears all constraints.
discard_submitted_valueNoGo ahead even though it throws away what the client already sent. Only set this after the call has failed once for that reason.

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNo
discarded_submitted_valueNo

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations' destructiveHint, the description discloses critical behavior: item keys are immutable because results are keyed by them, invalidating a submitted answer fails the call without side effects, and only discard_submitted_value: true clears the answer. This gives the agent a clear mental model of failure modes and idempotency.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then builds context through usage scenarios, a hard constraint, and failure semantics. Every paragraph serves a distinct function with no filler.

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

Completeness5/5

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

For a destructive 10-parameter mutation tool, the description covers the essential operational context: when to use it, what cannot change, how invalidations behave, and how to force a resubmission. The output schema covers return values, so nothing critical 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 60% schema coverage, the description adds meaningful semantics for type switching, required flags, accepted formats, and the discard_submitted_value escape hatch. It does not elaborate on options or pattern, but the description significantly strengthens understanding of the key mutation parameters.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Change one item on an intake that is already with the client' and enumerates exactly which attributes can change (type, label, hint, required, accepted formats). This clearly distinguishes it from siblings like add_items and update_intake.

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 gives concrete when-to-use guidance ('Reach for this when the field turns out to be the wrong shape'), explains the alternative approach ('Add a new item instead' when the key must change), and details the discard_submitted_value workflow after a failed call. No ambiguity remains about when this tool is appropriate.

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

Tool Schema Changelog

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

  1. 12 tool updates
    • Changedadd_items10 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / follow_up / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / follow_up / properties / schedule / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / follow_up / properties / schedule / required
        Removed value: -[
        -  "check_with",
        -  "every_hours",
        -  "until"
        -]
      • removedOutput schema / properties / follow_up / properties / webhook / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / follow_up / properties / webhook / required
        Removed value: -[
        -  "active_endpoints",
        -  "events",
        -  "register_with"
        -]
      • removedOutput schema / properties / follow_up / required
        Removed value: -[
        -  "recommended",
        -  "reason",
        -  "webhook",
        -  "schedule"
        -]
      • removedOutput schema / properties / items / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / items / items / required
        Removed value: -[
        -  "key",
        -  "status"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "intake_id",
        -  "portal_url",
        -  "status",
        -  "items"
        -]
    • Changedcreate_folder3 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / created_at / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / required
        Removed value: -[
        -  "id",
        -  "name",
        -  "sort_order",
        -  "intake_count",
        -  "created_at"
        -]
    • Changeddefine_intake8 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / follow_up / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / follow_up / properties / schedule / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / follow_up / properties / schedule / required
        Removed value: -[
        -  "check_with",
        -  "every_hours",
        -  "until"
        -]
      • removedOutput schema / properties / follow_up / properties / webhook / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / follow_up / properties / webhook / required
        Removed value: -[
        -  "active_endpoints",
        -  "events",
        -  "register_with"
        -]
      • removedOutput schema / properties / follow_up / required
        Removed value: -[
        -  "recommended",
        -  "reason",
        -  "webhook",
        -  "schedule"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "intake_id",
        -  "portal_url",
        -  "status"
        -]
    • Changedget_intake_results2 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / meta / additionalProperties / properties / submitted_at / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
    • Changedget_intake_status10 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / chases / items / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / chases / items / properties / sent_at / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / chases / items / required
        Previous value: -[
        -  "channel",
        -  "sent_at",
        -  "status",
        -  "attempt_no"
        -]New value: +[
        +  "channel",
        +  "status",
        +  "attempt_no"
        +]
      • changedOutput schema / properties / client_last_seen / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / due_date / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / items / items / properties / submitted_at / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / progress / additionalProperties
        Removed value: -false
      • changedOutput schema / required
        Previous value: -[
        -  "intake_id",
        -  "status",
        -  "progress",
        -  "items",
        -  "chases"
        -]New value: +[
        +  "status",
        +  "progress",
        +  "items",
        +  "chases"
        +]
    • Changedlist_folders3 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / folders / items / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / folders / items / properties / created_at / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
    • Changedlist_intakes5 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / intakes / items / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / intakes / items / properties / created_at / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / intakes / items / properties / due_date / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / intakes / items / required
        Previous value: -[
        -  "intake_id",
        -  "project_name",
        -  "client_email",
        -  "status",
        -  "created_at",
        -  "portal_url"
        -]New value: +[
        +  "intake_id",
        +  "project_name",
        +  "status",
        +  "created_at",
        +  "portal_url"
        +]
    • Changedmanage_recipients1 field changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "bounced_at": {
        -        "type": "null"
        -      },
        -      "email": {
        -        "type": "string"
        -      },
        -      "still_chasing": {
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "email",
        -      "bounced_at",
        -      "still_chasing"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "bounced_at": {
        +        "type": "null"
        +      },
        +      "email": {
        +        "type": "string"
        +      },
        +      "still_chasing": {
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
    • Changedmanage_webhook1 field changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "active": {
        -        "type": "boolean"
        -      },
        -      "created_at": {
        -        "type": "string"
        -      },
        -      "events": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "format": {
        -        "type": "string"
        -      },
        -      "id": {
        -        "type": "string"
        -      },
        -      "note": {
        -        "type": "string"
        -      },
        -      "secret": {
        -        "type": "string"
        -      },
        -      "url": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "url",
        -      "events",
        -      "format",
        -      "active",
        -      "created_at",
        -      "secret",
        -      "note"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "webhooks": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "active": {
        -              "type": "boolean"
        -            },
        -            "created_at": {
        -              "type": "string"
        -            },
        -            "events": {
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            "format": {
        -              "type": "string"
        -            },
        -            "id": {
        -              "type": "string"
        -            },
        -            "url": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "id",
        -            "url",
        -            "events",
        -            "format",
        -            "active",
        -            "created_at"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "webhooks"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "deleted": {
        -        "enum": [
        -          true
        -        ],
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "deleted"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "active": {
        +        "type": "boolean"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "events": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "format": {
        +        "type": "string"
        +      },
        +      "id": {
        +        "type": "string"
        +      },
        +      "note": {
        +        "type": "string"
        +      },
        +      "secret": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "webhooks": {
        +        "items": {
        +          "properties": {
        +            "active": {
        +              "type": "boolean"
        +            },
        +            "created_at": {
        +              "type": "string"
        +            },
        +            "events": {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            "format": {
        +              "type": "string"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "url": {
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "deleted": {
        +        "enum": [
        +          true
        +        ],
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
    • Changedrequest_revision2 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / required
        Removed value: -[
        -  "status",
        -  "item_key"
        -]
    • Changedsend_chase2 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / required
        Removed value: -[
        -  "sent"
        -]
    • Changedupdate_item2 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / required
        Removed value: -[
        -  "item"
        -]
  2. 15 tool updates
    • Changedadd_items1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "folder_id": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "follow_up": {
        +      "additionalProperties": false,
        +      "description": "How to learn this intake is done — present unless a webhook already covers it. Mirrors FollowUpAdvice in client.ts.",
        +      "properties": {
        +        "reason": {
        +          "type": "string"
        +        },
        +        "recommended": {
        +          "enum": [
        +            "webhook",
        +            "schedule"
        +          ],
        +          "type": "string"
        +        },
        +        "schedule": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "check_with": {
        +              "type": "string"
        +            },
        +            "every_hours": {
        +              "type": "number"
        +            },
        +            "until": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "check_with",
        +            "every_hours",
        +            "until"
        +          ],
        +          "type": "object"
        +        },
        +        "webhook": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "active_endpoints": {
        +              "type": "number"
        +            },
        +            "events": {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            "register_with": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "active_endpoints",
        +            "events",
        +            "register_with"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "recommended",
        +        "reason",
        +        "webhook",
        +        "schedule"
        +      ],
        +      "type": "object"
        +    },
        +    "intake_id": {
        +      "type": "string"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "key": {
        +            "type": "string"
        +          },
        +          "status": {
        +            "enum": [
        +              "pending",
        +              "submitted",
        +              "needs_revision",
        +              "approved"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "key",
        +          "status"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "portal_url": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "enum": [
        +        "draft",
        +        "sent",
        +        "in_progress",
        +        "completed",
        +        "archived"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "intake_id",
        +    "portal_url",
        +    "status",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Addedcreate_folder
    • Changeddefine_intake3 fields changed
      • addedInput schema / properties / client_brief
        Added value: +{
        +  "description": "Free-text brief shown to the client at the top of the portal, above the requested items — information from you to them: an offer, instructions, or context for why you are asking for these items. Up to 5000 characters. Documents attached to the brief go through the REST endpoint POST /v1/intakes/:id/brief/files (dashboard or REST — not available through this MCP tool set).",
        +  "maxLength": 5000,
        +  "type": "string"
        +}
      • addedInput schema / properties / folder_id
        Added value: +{
        +  "description": "Put this intake in an existing folder from list_folders instead of leaving it unfiled. Folders group intakes by client or project — reuse one for a returning client rather than creating a duplicate with create_folder.",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "follow_up": {
        +      "additionalProperties": false,
        +      "description": "How to learn this intake is done — present unless a webhook already covers it. Mirrors FollowUpAdvice in client.ts.",
        +      "properties": {
        +        "reason": {
        +          "type": "string"
        +        },
        +        "recommended": {
        +          "enum": [
        +            "webhook",
        +            "schedule"
        +          ],
        +          "type": "string"
        +        },
        +        "schedule": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "check_with": {
        +              "type": "string"
        +            },
        +            "every_hours": {
        +              "type": "number"
        +            },
        +            "until": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "check_with",
        +            "every_hours",
        +            "until"
        +          ],
        +          "type": "object"
        +        },
        +        "webhook": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "active_endpoints": {
        +              "type": "number"
        +            },
        +            "events": {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            "register_with": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "active_endpoints",
        +            "events",
        +            "register_with"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "recommended",
        +        "reason",
        +        "webhook",
        +        "schedule"
        +      ],
        +      "type": "object"
        +    },
        +    "intake_id": {
        +      "type": "string"
        +    },
        +    "notices": {
        +      "description": "Cadence caveats, present only when chase_schedule=\"custom\" makes them relevant.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "portal_url": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "enum": [
        +        "draft",
        +        "sent",
        +        "in_progress",
        +        "completed",
        +        "archived"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "intake_id",
        +    "portal_url",
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedget_intake_results1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "intake_id": {
        +      "type": "string"
        +    },
        +    "meta": {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "decided_by": {
        +            "description": "Only present for an assignee=owner decision item.",
        +            "enum": [
        +              "owner",
        +              "agent_proposal"
        +            ],
        +            "type": "string"
        +          },
        +          "first_reveal": {
        +            "description": "Only present for type=secret: true on the call that reveals the plaintext value, false after.",
        +            "type": "boolean"
        +          },
        +          "status": {
        +            "enum": [
        +              "pending",
        +              "submitted",
        +              "needs_revision",
        +              "approved"
        +            ],
        +            "type": "string"
        +          },
        +          "submitted_at": {
        +            "type": "string"
        +          },
        +          "type": {
        +            "enum": [
        +              "text",
        +              "longtext",
        +              "file",
        +              "file_list",
        +              "image",
        +              "color_list",
        +              "select",
        +              "multiselect",
        +              "boolean",
        +              "url",
        +              "secret",
        +              "structured"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "type",
        +          "status"
        +        ],
        +        "type": "object"
        +      },
        +      "description": "Keyed the same as results.",
        +      "type": "object"
        +    },
        +    "results": {
        +      "additionalProperties": true,
        +      "description": "Keyed by this intake's own item keys. A value's shape depends on that item's type.",
        +      "type": "object"
        +    },
        +    "status": {
        +      "enum": [
        +        "draft",
        +        "sent",
        +        "in_progress",
        +        "completed",
        +        "archived"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "intake_id",
        +    "status",
        +    "results",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedget_intake_status1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "chases": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "attempt_no": {
        +            "type": "number"
        +          },
        +          "channel": {
        +            "type": "string"
        +          },
        +          "sent_at": {
        +            "type": "string"
        +          },
        +          "status": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "channel",
        +          "sent_at",
        +          "status",
        +          "attempt_no"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "client_brief": {
        +      "description": "The brief shown to the client above the requested items, if one is set.",
        +      "type": "string"
        +    },
        +    "client_last_seen": {
        +      "type": "string"
        +    },
        +    "due_date": {
        +      "type": "string"
        +    },
        +    "intake_id": {
        +      "type": "string"
        +    },
        +    "items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "key": {
        +            "type": "string"
        +          },
        +          "label": {
        +            "type": "string"
        +          },
        +          "status": {
        +            "enum": [
        +              "pending",
        +              "submitted",
        +              "needs_revision",
        +              "approved"
        +            ],
        +            "type": "string"
        +          },
        +          "submitted_at": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "key",
        +          "status",
        +          "label"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "progress": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "submitted": {
        +          "type": "number"
        +        },
        +        "total": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "submitted",
        +        "total"
        +      ],
        +      "type": "object"
        +    },
        +    "status": {
        +      "enum": [
        +        "draft",
        +        "sent",
        +        "in_progress",
        +        "completed",
        +        "archived"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "intake_id",
        +    "status",
        +    "progress",
        +    "items",
        +    "chases"
        +  ],
        +  "type": "object"
        +}
    • Addedlist_folders
    • Changedlist_intakes3 fields changed
      • addedInput schema / properties / folder_id
        Added value: +{
        +  "description": "Filter by folder, using an id from list_folders. Pass the literal string \"none\" to see only intakes that are not in any folder.",
        +  "type": "string"
        +}
      • addedInput schema / properties / q
        Added value: +{
        +  "description": "Free-text search: matches a substring of project name, client name, or client email.",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "intakes": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "client_email": {
        +            "type": "string"
        +          },
        +          "created_at": {
        +            "type": "string"
        +          },
        +          "due_date": {
        +            "type": "string"
        +          },
        +          "folder_id": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "intake_id": {
        +            "type": "string"
        +          },
        +          "portal_url": {
        +            "type": "string"
        +          },
        +          "project_name": {
        +            "type": "string"
        +          },
        +          "status": {
        +            "enum": [
        +              "draft",
        +              "sent",
        +              "in_progress",
        +              "completed",
        +              "archived"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "intake_id",
        +          "project_name",
        +          "client_email",
        +          "status",
        +          "created_at",
        +          "portal_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "intakes",
        +    "total"
        +  ],
        +  "type": "object"
        +}
    • Removedlogin
    • Removedlogout
    • Addedmanage_recipients
    • Changedmanage_webhook1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "active": {
        +          "type": "boolean"
        +        },
        +        "created_at": {
        +          "type": "string"
        +        },
        +        "events": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "format": {
        +          "type": "string"
        +        },
        +        "id": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "secret": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "url",
        +        "events",
        +        "format",
        +        "active",
        +        "created_at",
        +        "secret",
        +        "note"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "webhooks": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "active": {
        +                "type": "boolean"
        +              },
        +              "created_at": {
        +                "type": "string"
        +              },
        +              "events": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "format": {
        +                "type": "string"
        +              },
        +              "id": {
        +                "type": "string"
        +              },
        +              "url": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "url",
        +              "events",
        +              "format",
        +              "active",
        +              "created_at"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "webhooks"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "deleted": {
        +          "enum": [
        +            true
        +          ],
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "deleted"
        +      ],
        +      "type": "object"
        +    }
        +  ],
        +  "type": "object"
        +}
    • Changedrequest_revision1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "item_key": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "enum": [
        +        "revision_requested"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "item_key"
        +  ],
        +  "type": "object"
        +}
    • Changedsend_chase1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "sent": {
        +      "enum": [
        +        true
        +      ],
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "sent"
        +  ],
        +  "type": "object"
        +}
    • Addedupdate_intake
    • Changedupdate_item1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "discarded_submitted_value": {
        +      "type": "boolean"
        +    },
        +    "item": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "item"
        +  ],
        +  "type": "object"
        +}
  3. 11 tool updates
    • First observedadd_items
    • First observeddefine_intake
    • First observedget_intake_results
    • First observedget_intake_status
    • First observedlist_intakes
    • First observedlogin
    • First observedlogout
    • First observedmanage_webhook
    • First observedrequest_revision
    • First observedsend_chase
    • First observedupdate_item

Publisher details

Operator
Radim Sekera, Czech sole trader (OSVČ) trading as BriefGate, IČO 04217764 · Publisher source
Operator website
https://briefgate.dev
Vendor relationship
First-party · Publisher source
Restrictions
Requires a BriefGate account; clients sign in via OAuth 2.1 with dynamic client registration (no custom OAuth app). Free plan: 1 active intake, up to 10 items per intake, 60 API requests/hour; secrets vault, revisions and SMS require a paid plan. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Shared workspace your AI agents write to. CMMN case management with 184+ MCP tools: cases, tasks, event-driven CMMN workflows with sentries, persistent memory with semantic search, billing and invoicing. OAuth or token auth; cloud-hosted remote MCP endpoint.
    100
    24 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to manage identity, permissions, secrets, and verifiable proofs through a hosted MCP server, letting clients sign in and check what an agent may do before it acts.
    23 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Server-enforced workflow discipline for AI agents. An MCP server providing persistent work items, dependency graphs, quality gates, and actor attribution. Schemas define what agents must produce — the server blocks the call if they don't. Works with any MCP-compatible client.
    206
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources