Skip to main content
Glama
sol2flow

sol2flow MCP server

Official
by sol2flow

sol2flow MCP server

An MCP server for sol2flow: it lets AI assistants (Claude Desktop, Claude Code, Cursor, VS Code and other MCP clients) read and change your boards and tasks. It talks to sol2flow only through its public REST API with your personal API key, so it can do exactly what you can do in the app, nothing more.

  • Hosted: https://mcp.sol2flow.com/mcp for sol2flow cloud (Streamable HTTP, your key in the Authorization header).

  • Local: npx -y @sol2flow/mcp (stdio), for the cloud or your own instance.

  • Self-hosted: the Docker image ghcr.io/sol2flow/mcp next to your sol2flow.

User guide: docs.sol2flow.com → Integrations → MCP server.

Quick start

  1. In sol2flow, open Settings → API keys and create a key. Full access lets the assistant change things; Read only lets it only look (the write tools are then hidden or refused).

  2. Add the server to your client (replace sf_… with the key; for your own instance set SOL2FLOW_URL).

Claude Code

claude mcp add sol2flow --env SOL2FLOW_API_KEY=sf_… -- npx -y @sol2flow/mcp
# or the hosted server
claude mcp add --transport http sol2flow https://mcp.sol2flow.com/mcp --header "Authorization: Bearer sf_…"

Claude Desktop (claude_desktop_config.json), Cursor (~/.cursor/mcp.json):

{
  "mcpServers": {
    "sol2flow": {
      "command": "npx",
      "args": ["-y", "@sol2flow/mcp"],
      "env": { "SOL2FLOW_URL": "https://app.sol2flow.com", "SOL2FLOW_API_KEY": "sf_…" }
    }
  }
}

Cursor also takes the hosted server: "sol2flow": { "url": "https://mcp.sol2flow.com/mcp", "headers": { "Authorization": "Bearer sf_…" } }.

VS Code (.vscode/mcp.json; the key is asked for once and stored by VS Code):

{
  "inputs": [{ "type": "promptString", "id": "sol2flow-key", "description": "sol2flow API key", "password": true }],
  "servers": {
    "sol2flow": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@sol2flow/mcp"],
      "env": { "SOL2FLOW_API_KEY": "${input:sol2flow-key}" }
    }
  }
}

The hosted variant: "sol2flow": { "type": "http", "url": "https://mcp.sol2flow.com/mcp", "headers": { "Authorization": "Bearer ${input:sol2flow-key}" } }.

Claude.ai and ChatGPT connectors need OAuth sign-in instead of a key; that comes in a later version.

Related MCP server: projectflow-mcp

Tools

32 tools, named verb_noun. Read tools carry readOnlyHint; write tools say whether they are destructive and idempotent. Deleting is not offered: archive_task hides a task, unarchive_task brings it back.

Tool

What it does

API requests

whoami

Your account, the key (scope, expiry; sol2flow 1.8+), the API version, workspaces

2

list_workspaces

Workspaces with their slugs and your role

1

list_boards

Boards of a workspace (keys, task counts)

1

get_board

A board's lists with their tasks in board order (up to 300 tasks)

2–4

search

Boards and tasks by name, key or text (like ⌘K)

1 per workspace

list_tasks

Tasks filtered by board, list, assignee, label, text, due dates, last change

1–4

get_task

A task in full: description, checklist, links, latest comments

3

list_labels

Labels of a board or workspace

1

list_people

Members of a workspace

1

list_time_entries

Logged time, by board, task, person and period

1–3

get_timer

Your running timer

1

list_notifications

Your notifications

1

list_my_invitations

Pending invitations to you

1

create_task

A task with description, labels, assignees, dates, estimate

2–4

update_task

Fields, labels, assignees and list, step by step, reporting each step

2–7

move_task

To a list and position (top, bottom, before/after a task) or another board

3–5

archive_task

Archive (read-only until unarchived)

1

unarchive_task

Bring an archived task back

1

add_comment

A comment or reply (Markdown, mentions)

1

add_checklist_items

Checklist items, in order

1 per item

update_checklist_item

Tick, untick or edit an item

1–2

link_tasks

blocks / blocked by / relates to / duplicates

1

unlink_tasks

Remove links between two tasks

2

log_time

Time on a task (1h30m, 45m)

1

start_timer

Start your timer (stops a running one)

1

stop_timer

Stop it; the time is logged

1

update_time_entry

Change one of your entries

1

mark_notifications_read

Some or all

1 per id, or 1

respond_to_invitation

Accept or decline

1

create_board

A board with its lists

1

create_list

A list at the end of a board

1

create_label

A board label

1

Plus reference lookups: a task key (PRD-12) or board name costs one search the first time and is then cached for 10 minutes; the workspace list is fetched once a minute at most. Every request counts against the key's rate limit (600 requests per 10 minutes, at most 120 of them writes) and, where plans apply, the organization's daily API limit.

Prompts: plan_my_day and board_standup. No resources yet (a sol2flow://task/{key} resource is planned).

References

  • Task: its key (PRD-12, also an old key after a move), its URL in the app, or its id.

  • Board: its key (PRD), name, URL or id. List, label: name or id.

  • Person: me, @username, a name, or an id.

  • Workspace: the slug. Default: the workspace parameter, then SOL2FLOW_WORKSPACE (or ?workspace= on the HTTP endpoint), then your only workspace. With several and none chosen, key lookups search them all (up to 10).

Output is compact Markdown (at most about 25 000 characters, with a notice when cut); response_format: "json" returns the API's data. Descriptions and comments are read and written as Markdown.

Read-only mode

--read-only, READ_ONLY=true or ?read_only=1 hide every write tool. In stdio mode a read-only key hides them automatically (sol2flow 1.8+ tells the server the key's scope); otherwise a write answers with a clear "this key is read-only".

How it works

  • Every tool call becomes REST API requests with your key: Authorization: Bearer sf_…, User-Agent: sol2flow-mcp/<version>, 15 s per request, 45 s per tool, independent requests in parallel.

  • Permissions are the API's: plan, key scope, the workspace's API access switch and your roles apply exactly as for the API. There is no separate MCP permission.

  • Retries: reads only — on rate_limited with Retry-After ≤ 10 s (twice) and on server or network errors (once). Never the daily plan limit, never a write: the API has no idempotency keys, so a write without an answer is reported as "may or may not have been applied; check first".

  • Versions: the server reads the Sol2flow-Api-Version header (sol2flow 1.8+). Without it, it assumes 1.7.0 and does without the newer features; a tool that needs an endpoint the instance doesn't have says the instance is too old.

  • Errors become tool results the model can act on: a refused key (how to create one and where to update it), API switched off (instance or workspace), plan, read-only plan, read-only key, permission, not found, archived task (unarchive_task first), too large, invalid parameter (named as the tool's parameter), rate limits with the time until they reset, server errors.

Configuration

Variable

Default

What it does

SOL2FLOW_URL

https://app.sol2flow.com

The sol2flow instance (…/api/v1 is added). In HTTP mode fixed by the operator: clients can't change it

SOL2FLOW_API_KEY

—

stdio only: the API key. Or SOL2FLOW_API_KEY_FILE (a Docker secret). There is no flag, so it never shows in ps

SOL2FLOW_WORKSPACE

—

The default workspace slug

READ_ONLY

false

Hide the write tools (same as --read-only)

MCP_TRANSPORT

stdio

stdio or http (same as --stdio / --http; the image sets http)

HOST, PORT

127.0.0.1, 3000

HTTP: where to listen (the image: 0.0.0.0)

ALLOWED_HOSTS

loopback only

HTTP: accepted Host headers (host or host:port, comma-separated). Unset on a public bind: any (a warning)

ALLOWED_ORIGINS

localhost origins

HTTP: accepted Origin headers of browser clients; * for any. Requests without Origin are always accepted

TRUST_PROXY_HOPS

0

HTTP: proxies in front; the client IP is that many X-Forwarded-For entries from the right

FORWARD_CLIENT_IP

false

HTTP: send the client IP upstream as X-Forwarded-For (when sol2flow trusts this server as its proxy)

LOG_LEVEL

info

debug adds one line per API request

LOG_FILE

—

Also write the log to dated files next to this path (e.g. /data/logs/mcp.log; see Logging)

LOG_FILE_MAX_SIZE, LOG_FILE_FREQUENCY, LOG_FILE_MAX_FILES

none, daily, 10

Rotation: as in the app and the website

SENTRY_DSN, SENTRY_ENVIRONMENT, SENTRY_RELEASE

—, production, version

Error tracking (image only; or SENTRY_DSN_FILE)

Flags: --stdio, --http, --read-only, --host, --port, --version, --help.

Hosting (Streamable HTTP)

POST /mcp is stateless: each request builds a fresh server around that request's key and answers with JSON (no SSE streams, no sessions, so it works behind tunnels that buffer). Nothing is stored. GET /healthz answers {"status":"ok","version":"…"}; GET and DELETE /mcp answer 405. Query parameters: workspace=<slug> (the default workspace) and read_only=1.

Protections: no or malformed key → 401 with WWW-Authenticate; Host and Origin checks against DNS rebinding; bodies up to 1 MB (413); 15 s to send the headers, 60 s per request; at most 100 requests in flight per process (503); at most 30 rejected keys per client IP in 10 minutes (429); a key sol2flow refused isn't sent upstream again for 5 minutes.

  • Docker Swarm: examples/swarm-stack.yml (secrets, logs on a host directory owned by 1001:1001).

  • Self-hosting: examples/compose.selfhosted.yml puts the server next to your sol2flow's app service; give it a host name behind your reverse proxy and set ALLOWED_HOSTS to it.

docker run --rm -p 3000:3000 --read-only -e SOL2FLOW_URL=https://flow.example.com \
  -e ALLOWED_HOSTS=mcp.example.com ghcr.io/sol2flow/mcp

The image (linux/amd64, linux/arm64) is one bundled file on node:22-alpine, runs as 1001:1001, works with a read-only root filesystem, and has a health check.

Logging

JSON lines (pino) on stdout in HTTP mode and on stderr in stdio mode (stdout is the protocol). Each tool call logs the tool, the outcome, the duration, the number of API requests, the client IP (HTTP) and the key's public 8-character prefix; with LOG_LEVEL=debug also each upstream operation and its status. Never the key, tool arguments or results: on top of not logging them, the usual field names are redacted and every line is scrubbed of anything shaped like a key or a bearer token.

LOG_FILE writes the same lines to mcp-YYYY-MM-DD.log files with mcp.log as a symlink to the current one (LOG_FILE_FREQUENCY daily · hourly · none, LOG_FILE_MAX_SIZE like 20m, LOG_FILE_MAX_FILES kept, 0 = all). A file that can't be written never stops the server: one warning, then the console only.

Error tracking

Off unless SENTRY_DSN (or SENTRY_DSN_FILE) is set, and only in the Docker image (the npm package doesn't ship the SDK). Only server errors from sol2flow and unexpected errors are sent, without requests, headers, bodies, arguments, results or user data. Works with sentry.io, Bugsink and GlitchTip.

Privacy

The server stores nothing: no keys (in HTTP mode only a fingerprint of keys sol2flow refused, for 5 minutes), no content. Resolved references (task key → id) are cached in memory for 10 minutes per key fingerprint. What reaches the AI assistant is up to you and the assistant's provider.

Contributing

Building, testing and releasing: DEVELOPMENT.md. Contributions: CONTRIBUTING.md.

License

MIT (see LICENSE); the bundled packages' licences are in THIRD-PARTY-NOTICES.md. Security reports: SECURITY.md.

Available Tools

32 tools
add_checklist_itemsAdd checklist itemsB

sol2flow: add items to the end of a task's checklist, in the order given (one request each).

NameRequiredDescriptionDefault
taskYesThe task: its key (PRD-12), its URL in the app, or its id
itemsYes
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare non-read-only, non-destructive, non-idempotent behavior, so the safety profile is covered. The description adds the meaningful append semantics (items go to the end, preserving the given order), but says nothing about permissions, whether existing items are reordered, or the 30-item limit.

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?

A single front-loaded sentence with no filler; the append position and ordering constraint come first. The trailing '(one request each)' is slightly cryptic but not wasteful in length.

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

Completeness3/5

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

No output schema, so the description need not explain returns, but for a mutation with 3 parameters it omits permissions, effect on existing checklist items, and the maxItems constraint. Adequate to call the tool, incomplete for predicting behavior.

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 67%: the task and workspace parameters are documented in the schema, but the items array itself has no description. The description's 'in the order given' is the only semantic hint for items, so it adds marginal value over the schema rather than compensating for the gap.

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?

States a specific verb (add) and resource (checklist items) with a clear scope: appending to the end of a task's checklist in a given order. It is distinguishable from the sibling update_checklist_item, though the leading 'sol2flow:' token is a namespacing artifact rather than useful meaning.

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

Usage Guidelines2/5

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

No when-to-use guidance and no explicit routing against update_checklist_item or create_task. The parenthetical '(one request each)' hints at an operational constraint but is ambiguous and never states prerequisites such as needing an existing task.

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

add_commentComment on a taskA

sol2flow: add a comment (Markdown) to a task, or a reply to a top-level comment (reply_to: its id from get_task). Mention someone with @[Name](user:): they are notified.

NameRequiredDescriptionDefault
taskYesThe task: its key (PRD-12), its URL in the app, or its id
textYesMarkdown (GFM)
reply_toNoId of the top-level comment to reply to
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare non-readOnly, non-idempotent, non-destructive; the description adds genuinely new side-effect information beyond them — that @-mentions trigger notifications and that text is rendered as Markdown/GFM. It does not restate the safety profile, which is the right behavior.

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?

A single dense sentence with the primary action front-loaded, followed by reply semantics and the mention syntax. Every clause carries information, though the mention-syntax fragment makes the sentence slightly packed.

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 non-idempotent write tool with full schema coverage and annotations covering safety, the description fills the gaps that matter: reply targeting, mention notification behavior, and content format. With no output schema, return-value details are not required.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: reply_to must reference a *top-level* comment id (from get_task), and it documents the @[Name](user:<id>) mention syntax for user targeting that the schema does not express.

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

Purpose5/5

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

States a specific verb and resource ('add a comment (Markdown) to a task') and covers both modes: top-level comment and reply. No sibling tool competes for this function, so the purpose is unambiguous.

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

Usage Guidelines4/5

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

Explains both usage modes and where to source the reply id ('reply_to: its id from get_task'), giving the agent a concrete retrieval path. It does not spell out when not to use it (e.g. vs. update_task descriptions), but the context is clear.

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

archive_taskArchive a taskA
DestructiveIdempotent

sol2flow: archive a task. It leaves lists, search and counts, stays in timesheets and exports, and is read-only until unarchive_task. Already archived: no change. (Deleting is not offered: archiving is the safe way.)

NameRequiredDescriptionDefault
taskYesThe task: its key (PRD-12), its URL in the app, or its id
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one

TDQS

A4.2/5.0
Behavior4/5

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

Adds substantial context beyond the annotations: the task leaves lists/search/counts but persists in timesheets and exports, re-archiving is a no-op (consistent with idempotentHint), and it is reversible via unarchive_task. The phrase "read-only until unarchive_task" is ambiguous — it describes the archived task's state, but an agent could misread it as the tool itself being read-only, which would clash with readOnlyHint=false.

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

Conciseness4/5

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

Dense and front-loaded: purpose first, then visibility effects, then idempotency, then the reversibility and safety rationale. Sentences are terse and each carries a distinct fact, though the parenthetical about deleting is slightly editorial.

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 two-parameter mutation with no output schema and annotations already declaring destructiveness and idempotency, the description covers everything an agent needs: what is affected, what is preserved, what happens on repeat calls, and how to reverse it. Nothing material 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?

Schema description coverage is 100%: the schema already explains that `task` accepts a key, URL, or id, and that `workspace` defaults to the configured or only workspace. The description adds nothing about parameter format or defaults, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("archive a task") and immediately differentiates itself from the sibling unarchive_task, which it names. An agent can distinguish it from update_task, move_task, or a hypothetical delete without opening any schema.

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

Usage Guidelines4/5

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

Gives clear selection context: use archiving because deleting is not offered, and unarchive_task is the path back. It does not spell out explicit when-not conditions (e.g. use update_task if you only want to hide from one board), but the routing intent toward the reverse operation is explicit.

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

create_boardCreate a boardA

sol2flow: create a board in a workspace, optionally with its lists (in order). You become its board admin. access WORKSPACE (default): every workspace member gets default_role; RESTRICTED: only people added to it.

NameRequiredDescriptionDefault
nameYes
listsNoList names, e.g. ["To do", "Doing", "Done"]
accessNo
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one
default_roleNoThe role workspace members get (access WORKSPACE)

TDQS

A3.9/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, so the agent knows it's a non-destructive write that is not idempotent. The description adds valuable context: 'You become its board admin' and details on access modes (WORKSPACE vs RESTRICTED) and role assignment, which are not captured by annotations. It doesn't mention rate limits, but this is solid supplementary behavioral information.

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?

Two concise sentences, front-loaded with the main action and followed by access details. No wasted words, though the access modes could be slightly more structured.

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 5-parameter mutation tool with no output schema, the description covers the core purpose, admin effect, access modes, and default behavior. It lacks explicit prerequisites (e.g., required permissions) and return value info, but given the annotations and schema, it is nearly complete.

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

Parameters3/5

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

Schema coverage is 60%, so the schema already documents 'lists', 'workspace', and 'default_role'. The description adds meaning for 'access' (enum values explained) and 'lists' (ordering), but does not cover 'name' constraints or fully document all parameters. Baseline 3 is appropriate given partial schema coverage and some added value.

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

Purpose5/5

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

States specific verb and resource ('create a board in a workspace'), notes optional lists with ordering, and differentiates from siblings like create_list. An agent can immediately tell this creates a board, not a task or list.

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

Usage Guidelines3/5

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

Implies usage by describing access modes and default workspace resolution, but doesn't explicitly say when to use this vs alternatives like create_list (for adding lists to an existing board). No when-not-to-use guidance is provided.

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

create_labelCreate a board labelA
Idempotent

sol2flow: create a label on a board. If a label with that name exists (workspace or board), that one is returned instead. Colors: yellow, orange, red, pink, purple, blue, cyan, green, gray or #RRGGBB.

NameRequiredDescriptionDefault
nameYes
boardYesThe board: its key (PRD), name, URL in the app, or id
colorNoDefault gray
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description earns credit by explaining *why* it is idempotent — an existing workspace- or board-level label is returned rather than duplicated — which is concrete behavior an agent cannot infer from the hints alone. It does not mention permission requirements.

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?

Three short sentences: purpose first, then the dedup behavior, then the color reference. Every sentence carries distinct information with no filler.

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

Completeness4/5

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

For a mutation tool with no output schema, the description should convey what comes back; it partially does by stating the existing label is returned in the dedup case. The main return shape for a fresh creation is still unstated, but the tool's behavior is otherwise well covered by annotations plus the color reference.

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 75% and the schema documents 'board' and 'workspace' but leaves 'color' vague ('Default gray'). The description compensates by enumerating the allowed color values plus the #RRGGBB format, which the schema does not provide. 'name' remains undocumented but is self-evident.

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

Purpose5/5

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

States a specific verb ('create') and resource ('a label on a board'), which cleanly separates it from siblings like list_labels, create_board, and create_list. An agent can identify the operation without opening the schema.

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

Usage Guidelines3/5

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

The description implies usage via the dedup rule ('If a label with that name exists ... that one is returned instead'), which tells the agent this is safe to call even when a label may already exist. However, it never states explicit when/when-not conditions or names an alternative tool for label management, so guidance is implied rather than declared.

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

create_listAdd a list to a boardA

sol2flow: add a list (column) at the end of a board. Editors and board admins.

NameRequiredDescriptionDefault
nameYes
boardYesThe board: its key (PRD), name, URL in the app, or id
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), so the bar is lower. The description adds two pieces of value beyond that: the append-at-end semantics (no positioning control) and the required editor/admin role, which is exactly the kind of auth context annotations don't convey.

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

Conciseness4/5

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

Extremely compact and front-loaded, with the action stated first. The 'sol2flow:' vendor prefix is the only wasted token; otherwise every word carries information.

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

Completeness4/5

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

For a simple 3-parameter mutation with no nested objects and full annotation coverage, the description supplies the essentials: what is created, where it lands, and who may do it. Missing details (duplicate-name behavior, response shape) are minor since annotations carry the safety profile and no output schema exists.

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 67%: board and workspace are documented in the schema, and 'name' is self-evident (max 120 chars). The description adds only the gloss that the list is a 'column', which mildly clarifies the 'name' parameter but does not add format or constraint detail. Baseline 3 is appropriate.

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

Purpose4/5

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

The description gives a specific verb and resource ('add a list (column)') and even disambiguates the term 'list' as 'column', plus the placement ('at the end of a board'). That is enough to separate it from create_board and create_task, though it never names those siblings explicitly.

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

Usage Guidelines2/5

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

'Editors and board admins.' states who is permitted, which is a prerequisite, but there is no guidance on when to use this tool versus alternatives (e.g. create_board for a new board, or update/move tools for reordering). No when-not conditions are given.

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

create_taskCreate a taskA

sol2flow: create a task on a board, in a list (default: the first list), with an optional Markdown description, labels (names), assignees ("me", usernames or names), dates and an estimate. Editors and board admins.

NameRequiredDescriptionDefault
listNoList name or id (default: the first list)
boardYesThe board: its key (PRD), name, URL in the app, or id
titleYes
labelsNo
due_dateNoA day, YYYY-MM-DD
estimateNoWorking time: "90m", "2h", "3d", "1w 2d"; a bare number is hours (1 day = 8 h, 1 week = 5 days by default)
positionNoWhere in the list (default bottom)
assigneesNo
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one
start_dateNoA day, YYYY-MM-DD
descriptionNoMarkdown (GFM). Mentions: @[Name](user:<user id>). Raw HTML stays text; links only http(s), mailto or relative

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=false), so the description just needs to add context. It adds the meaningful auth constraint ("Editors and board admins") and default-target behavior (first list), though it omits side effects like notifications to assignees.

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

Conciseness4/5

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

It is a single front-loaded sentence that states the core action first and packs defaults and formats efficiently. It is dense but no sentence is wasted, though the trailing permission clause reads as an afterthought.

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

Completeness4/5

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

With no output schema, the description reasonably covers purpose, defaults, formats, and permissions for a task-creation tool. It could note what is returned (e.g., the created task) but is otherwise complete enough to invoke 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 73% and several parameters (title, labels, assignees) lack schema descriptions. The description compensates by explaining that labels are names, assignees accept "me"/usernames/names, and the description field is Markdown, adding real meaning 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 opens with a specific verb+resource ("create a task on a board, in a list") and enumerates the settable fields, which cleanly distinguishes it from siblings like create_board, create_list, and create_label. An agent can identify the operation without opening the schema.

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

Usage Guidelines3/5

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

The description states the access requirement ("Editors and board admins") and defaults (first list), which implies audience and context, but it gives no explicit when-to-use versus alternatives such as update_task or create_board. Usage context is only implied.

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

get_boardShow a boardA
Read-only

sol2flow: a board with its lists and, in each list, its tasks in board order (key, title, due date, assignees, labels). Shows up to 300 tasks.

NameRequiredDescriptionDefault
boardYesThe board: its key (PRD), name, URL in the app, or id
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one
include_tasksNofalse: only the lists (default true)
response_formatNomarkdown (default): compact text; json: the API data

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: tasks are returned 'in board order' and the result is capped at 300 tasks, a truncation limit the agent must know about. It stops short of describing pagination behavior at that cap.

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?

A single efficient sentence that front-loads the resource and its contents. The 'sol2flow:' prefix is noise that earns no place, but otherwise there is no padding.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing returns and does so by naming the included fields and the 300-task cap. It is nearly complete, missing only what happens beyond the cap and how nested list/task structure is ordered relative to include_tasks.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (board, workspace, include_tasks, response_format) are already documented in the schema. The description adds only marginal detail (task ordering) and does not clarify parameter behavior beyond what the schema provides, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('a board with its lists and, in each list, its tasks') and enumerates the returned fields (key, title, due date, assignees, labels). It does not distinguish itself from siblings like list_boards, list_tasks, or get_task, but the operation itself is unambiguous.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and no alternatives are named. An agent cannot tell from the text whether to reach for this versus list_boards or get_task; the intended usage is only implied by the name.

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

get_taskShow a taskA
Read-only

sol2flow: one task in full: list, assignees, labels, dates, estimate, description (Markdown), checklist (with item ids), links to other tasks and the latest comments.

NameRequiredDescriptionDefault
taskYesThe task: its key (PRD-12), its URL in the app, or its id
commentsNoHow many of the newest comments (default 5; 0: none)
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one
response_formatNomarkdown (default): compact text; json: the API data

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real value beyond that by disclosing the returned payload (including checklist item ids and latest comments), which matters because there is no output schema. It does not mention permissions or rate limits, but for a read tool this is a solid addition.

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?

A single dense sentence, front-loaded with the core purpose ('one task in full') before the field list. Slightly run-on but every clause earns its place by describing what is returned.

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

Completeness4/5

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

With no output schema, the description carries the burden of telling the agent what comes back, and it does so comprehensively. The remaining gaps (pagination of comments, permission requirements) are minor for a single-record read tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents task key/URL/id, the comments count with its default, the workspace default, and the response_format enum. The description adds no parameter-level meaning beyond that, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('one task in full') and enumerates the returned facets (assignees, labels, dates, estimate, description, checklist, links, comments). It is clearly the single-task counterpart to list_tasks, though it never names a sibling to contrast against.

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

Usage Guidelines3/5

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

Usage is implied: fetch one task's full detail. There is no explicit when-to-use statement, no condition distinguishing it from list_tasks or search, and no prerequisites (e.g., that the task key/URL/id must resolve in the configured workspace).

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

get_timerRunning timerA
Read-only

sol2flow: your running timer, if any (task and start time).

NameRequiredDescriptionDefault
response_formatNomarkdown (default): compact text; json: the API data

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds one useful behavioral detail beyond that — the timer may not exist ('if any') — but says nothing about permissions, empty-result shape, or whether it is scoped to the authenticated user.

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

Conciseness4/5

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

One short sentence, front-loaded with the resource and the return payload. The 'sol2flow:' prefix is minor noise that earns nothing, but there is no padding otherwise.

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 zero-required-parameter read tool with no output schema, the description conveys the payload (task and start time) and the empty case. Nothing critical is missing, though a hint about the authenticated-user scope would fully close it out.

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?

There is a single optional parameter with 100% schema description coverage, so the schema fully documents response_format including its default. The description adds no parameter meaning at all, which is the baseline 3 case when the schema does the work.

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

Purpose4/5

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

The description states a specific resource ('your running timer') with a retrieval verb and clarifies the nullable case ('if any'), plus names the returned fields (task and start time). It implicitly distinguishes itself from start_timer/stop_timer/list_time_entries by scoping to the currently running timer, though it never names a sibling explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the check used before start_timer or stop_timer, but the description never states when to call it or when to prefer list_time_entries instead. No exclusions or prerequisites are given.

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

list_boardsList boardsB
Read-only

sol2flow: the boards you can open in a workspace, with their keys (PRD), task counts and your role.

NameRequiredDescriptionDefault
limitNoItems per page (default 50)
queryNoName contains
cursorNoFrom a previous answer, for the next page
archivedNotrue: archived boards instead
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one
response_formatNomarkdown (default): compact text; json: the API data

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real value by disclosing the response contents (keys, task counts, role), but says nothing about pagination behavior or result caps despite cursor/limit parameters.

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?

A single front-loaded sentence with no filler; the returned-field list is the highest-value content and comes immediately. The 'sol2flow:' prefix is wasted tokens but the rest is tight.

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?

There is no output schema, so the description carries the burden of describing the return shape, and it does name the key returned fields. Combined with fully documented parameters and read-only annotations, an agent has enough to call it correctly; only pagination behavior is unaddressed.

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 every parameter (limit, query, cursor, archived, workspace, response_format) is already documented in the schema. The description adds no syntax or format detail beyond that, so the baseline 3 applies.

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

Purpose4/5

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

It states a concrete verb+resource (listing boards scoped to a workspace) and even names the returned fields (keys, task counts, your role). It doesn't explicitly contrast with siblings like get_board or search, but an agent can still tell this is the enumeration tool rather than a single-board fetch.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no named alternatives, even though get_board, search and list_workspaces all overlap in this area. The only hint ('a workspace') is implied scope rather than a routing rule.

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

list_labelsList labelsA
Read-only

sol2flow: labels. With board: the ones usable on that board (the workspace's labels and the board's own); without: the workspace's labels.

NameRequiredDescriptionDefault
boardNoThe board: its key (PRD), name, URL in the app, or id
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one
response_formatNomarkdown (default): compact text; json: the API data

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful context about which labels come back, but says nothing about ordering, pagination, or result limits.

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?

Two short sentences with the mode-dependent behavior front-loaded and no filler. The 'sol2flow: labels.' prefix is a slightly odd namespace stub but costs almost nothing.

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

Completeness4/5

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

For a read-only, loosely-parameterized list tool with full schema coverage and annotations carrying the safety profile, the description is sufficient; only return shape and pagination are unaddressed.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes beyond the schema by explaining the semantic effect of supplying `board` (workspace labels plus the board's own vs workspace labels only) rather than just its accepted formats.

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

Purpose4/5

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

The description names the resource (labels) and precisely scopes what set is returned, so an agent knows this reads labels rather than mutating them. The verb is only implied by the tool name, and it never names a sibling, but the purpose is clear.

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

Usage Guidelines3/5

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

It explains the two modes (with `board` vs without), which is effectively guidance on how to call it, but gives no explicit when-to-use vs alternatives such as create_label, and no note that list_workspaces is needed first for the workspace slug.

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

list_my_invitationsList my invitationsA
Read-only

sol2flow: pending invitations to your verified email address (workspace, board, role, who invited you). respond_to_invitation accepts or declines one.

NameRequiredDescriptionDefault
response_formatNomarkdown (default): compact text; json: the API data

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and openWorldHint=false. The description still adds real behavioral value by disclosing the scoping rule that only invitations sent to the verified email address are returned, plus the shape of what comes back.

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

Conciseness5/5

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

Two tight sentences: the resource and scoping rule come first, and the routing pointer to the sibling follows. No filler or redundancy.

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

Completeness4/5

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

For a simple read-only list tool with no output schema, the description covers what is returned (workspace, board, role, inviter) and how it relates to the sibling action tool. Only pagination/ordering behavior is unaddressed, a minor gap.

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 sole parameter (response_format) has 100% schema description coverage, including enum meanings, so the schema does the heavy lifting. The description adds nothing about response_format, which is the expected baseline when coverage is complete.

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

Purpose4/5

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

The description names the exact resource (pending invitations) and scopes it to the caller's verified email address, enumerating returned fields (workspace, board, role, inviter). It also distinguishes itself from respond_to_invitation, though the listing verb itself is only implied by the tool name rather than stated.

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?

By stating that respond_to_invitation 'accepts or declines one', it effectively routes the agent: use this tool to see invitations, use the sibling to act on them. It gives clear context but no explicit 'when not to use' or prerequisites.

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

list_notificationsList notificationsB
Read-only

sol2flow: your notifications, newest change first (assignments, mentions, comments, due dates, …).

NameRequiredDescriptionDefault
limitNoItems per page (default 30)
cursorNoFrom a previous answer, for the next page
unread_onlyNo
response_formatNomarkdown (default): compact text; json: the API data

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely useful behavior — default sort order (newest change first) and the categories of notifications returned — but says nothing about pagination behavior even though a cursor parameter exists.

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?

A single efficient sentence with the resource and ordering front-loaded. The 'sol2flow:' branding prefix is minor noise that earns no informational value.

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

Completeness4/5

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

For a read-only, no-required-param list tool with no output schema, the description covers what is returned and in what order. The absence of explicit pagination and unread-filter guidance is a small gap but not disqualifying.

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 75%, so the schema documents limit, cursor, and response_format on its own; the only undocumented parameter is unread_only. The description does not add syntax or semantics beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description states a clear verb+resource ('your notifications') and adds scope detail — ordering ('newest change first') and content types (assignments, mentions, comments, due dates). It is distinguishable from siblings like mark_notifications_read, though it never names them.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and the obvious alternative (mark_notifications_read) is not mentioned. Usage is only weakly implied by 'your notifications'.

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

list_peopleList peopleA
Read-only

sol2flow: members of a workspace (name, @username, role), e.g. to find whom to assign. Guests of a workspace can't list its members.

NameRequiredDescriptionDefault
roleNoOnly this role
limitNoItems per page (default 50)
queryNoName or username contains
cursorNoFrom a previous answer, for the next page
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one
response_formatNomarkdown (default): compact text; json: the API data

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds a real behavioral constraint not in the annotations — guests cannot list workspace members. It says nothing about result ordering or pagination behavior beyond what the cursor parameter implies.

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?

Two tight sentences, front-loaded with what is returned before the caveat. The "sol2flow:" prefix is minor noise but the rest earns its place with no redundancy.

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

Completeness4/5

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

For a six-parameter read tool with full schema coverage and annotations, the description supplies the two things structured fields don't: the shape of the result (name, @username, role) in lieu of an output schema, and the guest permission boundary. Only alternative-tool routing is absent.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters (role, limit, query, cursor, workspace, response_format) are fully documented in the schema and the baseline is 3. The description adds almost no parameter-level meaning beyond hinting at role as a returned attribute.

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?

States a specific resource (members of a workspace) and enumerates the returned fields (name, @username, role), so the agent knows exactly what it retrieves. It does not explicitly distinguish itself from siblings like list_workspaces or whoami, which is the only gap.

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

Usage Guidelines3/5

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

"e.g. to find whom to assign" gives one concrete usage context, and the guest restriction acts as an implicit when-not condition. However, no alternative tool is named and no broader when-to-use guidance is offered, leaving usage mostly inferred.

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

list_tasksList tasksA
Read-only

sol2flow: tasks on a board, or on every board of a workspace, filtered by list, assignee ("me", a username or name), label, text, due dates or last change. Ordered by last change, oldest first (use updated_since for what's new). Archived tasks only with include_archived.

NameRequiredDescriptionDefault
listNoOnly this list (name or id); needs `board`
boardNoOnly this board (key, name, URL or id); default every board of the workspace
labelNoCarrying any of these labels (names)
limitNoItems per page (default 50)
queryNoTitle or description contains
cursorNoFrom a previous answer, for the next page
assigneeNoAssigned to any of these: "me", usernames, names
due_afterNoDue on or after this day (YYYY-MM-DD)
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one
due_beforeNoDue on or before this day (YYYY-MM-DD)
updated_sinceNoChanged since (ISO 8601)
response_formatNomarkdown (default): compact text; json: the API data
include_archivedNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: default ordering is by last change, oldest first, and archived tasks are excluded unless include_archived is set – non-obvious defaults an agent would otherwise guess wrong.

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?

Two sentences, front-loaded with the core scope, and the important defaults (ordering, archived) land in the second sentence. The first sentence is a dense run-on filter list, but no sentence is wasted.

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

Completeness4/5

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

With no output schema and 13 optional parameters, the description covers scope, default ordering, and the archived/updated_since behaviors an agent needs. It does not describe pagination behavior (cursor/limit), which is the main remaining gap, but overall it is complete enough to call correctly.

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

Parameters3/5

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

Schema description coverage is 92%, so the schema already documents nearly every parameter, establishing the baseline of 3. The description reinforces a few key semantics (assignee accepts "me"/username/name, updated_since meaning, ordering), but adds little beyond what the schema text provides.

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

Purpose5/5

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

States a specific verb (list) and resource (tasks), plus its exact scope: tasks on a board or on every board of a workspace. It enumerates the filter dimensions, so an agent can distinguish it from get_task (single task) and search without opening either schema.

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

Usage Guidelines4/5

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

Gives clear conditional guidance: use `updated_since` for recently changed items, and `include_archived` is required to see archived tasks. It stops short of naming sibling alternatives (e.g. search vs list_tasks), so it is strong context but not a full when/when-not routing statement.

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

list_time_entriesList time entriesA
Read-only

sol2flow: logged time in a workspace, newest first, optionally for one board, task or person, and a period. You see your own entries; board and workspace admins see more.

NameRequiredDescriptionDefault
toNoStarted before (a day or a timestamp)
fromNoStarted at or after (a day or a timestamp)
taskNoThe task: its key (PRD-12), its URL in the app, or its id
userNo"me", a username or name (others need an admin role)
boardNoThe board: its key (PRD), name, URL in the app, or id
limitNoItems per page (default 50)
cursorNoFrom a previous answer, for the next page
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one
response_formatNomarkdown (default): compact text; json: the API data

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavioral value on top: result ordering ("newest first") and a result-visibility model ("You see your own entries; board and workspace admins see more"). Pagination behavior is left unexplained, keeping it below a 5.

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

Conciseness4/5

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

A single dense sentence that front-loads the resource and ordering, then the optional filters, then the permission scope. It earns its words, though the leading "sol2flow:" product prefix is noise for an agent.

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

Completeness4/5

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

With no output schema, the description usefully mentions ordering and result scoping, and annotations cover read-only safety. For a nine-parameter listing tool the gaps are minor: nothing on pagination or truncation, but limit/cursor are self-documented in the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all nine parameters including formats and defaults. The description only echoes the filter concepts (board, task, person, period) without adding syntax or edge-case meaning, so the baseline 3 applies.

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

Purpose4/5

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

The description names a specific resource (logged time entries) and scope (a workspace, optionally narrowed to one board, task, or person, over a period), so an agent can distinguish it from log_time and update_time_entry. It stops short of explicitly contrasting itself with its siblings, which is what a 5 would require.

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

Usage Guidelines3/5

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

Usage is implied by the filtering vocabulary (board/task/person/period) and by the permission note, but the description never states when to reach for this tool versus get_timer, log_time, or update_time_entry, nor any exclusion. Adequate but leaves the routing decision to the caller.

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

list_workspacesList workspacesA
Read-only

sol2flow: the workspaces you can open, with their slugs (the workspace parameter of other tools) and your role.

NameRequiredDescriptionDefault
response_formatNomarkdown (default): compact text; json: the API data

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds output-shape context (slugs plus your role), which is beyond the structured fields, but says nothing about ordering, count limits, or emptiness. With annotations carrying the safety profile, a 3 is appropriate.

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

Conciseness4/5

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

One dense sentence with no filler; the highest-value information (workspaces and their slugs) is front-loaded. The leading "sol2flow:" server tag is slightly noisy but costs nothing material.

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 zero-required-parameter read tool with no output schema, the description supplies the missing return-value context (slugs and role), which is the main thing an agent needs. Safety is covered by annotations, so little is left unstated.

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

Parameters3/5

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

Schema coverage is 100% and the sole parameter (response_format) is fully documented in the schema, including its enum values. The description adds no parameter detail, so the baseline 3 for schema-driven parameter semantics is correct.

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

Purpose4/5

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

The description names a specific resource ("the workspaces you can open") and goes further by stating what comes back: slugs and your role. The 'List' verb lives in the title rather than the description text, but a reader immediately understands the scope and cannot confuse it with list_boards or list_tasks.

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

Usage Guidelines3/5

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

By tying the returned slug to "the `workspace` parameter of other tools," it implies this is called first when a workspace-scoped tool needs an ID. That is useful implicit routing, but there is no explicit when-to-use, no when-not-to-use, and no named alternative or prerequisite.

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

log_timeLog timeA

sol2flow: log time spent on a task (1 minute to 24 hours), with an optional note. Without started_at the entry ends now.

NameRequiredDescriptionDefault
noteNo
taskYesThe task: its key (PRD-12), its URL in the app, or its id
durationYesHow long: "1h30m", "1.5h", "45m"; a bare number is minutes (1 min to 24 h)
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one
started_atNoISO 8601 timestamp, e.g. 2026-10-02T09:00:00Z

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare the mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the description's added value comes from the semantics it supplies: the 1-minute-to-24-hour duration envelope and the default end-time behavior when started_at is omitted. It still omits the practical consequence of non-idempotency (repeated calls create separate entries) and any auth/workspace constraints.

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

Conciseness5/5

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

Two tight sentences with the tool's identity and the key temporal default front-loaded; every clause carries information and nothing is padded.

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 5-parameter mutation with no output schema, the description covers the two behaviors least obvious from structure: duration bounds and the default end time. It says nothing about task identifier formats or workspace defaults, but the schema already covers those at 80% coverage.

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

Parameters3/5

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

Schema description coverage is 80%, so task, duration, workspace, and started_at are already documented in the schema, including the same duration range. The description only restates the duration envelope and notes the note field is optional, adding little meaning beyond the structured fields.

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?

Specific verb+resource: 'log time spent on a task', with a stated duration bound and optional note. It is distinguishable from time-adjacent siblings like start_timer/stop_timer by describing a completed entry rather than a running timer, but it never names those alternatives to make the distinction explicit.

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

Usage Guidelines3/5

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

Usage is implied by the verb and the 'Without started_at the entry ends now' clause, which hints at the backdated-vs-live distinction. However, there is no explicit guidance on when to use this versus start_timer, stop_timer, or update_time_entry, and no prerequisites or error conditions are stated.

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

mark_notifications_readMark notifications readA
Idempotent

sol2flow: mark notifications read: the given ids (from list_notifications), or all of them.

NameRequiredDescriptionDefault
allNotrue: mark every notification read
idsNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already disclose that this is a mutating, idempotent, non-destructive operation. The description adds the source of ids and the all-notifications option, but does not add details about permissions, side effects, or error behavior beyond what the annotations 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?

It is a single compact sentence with no unnecessary elaboration. The 'sol2flow: mark notifications read:' prefix is somewhat redundant with the tool name and title, but it does not obscure the useful content.

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

Completeness3/5

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

For a low-complexity mutation tool with annotations covering idempotency and safety, the description is mostly adequate. However, with zero required parameters, it leaves the default behavior ambiguous when neither ids nor all is provided, and it omits the schema's maxItems=50 limit.

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 50%; the all parameter is already documented in the schema. The description adds that ids come from list_notifications and implies an either/or relationship with all, but it does not mention the maxItems=50 constraint or clarify mutual exclusivity or default behavior when both are omitted.

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

Purpose5/5

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

The description states a specific verb and resource (mark notifications read) and immediately clarifies the two scopes: given ids from list_notifications, or all notifications. An agent can tell exactly what this tool does without opening the schema.

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

Usage Guidelines4/5

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

It gives clear context for the two usage modes: ids should come from list_notifications, or the caller can mark all. It does not explicitly state when to prefer one mode over the other or what happens if neither is supplied, but the routing context is strong.

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

move_taskMove a taskA
Idempotent

sol2flow: move a task to another list and/or position (top, bottom, or before/after another task), or to a list of another board in the same workspace (the task then gets a new key there; the old key still finds it).

NameRequiredDescriptionDefault
listNoTarget list (name or id); default the task's current list, or the first list of `board`
taskYesThe task: its key (PRD-12), its URL in the app, or its id
afterNoPlace directly after this task (key or id), in the target list
boardNoAnother board to move it to (same workspace)
beforeNoPlace directly before this task (key or id), in the target list
positionNoDefault bottom
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare non-destructive, idempotent, non-read-only behavior, so the bar is partially met. The description adds genuinely useful behavior beyond that: a cross-board move assigns a new key while the old key still resolves, which is non-obvious identity semantics an agent needs.

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?

A single front-loaded sentence leads with the verb and resource before branching into the finer cases. It is dense but has no filler; the trailing parenthetical about keys is the only mild overload.

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 7-parameter mutation tool with full schema coverage and no output schema, the description covers the meaningful behaviors, including the cross-board key remapping. It omits return/result format and any permission or workspace prerequisites, but those are secondary given the annotations and rich schema.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema, making 3 the baseline. The description echoes position values (top, bottom, before/after) and board/list behavior, but adds little syntax or format beyond what the schema already states.

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

Purpose5/5

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

States a specific verb (move) and resource (a task) and then disambiguates what 'move' means: list and/or position, or another board's list. This clearly separates it from siblings like update_task and archive_task, which handle field edits and archiving respectively.

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 makes the usage context clear by enumerating the move modes (position, list, cross-board). However, it never explicitly contrasts itself with alternatives such as update_task for field changes or archive_task for removal, so the agent must infer the boundary.

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

respond_to_invitationAccept or decline an invitationA
Destructive

sol2flow: accept or decline one invitation from list_my_invitations. Accepting joins the workspace (and the board, if it's a board invitation). Declining can't be undone.

NameRequiredDescriptionDefault
responseYes
invitation_idYesThe invitation id from list_my_invitations

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, but the description adds substantive consequence detail: accepting joins the workspace (and board), and declining can't be undone. This tells the agent the state changes and irreversibility beyond the flags, though it omits permission/auth requirements and what a repeat call does.

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?

Three short sentences, front-loaded with the action and source of the input, then consequences. No filler; every clause carries information.

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

Completeness4/5

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

For a non-idempotent, destructive, two-parameter mutation tool with annotations present and no output schema, the description covers action, source, and irreversible consequences adequately. Minor gap: no mention of error behavior (e.g., already-processed invitation) or auth requirements.

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 50% schema coverage, the description compensates by explaining what each response value actually does ('accepting joins the workspace...') and anchoring invitation_id to list_my_invitations, adding meaning beyond the bare enum in the schema.

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

Purpose5/5

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

States a specific verb pair ('accept or decline') and resource ('one invitation'), scoped to items from list_my_invitations. An agent can distinguish this from sibling tools like mark_notifications_read or list_my_invitations without opening the schema.

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

Usage Guidelines4/5

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

Explicitly ties usage to invitations obtained from list_my_invitations and clarifies the effect of each branch (accept joins the workspace/board). It does not name an alternative tool for handling invitations, but the intended context is clear.

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

start_timerStart a timerA
Destructive

sol2flow: start your timer on a task. One timer at a time: a timer running on another task is stopped and its time logged.

NameRequiredDescriptionDefault
taskYesThe task: its key (PRD-12), its URL in the app, or its id
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one

TDQS

A3.8/5.0
Behavior4/5

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

The description discloses the important side effect that annotations cannot express: only one timer runs at a time, so starting this one stops a timer on another task and logs its time. That is genuine behavioral context beyond destructiveHint=true. It omits any note about non-idempotency or repeated-call behavior, though.

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

Conciseness5/5

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

Two tight sentences with the core action first and the critical side-effect constraint second. Every clause earns its place and nothing is padded.

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 two-parameter mutation with full schema coverage and a complete annotation set, the description supplies the one behavior an agent genuinely needs (the single-timer override). Return value info is unnecessary since there is no output schema, though a pointer to get_timer for verifying state would have been a nice touch.

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% — the schema already explains that 'task' accepts a key, URL, or id and that 'workspace' defaults to the configured workspace. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("start your timer on a task"), which cleanly separates it from stop_timer and get_timer in the sibling list. It never names the alternatives explicitly, but the verb alone makes the intent unambiguous.

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

Usage Guidelines3/5

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

Usage is implied by "start your timer on a task" and the one-timer rule, but there is no explicit when-to-use/when-not guidance and the obvious alternative (stop_timer) is never referenced. The scope of 'task' acceptance is only discoverable from the schema.

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

stop_timerStop the timerA
Idempotent

sol2flow: stop your running timer; its time is logged on the task.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare non-destructive, idempotent, non-readOnly behavior, so the safety profile is covered. The description adds genuine value beyond that by disclosing the side effect — elapsed time is logged onto the task — which is the key consequence an agent needs to know.

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

Conciseness4/5

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

One compact sentence with the action and effect front-loaded. The 'sol2flow:' vendor prefix is minor noise, but nothing else is wasted.

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

Completeness4/5

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

For a zero-parameter, non-destructive action whose annotations carry the safety profile and whose return values needn't be described (no output schema), the description covers the essentials. It could optionally note behavior when no timer is running, but that is minor.

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 takes zero parameters, so per the baseline rule a 4 is appropriate; there are no arguments whose semantics need explaining and the description correctly implies a no-argument invocation.

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

Purpose5/5

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

States a specific verb ('stop') and resource ('your running timer') and adds the outcome ('its time is logged on the task'). An agent can distinguish it from start_timer and get_timer from the description alone.

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

Usage Guidelines3/5

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

Usage is implied by the phrase 'stop your running timer' — the agent can infer it applies when a timer is active — but it never names alternatives such as get_timer, log_time, or start_timer, nor states the when-not condition (e.g., no timer running).

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

unarchive_taskUnarchive a taskA
Idempotent

sol2flow: bring an archived task back into its list (the first list if that one is gone).

NameRequiredDescriptionDefault
taskYesThe task: its key (PRD-12), its URL in the app, or its id
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint=false, destructiveHint=false) and idempotency. The description adds real behavioral value beyond that: it discloses where the task lands (its original list, or the first list if that list is gone), which no structured field states.

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

Conciseness4/5

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

One compact sentence with the key behavior front-loaded and the edge case in a parenthetical. The 'sol2flow:' namespace prefix is slightly extraneous but costs almost nothing in space or comprehension.

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 an idempotent, non-destructive restore tool with full annotation coverage and a fully described schema, the description covers the essential gap (restoration target). No output schema exists, so return-value documentation is not required; nothing critical 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?

Schema coverage is 100%, so both parameters (task's key/URL/id, and workspace slug with default) are fully documented in the schema. The description adds no additional parameter meaning, which is the expected baseline here.

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?

Specific verb ('bring an archived task back') plus a clear resource ('archived task'), and it is the obvious inverse of the sibling archive_task. It does not name that sibling explicitly, so it falls just short of the routing clarity a 5 demands.

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

Usage Guidelines3/5

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

Usage is implied by the phrase 'bring an archived task back', which conveys restoring a previously archived task. There is no explicit when-to-use guidance and no stated prerequisites, so it is only minimal viable.

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

update_checklist_itemTick or edit a checklist itemB
DestructiveIdempotent

sol2flow: tick or untick a checklist item, or change its text. The item: its id (from get_task), or with task its number (1 = first) or its text.

NameRequiredDescriptionDefault
doneNo
itemYesItem id, or its number or text (then `task` is needed)
taskNoThe task: its key (PRD-12), its URL in the app, or its id
textNo
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=true, covering the safety profile. The description adds the reference-resolution semantics (1 = first, text matching) but does not disclose the destructive implications flagged by annotations, e.g. what happens if text matches multiple items or how edits resolve.

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?

Two short sentences, front-loaded with the action and followed by the item-reference rule; every clause carries information. The 'The item: its id' phrasing is slightly telegraphic but not wasteful.

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

Completeness3/5

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

For a mutation tool with no output schema, the description covers the trickiest part (item resolution) but omits behavioral consequences of the destructive edit and says nothing about the `done`/`text` payload semantics. Adequate but with clear gaps.

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

Parameters3/5

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

Schema coverage is 60%, so the schema already documents item, task, and workspace. The description usefully adds the '1 = first' numbering detail and the dependency between item and task, but leaves `done` and `text` (undocumented in both schema and description) unaddressed, matching the baseline 3.

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

Purpose4/5

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

The description names a specific verb set (tick/untick, change text) and a specific resource (a checklist item), which cleanly separates it from siblings like add_checklist_items or update_task. It does not explicitly name a sibling, so it stays at 4 rather than 5.

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

Usage Guidelines3/5

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

It explains how to reference the item (its id from get_task, or number/text when `task` is supplied), which is useful invocation context. But it gives no when-to-use/when-not guidance or alternatives versus other checklist or task-editing tools, so usage is only implied.

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

update_taskUpdate a taskA
DestructiveIdempotent

sol2flow: change a task: title, description (Markdown), start/due date, estimate (null clears), labels and assignees (set all, or add/remove some), and the list it is in. Fields left out stay as they are. The changes are applied step by step and the answer lists each step.

NameRequiredDescriptionDefault
listNoMove to this list of the same board (to the bottom)
taskYesThe task: its key (PRD-12), its URL in the app, or its id
titleNo
labelsNoReplace all labels with these (names)
due_dateNo
estimateNo
assigneesNoReplace all assignees with these
workspaceNoWorkspace slug (from list_workspaces). Default: the configured workspace, or your only one
add_labelsNo
start_dateNo
descriptionNoMarkdown; null clears it
add_assigneesNo
remove_labelsNo
remove_assigneesNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructive=true, idempotent=true, and readOnly=false. The description adds real value beyond them: it clarifies partial-update semantics, that null clears dates/estimate, that labels/assignees are replaced wholesale versus add/remove deltas, and that changes apply step by step with a per-step answer. Auth/permission behavior is not covered.

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

Conciseness4/5

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

Front-loaded with the verb and resource, then a dense clause listing the fields and the two key rules. Every sentence carries information, though the "sol2flow:" prefix adds little.

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 14-parameter mutation with no output schema, the description covers the operational model well: field grouping, null semantics, replace-vs-delta arrays, and the step-wise response. Remaining gaps (workspace scoping, task identifier) are adequately handled by the schema.

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 only 43% across 14 parameters, so the description must compensate, and it largely does by grouping the mutators (title, description, dates, estimate, labels, assignees, list) and explaining the replace-vs-delta distinction. Only workspace and the task key format are left to the schema, which documents them.

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

Purpose5/5

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

States a specific verb (change) and resource (a task) and enumerates exactly which fields can be altered: title, description, dates, estimate, labels, assignees, and list. An agent can distinguish it from create_task, move_task, and archive_task without opening the schema.

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

Usage Guidelines3/5

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

The partial-update rule ("Fields left out stay as they are") gives useful context for when this tool applies, but the description never names alternatives. Notably, it includes list-move behavior while a sibling move_task exists, and there is no guidance on which to prefer.

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

update_time_entryChange a time entryA
DestructiveIdempotent

sol2flow: change one of your time entries (id from list_time_entries): start, duration or note (null clears it). A running timer only takes a note.

NameRequiredDescriptionDefault
noteNo
durationNoHow long: "1h30m", "1.5h", "45m"; a bare number is minutes (1 min to 24 h)
entry_idYes
started_atNoISO 8601 timestamp, e.g. 2026-10-02T09:00:00Z

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare mutation (readOnlyHint=false), idempotency, and destruction risk. The description adds value the annotations cannot: '(null clears it)' explains the null-clearing behavior, and 'A running timer only takes a note' discloses that editable fields are restricted for running entries. It does not mention auth or rate limits, but the added constraints are substantive and 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.

Conciseness5/5

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

A single sentence plus a short fragment, front-loaded with the operation and the id source. Every clause carries information; nothing is padded.

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 4-param mutation tool with annotations covering the safety profile and no output schema, the description covers the editable fields, null semantics, running-timer restriction, and id sourcing. It is close to complete; a brief note on what the edit returns or whether omitted fields are untouched would close the remaining gap.

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 50% (duration and started_at documented; note and entry_id not). The description compensates by naming the editable fields ('start, duration or note'), explaining the null-clears semantics for note, and sourcing entry_id from list_time_entries. It adds genuine meaning beyond the schema on the undocumented parameters.

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?

"change one of your time entries" gives a specific verb+resource, and the description enumerates the editable fields (start, duration, note), so an agent knows exactly what this mutates. It points to list_time_entries as the id source, distinguishing it from sibling readers, though it does not contrast with write siblings like log_time or start_timer.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: '(id from list_time_entries)' tells the agent where the id comes from, and 'A running timer only takes a note' is a real constraint. But there is no explicit when-to-use-this vs log_time/start_timer guidance or when-not-to-use conditions.

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

whoamiWho am IA
Read-only

sol2flow: the account this API key belongs to (name, username, time zone), the key itself (name, scope, expiry; sol2flow 1.8+), the instance and its API version, and your workspaces with the default one. Start here.

NameRequiredDescriptionDefault
response_formatNomarkdown (default): compact text; json: the API data

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description goes beyond that by disclosing that key details require sol2flow 1.8+ (a version-dependent behavior) and by enumerating the returned fields, which matters because there is no output schema.

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?

A single dense sentence followed by the two-word 'Start here' call to action. It is front-loaded and wastes no words, though the long parenthetical chain makes it slightly harder to scan than a bulleted breakdown would be.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing return values, and it does so by listing account, key, instance, and workspace fields. The only real gap is the absence of guidance on how the default workspace relates to the sibling list_workspaces tool.

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

Parameters3/5

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

The single response_format parameter has 100% schema coverage with an inline enum explanation ('markdown (default): compact text; json: the API data'), so the schema does the work. The description adds nothing about the parameter, which is the expected baseline when coverage is complete.

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 enumerates exactly what identity data the tool returns: the account (name, username, time zone), the key (name, scope, expiry), the instance/API version, and workspaces with the default. That is a concrete resource definition an agent can match against the 'who am I' intent, though it never states a verb and does not distinguish itself from the sibling list_workspaces, which overlaps on its workspace output.

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

Usage Guidelines3/5

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

'Start here' is a genuine orientation cue, implying this is the first call an agent should make when it needs context about the credential it holds. However, no alternative is named and no condition is given for choosing this over list_workspaces, even though both surface workspace information.

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. 32 tool updatesv0.0.0-development
    • First observedadd_checklist_items
    • First observedadd_comment
    • First observedarchive_task
    • First observedcreate_board
    • First observedcreate_label
    • First observedcreate_list
    • First observedcreate_task
    • First observedget_board
    • First observedget_task
    • First observedget_timer
    • First observedlink_tasks
    • First observedlist_boards
    • First observedlist_labels
    • First observedlist_my_invitations
    • First observedlist_notifications
    • First observedlist_people
    • First observedlist_tasks
    • First observedlist_time_entries
    • First observedlist_workspaces
    • First observedlog_time
    • First observedmark_notifications_read
    • First observedmove_task
    • First observedrespond_to_invitation
    • First observedsearch
    • First observedstart_timer
    • First observedstop_timer
    • First observedunarchive_task
    • First observedunlink_tasks
    • First observedupdate_checklist_item
    • First observedupdate_task
    • First observedupdate_time_entry
    • First observedwhoami

TDQS

B3.4/5.0

Scored across 32 tools

Disambiguation4/5

Most tools have clearly distinct purposes, but update_task and move_task overlap in changing a task's list, and search and list_tasks both find tasks with different scopes. Descriptions help, but an agent could initially hesitate between them.

Naming Consistency4/5

Nearly all tools follow a snake_case verb_noun pattern (list_tasks, create_board, update_task), with only minor exceptions like whoami and search as single-word commands. The convention is highly readable and predictable, though not perfectly uniform.

Tool Count2/5

32 tools far exceeds the typical 3-15 range and crosses the rubric's 25+ threshold for 'too many'. While the domain is broad, several operations (especially timer controls) could be consolidated, making the set feel overly granular.

Completeness3/5

Core task lifecycle is well-covered (create, update, move, archive, comment, checklist, links, time), but boards, lists, and labels lack update/delete operations, and there is no way to invite people to a workspace or board. These notable gaps limit full administrative workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers