Simplepush MCP Server
OfficialThis server lets an agent push notifications and tasks to people (with optional polls for answers), append subtasks, look up task/activity status, search the message stream, and download attached files. It supports multiple recipients, groups, topics, and personal or org (integration-token) modes.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Simplepush MCP ServerSend the team a task asking who can cover Friday's shift and wait for replies."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@simplepush/mcp
MCP server for Simplepush. An agent sends tasks and notifications to people's phones and waits for the answers, appends follow-ups, cancels mistakes, and queries the record of everything that came back. Tasks, answers, replies, declines, and ad-hoc submissions stay queryable, so the stream doubles as a knowledge base of the work: what was asked, who answered what, and what is still open.
Tools
Tool | What it does |
| Push for alerts and heads-ups. Can carry one |
| Sends a task and waits for the answers. Takes the full input set (text, choice, actions, slider, photo, voice recording, file, location), a |
| Appends a follow-up question or checklist item to a task or group, using the |
| Withdraws a task ( |
| Resolves a |
| Resolves what came back on a |
| One page of tasks as summaries: tag, topic, status, recipients, input kinds, attachment kinds, reply mode, sent time, subtask counts. Filters: status, time window, topic, member, group. |
| One task with all its subtasks: questions, answers, replies, declines, file ids. |
| Per-recipient status of a task group ( |
| The org's activity history: answers, replies, submissions, declines, cancellations, expiries, with who and when. Last 7 days by default. |
| Ad-hoc reports from the field (text, photo, file, voice, location), with who and when. Last 7 days by default. |
| Full-text and location search over everything: tasks and notifications, what people answered and replied, and ad-hoc submissions, across all time. Literal word matching, plus stemming in up to three languages; or a coordinate plus radius (or a polygon of corner points), returning the locations recorded within it, nearest first. Each hit carries the id to read in full (a group send hits once, as its |
| Everything going on for one member or the whole org in one call: open/declined/expired tasks plus the window's answers, replies, declines, cancellations and submissions. The tool for "any problems with X?" and "catch me up". |
| Fetches a photo, voice recording or file by |
The query tools work in both modes: an organization credential (an integration token, or the hosted connector signed in as an organization admin) reads the whole organization, a personal one (an API token, or the hosted connector with a personal API token) reads your personal stream (subscription required on personal accounts). On the hosted transport they need the read scope; download_attachment additionally needs files:read. Encrypted content is decrypted with the keys the server holds; anything it cannot open is left as ciphertext and reported.
A timeout in send_task is not a cancellation. The questions stay live on the phones, and answers are available later via get_task_answer or get_group_status. inputs says how the task is answered: text, single or multi choice, action buttons, slider, photo, voice recording, file, location. send_task waits 90 seconds by default; per-call wait_seconds raises that, up to SP_MAX_WAIT_SECONDS.
Related MCP server: ebenova-fieldops-mcp
Setup
The server runs in one of two modes, decided by which credential you set.
Personal mode
Get an API token from the API Token screen in the Simplepush app, then:
{
"mcpServers": {
"simplepush": {
"command": "npx",
"args": ["-y", "@simplepush/mcp"],
"env": { "SP_API_TOKEN": "your-token" }
}
}
}Or with Claude Code:
claude mcp add simplepush --env SP_API_TOKEN=your-token -- npx -y @simplepush/mcpMessages go to your own devices. Pass a topic to deliver to that topic's holders instead, as a single shared task where the first answer wins.
Organization mode
Create an integration token with the CLI (admin vault unlocked):
sp integration createclaude mcp add simplepush --env SP_INTEGRATION_TOKEN=spi_... -- npx -y @simplepush/mcpOrg mode unlocks full targeting: every send takes exactly one of topic, member (name or usr_ id), or broadcast. If the org has encryption enabled, the token's second half unwraps the org master keys at startup and all sends are end-to-end encrypted; answers are decrypted the same way.
If both credentials are set, the integration token wins and a note goes to stderr. MCP clients spawn stdio servers with your shell environment attached, so an exported SP_API_TOKEN from unrelated CLI work rides along; setting SP_INTEGRATION_TOKEN is always deliberate.
Environment variables (stdio)
Variable | Default | Meaning |
| one credential required | Personal API token from the app. |
| one credential required | Org integration token from |
| unset | Personal encryption keys, see below. |
|
| API origin. Point at |
|
| Ceiling on how long |
|
| Gap between answer polls while blocking. |
Encryption
Org mode encrypts automatically when the org has encryption enabled, as described above.
Personal sends are plaintext unless you provide keys. Encrypted and plaintext tasks are distinguishable at a glance in the app: encrypted ones carry the lock icon.
Keys are exported from the Simplepush app: Copy Key for Integrations on the Encryption screen for the Personal Password key, and the copy action next to a topic on the Topics screen for topic keys.
SP_KEYS is a comma-separated list. A bare base64 key is the Personal Password key, used for self-sends. topic=key binds a key to one topic:
SP_KEYS="AbC...=" # default key only
SP_KEYS="alerts=AbC...=,deploys=XyZ...=" # two topic keys
SP_KEYS="AbC...=,alerts=XyZ...=" # bothWith a matching key, sends to that target are encrypted and answers are decrypted. An answer the server holds no key for comes back with undecryptable: true rather than silently wrong.
Keys only. There is no SP_PASSWORD.
Hosted HTTP transport
simplepush-mcp-http serves the same tools over Streamable HTTP as an OAuth resource server. No ambient credential: each request carries its own access token, verified by introspection against the authorization server and audience-checked against SP_CANONICAL_URI. Discovery metadata is served at /.well-known/oauth-protected-resource; the MCP endpoint is /mcp. GET /status is a public summary for uptime monitoring: 200 when the authorization server and the API both answer, 503 otherwise, with the same shape as the backend's /v1/status. Tool calls are scope-gated: send for send_notification, send_task, append_subtask and cancel_task, read for the answer and query tools, files:read for download_attachment.
Hosted mode is personal OAuth grants only. Integration tokens are not accepted there by design, and hosted sends are plaintext: a server that could decrypt for you would not be end-to-end.
Variable | Default | Meaning |
| required | Bearer for the AS introspection endpoint. Must match the backend's |
| required | Public URL clients reach this server at, e.g. |
|
| Origin of the authorization server, as clients see it. |
|
| Where this server reaches the authorization server for token introspection. Set it when the backend is closer on an internal address. |
|
| API origin this server calls. |
|
| Listen port. |
Development
npm install
npm run build
npm run typecheckSmoke-test against a local backend without an MCP client:
npx @modelcontextprotocol/inspector --cli node dist/index.mjs \
-e SP_API_TOKEN=testtoken5678 -e SP_BASE_URL=http://localhost:8000 \
--method tools/listNote that the Inspector does not forward your shell environment to the spawned server. Pass credentials with -e, not by exporting them.
Available Tools
14 toolsappend_subtaskAppend a subtask to an earlier taskAInspect
Add a follow-up question or checklist item to a task sent with send_task. Pass the append_token from that result: a task's token appends to that one task; a group's token appends to every instance of the group (narrow with instances). Subtasks take the same content, inputs and reply as send_task and are answered on their own; read them with get_task (the chain) or get_group_status. Never waits.
| Name | Required | Description | Default |
|---|---|---|---|
| links | No | Public https URLs attached as links. | |
| reply | No | Open a comment thread on the subtask: `one-shot`, `sticky` or `one-time-per-user`. | |
| title | No | Short heading. Always set one: the chain and the overviews identify subtasks by title, not content. | |
| inputs | No | The inputs the recipient fills in, in display order. | |
| content | No | Body of the subtask. Required unless `inputs` is given. | |
| markdown | No | Render `content` as Markdown. | |
| instances | No | With a group token: only these instance task ids get the subtask. Omit for every instance. | |
| auto_commit | No | Default false: one Submit for all inputs. true: each input is submitted as filled. | |
| append_token | Yes | The append_token returned by send_task (task or group). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behaviors: 'Never waits' indicates an asynchronous operation, and it explains group token behavior (appends to all instances unless narrowed with 'instances'). It also clarifies that subtasks are answered independently and how to retrieve them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph with about four sentences, conveying necessary context without excessive verbosity. It is well-structured, though longer than the ideal two-sentence example.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers key usage context: how to reference the original task, how to narrow instances, and how to retrieve subtask responses. It omits error conditions and return values, but these are not required for basic usage and the description is sufficiently complete for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage with detailed descriptions for all parameters. The tool description adds general context about append_token and instances but does not offer additional semantic clarity beyond the schema's own descriptions for individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: adding a follow-up question or checklist item to a task created by send_task. It explicitly identifies the resource (tasks/groups) and the scope (single task or specific instances).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context by referencing send_task and explaining how to read subtask responses via get_task or get_group_status. It does not explicitly name alternative tools, but the relationship to send_task and retrieval is clear enough to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_taskCancel a task, subtask or groupAInspect
Withdraw something sent earlier: pass a task_id (tsk_...), subtask_id (sub_...) or group_id (grptsk_...). Pending recipients see it as canceled and can no longer answer; answers already given stay. Canceling a group cancels every still-pending instance and reports how many were already finished. Not undoable.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The tsk_ / sub_ / grptsk_ id to cancel. | |
| note | No | Short explanation shown to recipients. | |
| reason | No | Why: plain withdrawal (default), the answer was obtained elsewhere, or a newer task replaces it. | |
| superseded_by | No | With reason `superseded`: the tsk_ id of the replacing task. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of side-effect disclosure, and it does so thoroughly: pending recipients see the item as canceled, prior answers remain, group cancellation cascades to still-pending instances and reports a finished count, and the action is irreversible. These are substantive behavioral details beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences carry the action, resource types, key side effects, and an irreversibility warning without repetition. The most load-bearing information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description covers the main semantics: what gets canceled, what happens to recipients, group behavior, and non-reversibility. It stops short of specifying exact return/error behavior, but the core call decision is well supported.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds extra meaning by explaining the significance of id types, especially that canceling a group_id cancels all still-pending instances and reports already-finished ones. The note, reason, and superseded_by parameters are left to the already-complete schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action, "Withdraw something sent earlier," and names the exact resource forms accepted: tsk_, sub_, and grptsk_ ids. This clearly identifies the tool as a cancellation operation and distinguishes it from siblings like send_task and append_subtask.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear when-to-use context: withdraw something already sent, and it clarifies that pending recipients can no longer answer while existing answers are preserved. It also warns that the operation is not undoable, which is a useful usage caution, though it does not name explicit alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_attachmentDownload a photo or fileAInspect
Fetches a photo, voice recording or file by the id of what holds it and the id of the file, the same pair the SDK's download takes. Images come back inline so you can look at them; other files come back as a short-lived download URL plus metadata. Needs the 'files:read' scope.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | An answer's inputId (inp_) from send_task, get_task_answer or get_task; a reply's photo/file/audio id (rfl_) from get_task or query_events; a submission's photo/file/audio id (sbf_) from query_submissions. | |
| scope_id | Yes | The tsk_ or sub_ id for an answer's or a reply's file, the sbm_ id for a submission's file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well. It discloses the inline return for images, the short-lived download URL plus metadata for other files, and the required 'files:read' scope. This goes beyond a basic action statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: what it fetches, how results are returned, and what permission is needed. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema and no annotations, the description covers the essential invocation details, return behavior, and auth requirement. The only minor gap is the vague 'plus metadata' and no mention of failure modes, but these are not critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description's phrase 'the id of what holds it and the id of the file' loosely maps to scope_id and file_id but adds no new detail beyond the already detailed schema descriptions with concrete id prefixes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Fetches') and a clear resource ('photo, voice recording or file'), and identifies the exact id pair needed. It also distinguishes the tool from the sibling list by focusing on media/file download rather than task or submission management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context of use is implied: call it when you hold a scope_id and file_id and need the actual photo/recording/file. However, there is no explicit guidance about when not to use it or which alternative to choose, despite a list of sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activityEverything going on for a member (or the whole organization)AInspect
Use this first for 'any problems with ?', 'what is going on with / at the site?', 'catch me up', 'anything I should know?'. One call returns the bundle: open tasks, tasks that were declined or expired, and the window's answers, replies, declines, cancellations and ad-hoc submissions — with who and when. Defaults to the last 7 days. Omit member for the whole organization.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ISO-8601 instant; default is 7 days ago. | |
| member | No | Member name or usr_ id. Omit for the whole organization. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well. It discloses the default 7-day window, the specific categories included (open/declined/expired tasks, answers, replies, declines, cancellations, ad-hoc submissions), and the org-vs-member scoping behavior. This goes well beyond a generic 'returns activity' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, with the most important guidance front-loaded ('Use this first'). Every sentence adds value: example intents, returned bundle, default window, and scoping rule. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description appropriately explains the return contents: tasks, answers, replies, declines, cancellations, and ad-hoc submissions with who and when. Combined with default behavior and member omission semantics, an agent has enough to invoke the tool correctly without further inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description's 'Defaults to the last 7 days' and 'Omit member for the whole organization' restate what the schema already documents rather than adding meaning beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a broad, catch-all purpose ('Use this first') and enumerates the exact intents it covers, from 'any problems with <member>?' to 'anything I should know?'. It also spells out the bundled resource types returned, which distinguishes it from targeted siblings like query_tasks or get_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance with concrete example questions and explicitly says to omit member for the whole organization. It does not name specific sibling alternatives or state when not to use it, but 'Use this first' clearly communicates priority among the broader toolset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_group_statusStatus of a task groupAInspect
Answers 'who has answered and who has not' for a task sent to several people as independent copies (a grptsk_ group id, as shown on tasks from query_tasks): one summary per recipient plus a count per status.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Only tasks in these states. Omit for all. | |
| group_id | Yes | The grptsk_ id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description must carry the full burden. It discloses the output shape (one summary per recipient plus count per status) but does not explicitly state that the operation is read-only or free of side effects. Given the 'get' prefix, agents may infer safety, but the description does not confirm it, and it also omits any mention of required permissions or return errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, densely packed sentence that leads with the core purpose, then explains the input source and output format. No wasted words; every clause adds information. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is responsible for explaining return values, which it does by specifying 'one summary per recipient plus a count per status.' It covers the essential input group id and the optional status filter. Minor gaps include lack of detail on the exact summary structure or any pagination, but for a tool with only 2 parameters, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining that group_id is a grptsk_ group id originating from query_tasks, which the schema does not state. It also implies the status array filters results by state, reinforcing the schema's description. This additional context enhances the agent's understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool answers 'who has answered and who has not' for a task sent to multiple people, and specifies the input type (grptsk_ group id) and output (per-recipient summary plus count per status). This verb+resource is specific and distinguishes it from siblings like get_task or get_task_answer, which focus on single tasks or answers rather than group status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context by linking the group id to query_tasks, implying when to use the tool (when you have a grptsk_ id from a multi-recipient task). It does not explicitly state when not to use alternatives, but the purpose is self-explanatory enough to route the agent. No misleading or absent guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notification_answerGet the pick on an earlier notificationAInspect
Check whether a notification sent with send_notification and an input has been answered. Pass the notification_id it returned. Returns the pick, pending if untouched, or delivered when the notification carried no input (nothing to answer).
| Name | Required | Description | Default |
|---|---|---|---|
| notification_id | Yes | The notification_id returned by send_notification. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses return states (pick, pending, delivered) but does not mention side effects or error behavior. As a read operation, it is implicitly safe, but transparency could be improved by explicitly stating it has no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with the purpose stated first and sufficient detail for the single parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the necessary context for a simple tool: how to obtain the parameter and what the return states mean. It could be slightly clearer about the 'delivered' state, but overall it is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description and schema fully explain the notification_id parameter, including its origin (returned by send_notification). This is unambiguous and complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: checking whether a notification sent via send_notification has been answered and retrieving the answer. It identifies the resource and action without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (after send_notification, passing the returned notification_id) and explains result states. It does not explicitly contrast with alternative tools, but the context is sufficient for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskRead one task with its subtasksAInspect
Answers 'what exactly was asked and answered on this task'. The full content of one task and every subtask appended to it: the questions, the answers given, replies, declines, and the uploads (inputId) and reply files (id) for download_attachment. Use after query_tasks or get_activity has identified the task. A task sent to several people carries its grptsk_ groupId — follow it with get_group_status for the other recipients' copies.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The tsk_ id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the full behavioral scope: the complete task content, subtasks, answers, replies, declines, uploads with inputId, and reply files with id. It also reveals the group-behavior nuance (grptsk_ groupId) and the fact that files are intended for download_attachment. It does not discuss errors, permissions, or side effects, but the read-only nature is clear from 'Read' and 'get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The opening sentence states the purpose, the second enumerates the returned content compactly, and the third gives follow-up guidance. The most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only one required parameter and no output schema, the description covers prerequisites, return content, file-id semantics, and a group-copy follow-up. It does not specify the exact response structure, but the enumerated content types give an agent enough to invoke the tool and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents task_id as 'The tsk_ id.' The description adds meaningful provenance guidance: the task_id comes from query_tasks or get_activity, and the grptsk_ groupId context clarifies multi-recipient tasks. This goes beyond the bare schema, so a slightly-above-baseline score is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: one task plus every appended subtask. It states a specific verb ('Answers') and scope ('what exactly was asked and answered'), and enumerates the content categories (questions, answers, replies, declines, uploads, reply files), which distinguishes it from listing tools like query_tasks and narrower tools like get_task_answer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit context: use after query_tasks or get_activity has identified the task. It also routes the agent to get_group_status when the task has a grptsk_ groupId, naming a concrete follow-up alternative. It does not explicitly say when not to use this tool in favor of get_task_answer, so it stops short of perfect exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_answerGet the answer to an earlier taskAInspect
Check whether a task sent with send_task, or a subtask added with append_subtask, has been answered. Pass exactly one of task_id or subtask_id. Returns the answer, or pending if the person has not replied yet; for a subtask the result also names its parent task. A photo, voice or file answer carries its inputId for download_attachment. For the whole task including every subtask, use get_task.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | No | The tsk_ id returned by send_task. | |
| subtask_id | No | The sub_ id returned by append_subtask. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It explains return states (answer vs. pending), the parent-task naming behavior for subtasks, and the inputId for media attachments. It does not explicitly state that this is a read-only operation, but the verb "Check whether" strongly implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and every sentence earns its place: purpose, parameter constraint, return behavior, media-attachment note, and alternative routing. The most important scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and no annotations, the description compensates well. It covers invocation constraints, expected return values, the pending state, subtask-specific behavior, media attachment handling, and the relevant sibling alternative. An agent has enough to select and call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by explaining the relationship between task_id/subtask_id and their originating tools (send_task/append_subtask), and by imposing the crucial exactly-one constraint that the schema itself does not encode.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb ("Check whether") and names the exact resource (the answer to a task sent via send_task or a subtask appended via append_subtask). It distinguishes itself from get_task by clarifying scope: answer to a single task/subtask vs. whole task including subtasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states "Pass exactly one of task_id or subtask_id," which is critical guidance given both parameters are optional in the schema. It also names the alternative tool get_task and gives the exact condition for using it instead: when the whole task including every subtask is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_eventsRead the organization's activity historyAInspect
Answers 'what happened' — the place to look for anything reported, answered, replied, declined or cancelled, oldest first, each with who did it and when. This is where problems surface; query_tasks does not contain them. Defaults to the last 7 days. Filter by member or by event type (TaskCompleted, TaskInputCompleted, SubtaskCompleted, ReplyAppended, SubmissionCreated, TaskDeclinedByRecipient, TaskCanceled, TaskExpired, ...). For a ready-made bundle per member use get_activity; for ad-hoc reports alone use query_submissions.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Only these event types (wire names, e.g. TaskCompleted). | |
| limit | No | Page size. Modest default; the result carries a cursor when there is more. | |
| since | No | ISO-8601 instant; only items created at or after this. | |
| until | No | ISO-8601 instant; only items created at or before this. | |
| cursor | No | Continue a previous page: pass the `cursor` it returned. | |
| member | No | Only actions by this member (name or usr_ id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses read-only intent through "Read" and "Answers what happened," plus ordering (oldest first), default time window (last 7 days), and data coverage. It does not describe the response envelope or pagination, but the schema already documents limit and cursor, so the gap is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: primary purpose, sibling exclusion, default behavior, filter options, and alternative routing. The most decision-relevant information is front-loaded before the filter details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only query tool with no annotations and no output schema, the description covers what events are returned, who and when is included, ordering, default range, filter dimensions, and which sibling tools to use instead. Pagination details are already in the schema, so nothing essential for invoking the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by enumerating actual event type wire names, clarifying that filtering works by member or event type, and implying the meaning of the default since/until window. These details go slightly beyond the bare schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with "Answers 'what happened'" and clearly identifies the tool as the organization's activity history. It names specific event types and makes the distinction from query_tasks explicit, so an agent can tell exactly what this tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states this is where problems surface, that query_tasks does not contain them, and provides routing to alternatives: use get_activity for a ready-made per-member bundle and query_submissions for ad-hoc reports alone. This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_submissionsRead ad-hoc submissions from the fieldAInspect
Answers 'did anyone report something on their own' — reports people sent without being asked (not answers to a task): text, photo, file, voice note, location, with who sent it and when. Check this whenever a question is about problems or reports; the task index never shows these. Oldest first; defaults to the last 7 days. Photos and files carry their id for download_attachment (scope_id = the sbm_ id).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. Modest default; the result carries a cursor when there is more. | |
| since | No | ISO-8601 instant; only items created at or after this. | |
| until | No | ISO-8601 instant; only items created at or before this. | |
| cursor | No | Continue a previous page: pass the `cursor` it returned. | |
| member | No | Only submissions by this member (name or usr_ id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses ordering ('Oldest first'), the default time window ('defaults to the last 7 days'), supported content types, and the attachment-id convention for download_attachment. It could additionally state read-only behavior more explicitly, but the title and content make it sufficiently clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core intent, then scope, ordering/default, and attachment integration. Every sentence contributes distinct information with no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a low-complexity read-only list operation. The description covers what the response contains, ordering, default date filtering, and downstream attachment retrieval. Pagination details are already covered in the schema descriptions, and no output schema exists, so the description sufficiently fills that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all five parameters at 100% coverage, so the baseline is 3. The description adds useful semantic context beyond the schema by stating the default date range ('defaults to the last 7 days') and explaining how returned photo/file ids relate to download_attachment via scope_id. This is meaningful but modest extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('query/read'), names the resource (ad-hoc submissions reported by people on their own), and clearly distinguishes this from task answers: 'not answers to a task' and 'the task index never shows these.' An agent can immediately tell this apart from query_tasks and get_task_answer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use the tool: 'Check this whenever a question is about problems or reports.' It also gives a when-not: 'not answers to a task,' and explains why alternatives won't work: 'the task index never shows these.' This is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_tasksList the organization's tasksAInspect
Answers 'which tasks are open, expired, declined or done, and who has them'. Status only — it never shows what people answered or reported; for that use get_task, query_events or get_activity. One page of compact summaries, newest first: id, title, tag, topic, status, recipients, input kinds and reply mode (what sort of answer it expects), attachment kinds (file, link), sent time, and a per-status count of the task's subtasks (checklist items). Filter by status, time window, topic, member, or group.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | Only the instances of this task group (grptsk_ id). | |
| limit | No | Page size. Modest default; the result carries a cursor when there is more. | |
| since | No | ISO-8601 instant; only items created at or after this. | |
| topic | No | Only tasks sent to this topic: its name, or its id. | |
| until | No | ISO-8601 instant; only items created at or before this. | |
| cursor | No | Continue a previous page: pass the `cursor` it returned. | |
| member | No | Only tasks delivered to this member (name or usr_ id). | |
| status | No | Only tasks in these states. Omit for all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses meaningful traits: status-only output, no answer content, one page of summaries, newest-first ordering, and exact returned fields. It does not mention pagination or auth, but those are partly covered by the schema and not essential for a read-style query.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three dense sentences with no filler. It front-loads the core answer, then gives the exclusion, then the compact field/filter list. The length is justified by the need to describe a return shape in the absence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully enumerates the returned fields and ordering. It names all filter dimensions, explicitly lists sibling alternatives, and leaves pagination to the already-detailed schema properties. An agent has enough to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds high-level filter grouping ('status, time window, topic, member, or group') but no syntax or format details beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states the exact question the tool answers: 'which tasks are open, expired, declined or done, and who has them'. It also explicitly contrasts itself with siblings by saying it never shows answers/reports, which clearly distinguishes it from get_task, query_events, and get_activity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent when not to use this tool: if answer or report content is needed, use get_task, query_events, or get_activity. It also summarizes the available filters, giving clear context for selecting this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_knowledgeSearch everything by words or by placeAInspect
Full-text and location search over everything this credential reads — the organization's records, or what a personal account sent and submitted: task titles and content, answers, replies, notifications and their answers, and ad-hoc submissions — across all time, ranked. Use it for 'anything about X?', 'what was said about X?', 'who mentioned X?'. Words match literally, and by stem in the languages the organization configured (so 'leak' finds 'leaking' only where stemming is on); several words must all appear; quote a phrase for adjacency. For 'what happened around ?' pass center/radius_meters instead of (or on top of) the query: alone they return the location answers, replies and submissions recorded within the radius, nearest first; with a query, text hits are kept only when their task or submission carries an in-radius point. For a shape rather than a circle — a site, a block, a stretch of road — pass area_points, a polygon of 3 to 50 corners, instead; those hits carry no distance and come newest first. Resolve a street or site name to coordinates yourself first, and prefer a generous radius when the coordinates are geocoded rather than known. Each hit carries the id to read in full (tsk_/sub_ with get_task, grptsk_ — a task sent to several people — with get_group_status, ntf_ with get_notification_answer, sbm_ with query_submissions) and a snippet with the matching words in brackets (a location hit carries its point and distance instead). Encrypted records are not searchable.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Only these kinds of hit. | |
| limit | No | Best hits to return; default 20, at most 100. | |
| query | No | The words to look for. Optional when center or area_points is given. | |
| since | No | ISO-8601 instant; only items created at or after this. | |
| until | No | ISO-8601 instant; only items created at or before this. | |
| center | No | WGS84 center of a radius filter; requires radius_meters. | |
| member | No | Only units written by this person: a usr_ id, an org member's name, or on a personal account the name of someone in your own activity. | |
| area_points | No | Corners of a polygon to search inside instead of a circle; not combinable with center/radius_meters. | |
| radius_meters | No | Radius around center, in meters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers extensively: stemming behavior depends on org config, multiple words must all appear, phrases require quoting, location-only results are sorted nearest-first, combined query+radius filters hits by in-radius points, and encrypted records are not searchable. This is far beyond minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place, moving from scope to matching behavior to location modes to hit payloads and limitations. Front-loaded with the most important search intent and progressively detailing edge cases, it avoids filler while fully covering a complex 9-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with no output schema and no annotations, the description is unusually complete: it explains result IDs and how to follow up with get_task/get_group_status/get_notification_answer/query_submissions, describes snippets and location-hit payloads, covers ranking order in both circle and polygon modes, and flags non-searchable encrypted records. An agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds substantial operational meaning: how query matching works, when center/radius_meters alone or combined with query changes result semantics, polygon use and ordering, snippet composition, and practical advice like preferring generous radii for geocoded coordinates. This goes well beyond the schema's bare field definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb and resource: full-text and location search over all records this credential reads, listing task titles/content, answers, replies, notifications, and submissions. It also distinguishes itself from siblings by positioning itself as the broad 'search everything' entry point rather than a narrower query_tasks/query_submissions-style tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases: 'anything about X?', 'what was said about X?', and 'who mentioned X?', plus clear guidance for location search. It references the getter siblings for reading full hits and advises resolving coordinates first, but it does not explicitly say when not to use this tool versus targeted alternatives like query_tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_notificationSend a push notificationAInspect
Send a push notification to phones. A notification lives only in the banner: once dismissed it is gone, so it suits alerts and heads-ups, not questions that must be answered. It can still carry one input — a text input, a choice, or action buttons. By default the call returns right after sending and the answer is readable later with get_notification_answer; set wait_seconds to wait for it in the same call. Each recipient gets their own copy by default; with several recipients the result lists one notification_id per person. For a question that needs an answer, a photo, file, location, slider or several inputs, use send_task.
| Name | Required | Description | Default |
|---|---|---|---|
| input | No | One input shown on the notification: free text, a choice, or action buttons. | |
| title | No | Optional short heading shown above the body. | |
| topic | No | Deliver to this topic instead of the user's own devices. Omit for a self-send. | |
| member | No | Unavailable in personal mode — requires an org integration token. | |
| shared | No | Default false: a copy per recipient. true: one notification all recipients see; one person's input answer resolves it for all. | |
| content | Yes | Body of the notification. | |
| audio_url | No | Public https URL of an audio clip attached to the notification. | |
| broadcast | No | Unavailable in personal mode — requires an org integration token. | |
| image_url | No | Public https URL of an image shown with the notification. | |
| wait_seconds | No | Default 0: return right after sending. With an input, wait this long for the answer (every recipient's, when there are several); on timeout the result marks who has not answered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and excels. It details default return behavior (immediate vs. waiting), per-recipient copies vs. shared, how results identify each recipient (one notification_id per person), and timeout behavior (marks who has not answered). It also notes availability restrictions for member and broadcast in personal mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense yet well-organized, moving from purpose to behavioral nuances to parameter guidance. Every sentence contributes unique value—no repetition or filler—and the flow is logical, making it easy for an agent to parse and apply.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, nested input object), the description is complete. It covers all relevant aspects: purpose, when to use alternatives, return behavior, input types, shared semantics, and usage restrictions. It even describes what the result will contain, compensating for the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema by explaining the input oneOf variants (text, choice, actions) and their behavior (e.g., 'tapping one answers with its key'). It clarifies shared semantics ('one person's input answer resolves it for all') and wait_seconds behavior, all supplementing the schema's property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Send a push notification to phones') and clearly distinguishes it from send_task by explaining that notifications are for alerts/heads-ups, not questions that must be answered. This makes the tool's purpose unambiguous and differentiates it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool versus send_task ('For a question that needs an answer, a photo, file, location, slider or several inputs, use send_task'). It also explains how to get answers later (get_notification_answer) and how to wait synchronously (wait_seconds), covering both usage patterns and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_taskSend a task (a question, form or checklist item that needs an answer)AInspect
Create a task on people's phones and wait for the answers. content says what to do or answer; inputs says how to answer: one or more of text, choice (single or multi), action buttons, slider, photo, voice recording, file, location, all answered in one submission. reply opens a comment thread on the task instead of, or in addition to, inputs. By default every recipient gets their own copy of the task, tied together by a group; the call waits up to wait_seconds (default 90s) for ALL of them to answer and returns per-recipient results, with whoever has not answered yet marked pending — a timeout is not a cancellation, the tasks stay live and get_group_status or get_task_answer resolve them later. shared: true sends ONE task that all recipients see and answer together (the first answer resolves it) — use it for questions where any one person's answer settles the matter. Every result carries an append_token for append_subtask.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | A label for grouping and filtering related tasks (e.g. a site or job number); shown on task summaries. | |
| links | No | Public https URLs attached to the task as links. | |
| reply | No | Let recipients reply with comments, photos, files or voice notes: `one-shot` (one reply closes the task), `sticky` (thread stays open), `one-time-per-user` (each recipient replies once). | |
| title | No | Short heading. Always set one: task listings and activity overviews show only titles, tags, topics, status, input and attachment kinds, never content, so an untitled task is unreadable there — for people scanning their phone as much as for query_tasks later. | |
| topic | No | Deliver to this topic instead of the user's own devices. Omit for a self-send. | |
| inputs | No | The inputs the recipient fills in, in display order. | |
| member | No | Unavailable in personal mode — requires an org integration token. | |
| shared | No | Default false: an independent copy per recipient, answers collected per person. true: ONE task all recipients see and answer together; the first answer resolves it. | |
| content | No | Body of the task: what to do or answer. Required unless `inputs` is given. | |
| markdown | No | Render `content` as Markdown. | |
| broadcast | No | Unavailable in personal mode — requires an org integration token. | |
| expires_at | No | ISO-8601 deadline. After it the task counts as expired and can no longer be answered. | |
| auto_commit | No | Default false: the task is a form — all inputs are submitted together with one Submit button. true: each input is submitted as it is filled. | |
| wait_seconds | No | How long to block. Default 90; 0 returns right after sending. With per-recipient copies (the default) it waits for everyone's answer and reports partial results at the deadline. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries the burden. It discloses that a timeout is not cancellation, tasks stay live, unanswered recipients are marked pending, `shared: true` resolves on first answer, and every result carries an append_token — genuinely useful behavioral facts beyond 'creates a task'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the core action and then adding mode/wait/append semantics in a logical order. No filler or repetition of schema field names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter write tool with no output schema and no annotations, it covers the send/wait/timeout lifecycle well and mentions per-recipient results and append_token. It still leaves recipient-targeting mechanics (topic/member/broadcast) and the exact result payload mostly to the schema, which is a minor gap at this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers 100% of parameters, so baseline is 3; the description adds real cross-parameter meaning (content vs inputs, reply thread behavior, shared semantics, wait_seconds timeout semantics). It does not walk through every parameter, but it clearly compensates for the most decision-critical ones.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete action ('Create a task on people's phones and wait for the answers') and scopes the resource type via the title/description (a question, form or checklist item), which is distinct from notification-style siblings. The `content` vs `inputs` split and per-recipient vs shared mode make the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear decision context: default per-recipient copies vs `shared: true` for matters one answer settles, and points to get_group_status/get_task_answer for late answers. It does not explicitly contrast with send_notification or state when not to use the tool, so not a full 5.
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.
14 tool updates
v0.1.0- First observed
append_subtask - First observed
cancel_task - First observed
download_attachment - First observed
get_activity - First observed
get_group_status - First observed
get_notification_answer - First observed
get_task - First observed
get_task_answer - First observed
query_events - First observed
query_submissions - First observed
query_tasks - First observed
search_knowledge - First observed
send_notification - First observed
send_task
TDQS
Scored across 14 tools
The core send/get/cancel tools are clearly separated by resource and action, but the retrieval tools—query_tasks, query_events, query_submissions, get_activity, and search_knowledge—overlap in scope and rely heavily on their detailed descriptions to keep an agent from picking the wrong one.
All tool names follow a consistent snake_case verb_noun pattern, with parallel names for parallel resources such as get_task_answer and get_notification_answer. There are no mixed conventions or vague generic verbs.
Fourteen tools cover the domain well: sending tasks and notifications, managing subtasks, retrieving answers, querying statuses and events, searching knowledge, and downloading attachments. Each tool maps to a distinct workflow without the set feeling bloated.
The lifecycle is broadly complete: create, append, cancel, read, list, search, and download are all represented. Minor gaps remain, such as no direct full read of a sent notification and no update path for already-sent tasks, but these are outside the core workflow's critical path.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Send mobile pings and route human questions, approvals, and handoffs from AI agents.
Communication stack for AI agents: SMS, AI voice calls, phone numbers, and account events.
Build and send email, SMS, and push straight from your AI agent.
Shared task queue for humans and AI agents: leases, handoffs, approvals and signed receipts.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables AI agents to send, receive, schedule, and manage SMS and MMS messages using the Twilio Programmable Messaging API. It provides comprehensive tools for handling bulk messaging, conversation threads, and real-time inbox monitoring through a secure, production-grade architecture.161MIT
- -licenseNot gradedqualityNot gradedmaintenanceField operations agent API for task management, geo-tracking, and team coordination. Built for African logistics, delivery, and field service teams.-
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to communicate with humans using notify and ask semantics, supporting session management and blocking or non-blocking messages.15MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to send SMS/iMessage and check replies via Sendblue API using secure polling (no webhooks).4-