Skip to main content
Glama
bruhsb
by bruhsb

paperclip-mcp

MCP server that exposes the Paperclip control plane API as tools for Claude Code agents — manage issues, coordinate agents, post comments, and orchestrate work without direct API calls.

npm MCP protocol License: MIT

Quickstart

npx paperclip-mcp

Add to .claude/settings.json:

{
  "mcpServers": {
    "paperclip": {
      "command": "npx",
      "args": ["paperclip-mcp"],
      "env": {
        "PAPERCLIP_API_URL": "http://127.0.0.1:3100",
        "PAPERCLIP_API_KEY": "<your-api-key>",
        "PAPERCLIP_AGENT_ID": "<your-agent-id>",
        "PAPERCLIP_COMPANY_ID": "<your-company-id>"
      }
    }
  }
}

For heartbeat runs, Paperclip injects all required env vars automatically.

Related MCP server: linear-mcp-server

Installation

Three first-class variants:

npm

# one-shot (no install)
npx paperclip-mcp

# global install
npm install -g paperclip-mcp

Docker / Podman

# Docker
docker run --rm -i \
  -e PAPERCLIP_API_URL=http://host.docker.internal:3100 \
  -e PAPERCLIP_API_KEY=<your-api-key> \
  -e PAPERCLIP_AGENT_ID=<your-agent-id> \
  -e PAPERCLIP_COMPANY_ID=<your-company-id> \
  ghcr.io/bruhsb/paperclip-mcp:2.1.0

# Podman (same flags, replace docker → podman)
podman run --rm -i \
  -e PAPERCLIP_API_URL=http://host.containers.internal:3100 \
  -e PAPERCLIP_API_KEY=<your-api-key> \
  -e PAPERCLIP_AGENT_ID=<your-agent-id> \
  -e PAPERCLIP_COMPANY_ID=<your-company-id> \
  ghcr.io/bruhsb/paperclip-mcp:2.1.0

Compose stack (v2.1.0+)

Run the full Paperclip server + MCP server together via podman-compose (or docker-compose):

podman-compose up -d

See docs/guides/local-stack.md for the full compose setup, volume config, and health-check instructions.

Host integration

paperclip-mcp works with any MCP-compatible host. Platform-specific config files are in docs/installation/:

Each guide includes the exact config block, where to place it, and verification steps. Do not copy configs from this README — use the host-specific guides so you get the right file paths and format.

Environment variables

Variable

Required

Description

PAPERCLIP_API_KEY

Yes

Bearer token for API authentication

PAPERCLIP_API_URL

Yes

Base URL of the Paperclip API (e.g. http://127.0.0.1:3100)

PAPERCLIP_AGENT_ID

Yes

UUID of the agent running this MCP server

PAPERCLIP_COMPANY_ID

Yes

UUID of the company (used for company-scoped endpoints)

PAPERCLIP_RUN_ID

No

Heartbeat run ID — injected by Paperclip during agent runs

PAPERCLIP_TASK_ID

No

Task ID injected by Paperclip on @-mention wakes

Tool catalog

Domain

Tools

Identity

4

Issues

7

Comments

3

Documents

5

Agents & Organization

17

Dashboard

1

Approvals

11

Goals

4

Projects & Workspaces

8

Activity & Costs

5

Routines

9

Attachments

4

Labels

2

Companies

5

Plugins

6

Secrets

4

Run Observability

3

Feedback Traces

3

Company Import / Export

3

Total

104

Full per-tool reference: docs/tools/. Generated from Zod schemas — run npm run docs:generate to refresh.

Authentication

paperclip-mcp authenticates every request with a Bearer token derived from PAPERCLIP_API_KEY. The agent identity (PAPERCLIP_AGENT_ID) and company scope (PAPERCLIP_COMPANY_ID) are resolved at startup — the server will exit immediately if any required variable is missing. For details on generating API keys and scoping them to a specific agent, see docs/auth-keys.md.

Run ID injection

When PAPERCLIP_RUN_ID is set, the server automatically adds X-Paperclip-Run-Id: <runId> to all mutating requests (POST, PATCH, PUT, DELETE). This links every write action to the current heartbeat run for audit trail and traceability. No action is needed from the agent — injection is transparent.

Error handling

All tool handlers catch API errors and return isError: true results. The content[0].text field contains a human-readable message.

HTTP status

Behaviour

400

isError: true with validation message

401 / 403

isError: true with auth error

404

isError: true with not-found message

409

isError: true with conflict message (no retry)

5xx

isError: true with server error message

Architecture

Entry flow: src/index.ts creates an MCP Server, calls registerAllTools(server), then connects a StdioServerTransport for JSON-RPC over stdio.

Key modules:

  • src/client.tsPaperclipClient: typed HTTP wrapper (get, post, patch, put, delete). Injects Authorization header and X-Paperclip-Run-Id on mutations.

  • src/auth.ts — Reads env vars at startup (fail-fast on missing required vars).

  • src/errors.tsPaperclipApiError for non-2xx HTTP responses.

  • src/types.ts — Shared domain types.

  • src/tools/index.ts — Tool registry. Collects ToolDefinition[] arrays from each tool module into ALL_TOOLS, builds a dispatch map, and registers MCP ListTools / CallTool handlers.

  • src/tools/validation.tsvalidate(zodSchema, args) helper and shared Zod schemas.

Documentation

  • End-userdocs/README.md: quickstart, auth keys, troubleshooting, cookbook, host install guides, tool reference.

  • ContributorCONTRIBUTING.md: branch strategy, PR flow, dev environment, and conventions for adding new tools.

  • Agent-orchestrationAGENTS.md: Paperclip-orchestrated agent protocol, BMAD integration, and heartbeat model.

Skills

paperclip-mcp ships public Claude Code skills under skills/paperclip-triage-inbox, paperclip-close-epic, paperclip-audit-approvals, paperclip-release-flow. Copy the relevant skill directory to ~/.claude/skills/ to use it in your Claude Code session. See skills/README.md for the full list and usage notes.

Development

Task

Command

Build

npm run build

Dev (live TS)

npm run dev

Start (compiled)

npm run start

Type-check only

npm run typecheck

Lint

npm run lint

Format

npm run format

Format check

npm run format:check

Run all tests

npm run test

Regenerate tool docs

npm run docs:generate

Check doc links

npm run docs:check

Branch strategy: feature/*main (squash-merge via PR)

Status & compatibility

Component

Version

MCP protocol (@modelcontextprotocol/sdk)

1.29.0

Node.js (minimum)

22

Paperclip API

v2

Releases

Releases are automated. Squash-merge a PR to main; semantic-release handles version bumping, changelog generation, npm publish, and GitHub release creation. No manual publish step is needed.

To trigger a release, open a PR from your feature branch to main. Once merged, the release.yml workflow runs npx semantic-release automatically. The version bump is determined by the commit types since the last release:

  • fix: commits → patch release

  • feat: commits → minor release

  • BREAKING CHANGE: commits → major release

  • chore:, docs:, test: commits → no release

Contributing

See CONTRIBUTING.md for the full contributor guide, including how to add new tools, branch naming, commit format, and PR process.

Security

Please report security vulnerabilities via the process described in SECURITY.md. Do not open public issues for security bugs.

License

MIT

Available Tools

104 tools
paperclip_add_approval_commentA

Post a markdown comment on an approval request.

Args:

  • approvalId: string — Approval UUID (example: "apr_abc123")

  • body: string — Comment body in markdown (example: "Revised per board feedback: ...")

Returns: Returns the created comment object: id, body, authorId, authorType, createdAt.

Examples:

  • Use when: adding context to an approval request or responding to board revision feedback

  • Don't use when: you also want to change the approval status — use paperclip_resubmit_approval or paperclip_approve

Error Handling:

  • 400: validation failure → ensure body is non-empty

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: approval not found → verify ID with paperclip_list_approvals

ParametersJSON Schema
NameRequiredDescriptionDefault
approvalIdYesApproval UUID
bodyYesComment body (markdown)

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already mark destructiveHint: false. The description adds behavioral context: returns the created comment object with fields, and error handling details for 400, 401, 404. No contradiction, and the description enriches understanding beyond annotations.

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

Conciseness5/5

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

The description is well-structured with sections (main purpose, Args, Returns, Examples, Error Handling), each sentence adds value, and the purpose is front-loaded. No fluff.

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?

Despite no output schema, the description lists return fields (id, body, authorId, authorType, createdAt). Error handling covers common failures. The tool is simple (2 params, no nested objects), and the description is fully sufficient for an agent to use it correctly.

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

Parameters5/5

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

Both parameters are fully described in the input schema (100% coverage). The description adds example values and contextual explanations (e.g., approvalId example 'apr_abc123', body example in markdown), going beyond the schema's minimal description.

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

Purpose5/5

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

The description clearly states 'Post a markdown comment on an approval request' with specific verb and resource, and distinguishes from siblings like paperclip_add_comment (general) and paperclip_resubmit_approval or paperclip_approve (status changes).

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

Usage Guidelines5/5

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

The 'Examples' section explicitly states when to use ('adding context to an approval request or responding to board revision feedback') and when not to use ('when you also want to change the approval status'), pointing to alternative tools.

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

paperclip_add_commentA

Post a markdown comment on an issue. Run ID header injected automatically for audit trail.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

  • body: string — Comment body in markdown (example: "@QA — ready for review on PAP-42. Changes: ...")

Returns: Returns the created comment object: id, body, authorId, authorType, createdAt.

Examples:

  • Use when: posting @-mention handoffs (e.g. @QA ready for review, @Engineer changes needed)

  • Don't use when: you also need to update issue fields — use paperclip_update_issue with a comment field instead

Error Handling:

  • 400: validation failure → ensure body is non-empty

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: issue not found → verify ID with paperclip_list_issues

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-21)
bodyYesComment body (markdown)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate non-destructive and open-world false. The description adds that a Run ID header is injected for audit trail, and lists HTTP error codes (400, 401, 404) with troubleshooting tips. It also notes the return object. This provides useful behavioral context beyond annotations.

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

Conciseness3/5

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

The description is well-structured with Args, Returns, Examples, Error Handling sections. However, it is somewhat verbose for a simple two-parameter tool. A more concise version could omit the full list of return fields since they are straightforward.

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

Completeness5/5

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

Given no output schema, the description explains the return shape. It covers error codes and prerequisites (Run ID header injection). For a simple comment creation tool, it provides sufficient context for an agent to use it effectively.

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

Parameters4/5

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

Schema coverage is 100%, so parameters are already documented. The description adds meaning with examples (e.g., 'body — Comment body in markdown (example: "@QA — ready for review on PAP-42. Changes: ...")') and clarifies that body must be non-empty (from error handling). This adds 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?

The description clearly states 'Post a markdown comment on an issue', using a specific verb and resource. It distinguishes from sibling tools like paperclip_add_approval_comment by not mentioning approval, and later contrasts with paperclip_update_issue when used to add a comment while updating fields.

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

Usage Guidelines5/5

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

The description provides explicit 'Use when' and 'Don't use when' guidance, including an alternative tool (paperclip_update_issue) for combined comment+field updates. This helps the agent choose correctly.

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

paperclip_add_routine_triggerA

Add a trigger to a routine. Supports schedule (cron), webhook, and api trigger kinds.

Args:

  • routineId: string — Routine UUID (example: "rtn_abc123")

  • kind: string — Trigger kind: schedule | webhook | api

  • cronExpression: string (optional) — 5-field cron expression, required for schedule triggers (example: "*/5 * * * *")

  • timezone: string (optional) — Timezone for schedule triggers (default: UTC)

Returns: Returns the created trigger object: id, routineId, kind, cronExpression, createdAt.

Examples:

  • Use when: scheduling a routine to run every 5 minutes after creating it

  • Don't use when: the trigger already exists — use paperclip_update_routine_trigger to modify it

Error Handling:

  • 400: invalid cron expression → must be a 5-field cron (e.g. '*/5 * * * *')

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: routine not found → verify ID with paperclip_list_routines

ParametersJSON Schema
NameRequiredDescriptionDefault
routineIdYesRoutine UUID
kindYesTrigger kind: schedule | webhook | api
cronExpressionNo5-field cron expression for schedule triggers (e.g. '*/5 * * * *'). Required when kind is 'schedule'.
timezoneNoTimezone for schedule triggers (e.g. 'UTC', 'America/New_York'). Default: UTC

TDQS

A4.6/5.0
Behavior4/5

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

While annotations are minimal (destructiveHint: false), the description adds behavioral context: creation action, error codes (400, 401, 404), and implication that duplicate triggers are not allowed. Lacks details on idempotency or rate limits, but adequate for a creation tool.

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?

Well-structured with summary, args, returns, examples, and error handling sections. Front-loaded with purpose. Some minor redundancy (e.g., param descriptions overlap schema) but overall efficient.

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

Completeness5/5

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

Given 4 parameters, no output schema, and no nested objects, the description fully specifies inputs, returns (fields), error cases, and usage context. No critical gaps.

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 covers all 4 parameters (100%), but description adds value with examples (e.g., routineId), enum meaning, cron format clarification, timezone default, and error conditions. Exceeds baseline 3.

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?

Explicitly states 'Add a trigger to a routine' with specific verb and resource, and distinguishes from siblings like paperclip_update_routine_trigger and paperclip_delete_routine_trigger through usage guidance and error handling.

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

Usage Guidelines5/5

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

Provides explicit when-to-use and when-not-to-use guidance, including a direct sibling alternative ('use paperclip_update_routine_trigger'). Also implies verification with paperclip_list_routines for 404 errors.

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

paperclip_apply_company_importA
Destructive

⚠ Board-only: Apply company import

Args:

  • companyId: string — Target company UUID

  • source: union — { type: 'inline', rootPath: string, files: Record<string,string> } or { type: 'github', url: string }

  • include: object — Which resource types to apply (company, agents, projects, issues, skills)

  • target: object — { mode: 'existing_company'|'new_company', companyId: string } — must match top-level companyId

  • agents: 'all' | string[] (optional) — Agents to import (default: 'all')

  • collisionStrategy: 'rename'|'skip'|'replace' (optional) — Collision handling (default: rename)

  • selectedFiles: string[] (optional) — Subset of bundle files to apply

  • adapterOverrides: Record<string,unknown> (optional) — Adapter overrides from the preview

Returns: Import result counts (JSON only): { insertedAgents, insertedProjects, insertedIssues, insertedSkills, warnings }. Destructive — writes new records.

Examples:

  • Use when: applying a validated import bundle; run paperclip_preview_company_import first to inspect changes

  • Don't use when: you just want to inspect what would change — use paperclip_preview_company_import

Error Handling:

  • 400: invalid bundle → verify source files are well-formed

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: board key required → this endpoint requires board-level authentication

  • 404: company not found → verify ID with paperclip_list_companies

  • 409: conflict not resolvable with current strategy → try a different collisionStrategy

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesTarget company UUID to apply the import into
sourceYesBundle source: 'inline' provides files in the request; 'github' fetches from a repo URL
includeYesWhich resource types to apply (company, agents, projects, issues, skills)
targetYesImport destination
agentsYesWhich agents to import: literal 'all' or an array of agent URL keysall
collisionStrategyYesHow to handle name/key collisions: 'rename' (append suffix), 'skip' (leave existing), 'replace' (overwrite)rename
selectedFilesNoSubset of file paths from the bundle to apply (omit for all files in the bundle)
adapterOverridesNoAdapter-specific overrides map from the preview step (key: adapter name, value: override config)

TDQS

A4.9/5.0
Behavior5/5

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

Annotations provide destructiveHint=true; description adds that it writes new records, requires board-level authentication, and returns specific JSON counts. No contradictions, and sufficient behavioral context beyond 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?

Well-structured with clear sections (Args, Returns, Examples, Error Handling). Front-loaded warning. Every sentence is informative without being verbose.

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

Completeness5/5

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

Covers all essential aspects given no output schema: describes return format, prerequisites (preview first), authentication, error codes, and parameter behavior. Complete enough for correct agent invocation.

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 baseline 3. Description adds meaningful context: explains source types, include options, target validation, and collision strategy. Adds value without redundancy.

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

Purpose5/5

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

The description clearly states 'Apply company import' and explains it applies a validated import bundle, writing new records. It distinguishes from sibling paperclip_preview_company_import by noting it should be run first.

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

Usage Guidelines5/5

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

Provides explicit when-to-use ('applying a validated import bundle'), when-not-to-use (inspect changes, use preview instead), and alternatives. Error handling section gives guidance on common failure scenarios.

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

paperclip_approveA
Destructive

⚠ Board-only: Approve a pending approval request, triggering the associated workflow.

Args:

  • approvalId: string — Approval UUID (example: "apr_abc123")

Returns: Returns the updated approval with status:'approved' and approvedAt timestamp.

Examples:

  • Use when: approving a hire_agent or budget_override request after board review (requires board API key)

  • Don't use when: you want to reject or request changes — use paperclip_reject or paperclip_request_revision instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human) API key

  • 404: approval not found → verify ID with paperclip_list_approvals

  • 422: approval is not in pending state → check current status with paperclip_get_approval

ParametersJSON Schema
NameRequiredDescriptionDefault
approvalIdYesApproval UUID

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate destructiveHint: true and openWorldHint: false. The description adds behavioral context: it triggers a workflow, returns an updated approval with status 'approved' and approvedAt timestamp, and details error codes (401, 403, 404, 422) with their meanings. No contradiction with annotations.

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

Conciseness5/5

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

The description is well-structured with sections for arguments, returns, examples, and error handling. It front-loads the warning and purpose. Every sentence contributes useful information without unnecessary verbosity.

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

Completeness5/5

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

Although there is no output schema, the description explains return values (updated approval with status and timestamp). It covers error handling exhaustively and provides context about board-only usage and workflow triggering. This is complete for a single-parameter tool with complex error scenarios.

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% for the single parameter (approvalId described as 'Approval UUID'). The description adds an example ('apr_abc123') and states it is required, but these add minimal meaning beyond the schema. Baseline is 3 due to high coverage.

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

Purpose5/5

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

The description clearly states the tool's function: 'Approve a pending approval request, triggering the associated workflow.' It uses a specific verb (approve) and resource (approval request), and distinguishes from siblings by mentioning alternatives like paperclip_reject or paperclip_request_revision for different actions.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: 'Use when: approving a hire_agent or budget_override request after board review (requires board API key)' and 'Don't use when: you want to reject or request changes — use paperclip_reject or paperclip_request_revision instead.' It also specifies prerequisites (board API key) and error handling scenarios for erroneous use.

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

paperclip_archive_companyA
Destructive

⚠ Board-only: Archive a company, setting its status to 'archived'. Uses a dedicated POST endpoint — not a PATCH. This action is irreversible through the API.

Args:

  • companyId: string — Company UUID to archive (example: "00000000-0000-0000-0000-000000000000")

Returns: The updated company object with status: 'archived' and updated timestamps.

Examples:

  • Use when: decommissioning a company that is no longer in use

  • Don't use when: you need to update other company fields — use paperclip_update_company for name/description/budget

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: board key required → this endpoint requires board-level authentication

  • 404: company not found → verify ID with paperclip_list_companies

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany UUID to archive

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description adds that the action is irreversible through the API and uses a specific POST endpoint, which are important behavioral traits not captured by annotations alone.

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?

Well-structured with sections for args, returns, examples, and error handling. The warning icon and front-loaded critical info (board-only, irreversible) make it concise yet informative.

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?

Fully covers purpose, usage, parameters, return value, and error handling. Given the simple single-parameter input and no output schema, the description leaves no gaps.

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 description adds value by providing an example UUID and clarifying the parameter purpose, though the schema already has a description. The error handling section also adds context.

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

Purpose5/5

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

The description clearly states it archives a company by setting status to 'archived' and uses a dedicated POST endpoint, not PATCH. It distinguishes from paperclip_update_company, which is for other field updates.

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

Usage Guidelines5/5

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

Provides explicit when-to-use (decommissioning a company) and when-not-to-use (updating other fields), with a direct reference to the sibling tool paperclip_update_company. Also notes board-only authentication requirement.

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

paperclip_checkout_issueA

Claim an issue for work by checking it out to the current agent.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

  • expectedStatuses: string[] (optional) — Checkout fails if current status not in list (example: ["todo"])

Returns: Returns the updated issue object with executionRunId set to the current run.

Examples:

  • Use when: claiming an assigned issue before starting work — pass expectedStatuses to guard kanban column

  • Don't use when: you only need to read the issue — use paperclip_get_issue instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: issue not found → verify ID with paperclip_list_issues

  • 409: conflict — issue is checked out by another agent or status mismatch → do NOT retry; post a wake-mismatch comment and exit

  • 422: invalid state transition → issue may already be in a terminal state

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-21)
expectedStatusesNoExpected statuses for atomic validation — checkout fails with 409 if current status is not in this list

TDQS

A4.9/5.0
Behavior5/5

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

Annotations indicate non-destructive, non-idempotent. The description adds behavioral context: sets executionRunId, details error handling for 401, 404, 409, 422, including specific retry advice for 409. No contradiction with annotations.

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

Conciseness5/5

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

The description is well-structured with distinct sections for action, arguments, returns, examples, and error handling. It is concise yet comprehensive, with no unnecessary verbiage.

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?

Despite lack of output schema, the description explains the return value (updated issue object with executionRunId). Error handling covers all relevant HTTP statuses with actionable advice. The tool's complexity is fully addressed.

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?

Input schema covers both parameters with descriptions (100% coverage). The description adds examples for issueId ('PAP-42') and expectedStatuses (['todo']), and clarifies that checkout fails if current status not in list, which adds value beyond schema.

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

Purpose5/5

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

The description clearly states the tool claims an issue for work by checking it out to the current agent. The title from annotations ('Check out issue for work') reinforces this. It distinguishes from sibling tools like paperclip_get_issue (read-only) and paperclip_release_issue.

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

Usage Guidelines5/5

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

Explicit usage guidance is provided with 'Use when: claiming an assigned issue before starting work' and 'Don't use when: you only need to read the issue — use paperclip_get_issue instead'. It also advises using expectedStatuses to guard kanban column.

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

paperclip_create_agentA

⚠ Board-only: Directly create an agent; prefer paperclip_create_agent_hire for approval-flow hires.

Args:

  • companyId: string — Company UUID (required)

  • name: string — Display name (required, min 1 char)

  • role: enum (optional) — ceo|cto|cmo|cfo|engineer|designer|pm|qa|devops|researcher|general

  • title: string|null (optional) — Job title

  • icon: enum (optional) — UI icon identifier

  • reportsTo: UUID|null (optional) — Parent agent UUID

  • capabilities: string|null (optional) — Free-text capability description

  • desiredSkills: string[] (optional) — Skills to install at creation

  • adapterType: enum (optional) — process|http|claude_local|codex_local|…

  • adapterConfig / runtimeConfig: object (optional) — Adapter/runtime settings

  • budgetMonthlyCents: int ≥0 (optional) — Monthly spend cap in cents

  • permissions.canCreateAgents: boolean (optional) — CEO-level create permission

  • metadata: object|null (optional) — Arbitrary key-value metadata

Returns: Returns the created agent object with all fields.

Examples:

  • Use when: provisioning a new agent directly as a board user (bypasses approval flow)

  • Don't use when: you are an agent hiring a specialist — use paperclip_create_agent_hire instead

Error Handling:

  • 400: validation failure → check name is non-empty and enum values are valid

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human) API key

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany UUID to create the agent in
nameYesAgent display name
roleNoAgent role (default: general)
titleNoJob title shown on the agent profile
iconNoIcon displayed for this agent in the Paperclip UI
reportsToNoUUID of the parent agent this agent reports to
capabilitiesNoFree-text description of what this agent can do
desiredSkillsNoSkill names to install on the agent at creation
adapterTypeNoAdapter type controlling how the agent process is launched (default: process)
adapterConfigNoAdapter-specific configuration passed at agent launch
runtimeConfigNoRuntime configuration (heartbeat, concurrency, etc.)
budgetMonthlyCentsNoMonthly budget cap in cents (0 = unlimited / subscription billing)
permissionsNoGovernance permissions granted to this agent
metadataNoArbitrary key-value metadata attached to the agent

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate non-destructive and non-open-world behavior. The description adds context such as requiring a board API key, detailing error codes (400, 401, 403), and specifying that it bypasses approval flow. No contradictions with annotations.

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

Conciseness4/5

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

The description is well-structured with clear sections (Args, Returns, Examples, Error Handling). It is front-loaded with the important warning about board-only usage. While it is somewhat lengthy, each section serves a purpose and no information is redundant.

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

Completeness4/5

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

Given the complexity (14 parameters, nested objects), the description covers parameter details, error scenarios, and usage context. There is no output schema, but the return object is described generically. The error handling and examples provide sufficient completeness.

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 input schema has 100% description coverage, so baseline is 3. The description adds value beyond the schema by explaining some parameters in more detail (e.g., permissions.canCreateAgents as CEO-level, icon as UI identifier). It also lists all parameters with types, but the schema already does that.

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

Purpose5/5

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

The description clearly states the tool directly creates an agent and distinguishes it from the sibling tool paperclip_create_agent_hire, which handles approval-flow hires. The verb 'create' and resource 'agent' are specific, and the contrast is explicit.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: it is for board-only direct hires, prefers the alternative sibling for approval flows, and includes 'Use when' and 'Don't use when' examples. Error handling also clarifies authentication and permission requirements.

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

paperclip_create_agent_hireA

Create an agent hire request, triggering the governance approval and onboarding flow.

Args:

  • name: string — Agent display name (example: "DevOps Agent")

  • role: string — Agent role identifier (example: "devops")

  • title: string (optional) — Job title

  • capabilities: string (optional) — Free-text capability description

  • goalId: string (optional) — Goal UUID to link the hire

  • projectId: string (optional) — Project UUID to associate

Returns: Returns the created hire request object with a pending approval linked.

Examples:

  • Use when: CEO agent initiating a new specialist hire after board approves the proposal

  • Don't use when: you need a generic approval — use paperclip_create_approval with type:'hire_agent' for custom payloads

Error Handling:

  • 400: validation failure → ensure name and role are non-empty

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: only the CEO agent has canCreateAgents permission → verify agent governance config

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesAgent display name
roleYesAgent role (e.g. engineer, cto)
titleNoJob title
capabilitiesNoFree-text capability description
goalIdNoGoal UUID to link the hire to
projectIdNoProject UUID to associate

TDQS

A4.7/5.0
Behavior5/5

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

Discloses governance flow, pending approval, error codes, and permission restrictions (only CEO agent). Annotations already indicate non-destructive, so description adds value.

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?

Well-structured with clear sections (Args, Returns, Examples, Error Handling). No unnecessary words; all sentences add value.

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?

Complete given no output schema: explains return object type, when to use, and error handling. Covers all key aspects.

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 baseline 3. Description adds example values and context but doesn't significantly expand beyond schema for optional params.

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?

Clear verb+resource: 'Create an agent hire request, triggering the governance approval and onboarding flow.' Distinguishes from siblings like paperclip_create_agent and paperclip_create_approval.

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

Usage Guidelines5/5

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

Explicit 'Use when' and 'Don't use when' with alternative tool name and rationale: 'use paperclip_create_approval with type: hire_agent for custom payloads'.

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

paperclip_create_agent_keyA

⚠ Board-only: Create a long-lived API key for an agent. The key value is shown only once — store it securely.

Args:

  • agentId: string — Agent UUID (example: "agt_abc123")

  • name: string (optional) — Key label for identification (example: "prod-key")

  • expiresAt: string (optional) — ISO 8601 expiry datetime (example: "2027-01-01T00:00:00.000Z")

Returns: Returns the created key record: id, name, key (plaintext, shown once), agentId, expiresAt.

Examples:

  • Use when: provisioning a new API key after onboarding an agent or rotating a compromised key

  • Don't use when: the agent already has a valid key — list existing keys via paperclip_get_agent first

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human) API key

  • 404: agent not found → verify ID with paperclip_list_agents

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesAgent UUID
nameNoKey label
expiresAtNoISO 8601 expiry datetime (e.g. '2027-01-01T00:00:00.000Z')

TDQS

A4.9/5.0
Behavior5/5

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

Discloses critical behavior: key shown only once (store securely), board-only access, and detailed error handling (401, 403, 404). Annotations only provide destructiveHint false and openWorldHint false, so description adds substantial value.

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?

Well-structured with sections for warning, arguments, returns, examples, and error handling. Front-loaded with important security note. Every sentence is informative and concise.

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?

Despite no output schema, the description details the return value (key record with fields). Covers error states, usage scenarios, and prerequisites. Tool is simple and all relevant context is provided.

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 covers all parameters with descriptions (100% coverage). The description adds example values and clarifies optionality, providing moderate additional value beyond the schema.

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

Purpose5/5

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

The description clearly states the action (create) and resource (long-lived API key for an agent). It is distinct from sibling tools like paperclip_create_agent or paperclip_create_secret by focusing on agent-specific keys.

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

Usage Guidelines5/5

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

Includes explicit use cases: 'Use when provisioning a new API key... or rotating a compromised key' and 'Don't use when the agent already has a valid key' with alternative tool suggestion (paperclip_get_agent). Also specifies board-only requirement.

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

paperclip_create_approvalA

Create a new approval request for board review.

Args:

  • type: enum — hire_agent | approve_ceo_strategy | budget_override_required

  • payload: object — Type-specific payload (e.g. for hire_agent: { name, role, capabilities })

  • requestedByAgentId: string (optional) — Override requester agent UUID (defaults to caller)

Returns: Returns the created approval object: id, type, status:'pending', payload, createdAt.

Examples:

  • Use when: submitting a hire request or budget override request for board review

  • Don't use when: you want to use the streamlined hire flow — use paperclip_create_agent_hire instead

Error Handling:

  • 400: validation failure → ensure type is a valid enum and payload matches the type schema

  • 401: authentication failed → check PAPERCLIP_API_KEY

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesApproval type: hire_agent | approve_ceo_strategy | budget_override_required
payloadYesType-specific payload object (required by the API)
requestedByAgentIdNoAgent UUID of the requester (defaults to caller)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=false and openWorldHint=false. The description adds behavioral details beyond these: it describes the return object structure (id, type, status:'pending', payload, createdAt), error handling for 400 and 401, and the optional override for requester. This enriches the agent's understanding of the tool's 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?

The description is well-structured with clear sections (Args, Returns, Examples, Error Handling), making it easy to scan. However, it is somewhat verbose (e.g., repeating the enum in the description and the schema). It could be slightly more concise without losing essential information.

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

Completeness5/5

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

Given the tool has 3 parameters, no output schema, and nested objects, the description covers all necessary aspects: purpose, usage guidelines, parameter semantics, return format, and error handling. It is complete and leaves no significant gaps for an agent to understand the tool.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds meaningful extra context: for the 'type' parameter, it lists enum values; for 'payload', it gives an example for hire_agent; for 'requestedByAgentId', it clarifies override and default behavior. This adds value beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states the tool creates an approval request for board review, with a specific verb 'Create' and resource 'approval request'. It explicitly distinguishes from a sibling tool by advising to use 'paperclip_create_agent_hire' instead when doing a streamlined hire, satisfying the sibling differentiation criterion.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance with an 'Examples' section that includes 'Use when' and 'Don't use when' directives, and directly names an alternative tool (paperclip_create_agent_hire). This gives clear context for when to use this tool vs. alternatives.

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

paperclip_create_companyA

⚠ Board-only: Create a new company. The issuePrefix is auto-generated from the name.

Args:

  • name: string — Company name (required, non-empty)

  • description: string | null (optional) — Company description

  • budgetMonthlyCents: number (optional) — Monthly budget in cents (e.g. 5000 = $50.00)

Returns: The created company object with all fields including assigned UUID, issuePrefix (auto-generated), status 'active', and timestamps.

Examples:

  • Use when: onboarding a new organization or setting up a tenant on the board

  • Don't use when: you need to update an existing company — use paperclip_update_company instead

Error Handling:

  • 400: validation failure → ensure name is non-empty

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: board key required → this endpoint requires board-level authentication

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCompany name (required, non-empty)
descriptionNoCompany description (optional, nullable)
budgetMonthlyCentsNoMonthly budget in cents (non-negative integer, e.g. 5000 = $50.00)

TDQS

A4.7/5.0
Behavior4/5

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

Description discloses board-only auth requirement and auto-generation of issuePrefix. Annotations already set destructiveHint: false, so no contradiction. However, it doesn't explicitly mention mutation or side effects beyond creation, though that's implied.

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?

Well-structured with distinct sections (Args, Returns, Examples, Error Handling). Each sentence adds useful information, no fluff. Length is appropriate for the complexity.

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?

Despite no output schema, the description details the return object (UUID, issuePrefix, status, timestamps). Error handling covers 400, 401, 403. For a creation tool, this is complete and eliminates ambiguity.

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 baseline is 3. Description adds value with examples (e.g., budgetMonthlyCents example), explanation of issuePrefix auto-generation, and notes name is required. This exceeds the schema's basic descriptions.

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

Purpose5/5

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

The description clearly states 'Create a new company' and specifies the auto-generated issuePrefix, distinguishing it from other company tools like paperclip_update_company and paperclip_archive_company. The verb 'create' and resource 'company' are explicit.

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

Usage Guidelines5/5

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

Usage guidelines are explicit: 'Use when: onboarding a new organization or setting up a tenant on the board' and 'Don't use when: you need to update an existing company — use paperclip_update_company instead'. Also notes board-level authentication requirement.

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

paperclip_create_goalA

Create a new company goal. companyId is injected from auth config.

Args:

  • title: string — Goal title (required)

  • description: string (optional) — Goal description (markdown)

  • status: string (optional) — Initial status (example: "active")

  • level: string (optional) — Goal level (example: "company")

  • parentId: string (optional) — Parent goal UUID for hierarchical goals

Returns: Returns the created goal object with all fields including assigned UUID.

Examples:

  • Use when: creating a new quarterly or product-level goal to link issues and projects against

  • Don't use when: the goal already exists — use paperclip_update_goal to modify it

Error Handling:

  • 400: validation failure → ensure title is non-empty

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: parentId not found → verify with paperclip_list_goals

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesGoal title
descriptionNoGoal description (markdown)
statusNoInitial status (e.g. active)
levelNoGoal level (e.g. company, team)
parentIdNoParent goal UUID

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate non-destructive behavior. The description adds that companyId is injected from auth config and returns the created goal with UUID. No contradictions. Could mention more about side effects or permissions.

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

Conciseness5/5

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

The description is well-structured with sections (Args, Returns, Examples, Error Handling), concise yet comprehensive, and front-loaded with the key purpose. Every sentence adds 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 creation tool with 5 parameters and no output schema, the description covers purpose, parameters, return value (goal object with UUID), error codes, and usage examples. Could elaborate on return fields, but sufficient.

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

Parameters4/5

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

With 100% schema coverage, baseline is 3. The description adds value by providing examples (status='active', level='company') and clarifying that title is required and parentId is for hierarchy, beyond what the schema 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?

The description clearly states it creates a new company goal, with a specific verb and resource. It distinguishes from the sibling tool paperclip_update_goal by explicitly noting when not to use it.

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

Usage Guidelines5/5

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

Provides explicit when-to-use (creating quarterly or product-level goals) and when-not-to-use (goal already exists, use update instead), along with error handling guidance for different HTTP status codes.

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

paperclip_create_issueA

Create a new issue in the current company.

Args:

  • title: string — Issue title (required)

  • description: string (optional) — Issue description (markdown)

  • status: enum (optional) — Initial status; pass 'backlog' explicitly (API default is todo)

  • priority: enum (optional) — Priority: critical | high | medium | low

  • parentId: string (optional) — Parent issue UUID for sub-tasks

  • goalId: string (optional) — Goal UUID to link the issue

  • projectId: string (optional) — Project UUID to associate

  • assigneeAgentId: string (optional) — Assignee agent UUID

  • billingCode: string (optional) — Billing code for cost tracking

  • labelIds: string[] (optional) — Label UUIDs to apply

  • inheritExecutionWorkspaceFromIssueId: string (optional) — Inherit workspace from another issue

Returns: Returns the created issue object with all fields including the assigned identifier (e.g. PAP-42).

Examples:

  • Use when: filing a new bug, MCP tool failure, or gap discovered mid-run for Scrum Master to triage

  • Don't use when: the issue already exists — use paperclip_update_issue to modify it

Error Handling:

  • 400: validation failure → ensure title is non-empty and status/priority are valid enums

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: referenced goalId or projectId not found → verify with paperclip_list_goals or paperclip_list_projects

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesIssue title
descriptionNoIssue description (markdown)
statusNoInitial status (default: backlog)
priorityNoPriority level
parentIdNoParent issue UUID
goalIdNoGoal UUID to link the issue to
projectIdNoProject UUID to associate
assigneeAgentIdNoAssignee agent UUID
billingCodeNoBilling code for cost tracking
labelIdsNoLabel UUIDs to apply
inheritExecutionWorkspaceFromIssueIdNoLink to an existing execution workspace (for follow-up tasks on same checkout)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations only indicate destructiveHint=false and openWorldHint=false. The description discloses return behavior (returns created issue object with identifier) and error codes for 400, 401, 404. No contradiction, but lacks details on side effects beyond creation.

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?

Well-organized with separate sections for Args, Returns, Examples, and Error Handling. Every sentence adds value, no repetition of schema. Concise yet comprehensive.

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?

Addresses all key aspects: purpose, parameters, usage context, return type, and error scenarios. Despite 11 parameters and no output schema, description fully compensates with clear return description and examples.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. Description adds value beyond schema by clarifying default status behavior ('pass 'backlog' explicitly (API default is todo)') and explaining inheritExecutionWorkspaceFromIssueId ('for follow-up tasks on same checkout').

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

Purpose5/5

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

The description clearly states 'Create a new issue in the current company', specifying the action, resource, and scope. It distinguishes from sibling 'paperclip_update_issue' by explicitly noting when not to use this tool.

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

Usage Guidelines5/5

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

Provides explicit 'Use when' and 'Don't use when' examples, including a direct alternative ('use paperclip_update_issue to modify it'). Also includes error handling with actionable remediation steps.

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

paperclip_create_labelA

Create a new label for the current company.

Args:

  • name: string — Label name, typically namespaced (example: "source:agent")

  • color: string (optional) — 6-digit hex color (example: "#6366f1")

Returns: Returns the created label object: id, name, color, createdAt.

Examples:

  • Use when: seeding a missing taxonomy label (e.g. source:agent, type:bug) during Label Bootstrap

  • Don't use when: the label already exists — use paperclip_list_labels to check before creating

Error Handling:

  • 400: validation failure → check name is non-empty and color is valid hex if supplied

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 409: label name already exists → fetch existing ID from paperclip_list_labels

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesLabel name (e.g. 'source:agent', 'type:bug')
colorNo6-digit hex color string (e.g. '#6366f1')

TDQS

A4.7/5.0
Behavior5/5

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

The description adds significant behavioral context beyond annotations: return shape (id, name, color, createdAt), error handling codes (400, 401, 409), and the suggestion to check for existing labels. Annotations only declare non-destructive and non-open-world, so description carries the burden and does so thoroughly.

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

Conciseness5/5

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

The description is well structured with clear sections (Args, Returns, Examples, Error Handling). It is concise, front-loaded with the main purpose, and every sentence adds value without redundancy.

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

Completeness5/5

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

Given no output schema, the description fully explains the return object, error scenarios, and usage context. It covers all essential information for an agent to correctly invoke the tool, making it highly 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 100%, so baseline 3 is appropriate. The description repeats schema info for name and color, adding only minor nuance like 'typically namespaced' for name. No significant new meaning beyond what schema already provides.

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

Purpose5/5

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

The description clearly states 'Create a new label for the current company' with a specific verb and resource. Among siblings, there is no other label creation tool, and paperclip_list_labels exists for listing, so it distinguishes well.

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

Usage Guidelines5/5

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

Explicit guidance: 'Use when: seeding a missing taxonomy label... Don't use when: the label already exists — use paperclip_list_labels to check before creating.' Provides clear when-to-use and when-not-to-use with an alternative tool named.

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

paperclip_create_projectA

Create a new project. Optionally include a workspace config.

Args:

  • name: string — Project name (required)

  • description: string (optional) — Project description (markdown)

  • status: string (optional) — Initial status (example: "active")

  • goalId: string (optional) — Goal UUID to link the project

  • workspace.cwd: string (optional) — Local working directory (example: "/home/user/repo")

  • workspace.repoUrl: string (optional) — Remote repository URL (example: "https://github.com/org/repo")

Returns: Returns the created project object with all fields including assigned UUID and workspace if provided.

Examples:

  • Use when: setting up a new feature project linked to a goal, with a workspace for agent execution

  • Don't use when: you need to add a workspace to an existing project — use paperclip_create_workspace instead

Error Handling:

  • 400: validation failure → ensure name is non-empty

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: goalId not found → verify with paperclip_list_goals

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProject name
descriptionNoProject description (markdown)
statusNoInitial status (e.g. active)
goalIdNoGoal UUID to link the project to
workspaceNoOptional workspace config to create alongside the project

TDQS

A4.6/5.0
Behavior4/5

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

Annotations indicate non-destructive and open-world false. The description adds that the tool returns the created project object with UUID, and covers error handling for validation, auth, and not-found cases. No contradictions with annotations.

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

Conciseness5/5

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

Well-structured with clear sections (Args, Returns, Examples, Error Handling). No redundant sentences; each part provides unique information. Length is appropriate for the complexity.

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?

Despite no output schema, the description explains the return value. Includes error scenarios. Could mention more sibling alternatives for related operations (e.g., update_project), but the coverage is solid for a create tool.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. The description adds value by providing example values for parameters (e.g., status: 'active', workspace.cwd: '/home/user/repo') and clarifying the workspace is optional and created alongside the project. This goes beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states 'Create a new project' and mentions optional workspace config. It explicitly distinguishes from the sibling tool 'paperclip_create_workspace' in the 'Don't use when' section, making the purpose unambiguous.

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

Usage Guidelines5/5

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

Provides explicit 'Use when' and 'Don't use when' guidance, including a specific alternative tool for adding workspace to existing projects. This gives the agent clear decision rules.

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

paperclip_create_routineA

Create a new routine for an agent. Add triggers separately with paperclip_add_routine_trigger.

Args:

  • assigneeAgentId: string — Agent UUID to run the routine (example: "agt_abc123")

  • title: string — Routine title (example: "daily-standup")

  • description: string (optional) — Routine description

  • concurrencyPolicy: string (optional) — allow | forbid | replace (default: forbid)

  • catchUpPolicy: string (optional) — skip | run_once for missed runs

Returns: Returns the created routine object: id, title, assigneeAgentId, triggers:[], createdAt.

Examples:

  • Use when: setting up a scheduled workflow for an agent before adding a cron trigger

  • Don't use when: you want to trigger immediately — use paperclip_run_routine after creating the routine

Error Handling:

  • 400: validation failure → ensure title and assigneeAgentId are non-empty

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: assigneeAgentId not found → verify with paperclip_list_agents

ParametersJSON Schema
NameRequiredDescriptionDefault
assigneeAgentIdYesAgent UUID to run the routine
titleYesRoutine title
descriptionNoRoutine description
concurrencyPolicyNoConcurrency policy (e.g. allow, forbid, replace)
catchUpPolicyNoCatch-up policy for missed runs (e.g. skip, run_once)

TDQS

A4.7/5.0
Behavior4/5

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

Description adds behavioral context beyond annotations, including that it is a creation operation (non-destructive per annotations), return value structure, and error handling for common failure modes. It does not contradict annotations.

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

Conciseness4/5

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

The description is well-structured with sections for args, returns, examples, and error handling. It is front-loaded with the main action. While comprehensive, it could be slightly more concise by trimming redundant phrases.

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

Completeness5/5

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

Given 5 parameters, no output schema, and the need to guide an agent, the description covers purpose, usage context, parameter explanations, error scenarios, and return format. It is fully sufficient for correct selection and invocation.

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

Parameters5/5

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

Schema provides descriptions for all parameters (100% coverage). The description adds value by providing specific examples and explaining options for concurrencyPolicy and catchUpPolicy, clarifying the 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 clearly states the tool creates a routine for an agent and distinguishes from sibling tools like paperclip_add_routine_trigger and paperclip_run_routine by specifying that triggers are added separately and that this is for scheduled workflows.

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

Usage Guidelines5/5

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

Explicit when-to-use and when-not-to-use guidance is provided: 'Use when: setting up a scheduled workflow for an agent before adding a cron trigger' and 'Don't use when: you want to trigger immediately — use paperclip_run_routine after creating the routine.' This effectively differentiates from alternatives.

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

paperclip_create_secretA

⚠ Board-only: Create a new secret for a company. The value is stored encrypted and is never returned in any response.

Args:

  • companyId: string — Company UUID

  • name: string — Secret name (e.g. DATABASE_URL)

  • value: string — Secret value (stored encrypted, never returned)

  • provider: enum (optional) — Storage backend: local_encrypted | aws_secrets_manager | gcp_secret_manager | vault (default: local_encrypted)

  • description: string | null (optional) — Human-readable description

  • externalRef: string | null (optional) — External reference (e.g. ARN for AWS Secrets Manager)

Returns: Created secret metadata: id, companyId, name, provider, externalRef, latestVersion (starts at 1), description, createdByAgentId, createdByUserId, createdAt, updatedAt. Value is never returned.

Examples:

  • Use when: registering a new credential or API key that agents or routines will reference by name

  • Don't use when: the secret already exists and you want to update its value — use paperclip_rotate_secret instead

Error Handling:

  • 400: validation error → check that name and value are non-empty

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human-user) API key

  • 409: secret name already exists → use paperclip_rotate_secret to update its value

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany UUID
nameYesSecret name (e.g. DATABASE_URL)
valueYesSecret value — stored encrypted, never returned in responses
providerNoStorage provider (default: local_encrypted)
descriptionNoHuman-readable description
externalRefNoExternal reference (e.g. ARN for AWS Secrets Manager)

TDQS

A4.9/5.0
Behavior5/5

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

Discloses board-only requirement, encryption, non-return of value, and error codes (400, 401, 403, 409). Annotations only provide destructiveHint=false and openWorldHint=false, so description adds essential context.

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?

Well-structured with sections (Args, Returns, Examples, Error Handling). Uses bullet points and emoji for caution. Every sentence is informative and no redundancy.

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

Completeness5/5

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

Covers all aspects: purpose, parameters, return shape (value never returned), usage guidance, error handling, and security considerations. No output schema, but description provides return fields.

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 baseline is 3. Description repeats schema info but adds context like default provider and meaning of externalRef (ARN). Also emphasizes value is never returned.

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

Purpose5/5

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

The description clearly states 'Create a new secret for a company' with a specific verb and resource. It includes behavioral warnings (board-only, encrypted storage, value never returned) and distinguishes from the sibling tool paperclip_rotate_secret.

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

Usage Guidelines5/5

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

Explicit 'Use when' and 'Don't use when' sections with alternative tool (paperclip_rotate_secret) for updating existing secrets. Error handling also guides correct usage.

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

paperclip_create_workspaceA

Create a new workspace for a project. At least one of cwd or repoUrl is required.

Args:

  • projectId: string — Project UUID (example: "prj_abc123")

  • cwd: string (optional) — Local working directory path (example: "/home/user/repo")

  • repoUrl: string (optional) — Remote repository URL (example: "https://github.com/org/repo")

Returns: Returns the created workspace object: id, cwd, repoUrl, projectId, createdAt.

Examples:

  • Use when: adding a second workspace (e.g. a different branch or clone) to an existing project

  • Don't use when: you are creating a project — use paperclip_create_project with the workspace field instead

Error Handling:

  • 400: validation failure → must provide at least one of cwd or repoUrl

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: project not found → verify ID with paperclip_list_projects

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject UUID
cwdNoLocal working directory path
repoUrlNoRemote repository URL

TDQS

A4.9/5.0
Behavior5/5

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

Description adds return format (workspace object with fields) and error handling (400, 401, 404) beyond annotations. No contradiction with annotations (destructiveHint: false).

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?

Well-structured with clear sections (Args, Returns, Examples, Error Handling). Every sentence adds value; no fluff.

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?

Complete for a creation tool: explains return fields, error conditions, and usage context relative to siblings. No output schema, but description adequately documents return value.

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%, but description adds value by providing example values for each parameter and clarifying the conditional requirement (at least one of cwd or repoUrl) which is not fully captured in 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?

Clearly states 'Create a new workspace for a project' with specific verb and resource. Explicitly distinguishes from sibling tool paperclip_create_project by providing when-to-use and when-not-to-use examples.

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

Usage Guidelines5/5

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

Provides explicit examples for when to use (adding a second workspace) and when not to use (creating a project), including naming the alternative tool. Also specifies the condition that at least one of cwd or repoUrl is required.

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

paperclip_delete_attachmentA
Destructive

Permanently delete an attachment by ID.

Args:

  • attachmentId: string — Attachment UUID (example: "att_abc123")

Returns: Returns the deleted attachment stub: id, filename, confirming deletion.

Examples:

  • Use when: removing a superseded or mistakenly uploaded file from an issue

  • Don't use when: you want to read the file first — use paperclip_download_attachment before deleting

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: attachment not found → verify UUID with paperclip_list_attachments

ParametersJSON Schema
NameRequiredDescriptionDefault
attachmentIdYesAttachment UUID

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already set destructiveHint=true, so description adds value by confirming 'Permanently delete' and describing the return stub. Does not contradict 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?

Well-structured with Args, Returns, Examples, Error Handling sections. Front-loaded with main action. No fluff.

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

Completeness4/5

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

Covers purpose, parameter example, usage guidance, error codes. Lacks prerequisites or permission requirements, but given simplicity and no output schema, it's sufficient.

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

Parameters4/5

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

Only one parameter with schema description 'Attachment UUID'. Description adds example format ('att_abc123') and links to paperclip_list_attachments for verification, going beyond 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?

Clearly states 'Permanently delete an attachment by ID.' Verb+resource is specific (delete attachment). Distinguishes from siblings like download_attachment, upload_attachment, list_attachments.

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

Usage Guidelines5/5

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

Explicitly says when to use (remove superseded/mistakenly uploaded file) and when not to use (read first, use paperclip_download_attachment). Also provides error handling guidance for 401 and 404.

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

paperclip_delete_documentA
Destructive

⚠ Board-only: Delete a document from an issue by key.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

  • key: string — Document key to delete (example: "plan")

Returns: Returns the deleted document stub confirming the key and issueId.

Examples:

  • Use when: removing an obsolete document from an issue (requires board API key)

  • Don't use when: you want to clear the body — use paperclip_upsert_document with an empty body instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human) API key

  • 404: document or issue not found → verify both issueId and key

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-22)
keyYesDocument key (e.g. `plan`)

TDQS

A4.7/5.0
Behavior5/5

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

Annotations mark destructiveHint=true, and the description goes beyond by listing error codes (401,403,404) with remedies, return type (deleted document stub), and access constraints (Board-only). No contradictions with annotations.

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

Conciseness5/5

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

Information is logically sectioned with emojis, bullet points, and clear headings. Every sentence serves a purpose—no redundancy. Front-loaded with the critical action and context.

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

Completeness5/5

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

For a simple delete with 2 params and no output schema, the description fully covers purpose, usage, parameters, errors, and return value. No gaps remain.

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 baseline is 3. Description repeats parameters (issueId, key) with examples but adds no new semantic detail beyond what the schema provides. The Board-only context is the only additional insight.

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 explicitly states 'Delete a document from an issue by key', specifying the action (delete), resource (document), and scope (by issue key). It distinguishes from siblings like paperclip_upsert_document by noting the Board-only requirement and providing a concrete usage example.

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

Usage Guidelines5/5

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

Provides clear when-to-use ('removing an obsolete document') and when-not-to-use ('clear the body' → use upsert) guidance. Also specifies that board API key is required, which sets expectations for auth context.

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

paperclip_delete_routine_triggerA
Destructive

Delete a routine trigger. The routine itself is not deleted.

Args:

  • triggerId: string — Routine trigger UUID (example: "trg_abc123")

Returns: Returns a confirmation object indicating the trigger was deleted.

Examples:

  • Use when: removing a cron schedule from a routine without deleting the routine itself

  • Don't use when: you want to delete the entire routine — use paperclip_delete_routine instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: trigger not found → verify ID with paperclip_get_routine

ParametersJSON Schema
NameRequiredDescriptionDefault
triggerIdYesRoutine trigger UUID

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, and the description adds that the trigger is deleted but not the routine. It also includes error handling for 401 and 404, which adds behavioral context beyond the schema and annotations.

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

Conciseness5/5

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

The description is well-structured into clearly labeled sections (Args, Returns, Examples, Error Handling) and is concise with no unnecessary words.

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

Completeness5/5

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

For a simple one-parameter destructive tool with no output schema, the description covers all necessary aspects: action, parameter, return value, usage guidance, and error handling. It is fully self-contained.

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 description merely restates the schema's parameter description ('Routine trigger UUID') with an example value. It adds minimal additional 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?

Clearly states the verb 'Delete' and resource 'routine trigger', and explicitly distinguishes from deleting the entire routine by stating 'The routine itself is not deleted.' This differentiates it from the sibling tool paperclip_delete_routine.

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

Usage Guidelines5/5

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

Provides explicit 'Use when' and 'Don't use when' scenarios, and directly names the alternative tool paperclip_delete_routine for the opposite use case.

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

paperclip_delete_workspaceA
Destructive

⚠ Board-only: Permanently delete a workspace from a project. Returns the deleted workspace object.

Args:

  • projectId: string — Project UUID (example: "prj_abc123")

  • workspaceId: string — Workspace UUID to delete (example: "wsp_abc123")

Returns: The deleted workspace object: id, companyId, projectId, name, sourceType, cwd, repoUrl, isPrimary, createdAt, updatedAt.

Examples:

  • Use when: removing a workspace that is no longer needed (e.g. a closed branch or decommissioned path)

  • Don't use when: you want to update workspace settings — use paperclip_update_workspace instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: board key required → this endpoint requires board-level authentication

  • 404: project or workspace not found → verify IDs with paperclip_list_workspaces

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject UUID
workspaceIdYesWorkspace UUID to permanently delete

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true. Description adds board-only requirement and error handling details, but does not mention potential side effects like cascade deletes or impact on related data.

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?

Description is well-structured with warning, action, returns, args, usage guidance, and error handling. All sentences add value.

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

Completeness5/5

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

For a simple destructive tool with no output schema, the description provides return fields, error codes, and usage context. It is complete given the complexity.

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

Parameters5/5

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

Schema coverage is 100% with descriptions. The description adds example values for both parameters and lists return fields, providing 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 clearly states 'Permanently delete a workspace from a project' and notes it is board-only. It uses a specific verb and resource, distinguishing it from paperclip_update_workspace.

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

Usage Guidelines5/5

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

Explicit when-to-use (removing unneeded workspace) and when-not-to-use (updating settings, with alternative paperclip_update_workspace) are provided.

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

paperclip_disable_pluginA
Destructive

⚠ Board-only: Disable an active plugin by its key without uninstalling it.

Args:

  • pluginKey: string — Plugin key (e.g. 'paperclip.hello-world-example'). URL-encoded automatically.

Returns: Updated plugin object with new status confirming the plugin is now disabled.

Examples:

  • Use when: temporarily deactivating a plugin without losing its installation or configuration

  • Don't use when: you want to permanently remove the plugin — use the uninstall flow instead; disabling is reversible

Error Handling:

  • 404: plugin not found → verify pluginKey with paperclip_list_plugins

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human-user) API key

ParametersJSON Schema
NameRequiredDescriptionDefault
pluginKeyYesPlugin key (e.g. 'paperclip.hello-world-example' or '@acme/plugin-linear')

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, so the description adds extra context: disabling is reversible, URL-encoding is automatic, and error handling covers 404, 401, and 403. The board-only requirement is also disclosed. No contradictions with annotations.

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

Conciseness5/5

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

The description is well-structured with sections (Args, Returns, Examples, Error Handling). It is concise, with each sentence providing essential information. No fluff.

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

Completeness4/5

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

Given the simple tool (one parameter, no output schema), the description covers purpose, usage, error handling, and reversibility. It could mention the shape of the returned object, but that is likely standard. Overall, sufficient for the agent to use 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?

The only parameter 'pluginKey' has 100% schema description coverage with an example. The tool description adds that it is 'URL-encoded automatically', which is not in the schema. This extra detail enhances understanding beyond the schema.

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

Purpose5/5

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

The description clearly states the action ('Disable an active plugin by its key without uninstalling it'), includes a specific verb ('disable'), and distinguishes from the sibling uninstall flow by noting it's reversible. The title in annotations also confirms 'Disable plugin'.

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

Usage Guidelines5/5

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

The description explicitly provides usage context: 'Board-only', 'Use when: temporarily deactivating a plugin...', and 'Don't use when: you want to permanently remove the plugin — use the uninstall flow instead'. This clearly differentiates from alternatives.

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

paperclip_download_attachmentA
Read-only

Fetch the content of an attachment by ID from the Paperclip API.

Args:

  • attachmentId: string — Attachment UUID (example: "att_abc123")

  • response_format: 'markdown' | 'json' — Output format (default 'markdown')

Returns: Returns a fixed envelope with fields: attachmentId, contentType, size (bytes), contentBase64 (base64-encoded file content). When response_format is 'markdown', produces a compact summary (id, contentType, size, base64 snippet). When response_format is 'json', returns the full envelope as structured JSON.

Examples:

  • Use when: reading a previously uploaded attachment to extract its content

  • Don't use when: you need the attachment metadata only — use paperclip_list_attachments for id, filename, size

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: attachment not found → verify UUID with paperclip_list_attachments

ParametersJSON Schema
NameRequiredDescriptionDefault
attachmentIdYesAttachment UUID
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already set readOnlyHint=true, aligning with 'Fetch'. The description adds transparency by detailing the return envelope (attachmentId, contentType, size, contentBase64), response format behavior, and error codes. No contradictions.

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?

Well-structured with clear sections (Args, Returns, Examples, Error Handling). Every sentence serves a purpose, no redundancy. Efficiently conveys all necessary information in a compact format.

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?

Despite no output schema, the description fully explains the return envelope. It covers main usage, differentiates from siblings, and addresses error cases. For a simple 2-param read tool with rich annotations, this is comprehensive.

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%, and the description adds value with an example value for attachmentId ('att_abc123') and clarifies the default and behavior of response_format. This goes beyond the schema by providing contextual examples.

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

Purpose5/5

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

The description clearly states 'Fetch the content of an attachment by ID' using a specific verb and resource. It distinguishes itself from siblings like paperclip_list_attachments by specifying that it retrieves content, not just metadata.

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

Usage Guidelines5/5

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

Explicitly provides when to use ('when reading a previously uploaded attachment') and when not to use ('need metadata only' → use paperclip_list_attachments). Also includes error handling with actionable advice (check API key, verify UUID).

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

paperclip_enable_pluginA
Idempotent

⚠ Board-only: Enable a previously disabled plugin by its key.

Args:

  • pluginKey: string — Plugin key (e.g. 'paperclip.hello-world-example'). URL-encoded automatically.

Returns: Updated plugin object with new status confirming the plugin is now enabled.

Examples:

  • Use when: re-activating a plugin that was disabled without uninstalling it; safe to call if already enabled

  • Don't use when: the plugin is not installed yet — use paperclip_install_plugin to install it first

Error Handling:

  • 404: plugin not found → verify pluginKey with paperclip_list_plugins

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human-user) API key

ParametersJSON Schema
NameRequiredDescriptionDefault
pluginKeyYesPlugin key (e.g. 'paperclip.hello-world-example' or '@acme/plugin-linear')

TDQS

A4.6/5.0
Behavior4/5

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

Annotations indicate idempotent and non-destructive; description adds board-only constraint, confirms safe if already enabled, and mentions return object, providing context beyond annotations.

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

Conciseness4/5

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

Well-structured with sections and bullet points, but could be slightly more concise; still clear and easy to parse.

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?

Complete for a one-parameter tool without output schema; covers purpose, usage, error handling, and parameter details adequately.

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?

Only one parameter with 100% schema coverage; description adds that pluginKey is URL-encoded automatically, which is helpful beyond the schema.

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

Purpose5/5

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

The description clearly states it enables a disabled plugin by key, specifies 'board-only', and distinguishes from siblings like paperclip_install_plugin and paperclip_disable_plugin.

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

Usage Guidelines5/5

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

Explicit when to use (re-activating a disabled plugin), when not to use (plugin not installed, use install_plugin instead), and error handling for 404, 401, 403 with corrective actions.

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

paperclip_export_companyA

⚠ Board-only: Export company package

Args:

  • companyId: string — Company UUID to export

  • include: object — Which resource types to bundle: { company, agents, projects, issues, skills } (booleans with defaults true/true/false/false/false)

  • skills: string[] (optional) — Filter to specific skill IDs

  • projects: string[] (optional) — Filter to specific project IDs

  • issues: string[] (optional) — Filter to specific issue IDs

  • projectIssues: string[] (optional) — Project IDs whose issues to include

  • expandReferencedSkills: boolean (optional) — Expand transitive skill references

Returns: Export bundle (JSON only): { rootPath, manifest, files (map of path → content), paperclipExtensionPath, warnings }. Files can be very large — response is truncated at 25k chars.

Examples:

  • Use when: creating a portable snapshot of a company configuration for backup or migration

  • Don't use when: you want to apply an import bundle — use paperclip_preview_company_import then paperclip_apply_company_import

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: board key required → this endpoint requires board-level authentication

  • 404: company not found → verify ID with paperclip_list_companies

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany UUID to export
includeYesWhich resource types to include in the export package (company, agents, projects, issues, skills)
skillsNoFilter export to specific skill IDs (omit for all skills)
projectsNoFilter export to specific project IDs (omit for all projects)
issuesNoFilter export to specific issue IDs (omit for all issues)
projectIssuesNoProject IDs whose issues should be included in the export
expandReferencedSkillsNoWhen true, expand transitive skill references into the export bundle

TDQS

A4.9/5.0
Behavior5/5

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

Discloses crucial behaviors: Board-only authentication requirement, JSON-only output, response truncation at 25k chars (files can be very large), and error codes. Annotations only provide destructiveHint and title, so description adds substantial value.

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?

Well-structured with warning, args, returns, examples, and error handling. Each section is concise and front-loaded (first line is 'Board-only: Export company package'). No unnecessary words.

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?

Comprehensively covers purpose, usage, parameters, output format (including truncation example), error handling, and examples. Despite 7 parameters, nested objects, and no output schema, everything needed for correct invocation is present.

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 baseline is 3. Description adds value by showing default values for include subproperties, clarifying optional filters (e.g., 'omit for all skills'), and explaining expandReferencedSkills. This goes beyond mere repetition.

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

Purpose5/5

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

The description clearly states the tool exports a company package (specific verb and resource). It includes 'Board-only' to indicate access level and distinguishes from import tools (paperclip_preview_company_import, paperclip_apply_company_import) in the usage examples.

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

Usage Guidelines5/5

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

Explicit sections 'Use when' and 'Don't use when' with alternatives provided. Error handling details per HTTP status code (401, 403, 404) give clear corrective actions.

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

paperclip_get_activityA
Read-only

Get the audit trail activity feed for the current company.

Args:

  • agentId: string (optional) — Filter to a specific agent (example: "agt_abc123")

  • entityType: string (optional) — Filter by entity kind (example: "issue")

  • entityId: string (optional) — Filter to a specific entity (example: "PAP-42")

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Pagination envelope { items: ActivityEvent[], total, count, offset, limit, has_more, next_offset }. Each item: id, agentId, entityType, entityId, action, occurredAt, metadata.

Examples:

  • Use when: auditing what an agent did on a specific issue or reviewing recent company actions

  • Don't use when: you need issue comments — use paperclip_list_comments instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → verify PAPERCLIP_COMPANY_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdNoFilter by agent ID
entityTypeNoFilter by entity type (e.g. issue, approval)
entityIdNoFilter by entity ID
limitYesMax events per page (1–100, default 50)
offsetYesNumber of events to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. The description adds value by detailing the paginated return structure, specifying error codes (401, 403) with remedies, and implying the tool is safe and non-destructive. Does not mention rate limits but overall sufficient.

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?

Well-structured with clear sections (Args, Returns, Examples, Error Handling). Each sentence adds value, though slightly verbose in the Returns section with detailed typing. Still efficient.

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

Completeness4/5

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

Given no output schema, the description thoroughly explains the return format. Covers parameter usage, examples, and error handling. Lacks mention of rate limits or data retention, but these are minor omissions.

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% with clear parameter descriptions. The description restates parameters with examples and default values, adding marginal value beyond the schema. Baseline score is appropriate.

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

Purpose5/5

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

Clearly states 'Get the audit trail activity feed for the current company' with a specific verb and resource. Explicitly distinguishes from sibling tool paperclip_list_comments in the 'Don't use when' section.

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

Usage Guidelines5/5

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

Provides explicit when-to-use ('auditing what an agent did on a specific issue or reviewing recent company actions') and when-not-to-use ('you need issue comments — use paperclip_list_comments instead'), along with error handling hints.

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

paperclip_get_agentA
Read-only

Get full details for a single agent by UUID.

Args:

  • agentId: string — Agent UUID (example: "agt_abc123")

Returns: Agent object: id, name, urlKey, role, title, status, capabilities, runtimeConfig, adapterConfig, permissions, budget.

Examples:

  • Use when: reading an agent's current config before updating it or checking its heartbeat settings

  • Don't use when: you need a list of agents — use paperclip_list_agents to discover IDs first

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: agent not found → verify ID with paperclip_list_agents

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesAgent UUID
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.7/5.0
Behavior4/5

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

The description adds value beyond annotations by detailing return fields (Agent object with specific properties) and error handling (401, 404). Annotations already declare readOnlyHint=true, so the mutation risk is known, but the description enriches behavioral context.

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

Conciseness5/5

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

The description is concise, well-organized with clear sections (Args, Returns, Examples, Error Handling). Every sentence provides necessary information without fluff. The structure aids quick parsing by an AI agent.

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

Completeness5/5

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

The description covers purpose, parameters, return fields, usage context, and error handling. Despite the absence of an output schema, the description lists the returned fields (id, name, urlKey, etc.) which compensates. For a simple get tool, this is complete.

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 baseline 3. The description adds a concrete example for agentId ('agt_abc123') and implies the response_format via the 'Returns' section mentioning format. While it doesn't elaborate on response_format, the schema is clear with enum and default. The example adds moderate 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?

The description clearly states 'Get full details for a single agent by UUID', specifying a verb and resource. It distinguishes from sibling tools like paperclip_list_agents which lists agents, and paperclip_update_agent which modifies. The title annotation 'Get agent by ID' reinforces this.

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

Usage Guidelines5/5

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

Explicit usage guidance is provided: 'Use when: reading an agent's current config before updating it or checking its heartbeat settings' and 'Don't use when: you need a list of agents — use paperclip_list_agents to discover IDs first'. Error handling hints also guide when to use alternative tools.

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

paperclip_get_approvalA
Read-only

Get a single approval request by ID. Linked issues are not included in this response.

Args:

  • approvalId: string — Approval UUID (example: "apr_abc123")

Returns: Approval object: id, type, status, payload, requestedByAgentId, createdAt, updatedAt.

Examples:

  • Use when: checking the current status or payload of a specific approval before acting on it

  • Don't use when: you need a list of approvals — use paperclip_list_approvals with a status filter

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: approval not found → verify ID with paperclip_list_approvals

ParametersJSON Schema
NameRequiredDescriptionDefault
approvalIdYesApproval UUID
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true; description adds that linked issues are not included and details error codes (401, 404). Provides useful behavioral context beyond 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?

Description is concise with sections (Args, Returns, Examples, Error Handling) and front-loaded with the core purpose. No extraneous sentences.

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

Completeness4/5

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

Given no output schema, the description lists return fields and common errors, making it complete for a single-entity fetch. Could mention response_format effect, but not critical.

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%; description adds an example for approvalId and lists the return fields (id, type, status, etc.) which is not in the input schema, adding value for understanding the response.

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?

Description clearly states 'Get a single approval request by ID' with a specific verb and resource. It distinguishes from siblings like paperclip_list_approvals (for lists) and paperclip_approve (for approving).

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

Usage Guidelines5/5

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

Explicitly provides when to use ('checking status/payload before acting') and when not to use ('for a list, use paperclip_list_approvals'), including a named alternative.

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

paperclip_get_commentA
Read-only

Fetch a single comment by ID, typically the triggering comment from a wake event.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

  • commentId: string — Comment UUID (example: "cmt_abc123")

Returns: Returns the comment object: id, body, authorId, authorType, createdAt.

Examples:

  • Use when: PAPERCLIP_WAKE_COMMENT_ID is set — read the exact comment that triggered the @-mention wake

  • Don't use when: you need all comments on an issue — use paperclip_list_comments instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: comment or issue not found → verify both issueId and commentId

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-21)
commentIdYesComment UUID to fetch

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, matching the read-only nature of fetching a comment. The description adds value by specifying the returned object fields (id, body, authorId, authorType, createdAt) and error handling (401, 404 with remedies). No contradiction exists.

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

Conciseness5/5

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

The description is well-organized with headings (Args, Returns, Examples, Error Handling). It is concise yet comprehensive, with no wasted sentences. Every section adds essential information.

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

Completeness5/5

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

Despite lacking an output schema, the description explicitly lists the returned fields. It also covers error cases and usage context. For a simple fetch tool, this is fully complete.

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 baseline is 3. The description enhances parameter semantics by providing examples (e.g., 'PAP-42' for issueId, 'cmt_abc123' for commentId) and clarifying their role, particularly that commentId is a UUID. This adds context beyond the schema's descriptions.

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

Purpose5/5

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

The description clearly states 'Fetch a single comment by ID' with a specific verb and resource. It also distinguishes from sibling tool paperclip_list_comments by noting it is typically for the triggering comment from a wake event.

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

Usage Guidelines5/5

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

Explicitly provides use cases: 'Use when: PAPERCLIP_WAKE_COMMENT_ID is set' and 'Don't use when: you need all comments on an issue — use paperclip_list_comments instead'. This clearly guides the agent on when to select this tool.

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

paperclip_get_companyA
Read-only

⚠ Board-only: Get a single company by UUID.

Args:

  • companyId: string — Company UUID (example: "00000000-0000-0000-0000-000000000000")

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Company object: id, name, description, status, issuePrefix, issueCounter, budgetMonthlyCents, spentMonthlyCents, requireBoardApprovalForNewAgents, feedbackDataSharingEnabled, brandColor, logoAssetId, pauseReason, pausedAt, createdAt, updatedAt.

Examples:

  • Use when: reading a company's budget, status, or branding configuration

  • Don't use when: you need to list all companies — use paperclip_list_companies to discover IDs first

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: board key required → this endpoint requires board-level authentication

  • 404: company not found → verify ID with paperclip_list_companies

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany UUID
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, but the description adds that the endpoint is 'Board-only' and requires board-level auth (error 403), which is beyond what annotations provide. It also lists return fields and common errors, offering comprehensive behavioral insight.

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?

Well-structured with clear sections (Args, Returns, Examples, Error Handling). Front-loaded with purpose and warning. Every sentence is informative and non-redundant.

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

Completeness5/5

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

Given the tool's simplicity (2 parameters, no output schema), the description covers all essential aspects: authentication requirements, parameter details, return fields, usage examples, and error handling. References sibling for list operation, ensuring full context for correct use.

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

Parameters4/5

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

Schema description coverage is 100% and baseline is 3. The description adds examples (companyId UUID), clarifies response_format enum values and defaults, and lists all return fields, thus providing meaningful extra context beyond the schema.

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

Purpose5/5

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

The description clearly states 'Get a single company by UUID', specifying the verb and resource. It distinguishes from sibling 'paperclip_list_companies' by explicitly stating when not to use and directing to the alternative.

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

Usage Guidelines5/5

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

Provides explicit when-to-use examples ('reading a company's budget, status, or branding configuration') and when-not-to-use ('need to list all companies'), with a direct alternative. Also includes error handling guidance for auth and not found scenarios.

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

paperclip_get_costs_by_agentA
Read-only

Get LLM token costs broken down by agent for the current company.

Args:

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Array of per-agent cost records: agentId, agentName, totalCents, tokenCounts.

Examples:

  • Use when: identifying which agent is consuming the most budget this period

  • Don't use when: you need project-level costs — use paperclip_get_costs_by_project instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → verify PAPERCLIP_COMPANY_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, but description adds error handling details (401, 403) and return structure, which provides useful behavioral context beyond 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?

Description is concise with clear sections (Args, Returns, Examples, Error Handling). Only relevant information is included, no fluff.

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

Completeness5/5

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

Given the tool is simple (1 param, no output schema), annotations cover safety, and description covers usage, examples, and errors, everything is complete for an agent to use 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 coverage is 100% and parameter is well-described in schema with enum. Description adds context about default and purpose, but does not significantly extend beyond schema information.

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?

Description clearly states 'Get LLM token costs broken down by agent for the current company'. It uses specific verb+resource and distinguishes from sibling tools like paperclip_get_costs_by_project.

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

Usage Guidelines5/5

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

Explicitly says 'Use when: identifying which agent is consuming the most budget this period' and 'Don't use when: you need project-level costs — use paperclip_get_costs_by_project instead', providing clear context and alternative.

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

paperclip_get_costs_by_projectA
Read-only

Get LLM token costs broken down by project for the current company.

Args:

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Array of per-project cost records: projectId, projectName, totalCents, tokenCounts.

Examples:

  • Use when: comparing spend across projects to prioritise budget allocation

  • Don't use when: you need agent-level costs — use paperclip_get_costs_by_agent instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → verify PAPERCLIP_COMPANY_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so description is not required to reemphasize safety. The description adds useful behavioral context such as error codes (401, 403) and hints about authentication. However, it does not mention pagination or performance limitations, which could be added.

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

Conciseness5/5

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

The description is concise with clear sections (Args, Returns, Examples, Error Handling). Every sentence adds value, and the structure is easy to parse for an AI agent.

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

Completeness5/5

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

Given the low complexity (one optional parameter, no output schema), the description fully covers return format and error handling. It provides enough context for correct invocation without requiring additional documentation.

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 schema already describes the parameter well. The description adds minor details like default value and output format human-readable vs structured, but does not significantly enhance 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 clearly states the tool retrieves 'LLM token costs broken down by project for the current company', specifying the verb, resource, and scope. It also distinguishes from the sibling tool paperclip_get_costs_by_agent by mentioning when not to use it.

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

Usage Guidelines5/5

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

The 'Examples' section explicitly states when to use ('comparing spend across projects') and when not to use ('need agent-level costs'), directing to the alternative tool paperclip_get_costs_by_agent. This provides excellent guidance.

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

paperclip_get_cost_summaryA
Read-only

Get a rolled-up cost summary for the current company across all agents and projects.

Args:

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Object with total cost in cents, breakdown by period, and per-agent/per-project aggregates.

Examples:

  • Use when: checking overall spend before requesting a budget override approval

  • Don't use when: you need per-agent costs — use paperclip_get_costs_by_agent for a per-agent breakdown

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → verify PAPERCLIP_COMPANY_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and description adds return format details (object with total cost, breakdown) and error cases. No contradictions. Adds value beyond 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?

Description is concise with clear sections (Args, Returns, Examples, Error Handling). Every sentence adds value, no fluff.

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?

Despite no output schema, description explains return structure adequately. For a simple read-only tool with one parameter, the description is complete and self-contained.

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?

Only one parameter (response_format) with 100% schema coverage. Description repeats the enum values and defaults but adds little beyond schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool retrieves a rolled-up cost summary for the current company across agents and projects, and it differentiates from sibling tools like paperclip_get_costs_by_agent and paperclip_get_costs_by_project.

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

Usage Guidelines5/5

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

Explicit when-to-use ('checking overall spend before requesting a budget override approval') and when-not-to-use ('need per-agent costs — use paperclip_get_costs_by_agent') with alternative tool named. Also includes error handling guidance.

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

paperclip_get_current_userA
Read-only

⚠ Board-only: Return the authenticated board user and their session identity.

Args:

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: { userId: string|null, user: { id, email, ... }|null }. userId is null when no board session is active.

Examples:

  • Use when: verifying which human operator is authenticated before performing board actions

  • Don't use when: you need the current agent's identity — use paperclip_get_me instead

Error Handling:

  • 401: authentication failed → check that a board (human) API key is being used

  • 404: no active session → the board token may have expired

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, and the description adds important behavioral context: it is board-only, requires a board API key, and includes error handling details for 401 and 404 cases. No contradictions with annotations.

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

Conciseness5/5

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

The description is well-structured with sections (Args, Returns, Examples, Error Handling), front-loads a warning icon for visibility, and every sentence adds essential information without redundancy.

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

Completeness5/5

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

For a simple read-only tool with one parameter and no output schema, the description fully covers return type, error handling, and usage context. It is sufficiently complete for an AI agent 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 100% with a well-described parameter, but the description adds the clarification that response_format is optional (despite schema marking it required) and reiterates the default. This adds value beyond schema, but the improvement is marginal.

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

Purpose5/5

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

The description clearly states the tool returns the authenticated board user and session identity, with a specific verb 'Return' and resource 'board user'. It directly distinguishes itself from the sibling tool paperclip_get_me by specifying board user vs agent identity.

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

Usage Guidelines5/5

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

The description provides explicit 'Use when' and 'Don't use when' instructions, including a named alternative (paperclip_get_me), giving clear guidance on when to select this tool over siblings.

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

paperclip_get_dashboardA
Read-only

Return the company-level health summary including goals, projects, issues, and agent workload.

Args:

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Object with: goals (array), projects (array), issuesByStatus (object: counts per status), agentWorkload (array: agent name + active issue count).

Examples:

  • Use when: getting a quick board-level overview of company health or sprint progress

  • Don't use when: you need issue details — use paperclip_list_issues or paperclip_get_issue instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → verify PAPERCLIP_COMPANY_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.7/5.0
Behavior5/5

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

Annotations indicate readOnlyHint=true, and the description consistently describes a read operation ('return'). The description adds beyond annotations by detailing error scenarios (401, 403) and describing the return structure, which informs the agent of the tool's behavior without contradiction.

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

Conciseness5/5

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

The description is well-structured with clear sections: purpose, args, returns, examples, error handling. It is front-loaded with the main purpose and each sentence adds value without redundancy. At multiple paragraphs, it remains efficient and scannable.

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

Completeness5/5

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

Given the simple input schema (1 optional param with enum) and no output schema, the description is complete. It explains the return object's structure (goals array, projects array, etc.) and covers error cases, leaving no gaps for an agent to understand what the tool returns and when to use it.

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

Parameters3/5

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

The input schema has 100% coverage with a description and enum for the single parameter. The description repeats the parameter enum and default but adds no additional semantic meaning beyond what the schema provides. Baseline score of 3 is appropriate since the schema already documents the parameter sufficiently.

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

Purpose5/5

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

The description clearly states the tool returns a 'company-level health summary' including specific components (goals, projects, issues, agent workload), using a specific verb ('Return') and resource ('dashboard'). It distinguishes from sibling tools like paperclip_list_issues and paperclip_get_issue by specifying it's a board-level overview.

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

Usage Guidelines5/5

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

The description provides explicit 'Use when' and 'Don't use when' guidance, naming alternative sibling tools (paperclip_list_issues, paperclip_get_issue). It also includes error handling instructions for authentication and permission failures, helping the agent decide when to use this tool.

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

paperclip_get_documentA
Read-only

Get the full content of a specific issue document by key.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

  • key: string — Document key (example: "plan")

Returns: Document object: key, title, body (markdown), format, revisionId, createdAt, updatedAt.

Examples:

  • Use when: reading the plan or notes document before writing an update

  • Don't use when: you need all document keys — use paperclip_list_documents first to discover them

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: document or issue not found → verify both issueId and key with paperclip_list_documents

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-22)
keyYesDocument key (e.g. `plan`)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is clear. Description adds error handling details (401, 404) and return structure, which provides useful behavioral context beyond the annotation.

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

Conciseness4/5

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

Well-structured with sections for Args, Returns, Examples, Error Handling. Efficiently presents all necessary information without verbosity, though slightly expanded by examples and error details.

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?

Despite no output schema, description fully covers return structure, error handling, and usage examples. The tool is simple (3 params, read-only) and the description leaves no gaps in understanding its operation.

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 parameters are documented. Description provides example values (PAP-42, 'plan') and mentions return fields, but does not significantly add meaning beyond the schema's descriptions.

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

Purpose5/5

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

Description clearly states 'Get the full content of a specific issue document by key,' with explicit verb, resource, and scope. It distinguishes from sibling paperclip_list_documents by specifying that to discover all keys, use that tool first.

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

Usage Guidelines5/5

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

Provides explicit when-to-use ('reading the plan or notes document before writing an update') and when-not-to-use ('need all document keys — use paperclip_list_documents'), with an alternative tool named.

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

paperclip_get_document_revisionsA
Read-only

Get the full revision history for an issue document.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

  • key: string — Document key (example: "plan")

Returns: Array of revision objects: revisionId, authorId, createdAt, changeSummary.

Examples:

  • Use when: auditing who changed a document or finding a revisionId to pass to paperclip_upsert_document

  • Don't use when: you need the current document body — use paperclip_get_document instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: document or issue not found → verify both issueId and key with paperclip_list_documents

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-22)
keyYesDocument key (e.g. `plan`)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true; description adds return structure details (fields) and behavior, no contradictions.

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?

Well-organized with sections: main sentence, Args, Returns, Examples, Error Handling. Each sentence is valuable and front-loaded.

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

Completeness5/5

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

Covers purpose, parameters, return values, usage guidance, error handling, and distinguishes from siblings. No gaps given annotations and schema coverage.

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%, but description adds examples for issueId and key, and ties parameters to error handling scenarios.

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?

Clearly states 'Get the full revision history for an issue document.' Distinguishes from siblings like paperclip_get_document (current body) and paperclip_list_documents.

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

Usage Guidelines5/5

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

Explicitly provides 'Use when' and 'Don't use when' with specific sibling references, plus error handling guidance.

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

paperclip_get_feedback_trace_bundleA
Read-only

⚠ Board-only: Fetch the full bundle for a single feedback trace by its UUID.

Args:

  • traceId: string — Feedback trace UUID (example: "ft_abc123")

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Feedback trace bundle object: traceId, events[], metadata, and related context fields.

Examples:

  • Use when: retrieving the complete payload and event history for a specific feedback trace

  • Don't use when: you need to browse traces — use paperclip_list_feedback_traces or paperclip_list_issue_feedback_traces

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → board-only endpoint, requires board API key

  • 404: trace not found → verify traceId with paperclip_list_feedback_traces

ParametersJSON Schema
NameRequiredDescriptionDefault
traceIdYesFeedback trace UUID
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.8/5.0
Behavior5/5

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

Annotations show readOnlyHint=true, consistent with fetch operation. Description adds key behaviors: board-only endpoint requiring board API key, specific error handling (401, 403, 404) with troubleshooting tips, which is beyond annotations.

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

Conciseness4/5

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

Well-structured with clear sections, but somewhat verbose with error handling details. However, all content is relevant and earns its place; front-loaded with purpose.

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?

Comprehensive for a read tool with no output schema: mentions return fields (traceId, events, metadata, related context), covers prerequisites (board-only, API key), and error handling. Sibling context is rich but tool is fully documented.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. Description adds example value ('ft_abc123') and clarifies default for response_format, providing minor added utility over schema alone.

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?

Description explicitly states 'Fetch the full bundle for a single feedback trace by its UUID', using a specific verb and resource. Among siblings, it distinguishes from list tools by targeting a single trace UUID.

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

Usage Guidelines5/5

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

Clearly states when to use (retrieving complete payload) and when not (browsing traces, with explicit sibling alternatives paperclip_list_feedback_traces and paperclip_list_issue_feedback_traces).

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

paperclip_get_goalA
Read-only

Get a single goal by UUID, including its status and linked projects.

Args:

  • goalId: string — Goal UUID (example: "gol_abc123")

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Goal object: id, title, description, status, level, parentId, linkedProjects[], createdAt.

Examples:

  • Use when: reading a goal's current status or linked projects before creating an issue under it

  • Don't use when: you need a list of goals — use paperclip_list_goals to discover IDs first

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: goal not found → verify ID with paperclip_list_goals

ParametersJSON Schema
NameRequiredDescriptionDefault
goalIdYesGoal UUID
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, description adds return fields and error codes. No contradiction.

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

Conciseness5/5

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

Clear sections (Args, Returns, Examples, Error Handling). Concise and well-organized.

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

Completeness5/5

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

No output schema, but description lists returned fields and error codes. Complete for a read tool.

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 100% so baseline 3, but description adds context like UUID format, default output format, and examples.

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?

Clearly states it gets a single goal by UUID, including status and linked projects. Distinguishes from list tool.

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

Usage Guidelines5/5

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

Explicitly provides when-to-use (reading goal status before creating issue) and when-not-to (use list_goals for discovery). Includes error handling guidance.

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

paperclip_get_heartbeat_contextA
Read-only

Get compact heartbeat context for an issue: state, ancestors, goal/project, and comment cursor.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

Returns: Compact context object: issue state, ancestor summaries, goal/project info, lastCommentId cursor for incremental comment fetching.

Examples:

  • Use when: orienting yourself on an issue at the start of a heartbeat run without loading all comments

  • Don't use when: you need the full issue record — use paperclip_get_issue for complete fields

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: issue not found → verify ID with paperclip_list_issues

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-42)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true; description adds context on returning a compact object with specific fields and error handling for 401 and 404. No contradictions. Fully discloses behavior beyond annotations.

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

Conciseness4/5

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

Description is well-structured with sections (overview, args, returns, examples, error handling) and uses bullet points. It is concise but includes necessary detail; no wasted sentences.

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

Completeness5/5

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

Given no output schema, description sufficiently explains what is returned (compact context object with specific fields) and handles error cases. It is complete for a read-only tool fetching context.

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 baseline 3. Description adds an example for issueId but does not mention response_format. While schema describes response_format fully, description adds minimal extra value for parameters.

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

Purpose5/5

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

The description clearly states it gets a compact heartbeat context for an issue, listing specific components (state, ancestors, goal/project, comment cursor). It distinguishes from sibling tool paperclip_get_issue by noting when not to use it.

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

Usage Guidelines5/5

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

Provides explicit when-to-use (orienting at start of heartbeat run) and when-not-to-use (if full issue needed, use paperclip_get_issue), giving clear guidance on tool selection.

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

paperclip_get_inboxA
Read-only

Return the current agent's compact list of active issue assignments.

Args:

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Array of active assignments (status: todo | in_progress | blocked). Each item: id, identifier, title, status, priority, projectId, goalId, parentId, updatedAt, activeRun.

Examples:

  • Use when: finding which issue to work on after waking from an @-mention

  • Don't use when: you need full issue details — use paperclip_get_issue or paperclip_list_issues instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: agent not found → verify PAPERCLIP_AGENT_ID resolves correctly

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.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 bar is lower. The description adds behavioral context by specifying the return structure (array with fields like id, status, priority) and error handling codes (401, 404). This goes beyond the annotations without contradicting them.

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

Conciseness5/5

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

The description is well-structured with clear sections (main sentence, Args, Returns, Examples, Error Handling). Every sentence is relevant and concise, with no fluff. It effectively front-loads the key purpose.

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

Completeness5/5

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

Although there is no output schema, the description explains the return structure (array of assignments with specific fields) and covers error scenarios. For a simple read-only tool with one parameter, this provides sufficient context for correct invocation.

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% for the single parameter (response_format), including its enum values and default. The description echoes this information but adds no additional meaning beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Return the current agent's compact list of active issue assignments.' This specifies the verb (return), resource (active issue assignments), and scope (current agent). It also distinguishes from sibling tools like paperclip_get_issue and paperclip_list_issues by mentioning what it does not do.

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

Usage Guidelines5/5

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

The description includes explicit usage guidance: 'Use when: finding which issue to work on after waking from an @-mention' and 'Don't use when: you need full issue details — use paperclip_get_issue or paperclip_list_issues instead.' This provides clear context and alternatives.

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

paperclip_get_issueA
Read-only

Get a single issue by ID, including full details and ancestor chain.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Issue object: id, identifier, title, description, status, priority, assigneeAgentId, projectId, goalId, parentId, labelIds, executionRunId, ancestors, createdAt, updatedAt.

Examples:

  • Use when: reading a specific issue's full state before making changes

  • Don't use when: you need a list of issues — use paperclip_list_issues or paperclip_get_inbox instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: issue not found → verify ID with paperclip_list_issues

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-42)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.6/5.0
Behavior5/5

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

Annotations provide readOnlyHint, but description adds extensive behavior: returns full details, ancestor chain, specific return fields, and error handling (401, 404). No side effects beyond read.

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?

Well-structured with clear sections (Args, Returns, Examples, Error Handling). Each sentence is necessary, no fluff. Front-loaded with main purpose.

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?

Fully covers parameters, return fields, usage guidance, and error cases. No output schema but description enumerates return fields. Complete for a read operation without complex side effects.

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

Parameters2/5

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

Description adds useful context (default format, examples) but contradicts schema: schema marks response_format as required, description says '(optional)'. This inconsistency undermines agent understanding.

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?

Description uses specific verb 'Get' and resource 'issue', and includes 'by ID' and 'full details and ancestor chain'. Clearly distinguishes from list/inbox tools by mentioning 'a single issue'.

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

Usage Guidelines5/5

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

Explicitly states 'Use when: reading a specific issue's full state before making changes' and 'Don't use when: you need a list of issues' with named alternatives (paperclip_list_issues, paperclip_get_inbox).

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

paperclip_get_meA
Read-only

Return the current agent's full identity record.

Args:

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns:

  • id: string

  • name: string

  • role: string

  • title: string

  • chainOfCommand: object[]

  • capabilities: string

  • budget: object

Examples:

  • Use when: confirming agent identity at the start of a run or after waking from an @-mention

  • Don't use when: you need another agent's details — use paperclip_get_agent instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: agent not found → verify PAPERCLIP_AGENT_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, so the tool is known to be safe. The description adds detailed return field structure, error codes, and authentication requirements. No contradiction.

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

Conciseness5/5

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

The description is well-structured with clear sections (Args, Returns, Examples, Error Handling), front-loading the key purpose. Every sentence adds value, and the formatting aids readability.

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

Completeness5/5

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

The tool has no output schema, but the description fully documents the return fields. With one optional parameter, clear usage guidance, and error handling, the description is complete for an agent to select and invoke 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 coverage is 100% with description and enum for the single parameter. The description repeats this information and adds default value clarification, but does not add significant new 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 explicitly states it returns the current agent's full identity record, and distinguishes from the sibling paperclip_get_agent for retrieving other agents. The verb 'return' and resource 'full identity record' are specific and clear.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use examples (start of run, after @-mention) and when-not-to-use (need another agent's details), pointing to the sibling tool. It also includes error handling guidance for authentication and not-found cases.

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

paperclip_get_org_chartA
Read-only

Get the full company agent hierarchy as an org chart.

Returns: Nested tree structure of agent nodes: id, name, role, reportsTo, directReports[].

Examples:

  • Use when: understanding the chain of command before escalating to a senior agent or CEO

  • Don't use when: you need a flat agent list — use paperclip_list_agents instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → verify PAPERCLIP_COMPANY_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. Description adds details about return structure (nested tree) and error handling, providing value beyond 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?

Description is well-structured with sections for Returns, Examples, and Error Handling. Every sentence adds value without redundancy.

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

Completeness5/5

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

Given one parameter, no output schema, and informative annotations, the description covers purpose, usage, return format, and error scenarios sufficiently.

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 covers the single parameter response_format with description and enum. Description does not add extra meaning beyond what schema provides, so baseline score of 3.

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?

Clearly states it gets the full company agent hierarchy as an org chart, differentiating from the flat list sibling tool paperclip_list_agents.

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

Usage Guidelines5/5

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

Explicitly includes 'Use when' and 'Don't use when' with a specific alternative sibling, guiding appropriate invocation.

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

paperclip_get_pluginA
Read-only

⚠ Board-only: Get detailed information about a specific plugin by its key.

Args:

  • pluginKey: string — Plugin key (e.g. 'paperclip.hello-world-example' or '@acme/plugin-linear'). URL-encoded automatically.

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Plugin object: pluginKey, packageName, displayName, description, status, version, config, health.

Examples:

  • Use when: inspecting a specific plugin's status, version, or configuration before enabling it

  • Don't use when: you need to list all plugins — use paperclip_list_plugins instead

Error Handling:

  • 404: plugin not found → verify pluginKey with paperclip_list_plugins

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human-user) API key

ParametersJSON Schema
NameRequiredDescriptionDefault
pluginKeyYesPlugin key (e.g. 'paperclip.hello-world-example' or '@acme/plugin-linear')
response_formatYesOutput format: 'markdown' (default) or 'json' (structured)markdown

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint=true, and the description adds important behavioral context: Board-only requirement, URL-encoding, and error handling details (404, 401, 403). No contradictions.

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

Conciseness5/5

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

The description is well-structured with sections: warning, Args, Returns, Examples, Error Handling. It is concise and front-loaded with essential information. Every sentence adds value.

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?

Despite no output schema, the description fully explains the return object fields and error handling. It is complete for a simple get tool, covering all necessary context.

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 baseline is 3. The description adds value by explaining URL-encoding for pluginKey, the default for response_format, and the structure of the returned object, which goes beyond the schema.

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

Purpose5/5

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

The description clearly states it gets detailed information about a specific plugin by its key, using specific verbs and resource. It distinguishes from sibling tools like paperclip_list_plugins by specifying it's for a single plugin.

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

Usage Guidelines5/5

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

The description provides explicit when to use (inspecting a specific plugin before enabling) and when not to use (listing all plugins, use paperclip_list_plugins). It also includes error handling guidance.

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

paperclip_get_projectA
Read-only

Get a single project by UUID, including its associated workspaces.

Args:

  • projectId: string — Project UUID (example: "prj_abc123")

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Project object: id, name, description, status, goalId, workspaces[], createdAt.

Examples:

  • Use when: reading project details or checking workspace cwd before checking out a branch

  • Don't use when: you need a list of projects — use paperclip_list_projects to discover IDs first

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: project not found → verify ID with paperclip_list_projects

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject UUID
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint=true, but the description adds valuable behavioral details: error handling for 401 and 404 status codes, and a clear listing of return fields. No contradiction with annotations; the description enhances transparency.

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

Conciseness5/5

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

The description is well-structured with clear sections (Args, Returns, Examples, Error Handling). It is concise, each sentence is meaningful, and the most important information is front-loaded.

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

Completeness5/5

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

For a simple read tool with two parameters and no output schema, the description is complete. It lists return fields, provides usage examples, and covers error handling. No gaps given the tool's complexity and the presence of rich annotations.

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% and baseline is 3. The description adds extra value by providing an example UUID ('prj_abc123') for projectId and explaining the default and purpose of response_format, which goes beyond the schema's enum list.

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

Purpose5/5

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

The description clearly states 'Get a single project by UUID, including its associated workspaces', specifying the verb (get), resource (project), and scope (single by UUID). It distinguishes itself from sibling tools like paperclip_list_projects by mentioning alternative use cases.

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

Usage Guidelines5/5

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

Explicitly provides when to use ('reading project details or checking workspace cwd') and when not to use ('need a list of projects — use paperclip_list_projects'), along with an alternative tool name. This is excellent guidance for an AI agent.

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

paperclip_get_routineA
Read-only

Get a single routine by UUID, including its triggers and recent runs.

Args:

  • routineId: string — Routine UUID (example: "rtn_abc123")

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Routine object: id, name, agentId, triggers[], recentRuns[], concurrencyPolicy, catchUpPolicy.

Examples:

  • Use when: inspecting a routine's current triggers before modifying them

  • Don't use when: you need all routine IDs — use paperclip_list_routines first

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: routine not found → verify ID with paperclip_list_routines

ParametersJSON Schema
NameRequiredDescriptionDefault
routineIdYesRoutine UUID
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds value by listing specific fields returned and error conditions (401, 404). It does not contradict 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?

Well-organized with sections (Args, Returns, Examples, Error Handling). No redundant sentences; every part adds value.

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?

Though no output schema, description explicitly lists return fields (id, name, triggers, etc.). Error handling covers authentication and not-found cases. Sufficient for a single-resource retrieval 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 already has 100% coverage with descriptions. Description adds example values and default for response_format, but this is marginal beyond schema content.

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

Purpose5/5

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

The description clearly states it retrieves a single routine by UUID, and specifies included data (triggers, recent runs). It differentiates from the sibling paperclip_list_routines which lists all routines.

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

Usage Guidelines5/5

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

Explicitly provides when to use (inspecting triggers before modification) and when not to use (need all routine IDs, use paperclip_list_routines first). Includes example usage and error handling scenarios.

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

paperclip_get_run_logA
Read-only

⚠ Board-only: Read raw log bytes for a heartbeat run using a byte-offset cursor (not paginated).

Args:

  • runId: string — Heartbeat run UUID (example: "run_abc123")

  • offset: number (optional) — Byte offset to start reading from (default 0)

  • limitBytes: number (optional) — Max bytes to return (default 16384 = 16 KiB)

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Log slice object: { content: string, nextOffset: number, totalBytes: number }. Use nextOffset to continue reading.

Examples:

  • Use when: reading raw execution log output for a heartbeat run, advancing via nextOffset for subsequent slices

  • Don't use when: you need structured events — use paperclip_list_run_events with afterSeq cursor instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → board-only endpoint, requires board API key

  • 404: run not found → verify runId with paperclip_list_heartbeat_runs

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesHeartbeat run UUID
offsetYesByte offset into the log to start reading from (default 0)
limitBytesYesMaximum bytes to return (default 16384 = 16 KiB)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, and the description adds context about the byte-offset cursor, non-paginated nature, board-only restriction, and authentication requirements, complementing annotations without contradiction.

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

Conciseness5/5

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

The description is well-organized into clear sections (Args, Returns, Examples, Error Handling) with no redundant information, each sentence serves a purpose.

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?

All aspects—purpose, usage, parameters, return format, error codes, and continuation mechanism—are covered; no gaps given the tool's simplicity and lack of output 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 coverage is 100% (baseline 3), but the description explains each parameter's purpose, provides examples, and clarifies the return object structure, adding value 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 uses a specific verb 'read' and identifies the resource as 'raw log bytes for a heartbeat run', and explicitly distinguishes from sibling tool paperclip_list_run_events.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use ('reading raw execution log output for a heartbeat run') and when-not-to-use ('need structured events — use paperclip_list_run_events instead'), including error handling guidance.

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

paperclip_install_pluginA

⚠ Board-only: Install a plugin from npm into the Paperclip instance.

Args:

  • packageName: string — npm package name (e.g. '@paperclipai/plugin-hello-world-example') or local filesystem path when isLocalPath is true

  • version: string (optional) — Specific version to install (e.g. '1.2.3'); omit for latest

  • isLocalPath: boolean (optional) — Set true when packageName is a local filesystem path

Returns: Installation result object with pluginKey, packageName, status, and message confirming the install outcome.

Examples:

  • Use when: adding a new plugin capability to the Paperclip instance from the npm registry or a local build

  • Don't use when: the plugin is already installed — use paperclip_enable_plugin to re-activate a disabled plugin

Error Handling:

  • 400: install failed (npm error) → verify packageName is a valid npm package that exists in the registry

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human-user) API key

ParametersJSON Schema
NameRequiredDescriptionDefault
packageNameYesnpm package name to install (e.g. '@paperclipai/plugin-hello-world-example')
versionNoSpecific package version to install (e.g. '1.2.3'); omit for latest
isLocalPathNoSet true when packageName is a local filesystem path rather than an npm package name

TDQS

A4.4/5.0
Behavior4/5

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

Annotations (destructiveHint=false, openWorldHint=true) are consistent. Description adds error handling details (400, 401, 403), return format, and auth requirements. It doesn't mention reversibility or side effects, but overall provides good behavioral context beyond 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?

Well-structured with sections for warning, args, returns, examples, and error handling. Front-loaded with important board-only warning. No redundant or unnecessary sentences; every part earns its place.

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

Completeness4/5

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

Comprehensive for a tool with no output schema: describes return object, error codes, and parameter details. Distinguishes from sibling tools. Could add more about version validation but error section covers npm errors adequately.

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 baseline is 3. Description adds value by explaining that packageName can be a local filesystem path when isLocalPath is true, and that version is optional. However, this mostly restates schema descriptions without significant new insight.

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?

Description explicitly states the tool installs a plugin from npm into Paperclip instance. It specifies 'board-only' access and distinguishes from sibling tools like paperclip_enable_plugin for reactivating disabled plugins. The verb 'install' and resource 'plugin' are clear.

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

Usage Guidelines5/5

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

Provides explicit 'Use when' and 'Don't use when' statements, including a sibling tool alternative (paperclip_enable_plugin). Also mentions the tool requires a board API key. This gives clear guidance on appropriate usage.

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

paperclip_invoke_heartbeatA

Manually trigger an on-demand heartbeat run for an agent.

Args:

  • agentId: string — Agent UUID (example: "agt_abc123")

Returns: Returns the created heartbeat run record: runId, agentId, status, startedAt.

Examples:

  • Use when: waking an agent to process an urgent task without waiting for its next scheduled heartbeat

  • Don't use when: the agent has heartbeat disabled or wakeOnDemand:false — update config with paperclip_update_agent first

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: agent not found → verify ID with paperclip_list_agents

  • 409: agent is already running a heartbeat → wait for it to finish

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesAgent UUID

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate destructiveHint=false, but the description adds valuable behavioral context: it creates a heartbeat run record, returns status, and handles conflicts (409). It also mentions prerequisites like wakeOnDemand config. No contradiction with annotations.

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

Conciseness5/5

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

The description is well-structured with clear sections (Args, Returns, Examples, Error Handling). It is concise yet comprehensive, with no redundant sentences. Every sentence adds value for tool selection and invocation.

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?

Despite having only one parameter and no output schema, the description is complete: it covers when to use, error handling, return format, and prerequisites. This provides sufficient context for an AI agent to select and invoke the tool 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 has 100% coverage with description 'Agent UUID' for agentId. Description repeats this and provides an example ('agt_abc123') but does not add new semantic meaning beyond the schema. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Manually trigger an on-demand heartbeat run for an agent.' It uses a specific verb ('trigger') and resource ('heartbeat run'), and differentiates from siblings like paperclip_wakeup_agent and paperclip_list_heartbeat_runs by specifying manual on-demand invocation.

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

Usage Guidelines5/5

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

Includes explicit 'Use when' and 'Don't use when' sections, directing to paperclip_update_agent for agents with heartbeat disabled, and paperclip_list_agents for validation. Error handling also suggests alternative tools (e.g., paperclip_list_agents for 404). This provides clear when-to-use and when-not-to-use guidance.

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

paperclip_list_agent_config_revisionsA
Read-only

List the config revision history for an agent.

Args:

  • agentId: string — Agent UUID (example: "agt_abc123")

Returns: Pagination envelope { items: Revision[], total, count, offset, limit, has_more, next_offset } with up to 50 revisions per page.

Examples:

  • Use when: auditing recent config changes or finding a revisionId to roll back to

  • Don't use when: you want to roll back — use paperclip_rollback_agent_config with the target revisionId

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: agent not found → verify ID with paperclip_list_agents

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesAgent UUID
limitYesMax revisions per page (1–100, default 50)
offsetYesNumber of revisions to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true. The description adds pagination details (max 50 per page) and specific error codes (401, 404) which are beyond the annotation. No contradiction.

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

Conciseness5/5

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

The description is concise, well-structured, and front-loaded with a one-line summary. It efficiently covers Args, Returns, Examples, and Error Handling without unnecessary text.

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

Completeness5/5

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

For a list tool with pagination and 4 parameters, the description is complete: purpose, parameters, return format, usage examples, error handling, and cross-references to related siblings. No output schema needed.

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?

Input schema has 100% coverage with clear descriptions for all 4 parameters. The description adds a concrete agentId example and mentions the pagination limit, but does not significantly enhance understanding beyond the schema.

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

Purpose5/5

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

The description clearly states 'List the config revision history for an agent.' It uses a specific verb and resource, and distinguishes itself from the sibling tool paperclip_rollback_agent_config by explicitly saying when not to use it.

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

Usage Guidelines5/5

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

The 'Examples' section explicitly provides when to use (auditing, finding revisionId) and when not to use (for rollback, use paperclip_rollback_agent_config). Error handling further guides on authentication and agent ID verification.

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

paperclip_list_agentsA
Read-only

List all agents in the current company.

Returns: Pagination envelope { items: Agent[], total, count, offset, limit, has_more, next_offset } with up to 50 agents per page (default, max 100).

Examples:

  • Use when: resolving an agent name to a UUID before assigning an issue or invoking a heartbeat

  • Don't use when: you need full agent details — use paperclip_get_agent with the resolved ID

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → verify PAPERCLIP_COMPANY_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
limitYesMax agents per page (1–100, default 50)
offsetYesNumber of agents to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint), the description details pagination behavior, return envelope structure, and error codes. No contradictions with annotations.

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

Conciseness5/5

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

Three concise paragraphs: purpose, return format, usage guidance with errors. No wasted words, front-loaded key details.

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?

Complete for a list tool: explains return shape, pagination limits, and error conditions. No output schema is needed given the thorough textual description.

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 baseline is 3. The description adds no additional parameter semantics beyond the schema, but is adequate.

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

Purpose5/5

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

The description clearly states it lists agents in the current company. Examples provide specific use cases and differentiate from similar tools like paperclip_get_agent.

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

Usage Guidelines5/5

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

Explicit 'Use when' and 'Don't use when' sections guide the agent to appropriate contexts, including a direct sibling alternative (paperclip_get_agent). Error handling adds further clarity.

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

paperclip_list_approval_commentsA
Read-only

List comments on an approval request.

Args:

  • approvalId: string — Approval UUID (example: "apr_abc123")

Returns: Pagination envelope { items: Comment[], total, count, offset, limit, has_more, next_offset }. Each item: id, body, authorId, authorType, createdAt.

Examples:

  • Use when: reading board feedback before resubmitting an approval

  • Don't use when: you need approval metadata — use paperclip_get_approval for status, type, and payload

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: approval not found → verify ID with paperclip_list_approvals

ParametersJSON Schema
NameRequiredDescriptionDefault
approvalIdYesApproval UUID
limitYesMax comments per page (1–100, default 50)
offsetYesNumber of comments to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.7/5.0
Behavior5/5

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

Adds detailed return structure (pagination envelope) and error handling (401, 404) beyond the readOnlyHint annotation. No contradictions.

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?

Very concise and well-structured: purpose, Args, Returns, Examples, Error Handling. Every sentence adds value without fluff.

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

Completeness5/5

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

Covers all necessary aspects: return format, pagination, error codes, and usage examples. No output schema required since return is explained.

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

Parameters3/5

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

Schema description coverage is 100% with good descriptions. The description does not add extra semantic details for parameters beyond what is already 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?

The description clearly states 'List comments on an approval request' with a specific verb and resource. It distinguishes itself from siblings like 'paperclip_add_approval_comment' and 'paperclip_get_approval'.

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

Usage Guidelines5/5

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

Provides explicit 'Use when' and 'Don't use when' examples, including a direct alternative: 'use paperclip_get_approval for status, type, and payload'.

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

paperclip_list_approval_issuesA
Read-only

List issues linked to a specific approval request.

Args:

  • approvalId: string — Approval UUID (example: "appr_abc123")

  • limit: integer (optional) — Max issues per page (1–100, default 50)

  • offset: integer (optional) — Number of issues to skip (default 0)

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Pagination envelope { items: Issue[], total, count, offset, limit, has_more, next_offset }. Each item: id, identifier, title, status, priority, projectId.

Examples:

  • Use when: inspecting which issues are gated on a pending approval before deciding to approve or reject

  • Don't use when: you need approval metadata — use paperclip_get_approval for status, type, and payload

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: approval not found → verify ID with paperclip_list_approvals

ParametersJSON Schema
NameRequiredDescriptionDefault
approvalIdYesApproval UUID
limitYesMax issues per page (1–100, default 50)
offsetYesNumber of issues to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint=true. Description adds return format details (pagination envelope with fields), error handling (401, 404), and explains output format options. No contradictions with annotations.

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

Conciseness5/5

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

Well-structured with clear sections: brief intro, Args table, Returns, Examples, Error Handling. Each section adds value without redundancy. Information is well-organized and easy to parse.

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

Completeness5/5

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

Given no output schema, description fully documents return structure (pagination envelope, item fields). Covers error cases and parameter constraints. Provides context for when to use, making it self-contained.

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 baseline is 3. Description repeats param info but incorrectly states limit, offset, response_format are optional when schema marks them required. This misleads about parameter optionality. Adds example value for approvalId, which is helpful, but the error reduces reliability.

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?

Clearly states it lists issues linked to a specific approval request. Uses specific verb 'List' and resource 'issues linked to approval', distinguishing it from generic list_issues and get_approval.

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

Usage Guidelines5/5

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

Explicitly provides use-case examples: 'Use when inspecting which issues are gated on a pending approval before deciding to approve or reject' and 'Don't use when you need approval metadata — use paperclip_get_approval instead'. Offers clear guidance on alternatives.

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

paperclip_list_approvalsA
Read-only

List approval requests for the current company.

Args:

  • status: string (optional) — Comma-separated status filter (example: "pending,approved")

Returns: Pagination envelope { items: Approval[], total, count, offset, limit, has_more, next_offset }. Each item: id, type, status, payload, requestedByAgentId, createdAt.

Examples:

  • Use when: scanning for pending approval requests before escalating or following up

  • Don't use when: you need a single approval's details — use paperclip_get_approval instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → verify PAPERCLIP_COMPANY_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by status (e.g. 'pending,approved')
limitYesMax approvals per page (1–100, default 50)
offsetYesNumber of approvals to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already mark readOnlyHint=true, so the description adds value by detailing pagination, filtering, and error responses. It does not discuss rate limits or other side effects, but overall adequately discloses behavior beyond annotations.

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

Conciseness4/5

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

Description is well-structured with separate sections for purpose, arguments, returns, examples, and error handling. It is not overly verbose, though some sections could be slightly condensed.

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?

Despite lacking an output schema, the description fully explains the return envelope and item fields. Together with error handling and usage guidance, it provides a complete picture for the agent.

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 baseline is 3. The description adds useful context: status is comma-separated with an example, and response_format details are clear. This elevates the score above baseline.

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

Purpose5/5

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

The description clearly states it lists approval requests for the current company, using specific verbs and resources. It distinguishes itself from the sibling tool paperclip_get_approval in the 'Don't use when' section.

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

Usage Guidelines5/5

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

Explicit when-to-use scenario (scanning pending approvals before escalation) and when-not-to-use (for single approval details, use paperclip_get_approval). Error handling also provides guidance on authentication and permission issues.

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

paperclip_list_attachmentsA
Read-only

List all attachments on an issue.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

  • limit: number — Max attachments per page (1–100, default 50)

  • offset: number — Number of attachments to skip (default 0)

  • response_format: 'markdown' | 'json' — Output format (default 'markdown')

Returns: Pagination envelope { items: Attachment[], total, count, offset, limit, has_more, next_offset }. Each item: id, filename, mimeType, size, createdAt.

Examples:

  • Use when: discovering attachment IDs before downloading or deleting a file

  • Don't use when: you already have the attachment UUID — use paperclip_download_attachment directly

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: issue not found → verify ID with paperclip_list_issues

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-21)
limitYesMax attachments per page (1–100, default 50)
offsetYesNumber of attachments to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true. The description adds pagination details, output format options, response structure (pagination envelope with item fields), and error handling (401, 404). No contradictions.

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

Conciseness5/5

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

The description is well-structured with sections for args, returns, examples, and error handling. It is concise yet covers all necessary details without fluff.

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

Completeness5/5

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

No output schema, but the description fully explains the return format: 'Pagination envelope { items: Attachment[], total, count, offset, limit, has_more, next_offset }' and item fields. Error handling is also covered. Complete for this tool.

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 baseline is 3. However, the description adds value by explaining the response structure and pagination behavior, which is not in the schema. It also provides examples and default values.

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

Purpose5/5

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

The description clearly states 'List all attachments on an issue', specifying the verb and resource. It distinguishes itself from sibling tools like paperclip_download_attachment and paperclip_delete_attachment.

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

Usage Guidelines5/5

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

Explicit guidance: 'Use when: discovering attachment IDs before downloading or deleting a file' and 'Don't use when: you already have the attachment UUID — use paperclip_download_attachment directly'. This provides clear when-to-use and when-not-to-use with an alternative.

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

paperclip_list_commentsA
Read-only

List comments on an issue, with optional cursor-based incremental fetching.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

  • after: string (optional) — Comment UUID cursor; returns only comments after this ID (client-side workaround active — server after param returns 500)

  • order: "asc" | "desc" (optional) — Sort order (default: asc)

  • limit: number (optional) — Max comments per page (1–100, default 50)

  • offset: number (optional) — Number of comments to skip (default 0)

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Pagination envelope { items: Comment[], total, count, offset, limit, has_more, next_offset }. When after is used, total reflects the filtered (post-cursor) count.

Examples:

  • Use when: reading new @-mention comments since the last heartbeat using the after cursor

  • Don't use when: you need a single comment by ID — use paperclip_get_comment instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: issue not found → verify ID with paperclip_list_issues

  • 500: server error on the after cursor path → tool automatically applies a client-side workaround

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-21)
afterNoComment ID cursor — returns only comments posted after this ID. Note: the server-side `after` param is broken (returns 500); this tool implements a client-side workaround.
orderNoSort order (default: asc)
limitYesMax comments per page (1–100, default 50)
offsetYesNumber of comments to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.9/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=true), the description reveals behavioral traits like the client-side workaround for the broken server-side after parameter, error handling for 401, 404, 500, and the behavior of the total field when after is used. This adds significant value.

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

Conciseness5/5

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

The description is well-structured with clear sections: main sentence, arguments, returns, examples, error handling. It is front-loaded and every sentence adds value without being verbose.

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

Completeness5/5

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

Given the complexity (6 parameters, pagination, cursor-based fetching), the description covers purpose, parameters, return envelope, examples, and error scenarios. No output schema exists, but the return format is described adequately. It is sufficiently complete for an agent to use correctly.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds extra context: explains the after parameter's workaround, the behavior of total with after, and provides examples of usage. This merits a score above baseline.

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

Purpose5/5

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

The description clearly states the tool lists comments on an issue, with optional cursor-based incremental fetching. It distinguishes from sibling tools like paperclip_get_comment (single comment retrieval) and paperclip_add_comment (adding comments).

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

Usage Guidelines5/5

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

The description provides explicit when-to-use (reading new @-mention comments using the after cursor) and when-not-to-use (for a single comment by ID, use paperclip_get_comment). This directly guides the agent in tool selection.

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

paperclip_list_companiesA
Read-only

⚠ Board-only: List all companies accessible to the authenticated board user.

Args:

  • limit: number (optional) — Max companies per page (1–100, default 50)

  • offset: number (optional) — Number of companies to skip (default 0)

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Pagination envelope { items: Company[], total, count, offset, limit, has_more, next_offset }. Each item: id, name, description, status, issuePrefix, budgetMonthlyCents, createdAt.

Examples:

  • Use when: discovering all companies on the board before looking up a specific companyId

  • Don't use when: you already have the companyId — use paperclip_get_company instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: board key required → this endpoint requires board-level authentication

ParametersJSON Schema
NameRequiredDescriptionDefault
limitYesMax companies per page (1–100, default 50)
offsetYesNumber of companies to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.9/5.0
Behavior5/5

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

Annotations indicate readOnlyHint true, and description adds board-only restriction, pagination details, and error cases. No contradictions; adds significant context beyond 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?

Well-structured with sections, front-loaded warning, and concise sentences. Every part adds value without redundancy.

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

Completeness5/5

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

No output schema, but description fully explains return structure (pagination envelope with fields). Covers error handling, examples, and usage guidance completely.

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?

Input schema has 100% coverage, so baseline 3. Description repeats schema details but adds examples and context like output format and pagination envelope, earning a 4.

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?

Clearly states it lists all companies accessible to the authenticated board user, with specific verb and resource. Differentiation from paperclip_get_company is explicit.

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

Usage Guidelines5/5

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

Provides explicit when to use (discovering all companies) and when not to use (if companyId known, use get_company). Also includes error handling for authentication issues.

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

paperclip_list_company_skillsA
Read-only

List all skills installed at the company level.

Returns: Pagination envelope { items: Skill[], total, count, offset, limit, has_more, next_offset } with up to 50 skills per page.

Examples:

  • Use when: checking which skills are available before syncing them to an agent

  • Don't use when: you need an agent's current skill set — use paperclip_get_agent and check adapterConfig

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → verify PAPERCLIP_COMPANY_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
limitYesMax skills per page (1–100, default 50)
offsetYesNumber of skills to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.5/5.0
Behavior4/5

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

Describes return format (pagination envelope) and states it returns up to 50 skills per page. Error handling adds context. Annotations already declare readOnlyHint, so description adds useful detail beyond 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?

Very concise: one-line intro, structured return, usage examples, and error handling. No wasted words, each sentence serves a purpose.

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

Completeness5/5

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

For a simple listing tool with pagination, the description covers purpose, when to use, return structure, and common errors. No missing elements given the low complexity.

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 schema already describes parameters. Description does not repeat parameter details but reinforces pagination behavior (up to 50 skills per page). Adequate but no significant added value beyond schema.

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

Purpose5/5

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

The description clearly states 'List all skills installed at the company level', using a specific verb and resource. It distinguishes from sibling tool paperclip_get_agent by noting when not to use this tool.

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

Usage Guidelines5/5

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

Provides explicit 'Use when' and 'Don't use when' with a named alternative (paperclip_get_agent). Also includes error handling tips for authentication and permission issues.

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

paperclip_list_documentsA
Read-only

List all documents attached to an issue (e.g. plan, notes).

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

Returns: Pagination envelope { items: DocumentStub[], total, count, offset, limit, has_more, next_offset }. Body not included — use paperclip_get_document.

Examples:

  • Use when: discovering which document keys exist on an issue before reading or updating one

  • Don't use when: you already know the key — use paperclip_get_document directly

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: issue not found → verify ID with paperclip_list_issues

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-21)
limitYesMax documents per page (1–100, default 50)
offsetYesNumber of documents to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, but description adds value by detailing return format (pagination envelope with DocumentStub[]), mentioning body not included, and listing error codes. No contradictions.

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?

Description is well-structured with sections (Args, Returns, Examples, Error Handling) and is concise at around 100 words. Every sentence adds useful 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 list tool with 4 parameters and no output schema, the description explains pagination, return structure, and error handling. Could clarify that default values exist, but overall 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 100% so baseline is 3. Description's Args section only repeats parameter names and adds an example for issueId, adding marginal value beyond schema's existing descriptions.

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

Purpose5/5

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

The description clearly states it lists all documents attached to an issue, using specific verb 'list' and resource 'documents attached to an issue'. It distinguishes from siblings like paperclip_get_document by noting it returns only keys, not body.

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

Usage Guidelines5/5

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

Explicit when-to-use ('discovering which document keys exist') and when-not-to-use ('already know the key – use paperclip_get_document directly') are provided, giving clear decision criteria.

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

paperclip_list_feedback_tracesA
Read-only

⚠ Board-only: List feedback traces for the company, with optional filters for type, vote, status, project, issue, date range, and payload inclusion.

Args:

  • companyId: string — Company UUID

  • targetType: string (optional) — Filter by target type

  • vote: string (optional) — Filter by vote value

  • status: string (optional) — Filter by trace status

  • projectId: string (optional) — Filter by project UUID

  • issueId: string (optional) — Filter by issue ID

  • from: string (optional) — ISO 8601 datetime lower bound

  • to: string (optional) — ISO 8601 datetime upper bound

  • sharedOnly: boolean (optional) — Return only shared traces

  • includePayload: boolean (optional) — Include full trace payload

  • response_format: 'markdown' | 'json' (optional, default: markdown)

  • limit: number (optional) — Max per page, 1–100 (default 50)

  • offset: number (optional) — Items to skip (default 0)

Returns: Pagination envelope { items: FeedbackTrace[], total, count, offset, limit, has_more, next_offset }.

Examples:

  • Use when: auditing feedback across the company or filtering by issue, vote, or date range

  • Don't use when: you need traces for a single issue — use paperclip_list_issue_feedback_traces

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → board-only endpoint, requires board API key

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany UUID
targetTypeNoFilter by target type (e.g. 'issue', 'comment')
voteNoFilter by vote value (e.g. 'up', 'down')
statusNoFilter by trace status (e.g. 'pending', 'resolved')
fromNoISO 8601 datetime — return traces created at or after this timestamp
toNoISO 8601 datetime — return traces created at or before this timestamp
sharedOnlyNoWhen true, return only traces marked as shared
includePayloadNoWhen true, include full trace payload in response
projectIdNoFilter by project UUID
issueIdNoFilter by issue ID or identifier
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown
limitYesMax traces per page (1–100, default 50)
offsetYesNumber of traces to skip (default 0)

TDQS

A5/5.0
Behavior5/5

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

Disclosures beyond annotations include pagination details (limit, offset, has_more, next_offset), board-only endpoint requiring board API key, and error codes with explanations. No contradiction with annotations.

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

Conciseness5/5

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

Description is well-organized with sections: summary, args, returns, examples, error handling. No unnecessary detail, front-loaded with warning. Efficient and clear.

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

Completeness5/5

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

Given 13 parameters, pagination, and multiple filters, the description covers usage, all parameters, return envelope, and error handling. No output schema, but return format is described.

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

Parameters5/5

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

Schema coverage is 100%, but description adds structured parameter list with defaults, constraints, and formats (e.g., ISO 8601 for dates, 1-100 for limit), enhancing clarity.

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

Purpose5/5

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

The description clearly states the tool lists feedback traces for a company with optional filters. It distinguishes from the sibling tool paperclip_list_issue_feedback_traces by explicitly advising against using it for a single issue.

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

Usage Guidelines5/5

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

Includes explicit 'Use when' and 'Don't use when' examples, points to alternative tool, and mentions board-only restriction and error handling, providing clear guidance.

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

paperclip_list_goalsA
Read-only

List all goals for the current company.

Args:

  • limit: integer (optional) — Max goals per page, 1–100 (default 50)

  • offset: integer (optional) — Skip N goals for pagination (default 0)

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Pagination envelope { items: Goal[], total, count, offset, limit, has_more, next_offset } with up to 50 goals per page (default, max 100).

Examples:

  • Use when: finding the goalId to link when creating a new issue or project

  • Don't use when: you need a single goal's full details — use paperclip_get_goal instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → verify PAPERCLIP_COMPANY_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
limitYesMax goals to return per page (1–100, default 50)
offsetYesNumber of goals to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already set readOnlyHint=true, and the description adds behavior traits like pagination details (limit, offset, has_more, next_offset), default output format, and error handling for 401 and 403. No contradictions with annotations.

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

Conciseness5/5

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

The description is concise and well-structured with clear sections for args, returns, examples, and error handling. Every sentence adds value without redundancy.

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

Completeness5/5

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

For a list tool with three parameters and no output schema, the description thoroughly covers pagination behavior, return envelope, examples, and error handling, making it fully self-contained for an agent to use correctly.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds usage context like 'human-readable' for markdown and explicit range 1–100 for limit, but does not go beyond what the schema already documents for all three parameters.

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

Purpose5/5

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

The description clearly states 'List all goals for the current company' with a specific verb and resource, and distinguishes from the sibling tool paperclip_get_goal for single goal retrieval.

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

Usage Guidelines5/5

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

The description provides explicit use cases: 'Use when: finding the goalId to link when creating a new issue or project' and 'Don't use when: you need a single goal's full details — use paperclip_get_goal instead'.

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

paperclip_list_heartbeat_runsA
Read-only

⚠ Board-only: List heartbeat runs for the company, optionally filtered by agent.

Args:

  • companyId: string — Company UUID (example: "53caad5d-05d6-469d-b6eb-8961a71b615e")

  • agentId: string (optional) — Filter runs to a specific agent UUID (example: "agt_abc123")

  • limit: number (optional) — Max runs per page, 1–100 (default 50)

  • offset: number (optional) — Number of runs to skip (default 0)

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Pagination envelope { items: HeartbeatRun[], total, count, offset, limit, has_more, next_offset }. Each item: id, agentId, status, startedAt, finishedAt.

Examples:

  • Use when: auditing recent agent execution runs or diagnosing agent heartbeat failures

  • Don't use when: you need the raw event stream for a specific run — use paperclip_list_run_events instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → board-only endpoint, requires board API key

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany UUID
agentIdNoFilter by agent UUID (optional) — omit to list runs across all agents
limitYesMax runs per page (1–100, default 50)
offsetYesNumber of runs to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.6/5.0
Behavior5/5

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

Disclosures include board-only auth requirement, pagination behavior, error handling (401, 403), and return format options. Annotations already indicate readOnlyHint, so no contradiction.

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?

Well-structured with sections for purpose, parameters, returns, examples, and error handling. A bit lengthy but each part adds value.

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?

Considering 5 parameters, no output schema, and many siblings, the description covers all essential aspects: purpose, usage, parameters (with examples), return envelope, error codes, and alternative 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 coverage is 100% and descriptions are already comprehensive. The tool description adds examples and context but does not significantly enhance parameter 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 clearly states 'List heartbeat runs' with specific resource and filtering options. It distinguishes from sibling 'paperclip_list_run_events' by noting when not to use it.

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

Usage Guidelines5/5

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

Explicitly provides when to use (auditing runs, diagnosing failures) and when not to use (raw event stream) with alternative tool named. Also warns about board-only access.

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

paperclip_list_issue_feedback_tracesA
Read-only

⚠ Board-only: List feedback traces scoped to a single issue, with optional filters.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

  • targetType: string (optional) — Filter by target type (example: "comment")

  • vote: string (optional) — Filter by vote value (example: "up", "down")

  • status: string (optional) — Filter by trace status (example: "pending", "resolved")

  • from: string (optional) — ISO 8601 datetime lower bound (createdAt >=)

  • to: string (optional) — ISO 8601 datetime upper bound (createdAt <=)

  • sharedOnly: boolean (optional) — Return only shared traces

  • includePayload: boolean (optional) — Include full trace payload in response

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

  • limit: number (optional) — Max traces per page, 1–100 (default 50)

  • offset: number (optional) — Number of traces to skip (default 0)

Returns: Pagination envelope { items: FeedbackTrace[], total, count, offset, limit, has_more, next_offset }.

Examples:

  • Use when: inspecting all feedback traces attached to a specific issue

  • Don't use when: you need traces across the company — use paperclip_list_feedback_traces instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → board-only endpoint, requires board API key

  • 404: issue not found → verify issueId with paperclip_list_issues

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-42)
targetTypeNoFilter by target type (e.g. 'issue', 'comment')
voteNoFilter by vote value (e.g. 'up', 'down')
statusNoFilter by trace status (e.g. 'pending', 'resolved')
fromNoISO 8601 datetime — return traces created at or after this timestamp
toNoISO 8601 datetime — return traces created at or before this timestamp
sharedOnlyNoWhen true, return only traces marked as shared
includePayloadNoWhen true, include full trace payload in response
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown
limitYesMax traces per page (1–100, default 50)
offsetYesNumber of traces to skip (default 0)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description's mention of board-only scope and error handling (auth, permissions) adds useful context beyond annotations. It also describes the pagination envelope. No contradiction with annotations.

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

Conciseness4/5

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

The description is well-structured with clear sections (Args, Returns, Examples, Error Handling). It is sufficiently detailed without being overly verbose, though some parameter repetitions could be trimmed.

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

Completeness5/5

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

Given the 11 parameters and no output schema, the description comprehensively covers returns (pagination envelope), error handling (401, 403, 404), and filtering options. It provides complete context for an agent to use the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add new meaning beyond what the schema already provides; it essentially repeats the parameter descriptions and examples. Therefore, no extra value for parameter semantics.

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

Purpose5/5

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

The description clearly states the tool lists feedback traces scoped to a single issue with optional filters. It distinguishes from the sibling paperclip_list_feedback_traces by specifying scoping, and the 'Don't use when' section explicitly differentiates usage.

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

Usage Guidelines5/5

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

The description provides explicit 'Use when' and 'Don't use when' examples, including a direct reference to the alternative sibling tool paperclip_list_feedback_traces. This gives clear guidance on when to invoke this tool versus others.

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

paperclip_list_issuesA
Read-only

List issues for the current company with filtering and pagination.

Args:

  • status: string (optional) — Comma-separated statuses (example: "todo,in_progress")

  • assigneeAgentId: string (optional) — Filter by assignee agent UUID (example: "agt_abc")

  • projectId: string (optional) — Filter by project UUID

  • goalId: string (optional) — Filter by goal UUID

  • labelId: string (optional) — Filter by label UUID

  • q: string (optional) — Full-text search query (example: "auth bug")

  • limit: integer (optional) — Max results to return, 1–100 (default 50)

  • offset: integer (optional) — Skip N results for pagination (default 0)

Returns: Pagination envelope { items: Issue[], total, count, offset, limit, has_more, next_offset } with up to 50 issues per page (default, max 100).

Examples:

  • Use when: scanning the board for todo issues assigned to a specific agent

  • Don't use when: you need a single issue's full details — use paperclip_get_issue instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → verify PAPERCLIP_COMPANY_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoComma-separated status values (e.g. 'todo,in_progress')
assigneeAgentIdNoFilter by assignee agent ID
projectIdNoFilter by project ID
goalIdNoFilter by goal ID
labelIdNoFilter by label ID
qNoFull-text search query
limitYesMaximum number of issues to return (1–100, default 50)
offsetYesNumber of issues to skip before returning results (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already set readOnlyHint=true, and description adds details on pagination envelope, result limits, and error codes. No contradictions.

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?

Well-structured with sections for Args, Returns, Examples, Error Handling. However, it redundantly restates parameter descriptions that are already in the schema, slightly reducing conciseness.

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?

Comprehensive for a list tool with many filters and pagination. Describes return format (pagination envelope) despite no output schema. Includes error handling and practical examples.

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 has 100% coverage; description repeats most parameter descriptions verbatim but adds example values and usage context like comma-separated status. Does not significantly enhance beyond 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?

Clearly states 'List issues for the current company with filtering and pagination.' Distinguishes from sibling 'paperclip_get_issue' which retrieves a single issue. Verb+resource+scope are specific.

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

Usage Guidelines5/5

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

Explicitly provides 'Use when' and 'Don't use when' examples, including the alternative tool name. Also covers error handling for common auth/permission issues.

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

paperclip_list_labelsA
Read-only

List all labels defined for the current company.

Args:

  • limit: number — Max labels per page (1–100, default 50)

  • offset: number — Number of labels to skip (default 0)

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Pagination envelope { items: Label[], total, count, offset, limit, has_more, next_offset }. Each item: id, name, color (hex), createdAt.

Examples:

  • Use when: bootstrapping the label taxonomy at the start of a run to build a name→UUID cache

  • Don't use when: you already have the label UUID — pass it directly to the relevant tool

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → verify PAPERCLIP_COMPANY_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
limitYesMax labels per page (1–100, default 50)
offsetYesNumber of labels to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds behavioral details about pagination (has_more, next_offset) and error handling (401, 403), which are beyond the annotations. No contradiction.

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

Conciseness5/5

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

The description is well-structured with clear sections (Args, Returns, Examples, Error Handling). It is concise without unnecessary verbosity, using bullet points for readability.

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?

Despite lacking an output schema, the description fully documents the return structure (pagination envelope with fields) and error handling. All parameters are explained. This is complete for a list tool with good annotations.

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 schema already documents all parameters. The description adds slight extra context like 'markdown (default, human-readable)' and 'json (structured)', but essentially matches the schema. Not significantly beyond.

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

Purpose5/5

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

The description clearly states 'List all labels defined for the current company', which is a specific verb-resource combination. It is distinct from sibling tools like 'paperclip_create_label' by indicating it is a listing operation.

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

Usage Guidelines5/5

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

The description explicitly provides usage guidance with 'Use when: bootstrapping the label taxonomy...' and 'Don't use when: you already have the label UUID...', giving clear when-to-use and when-not-to-use scenarios.

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

paperclip_list_plugin_examplesA
Read-only

⚠ Board-only: List available example plugins that can be installed for reference.

Args:

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Array of example plugin descriptors: packageName, pluginKey, displayName, description, localPath, tag.

Examples:

  • Use when: discovering reference plugin implementations to understand the plugin API surface

  • Don't use when: you need the list of installed plugins — use paperclip_list_plugins instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human-user) API key

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatYesOutput format: 'markdown' (default) or 'json' (structured)markdown

TDQS

A4.5/5.0
Behavior4/5

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

Description adds value beyond readOnlyHint annotation by specifying authentication errors (401, 403) and the board-only restriction (requiring human-user API key). It also outlines the return structure.

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

Conciseness5/5

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

The description is well-structured with clear sections (warning, args, returns, examples, error handling). It is concise with no redundant sentences.

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?

Despite no output schema, the description fully specifies the return type (array of descriptors with fields) and covers error handling. The tool is a simple list operation, and the description is 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?

The single parameter response_format is fully described in the input schema (100% coverage). The description repeats this information without adding meaningful extra semantics, so baseline 3 is appropriate.

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

Purpose5/5

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

The description explicitly states the verb 'list', the resource 'example plugins', and the purpose 'for reference'. It distinguishes itself from sibling tool paperclip_list_plugins by noting 'available...that can be installed' vs. installed plugins.

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

Usage Guidelines5/5

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

Clear guidance is provided with explicit 'Use when' and 'Don't use when' sections, including a recommendation for the alternative (paperclip_list_plugins). Also includes a board-only requirement warning.

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

paperclip_list_pluginsA
Read-only

⚠ Board-only: List installed plugins for the Paperclip instance, with optional status filter.

Args:

  • status: enum (optional) — Filter by lifecycle status: installed | ready | disabled | error | upgrade_pending | uninstalled

  • limit: number (optional) — Max results per page (1–100, default 50)

  • offset: number (optional) — Number of records to skip (default 0)

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Pagination envelope { items: Plugin[], total, count, offset, limit, has_more, next_offset }. Each item: pluginKey, packageName, displayName, description, status, version.

Examples:

  • Use when: auditing which plugins are installed or filtering for plugins in error state

  • Don't use when: you need the full plugin detail (health, config) — use paperclip_get_plugin instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human-user) API key

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by plugin status (omit to return all statuses)
limitYesMax plugins per page (1–100, default 50)
offsetYesNumber of plugins to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, so the bar is lower. The description adds '⚠ Board-only' (required API key type) and error handling details (401, 403), which enrich transparency beyond annotations. No contradictions.

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?

Well-organized with sections (Args, Returns, Examples, Error Handling), but somewhat lengthy. Every sentence adds value, though it could be more concise by omitting redundant schema details. Good front-loading of key info.

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?

Despite no output schema, the description explains the pagination envelope and field names, filling the gap. Error handling covers auth and permission scenarios. Missing details like rate limits, but adequate for a list tool.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description repeats the enum values for status and defaults for limit/offset/response_format, adding no new semantic meaning beyond what the input schema 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?

The description clearly states 'List installed plugins for the Paperclip instance', specifying a concrete verb and resource. It distinguishes from siblings like paperclip_get_plugin by noting the optional status filter and referencing the alternative for full detail.

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

Usage Guidelines5/5

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

Explicit 'Use when' and 'Don't use when' sections guide the agent: use for auditing or filtering by error status, avoid when full plugin detail is needed (referring to paperclip_get_plugin). This is exemplary guidance.

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

paperclip_list_projectsA
Read-only

List all projects for the current company.

Args:

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Pagination envelope { items: Project[], total, count, offset, limit, has_more, next_offset }. Each item: id, name, status, goalId, createdAt.

Examples:

  • Use when: finding the projectId to link when creating a new issue

  • Don't use when: you need a project's workspaces — use paperclip_get_project or paperclip_list_workspaces

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → verify PAPERCLIP_COMPANY_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
limitYesMax projects per page (1–100, default 50)
offsetYesNumber of projects to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already show readOnlyHint=true; description adds return pagination envelope structure and error handling (401, 403) which inform agent behavior. Could mention ordering or scope beyond 'current company' but still adds value.

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?

Description is structured with clear sections (Args, Returns, Examples, Error Handling) but includes some redundancy (e.g., 'List all projects' and then 'Returns...'). Could be slightly tighter but is well organized.

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

Completeness5/5

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

Given no output schema, description provides full return envelope structure. Includes error handling and usage examples. All parameters are described in schema, and description adds extra usage guidance. Complete for an agent to use 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 covers all 3 parameters 100%, but description adds context like response_format meaning and default, and explains the pagination envelope (which is not in input schema). This compensates for missing output 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?

Description clearly states it lists projects for the current company, with specific verb 'list' and resource 'projects'. It distinguishes from siblings like paperclip_get_project (single project) and paperclip_list_workspaces (workspaces vs projects) via the 'Don't use when' example.

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

Usage Guidelines5/5

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

Provides explicit 'Use when' (finding projectId to link issues) and 'Don't use when' (needing workspaces, with alternative tool names). This differentiates from many sibling tools.

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

paperclip_list_routine_runsA
Read-only

List historical runs for a routine, ordered most-recent first.

Args:

  • routineId: string — Routine UUID (example: "rtn_abc123")

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Pagination envelope { items: Run[], total, count, offset, limit, has_more, next_offset }. Each item: id, routineId, status, startedAt, finishedAt, triggerId.

Examples:

  • Use when: auditing whether a scheduled routine has been firing and completing successfully

  • Don't use when: you need the routine's triggers or settings — use paperclip_get_routine instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: routine not found → verify ID with paperclip_list_routines

ParametersJSON Schema
NameRequiredDescriptionDefault
routineIdYesRoutine UUID
limitYesMax runs per page (1–100, default 50)
offsetYesNumber of runs to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.7/5.0
Behavior5/5

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

Annotations indicate readOnlyHint=true, consistent with listing historical runs. Description adds pagination envelope details, error handling (401, 404), and return structure. Contradiction: false.

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?

Concise, well-structured with Args, Returns, Examples, Error Handling sections. No wasted words, all sentences add value.

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

Completeness5/5

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

No output schema, but description explains pagination envelope and item fields. Also covers error handling. Complete for a list tool.

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

Parameters3/5

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

Schema coverage is 100%, so description adds minimal extra value beyond parameter descriptions. It clarifies routineId format and response_format options, but baseline is appropriate.

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

Purpose5/5

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

The description clearly states the tool lists historical runs for a routine, ordered most-recent first. It distinguishes from siblings like paperclip_list_routines (lists routines) and paperclip_get_run_log (likely retrieves a single run log).

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

Usage Guidelines5/5

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

Explicit use-case example: 'auditing whether a scheduled routine has been firing and completing successfully'. Explicit don't-use case: 'need routines triggers or settings — use paperclip_get_routine instead'. Excellent guidance.

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

paperclip_list_routinesA
Read-only

List all routines defined for the current company.

Returns: Pagination envelope { items: Routine[], total, count, offset, limit, has_more, next_offset }. Each item: id, name, agentId, concurrencyPolicy, catchUpPolicy, createdAt.

Examples:

  • Use when: finding routineIds before adding a trigger or checking routine status

  • Don't use when: you need a specific routine's triggers and run history — use paperclip_get_routine instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → verify PAPERCLIP_COMPANY_ID is correct

ParametersJSON Schema
NameRequiredDescriptionDefault
limitYesMax routines per page (1–100, default 50)
offsetYesNumber of routines to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already set readOnlyHint=true. Description adds pagination envelope details, error codes, and return fields, providing useful behavioral context beyond 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?

Well-structured with purpose, returns, examples, and error handling sections. Each sentence contributes value without redundancy.

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

Completeness5/5

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

Given no output schema, the description fully explains return format (pagination envelope with fields) and error conditions, making it self-contained for a list tool.

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

Parameters3/5

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

Schema coverage is 100% with each parameter already documented. The description does not add significant new meaning beyond what the schema 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?

The description clearly states 'List all routines defined for the current company' and distinguishes itself from the sibling `paperclip_get_routine` by explicitly stating when not to use it.

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

Usage Guidelines5/5

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

Provides explicit 'Use when' and 'Don't use when' sections, names the alternative tool, and includes error handling guidance for common HTTP status codes.

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

paperclip_list_run_eventsA
Read-only

⚠ Board-only: Stream events for a heartbeat run using an afterSeq cursor (not paginated — cursor-based).

Args:

  • runId: string — Heartbeat run UUID (example: "run_abc123")

  • afterSeq: number (optional) — Return events with seq > afterSeq to resume streaming (default: 0)

  • limit: number (optional) — Max events to return in one call (default 100)

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Array of run events (no pagination envelope — use afterSeq cursor for continuation). Each event: seq, type, data, createdAt.

Examples:

  • Use when: streaming execution events for a live or recently completed heartbeat run using the afterSeq cursor

  • Don't use when: you need raw log bytes — use paperclip_get_run_log with offset/limitBytes instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → board-only endpoint, requires board API key

  • 404: run not found → verify runId with paperclip_list_heartbeat_runs

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesHeartbeat run UUID
afterSeqNoReturn events with sequence number > afterSeq (cursor for streaming, default: 0 / start of run)
limitYesMax events to return (default 100) — note: cursor-based, not paginated
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint true, but the description adds specific behavioral details: cursor-based streaming, no pagination envelope, board-only auth requirements, and error codes with causes (401, 403, 404). This adds significant context beyond annotations.

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

Conciseness4/5

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

The description is well-structured with clear sections (header, args, returns, examples, error handling) but is somewhat lengthy; still, the information is efficiently organized and front-loaded.

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

Completeness5/5

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

Given no output schema, the description fully covers the return shape (array with seq, type, data, createdAt), error handling, auth requirements, and a clear alternative tool. It is complete for the tool's complexity.

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

Parameters3/5

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

Schema coverage is 100%, so the description adds minimal additional meaning. It restates defaults and examples but does not provide novel parameter details beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states it is for streaming events for a heartbeat run using a cursor, distinguishing it from raw log retrieval via paperclip_get_run_log. The verb 'stream events' and resource 'heartbeat run' are specific, and the not-paginated cursor-based nature is emphasized.

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

Usage Guidelines5/5

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

Explicit 'Use when' and 'Don't use when' sections with a named alternative (paperclip_get_run_log), plus board-only requirement and error handling conditions provide clear context for when this tool should and should not be used.

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

paperclip_list_secretsA
Read-only

⚠ Board-only: List secrets registered for a company. Returns metadata only — secret values are never included in any response.

Args:

  • companyId: string — Company UUID

  • limit: number (optional) — Max results per page (1–100, default 50)

  • offset: number (optional) — Number of records to skip (default 0)

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Pagination envelope { items: Secret[], total, count, offset, limit, has_more, next_offset }. Each item: id, companyId, name, provider, externalRef, latestVersion, description, createdByAgentId, createdByUserId, createdAt, updatedAt. Value field is never present.

Examples:

  • Use when: auditing which secrets are registered for a company or checking a specific secret's metadata

  • Don't use when: you need to rotate or update a secret — use paperclip_rotate_secret or paperclip_update_secret instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human-user) API key

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany UUID
limitYesMax secrets per page (1–100, default 50)
offsetYesNumber of secrets to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. Description adds that secret values are never returned and explains error conditions, but could provide more insight into pagination behavior or outcomes beyond the schema.

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

Conciseness5/5

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

Well-structured with clear sections (Args, Returns, Examples, Error Handling). Front-loaded with important caution about secrets. Every sentence is informative and concise.

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?

Completely covers the tool's purpose, parameters, return format (pagination envelope with field list), usage guidelines, and error scenarios. No missing context for a list operation.

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% with descriptions for all parameters. The description repeats these but adds no additional semantic meaning beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states it lists secrets for a company and returns only metadata. It distinguishes from siblings like rotate/update by specifying the action and never returning secret values.

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

Usage Guidelines5/5

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

Explicitly provides use cases (auditing, checking metadata) and when not to use (rotate/update) with specific tool names. Also includes error handling guidance for auth and permissions.

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

paperclip_list_workspacesA
Read-only

List all workspaces for a project.

Args:

  • projectId: string — Project UUID (example: "prj_abc123")

  • response_format: 'markdown' | 'json' (optional) — Output format (default: markdown)

Returns: Pagination envelope { items: Workspace[], total, count, offset, limit, has_more, next_offset }. Each item: id, cwd, repoUrl, projectId, createdAt.

Examples:

  • Use when: finding the workspace cwd or repoUrl before an agent starts executing in it

  • Don't use when: you need the project record — use paperclip_get_project which includes workspaces

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: project not found → verify ID with paperclip_list_projects

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject UUID
limitYesMax workspaces per page (1–100, default 50)
offsetYesNumber of workspaces to skip (default 0)
response_formatYesOutput format: 'markdown' (default, human-readable) or 'json' (structured)markdown

TDQS

A4.7/5.0
Behavior4/5

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

Annotations provide readOnlyHint and openWorldHint. Description adds pagination envelope details and error codes, which are useful beyond annotations. Does not contradict 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?

Well-structured with clear sections (header, args, returns, examples, error handling). Concise with no wasted words, front-loaded with main purpose.

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?

Even without output schema, description specifies the pagination envelope and item fields. Covers all parameters, return format, and error scenarios. No gaps for a list tool.

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 baseline is 3. Description adds value with example UUID for projectId, explanation of response_format enum, and return structure details. Exceeds basic schema info.

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

Purpose5/5

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

The description clearly states 'List all workspaces for a project' and provides specific use cases (finding workspace cwd or repoUrl). It distinguishes from sibling 'paperclip_get_project' which includes workspaces.

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

Usage Guidelines5/5

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

Explicitly states when to use ('finding the workspace cwd or repoUrl') and when not to use ('need the project record — use paperclip_get_project'). Includes error handling guidance for 401 and 404 responses.

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

paperclip_pause_agentA
Idempotent

Pause an agent, preventing it from starting new heartbeat runs.

Args:

  • agentId: string — Agent UUID (example: "agt_abc123")

Returns: Returns the updated agent object with status set to paused.

Examples:

  • Use when: temporarily stopping a runaway or misconfigured agent during incident response

  • Don't use when: you want to permanently stop an agent — use paperclip_terminate_agent (board-only, irreversible)

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: agent not found → verify ID with paperclip_list_agents

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesAgent UUID

TDQS

A4.7/5.0
Behavior4/5

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

Description explains the effect of pausing (prevents new heartbeat runs, sets status to paused) and returns updated agent object. Annotations already indicate idempotent and openWorldHint false, which are consistent. Could mention that already running heartbeats are unaffected, but overall clear.

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?

Structured with sections (Args, Returns, Examples, Error Handling), front-loaded main purpose, no unnecessary words. Every sentence provides value.

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

Completeness5/5

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

For a simple mutation tool with one parameter and no output schema, the description covers purpose, usage context, alternatives, error handling, and return value. Complete given the tool's simplicity.

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 provides 100% coverage with description 'Agent UUID'. Description adds value with example format 'agt_abc123' and context of use, but schema already describes the parameter adequately.

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

Purpose5/5

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

The description clearly states the verb 'pause' and resource 'agent', with specific effect 'preventing it from starting new heartbeat runs'. It distinguishes from sibling tools like paperclip_terminate_agent and paperclip_resume_agent.

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

Usage Guidelines5/5

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

Provides explicit examples: when to use ('temporarily stopping a runaway or misconfigured agent during incident response') and when not to use (for permanent stop, use paperclip_terminate_agent). Also includes error handling guidance for 401 and 404.

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

paperclip_preview_company_importA
Read-only

⚠ Board-only: Preview company import

Args:

  • companyId: string — Target company UUID

  • source: union — { type: 'inline', rootPath: string, files: Record<string,string> } or { type: 'github', url: string }

  • include: object — Which resource types to preview (company, agents, projects, issues, skills)

  • target: object — { mode: 'existing_company' | 'new_company', companyId: string } — must match the top-level companyId

  • agents: 'all' | string[] (optional) — Which agents to import (default: 'all')

  • collisionStrategy: 'rename' | 'skip' | 'replace' (optional) — Collision handling (default: rename)

  • selectedFiles: string[] (optional) — Subset of bundle files to process

Returns: Preview report (JSON only): { source, target, agents, projects, issues, skills, warnings, adapterOverrides }. Non-mutating — no changes are applied. Note: openWorldHint is false; if source.type is 'github', the API fetches external content.

Examples:

  • Use when: inspecting what an import would change before committing; also generates adapterOverrides for the apply step

  • Don't use when: you want to immediately apply — call paperclip_apply_company_import directly (preview is optional but recommended)

Error Handling:

  • 400: invalid bundle → check source files and rootPath

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: board key required → this endpoint requires board-level authentication

  • 404: company not found → verify ID with paperclip_list_companies

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesTarget company UUID for the import preview
sourceYesBundle source: 'inline' provides files in the request; 'github' fetches from a repo URL
includeYesWhich resource types to consider during the import (company, agents, projects, issues, skills)
targetYesImport destination
agentsYesWhich agents to import: literal 'all' or an array of agent URL keysall
collisionStrategyYesHow to handle name/key collisions: 'rename' (append suffix), 'skip' (leave existing), 'replace' (overwrite)rename
selectedFilesNoSubset of file paths from the bundle to process (omit for all files in the bundle)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false. The description adds 'Non-mutating — no changes are applied' and explains that if source.type is 'github', the API fetches external content. No contradictions.

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

Conciseness4/5

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

The description is longer but well-organized into sections (Args, Returns, Examples, Error Handling). It is slightly redundant with schema info, but the structure aids readability. Could be more concise, but earns its sentences.

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

Completeness5/5

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

Given no output schema, the description explains the return format (JSON with fields). Error handling covers common HTTP codes. The description also mentions the sibling tool for applying. All necessary context is present for correct agent usage.

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

Parameters4/5

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

Schema coverage is 100%, so parameters are well documented. The description adds integration context: e.g., target.companyId must match top-level companyId, collisionStrategy enum meanings, selectedFiles as a subset. This adds meaning beyond the schema, though schema already does heavy lifting.

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

Purpose5/5

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

The description clearly states 'Preview company import' and specifies that it's for inspecting what an import would change without applying. It distinguishes from the sibling tool 'paperclip_apply_company_import' by noting that preview is for inspection, not application.

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

Usage Guidelines5/5

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

Explicit when to use: 'inspecting what an import would change before committing'. Explicit when not to use: 'if you want to immediately apply — call paperclip_apply_company_import directly'. Also notes that preview is optional but recommended.

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

paperclip_rejectA
Destructive

⚠ Board-only: Reject a pending approval request with an optional reason.

Args:

  • approvalId: string — Approval UUID (example: "apr_abc123")

  • reason: string (optional) — Human-readable reason for rejection

Returns: Returns the updated approval with status:'rejected' and rejectedAt timestamp.

Examples:

  • Use when: denying a hire or budget request after board review (requires board API key)

  • Don't use when: you want the requester to revise and resubmit — use paperclip_request_revision instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human) API key

  • 404: approval not found → verify ID with paperclip_list_approvals

  • 422: approval is not in pending state → check current status with paperclip_get_approval

ParametersJSON Schema
NameRequiredDescriptionDefault
approvalIdYesApproval UUID
reasonNoReason for rejection

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark destructiveHint=true. Description adds that it returns updated approval with status 'rejected' and timestamp, plus error codes. Does not mention reversibility or side effects, but sufficient given annotation context.

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?

Well-structured with clear sections, examples, and error handling. Every sentence is useful and no fluff.

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

Completeness5/5

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

No output schema, but description explains return value and covers error codes. Provides complete context for a mutation tool with given annotations.

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 description adds example values and clarifies 'reason' is human-readable. Does not add substantial meaning beyond schema, but consistent.

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?

Clearly states it rejects a pending approval request with an optional reason. Specifically mentions 'board-only' and distinguishes from revision tool. Verb+resource is explicit.

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

Usage Guidelines5/5

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

Provides explicit 'Use when' and 'Don't use when' guidance, including alternative tool (paperclip_request_revision). Also specifies API key requirement.

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

paperclip_release_issueA

Release a checked-out issue back to the board without marking it done.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

Returns: Returns the updated issue object with executionRunId cleared.

Examples:

  • Use when: abandoning work mid-run due to a blocker or wake-mismatch; issue returns to assignable state

  • Don't use when: you finished the work — use paperclip_update_issue with status:'in_review' or 'done' instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: issue not found → verify ID with paperclip_list_issues

  • 409: issue is not checked out by the current agent → check current issue state with paperclip_get_issue

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-21)

TDQS

A4.7/5.0
Behavior4/5

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

Description discloses that the tool modifies state (clears executionRunId) and returns the updated issue object. Error handling details (401, 404, 409) add transparency beyond annotations, though no destructiveHint is explicitly given.

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?

Well-structured with sections for args, returns, examples, and error handling. No unnecessary text; every sentence adds value.

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

Completeness5/5

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

For a simple release operation with one parameter and no output schema, the description covers purpose, usage, errors, and return value completely, enabling correct agent invocation.

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% with one parameter. Description adds example value ('PAP-42') and context for verification with list_issues, enriching the parameter's semantics.

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

Purpose5/5

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

The description clearly states the tool releases a checked-out issue back to the board without marking it done, which is a specific verb+resource. It distinguishes from siblings like paperclip_checkout_issue and paperclip_update_issue.

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

Usage Guidelines5/5

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

Includes explicit 'Use when' and 'Don't use when' guidance, naming alternative tool paperclip_update_issue for marking done. Also provides error handling steps, making usage context clear.

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

paperclip_report_cost_eventA

Report an agent's token usage and cost event to Paperclip for budget tracking.

Args:

  • agentId: string — ID of the agent that incurred the cost (example: "agt_abc123")

  • provider: string — LLM provider name (example: "anthropic")

  • model: string — Model identifier (example: "claude-sonnet-4-6")

  • inputTokens: integer — Number of input tokens consumed

  • outputTokens: integer — Number of output tokens generated

  • costCents: number — Total cost in cents (non-negative)

  • occurredAt: string — ISO 8601 timestamp (example: "2026-04-16T12:00:00.000Z")

Returns: Returns the created cost event record: id, agentId, provider, model, costCents, occurredAt.

Examples:

  • Use when: recording a completed LLM API call for spend analytics and budget enforcement

  • Don't use when: you want a cost summary — use paperclip_get_cost_summary or paperclip_get_costs_by_agent

Error Handling:

  • 400: validation failure → check costCents ≥ 0, occurredAt is valid ISO 8601, tokens are integers

  • 401: authentication failed → check PAPERCLIP_API_KEY

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesID of the agent that incurred the cost
providerYesLLM provider name (e.g. anthropic, openai)
modelYesModel name (e.g. claude-sonnet-4-6)
inputTokensYesNumber of input tokens consumed
outputTokensYesNumber of output tokens generated
costCentsYesTotal cost in cents
occurredAtYesISO 8601 timestamp of when the cost was incurred

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false, so description does not need to repeat that. It adds value by detailing error conditions, validation requirements (costCents ≥0, valid ISO 8601), and the return structure. No contradictions.

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?

Description is well-organized with clear sections (Args, Returns, Examples, Don't use when, Error Handling). Each sentence adds unique value, no redundancy.

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 7-required-parameter tool with no output schema, the description covers all necessary aspects: purpose, parameters, return fields, usage guidance, and error handling. It is complete for reliable invocation.

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 parameters. Description adds examples for some fields (agentId, provider, model, occurredAt) and clarifies constraints (non-negative cost, integer tokens). This provides marginal extra value, justifying a score of 3.

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?

Description clearly states it reports token usage and cost events for budget tracking, with examples. Distinguishes from sibling tools like paperclip_get_cost_summary and paperclip_get_costs_by_agent.

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

Usage Guidelines5/5

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

Explicitly says when to use (recording a completed LLM API call) and when not to use (for cost summary, use alternatives). Provides error handling guidance for 400 and 401 errors.

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

paperclip_request_revisionA

⚠ Board-only: Request a revision on a pending approval, returning it to the requester for changes.

Args:

  • approvalId: string — Approval UUID (example: "apr_abc123")

  • feedback: string (optional) — Specific feedback on what needs to change

Returns: Returns the updated approval with status:'revision_requested'.

Examples:

  • Use when: asking an agent to revise a hire proposal before board approval (requires board API key)

  • Don't use when: you want to outright deny the request — use paperclip_reject instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human) API key

  • 404: approval not found → verify ID with paperclip_list_approvals

  • 422: approval is not in a revisable state → check current status with paperclip_get_approval

ParametersJSON Schema
NameRequiredDescriptionDefault
approvalIdYesApproval UUID
feedbackNoFeedback on what needs to change

TDQS

A4.9/5.0
Behavior5/5

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

Discloses board-only usage, required API key, and error handling for various HTTP statuses. Annotations (destructiveHint=false) are consistent; description adds significant context about state changes and permissions.

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?

Well-structured with clear sections (Args, Returns, Examples, Error Handling), front-loaded with purpose, and no unnecessary details.

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

Completeness5/5

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

Given no output schema, description explains return value and status. Covers error codes, required auth, and state constraints. Adequate for the tool's complexity.

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 covers both parameters with descriptions. Description adds example for approvalId format and clarifies feedback as optional, adding value beyond 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?

Clearly states it requests a revision on a pending approval, returning it to the requester. Distinguishes from sibling 'paperclip_reject' by explicitly saying when not to use it.

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

Usage Guidelines5/5

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

Provides explicit use cases (e.g., a hire proposal before board approval) and when not to use (outright denial, use paperclip_reject). Also mentions board-only requirement and API key needs.

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

paperclip_resubmit_approvalA

Resubmit an approval request after addressing revision feedback.

Args:

  • approvalId: string — Approval UUID (example: "apr_abc123")

  • comment: string (optional) — Summary of changes made since last submission

Returns: Returns the updated approval with status:'pending' for board re-review.

Examples:

  • Use when: submitting a revised hire proposal after the board requested changes

  • Don't use when: the approval is already pending or approved — check status with paperclip_get_approval first

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: approval not found → verify ID with paperclip_list_approvals

  • 422: approval is not in revision_requested state → check current status with paperclip_get_approval

ParametersJSON Schema
NameRequiredDescriptionDefault
approvalIdYesApproval UUID
commentNoSummary of changes made

TDQS

A4.9/5.0
Behavior5/5

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

Discloses key behavior: returns updated approval with status 'pending', error codes (401, 404, 422) and their meanings. Annotations show destructiveHint false, which is consistent. No contradictions.

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?

Well-structured with clear sections (Args, Returns, Examples, Error Handling). Every sentence adds value, no fluff. Front-loaded with the primary action.

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

Completeness5/5

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

Given no output schema, the description fully explains the return value. It covers prerequisites, state checks, and error scenarios. For a simple two-parameter tool, this is complete.

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% and both parameters have descriptions. The description adds an example format for approvalId ('apr_abc123') and clarifies that comment is optional and its purpose. This adds value 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?

Description clearly states the action 'Resubmit an approval request after addressing revision feedback', specifying the verb and resource. It distinguishes from siblings like paperclip_approve, paperclip_reject, and paperclip_request_revision by focusing on resubmission after revision.

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

Usage Guidelines5/5

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

Includes explicit 'Use when' and 'Don't use when' examples, directing to check status with paperclip_get_approval first. Error handling also guides on state mismatches, providing clear context for when to use this tool vs. others.

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

paperclip_resume_agentA
Idempotent

Resume a paused agent, allowing it to start new heartbeat runs.

Args:

  • agentId: string — Agent UUID (example: "agt_abc123")

Returns: Returns the updated agent object with status set to active.

Examples:

  • Use when: re-enabling an agent after pausing it for maintenance or incident response

  • Don't use when: the agent is not paused — check current status with paperclip_get_agent first

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: agent not found → verify ID with paperclip_list_agents

  • 422: agent is not in a paused state → check current status with paperclip_get_agent

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesAgent UUID

TDQS

A4.9/5.0
Behavior5/5

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

Discloses return type (updated agent object with status set to active), error handling codes (401, 404, 422) with corrective actions, and prerequisite state (agent must be paused). No contradictions with annotations (idempotentHint is reasonable).

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?

Concise yet comprehensive with clear sections (Args, Returns, Examples, Error Handling). Every sentence adds value; no redundancy.

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?

Complete for a simple tool: covers input, output, usage guidance, and error scenarios. No output schema needed as return is described.

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 covers param fully (100% coverage). Description adds an example value ('agt_abc123') and links param to error conditions, providing helpful context beyond 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?

Description clearly states the tool resumes a paused agent, using specific verb and resource. It effectively distinguishes from sibling tools like pause_agent or terminate_agent.

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

Usage Guidelines5/5

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

Provides explicit use cases ('re-enabling an agent after pausing it for maintenance or incident response') and when not to use ('if the agent is not paused'), with guidance to check status first using another tool.

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

paperclip_revoke_current_sessionA
Destructive

⚠ Board-only: Revoke the current board session token. WARNING: invalidates the token used to call this tool.

Returns: { ok: true } on success. The token used for this call is immediately invalidated.

Examples:

  • Use when: logging out a board session after completing administrative tasks

  • Don't use when: you only want to check who is logged in — use paperclip_get_current_user instead

Error Handling:

  • 401: authentication failed → the token may already be invalid

  • 404: no active session found → nothing to revoke

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

The description adds important behavioral context beyond the destructiveHint annotation: the token used for the call is immediately invalidated, and it includes specific error codes (401, 404) and their meanings. No contradiction with annotations.

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

Conciseness5/5

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

The description is concise yet comprehensive, with a clear warning, return value, usage examples, and error handling. Every sentence adds value without redundancy.

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

Completeness5/5

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

Given zero parameters, destructive annotation, and no output schema, the description fully covers the tool's behavior: what it does, side effects, return format, error handling, and usage constraints. No gaps remain.

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?

No parameters exist, so baseline is 4. The description correctly avoids adding parameter details, as none are needed.

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

Purpose5/5

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

The description explicitly states the tool revokes the current board session token, specifying 'Board-only' and differentiating from checking login status. The verb 'revoke' and resource 'current board session' are clear and distinct.

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

Usage Guidelines5/5

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

Provides explicit when-to-use ('logging out a board session after completing administrative tasks') and when-not-to-use ('check who is logged in — use paperclip_get_current_user'), directly referencing a sibling tool. The 'Board-only' note further clarifies context.

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

paperclip_rollback_agent_configA
Destructive

⚠ Board-only: Roll back an agent's config to a specific previous revision.

Args:

  • agentId: string — Agent UUID (example: "agt_abc123")

  • revisionId: string — Config revision UUID to restore (example: "rev_xyz789")

Returns: Returns the agent object with config restored to the specified revision.

Examples:

  • Use when: reverting a bad config change that broke an agent's heartbeat (requires board API key)

  • Don't use when: you want to make targeted edits — use paperclip_update_agent instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human) API key

  • 404: agent or revision not found → list revisions with paperclip_list_agent_config_revisions

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesAgent UUID
revisionIdYesConfig revision UUID

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already include destructiveHint=true, but description adds context: board-only requirement, returns agent object, and lists error handling codes. No contradictions.

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?

Well-structured with clear sections (Args, Returns, Examples, Error Handling). Front-loaded the board-only warning. Each sentence adds value, though slightly verbose in error handling.

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?

Covers return value, authentication, permissions, and error cases. No output schema, but description explains what is returned. Missing mention of whether rollback is reversible, but annotations cover destructive nature.

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 covers 100% of parameters (agentId, revisionId) with descriptions. Description repeats parameter info but adds example values, which is helpful but not essential beyond schema.

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

Purpose5/5

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

The description clearly states 'Roll back an agent's config to a specific previous revision' with a specific verb ('roll back') and resource ('agent config'). It also distinguishes from sibling tools by mentioning 'use paperclip_update_agent instead' for targeted edits.

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

Usage Guidelines5/5

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

Provides explicit when-to-use (reverting bad config that broke heartbeat) and when-not-to-use (targeted edits), including alternative tool. Also indicates board-only access and required API key permissions.

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

paperclip_rotate_secretA
Destructive

⚠ Board-only: Rotate a secret's value, incrementing its version. Increments the secret version (v1 → v2 → v3). Previous references to the secret remain valid for older versions unless specifically purged.

Args:

  • secretId: string — Secret UUID

  • value: string — New secret value (stored encrypted, never returned)

  • externalRef: string | null (optional) — Updated external reference after rotation (null to clear)

Returns: Updated secret metadata with incremented latestVersion: id, companyId, name, provider, externalRef, latestVersion, description, timestamps. Value is never returned.

Examples:

  • Use when: rotating a compromised or expiring credential; each call increments latestVersion

  • Don't use when: you only need to rename or update metadata without changing the value — use paperclip_update_secret instead

Error Handling:

  • 404: secret not found → verify secretId with paperclip_list_secrets

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human-user) API key

ParametersJSON Schema
NameRequiredDescriptionDefault
secretIdYesSecret UUID
valueYesNew secret value — increments the version
externalRefNoNew external reference after rotation (null to clear)

TDQS

A4.8/5.0
Behavior5/5

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

The description discloses key behavioral traits beyond annotations: rotation increments version, previous versions remain valid unless purged, value is stored encrypted and never returned. It also notes the need for a board API key, which is not in annotations. No contradiction with destructiveHint=true.

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

Conciseness4/5

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

The description is well-structured with sections (warning, args, returns, examples, error handling) and is front-loaded with the core purpose. While fairly long, most sentences add value. Could be slightly more concise, but still effective.

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

Completeness5/5

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

For a destructive action with 3 parameters and no output schema, the description covers purpose, usage, parameters, return behavior, error handling, and alternatives. It provides sufficient context for an agent to correctly invoke the tool.

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%, providing a baseline of 3. The description adds extra meaning: it explains that the 'value' parameter increments the secret version, and 'externalRef' is an updated external reference after rotation. It also describes the return metadata including incremented latestVersion.

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

Purpose5/5

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

The description clearly states the tool's purpose: rotating a secret's value and incrementing its version. It distinguishes from the sibling tool 'paperclip_update_secret' by specifying when not to use it. The verb 'rotate' and resource 'secret' are precise.

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

Usage Guidelines5/5

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

Explicit usage guidelines are provided, including when to use (rotating compromised or expiring credentials) and when not to use (renaming or updating metadata, with a pointer to paperclip_update_secret). Error handling instructions for 404, 401, 403 are also given.

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

paperclip_run_routineA

Manually trigger a routine run immediately, bypassing its schedule.

Args:

  • routineId: string — Routine UUID (example: "rtn_abc123")

  • agentId: string (optional) — Agent UUID to run the routine (overrides routine's default assignee)

Returns: Returns the created run object: id, routineId, status, startedAt.

Examples:

  • Use when: testing a routine on demand before its next scheduled fire

  • Don't use when: you want to check past runs — use paperclip_list_routine_runs instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: routine not found → verify ID with paperclip_list_routines

  • 409: concurrency policy forbids concurrent run → wait for the active run to finish

ParametersJSON Schema
NameRequiredDescriptionDefault
routineIdYesRoutine UUID
agentIdNoAgent UUID to run the routine (overrides routine's default assignee)

TDQS

A4.5/5.0
Behavior4/5

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

Description adds value beyond annotations by detailing error codes (401, 404, 409) and return object fields (id, routineId, status, startedAt). Annotations already indicate non-destructive and non-open-world, so the description augments with precise runtime behavior.

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

Conciseness5/5

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

The description is well-structured with clear sections: purpose, args, returns, examples, error handling. Information is front-loaded and each sentence adds value without redundancy.

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

Completeness5/5

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

Given only two parameters and no output schema, the description fully covers behavior, error scenarios, return structure, and examples. It is complete and leaves no ambiguity for the agent.

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?

Input schema already has 100% coverage with descriptions. The description restates these and adds an example for routineId, but does not provide significant new meaning beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool triggers a routine run immediately, bypassing its schedule. It uses specific verbs ('trigger', 'run') and distinguishes from sibling tools like paperclip_list_routine_runs for checking past runs.

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

Usage Guidelines5/5

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

Explicit 'Use when' and 'Don't use when' sections guide the agent, naming the alternative tool (paperclip_list_routine_runs). Error handling also advises on verification steps, providing clear context for appropriate usage.

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

paperclip_set_agent_instructions_pathA
Destructive

⚠ Board-only: Set or clear the AGENTS.md instructions file path for an agent.

Args:

  • agentId: string — Agent UUID (example: "agt_abc123")

  • path: string | null — Absolute path to the AGENTS.md file; null to clear (example: "/home/user/.agents/engineer/AGENTS.md")

  • adapterConfigKey: string (optional) — Override adapter config key for non-standard adapters

Returns: Returns the updated agent record with the new instructionsFilePath value.

Examples:

  • Use when: onboarding a new agent by pointing it at its role-specific AGENTS.md (requires board API key)

  • Don't use when: you want to update other adapter settings — use paperclip_update_agent for other adapterConfig fields

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human) API key

  • 404: agent not found → verify ID with paperclip_list_agents

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesAgent UUID
pathYesPath to AGENTS.md file, or null to clear
adapterConfigKeyNoAdapter config key override for non-standard adapters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already provide destructiveHint=true. Description adds details about authentication requirements (board-only) and error handling, beyond what annotations offer.

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

Conciseness5/5

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

The description is well-structured with clear sections (Args, Returns, Examples, Error Handling) and is concise with no unnecessary information.

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

Completeness5/5

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

Despite no output schema, the description includes return value details and error codes, making it complete for a mutation tool with three parameters.

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%; description adds example values and clarifies the 'path' parameter's role (null to clear). This adds moderate value beyond the schema.

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

Purpose5/5

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

The description clearly states the action: 'Set or clear the AGENTS.md instructions file path for an agent.' It distinguishes from sibling tool paperclip_update_agent by explicitly noting when not to use it.

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

Usage Guidelines5/5

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

Provides explicit 'Use when' and 'Don't use when' sections, and mentions that a board API key is required.

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

paperclip_sync_agent_skillsA
Destructive

Sync an agent's installed skills to match the desired list, adding or removing as needed.

Args:

  • agentId: string — Agent UUID (example: "agt_abc123")

  • desiredSkills: string[] — Skill names to install; skills not in this list are removed (example: ["paperclip-hire-agent"])

Returns: Returns the sync result: added[], removed[], current[] skill lists.

Examples:

  • Use when: onboarding a new agent or updating its skill set after a role change

  • Don't use when: you only want to check installed skills — use paperclip_get_agent and inspect adapterConfig.paperclipSkillSync

Error Handling:

  • 400: validation failure → check desiredSkills is a non-empty array of valid skill names

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: agent not found → verify ID with paperclip_list_agents

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesAgent UUID
desiredSkillsYesList of skill names to sync onto the agent

TDQS

A4.7/5.0
Behavior4/5

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

The description explains the tool modifies agent skills (adding/removing), which aligns with the destructiveHint annotation. It also details return values (added[], removed[], current[]) and error codes, adding behavioral context beyond annotations.

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

Conciseness5/5

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

The description is efficiently structured with Args, Returns, Examples, and Error Handling sections. Every sentence is informative and front-loaded with the core purpose. No redundancy.

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

Completeness5/5

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

Given the tool's complexity (sync operation), the description covers necessary context: prerequisites (agent ID), proper usage, error scenarios, and return format. It also references a sibling tool for checking, making it self-contained for an AI agent.

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%, but the description adds value with examples (e.g., 'example: agt_abc123', skill list example) and clarifies that desiredSkills must be valid skill names. This enhances understanding beyond the schema's property descriptions.

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

Purpose5/5

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

The description clearly states the verb 'Sync' with resource 'agent's installed skills to match the desired list, adding or removing as needed.' This distinguishes it from sibling tools like paperclip_get_agent, which is for checking only. The purpose is specific and unambiguous.

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

Usage Guidelines5/5

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

Explicit 'Use when' and 'Don't use when' sections provide clear context for when to invoke this tool versus alternatives. Additionally, the error handling section guides the agent on common failures and resolutions.

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

paperclip_terminate_agentA
Destructive

⚠ Board-only: Permanently deactivate an agent. This action is irreversible.

Args:

  • agentId: string — Agent UUID (example: "agt_abc123")

Returns: Returns the terminated agent record with status set to terminated.

Examples:

  • Use when: decommissioning an agent that is no longer needed (requires board API key)

  • Don't use when: you want a temporary stop — use paperclip_pause_agent instead (reversible)

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human) API key

  • 404: agent not found → verify ID with paperclip_list_agents

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesAgent UUID

TDQS

A4.9/5.0
Behavior5/5

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

Description adds irreversibility, return value details, and authentication requirements (board API key) beyond the destructiveHint annotation. No contradictions observed.

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

Conciseness5/5

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

Every sentence contributes value. Organized into clear sections (Args, Returns, Examples, Error Handling) with a warning emoji for emphasis. No fluff.

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

Completeness5/5

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

Given a single required parameter, no output schema, the description fully covers return value, error scenarios, and usage constraints. It's complete for an agent 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 has 100% coverage with description for agentId. Description adds an example value ('agt_abc123') and confirms it's a UUID, providing extra context beyond the schema.

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

Purpose5/5

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

The description clearly states the tool 'permanently deactivate an agent' with an irreversible action. It distinguishes from siblings like paperclip_pause_agent by emphasizing permanence.

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

Usage Guidelines5/5

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

Explicit 'Use when' and 'Don't use when' sections provide clear context, directing the agent to paperclip_pause_agent for temporary stops. Error handling codes are also detailed.

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

paperclip_update_agentA
DestructiveIdempotent

Update an agent's name, title, capabilities, status, heartbeat, runtime, or adapter config.

Args:

  • agentId: string — Agent UUID (example: "agt_abc123")

  • name: string (optional) — New display name

  • title: string (optional) — New job title

  • capabilities: string (optional) — Updated capability description

  • status: string (optional) — New status (e.g. active, paused)

  • runtimeConfig.heartbeat.enabled: boolean (optional) — Enable/disable scheduled heartbeats

  • runtimeConfig.heartbeat.intervalSec: integer (optional) — Heartbeat interval in seconds

  • runtimeConfig.heartbeat.cooldownSec: integer (optional) — Min seconds between runs

  • runtimeConfig.heartbeat.maxConcurrentRuns: integer (optional) — Max concurrent runs

  • adapterConfig.model: string (optional) — LLM model identifier

  • adapterConfig.maxTurnsPerRun: integer (optional) — Max LLM turns per run

  • adapterConfig.timeoutSec: integer (optional) — Hard timeout in seconds

  • adapterConfig.instructionsFilePath: string (optional) — Path to AGENTS.md

Returns: Returns the updated agent object with all fields.

Examples:

  • Use when: adjusting an agent's heartbeat interval or updating its capabilities description

  • Don't use when: you need to update permissions — use paperclip_update_agent_permissions (board-only) instead

Error Handling:

  • 400: validation failure → check field types and enum values

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: agent not found → verify ID with paperclip_list_agents

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesAgent UUID
nameNoNew display name
titleNoNew job title
capabilitiesNoUpdated capability description
statusNoNew status (e.g. active, paused)
runtimeConfigNoAgent runtime configuration
adapterConfigNoAdapter configuration for the agent process

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already provide destructiveHint: true and idempotentHint: true. The description adds error handling details (400, 401, 404) and notes that the updated agent object is returned. It does not contradict annotations but also does not significantly expand on behavioral traits beyond what the annotations imply.

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

Conciseness4/5

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

The description is well-structured into sections: purpose, Args, Returns, Examples, Error Handling. It is front-loaded with the main purpose. Although it is a bit long, every section earns its place and the format is easy to scan.

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

Completeness4/5

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

Given the complexity (7 parameters, nested objects) and no output schema, the description covers purpose, all parameters with examples, return type, error handling, and usage guidance. It does not detail the fields of the returned object, but otherwise is thorough.

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 each parameter already has a description. The description reinforces these with a structured Args list that includes examples (e.g., 'example: agt_abc123' for agentId). This adds minor extra value but is not essential.

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 starts with a clear verb+resource: 'Update an agent's name, title, capabilities, status, heartbeat, runtime, or adapter config.' It lists the specific updatable fields and includes an examples section that distinguishes it from the sibling tool paperclip_update_agent_permissions.

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

Usage Guidelines5/5

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

The description explicitly states when to use (e.g., adjusting heartbeat interval or capabilities) and when not to use (updating permissions, with a direct reference to paperclip_update_agent_permissions). This provides clear guidance on alternatives.

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

paperclip_update_agent_permissionsA
DestructiveIdempotent

⚠ Board-only: Update an agent's governance permissions (canAssignTasks, canCreateAgents). Both fields required.

Args:

  • agentId: string — Agent UUID (example: "agt_abc123")

  • canAssignTasks: boolean — Allow this agent to assign tasks to other agents

  • canCreateAgents: boolean — Allow this agent to create new agents (reserved for CEO by governance policy)

Returns: Returns the updated permissions object: agentId, canAssignTasks, canCreateAgents.

Examples:

  • Use when: granting or revoking an agent's ability to assign tasks after a board decision

  • Don't use when: you need to update config fields — use paperclip_update_agent instead

Error Handling:

  • 400: both canAssignTasks and canCreateAgents are required → supply both even if one is unchanged

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human) API key

  • 404: agent not found → verify ID with paperclip_list_agents

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesAgent UUID
canAssignTasksYesAllow this agent to assign tasks to other agents
canCreateAgentsYesAllow this agent to create new agents (reserved for CEO by governance policy)

TDQS

A5/5.0
Behavior5/5

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

Beyond annotations (destructiveHint=true, idempotentHint=true), the description adds board-only auth requirement, governance policy (CEO reserved field), and detailed error handling for 400, 401, 403, 404. No contradictions.

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?

Structured with clear sections (warning, args, returns, examples, errors). Front-loaded with purpose and board-only restriction. Every sentence adds value, no wasted words.

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?

Comprehensive for a permission update tool with no output schema: covers purpose, parameters, usage, error scenarios, return structure, and governance constraints. Fully equips an agent to invoke correctly.

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

Parameters5/5

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

Schema coverage is 100% but description adds extra context: example agent UUID, governance note for canCreateAgents, requirement that both fields are always needed even if unchanged. This significantly aids correct parameter usage.

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

Purpose5/5

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

The description clearly states the tool updates an agent's governance permissions with specific fields (canAssignTasks, canCreateAgents). It distinguishes from the sibling paperclip_update_agent by noting that tool handles config fields.

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

Usage Guidelines5/5

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

Provides explicit when to use (granting/revoking after board decision) and when not to (config field changes, referencing alternative tool). Also notes board-only access, guiding correct invocation.

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

paperclip_update_companyA
DestructiveIdempotent

⚠ Board-only: Update a company's name, description, or monthly budget. Requires board-level authentication (agent keys are rejected — even CEO agents receive 403).

Args:

  • companyId: string — Company UUID (example: "00000000-0000-0000-0000-000000000000")

  • name: string (optional) — New company name

  • description: string | null (optional) — New description (pass null to clear)

  • budgetMonthlyCents: number (optional) — New monthly budget in cents (non-negative integer)

Returns: The updated company object with all fields and updated timestamps.

Examples:

  • Use when: adjusting a company's monthly budget cap or renaming it after a rebrand

  • Don't use when: you need to archive the company — use paperclip_archive_company for status transitions

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: board key required → agent keys are not accepted for this endpoint

  • 404: company not found → verify ID with paperclip_list_companies

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany UUID
nameNoNew company name
descriptionNoNew description (nullable to clear)
budgetMonthlyCentsNoNew monthly budget in cents (non-negative integer)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. Description adds the critical behavioral nuance that board-level authentication is required and agent keys are rejected (403). Error codes (401, 403, 404) are listed. No contradiction with annotations.

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

Conciseness4/5

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

Well-structured with distinct sections (warning, args, returns, examples, error handling). Every sentence adds value. Could be slightly more concise, but the organization aids readability.

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?

Despite no output schema, description explains the return value ('updated company object with all fields and updated timestamps'). Covers authentication, error handling, parameter nuances, and usage context. Complete for a 4-parameter mutation tool.

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?

Input schema has 100% coverage, so baseline is 3. The description adds value by providing example UUID, clarifying nullable description to clear, and stating budgetMonthlyCents must be a non-negative integer. These details enrich parameter understanding beyond the schema alone.

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?

Clearly states 'Update a company's name, description, or monthly budget', specifying verb and resource. Distinguishes from paperclip_archive_company by explicitly recommending it for archiving instead.

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

Usage Guidelines5/5

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

Provides explicit 'Use when' and 'Don't use when' sections, naming an alternative tool (paperclip_archive_company) and noting the board-level authentication requirement.

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

paperclip_update_goalA
DestructiveIdempotent

Update a goal's title, description, or status.

Args:

  • goalId: string — Goal UUID (example: "gol_abc123")

  • title: string (optional) — New title

  • description: string (optional) — New description (markdown)

  • status: string (optional) — New status (example: "completed")

Returns: Returns the updated goal object with all fields.

Examples:

  • Use when: closing a completed goal or updating its description after a planning session

  • Don't use when: you need to create a goal — use paperclip_create_goal instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: goal not found → verify ID with paperclip_list_goals

ParametersJSON Schema
NameRequiredDescriptionDefault
goalIdYesGoal UUID
titleNoNew title
descriptionNoNew description (markdown)
statusNoNew status (e.g. active, completed)

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true, which are consistent with an update. The description adds value by stating the return behavior (returns the updated goal object) and error codes. No contradictions.

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

Conciseness5/5

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

The description is well-structured: main action, args with examples, return type, usage examples, and error handling. Every sentence adds value with no fluff. Approximately 10 lines.

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?

All necessary information for an update tool is covered: parameters are fully documented, examples are given, error handling is included, and return type is mentioned. No gaps given the context signals.

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

Parameters5/5

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

Schema coverage is 100%. The description adds meaningful examples (e.g., goalId 'gol_abc123', status 'completed'), clarifies that description supports markdown, and explains the format of each parameter beyond the schema.

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

Purpose5/5

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

The description clearly states 'Update a goal's title, description, or status' and distinguishes itself from the sibling 'paperclip_create_goal' in the usage guidelines. The tool name is self-explanatory.

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

Usage Guidelines5/5

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

Explicit use cases are provided: 'Use when: closing a completed goal or updating its description after a planning session' and 'Don't use when: you need to create a goal — use paperclip_create_goal instead'. Error handling for 401 and 404 is also included.

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

paperclip_update_issueA
DestructiveIdempotent

Update one or more fields on an issue; optionally attach a comment in the same call.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

  • status: enum — backlog|todo|in_progress|in_review|done|blocked|cancelled

  • priority: enum — critical|high|medium|low

  • title: string — New title

  • description: string — New description (markdown)

  • comment: string — Comment to post with this update

  • assigneeAgentId: string|null — Agent UUID; null to unassign

  • assigneeUserId: string|null — User UUID; null to unassign

  • goalId: string|null — Goal UUID; null to unlink

  • projectId: string|null — Project UUID; null to unlink

  • parentId: string|null — Parent issue UUID; null to detach

  • billingCode: string|null — Billing code; null to clear

  • labelIds: string[] — Replaces label set; [] clears all

  • executionRunId: string|null — null to clear stale run lock

  • executionLockedAt: string|null — ISO lock timestamp; null to clear

Returns: Returns the updated issue object with all fields.

Examples:

  • Use when: transitioning an issue to in_review and posting a @QA comment in one call

  • Don't use when: you need to claim the issue — use paperclip_checkout_issue first

Error Handling:

  • 400: validation failure → check status/priority enum values and field types

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: issue not found → verify ID with paperclip_list_issues

  • 422: invalid state transition → check current status with paperclip_get_issue

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-21)
statusNoNew status
commentNoComment to add alongside the update
priorityNoNew priority level
titleNoNew title
descriptionNoNew description (markdown)
assigneeAgentIdNoAssignee agent UUID; null to unassign
assigneeUserIdNoAssignee user UUID; null to unassign
goalIdNoGoal UUID; null to unlink
projectIdNoProject UUID; null to unlink
parentIdNoParent issue UUID; null to unlink
billingCodeNoBilling code for cost tracking; null to clear
labelIdsNoLabel UUIDs to set (replaces existing set); pass [] to clear all labels
executionRunIdNoExecution run ID holding the checkout lock; pass null to clear a stale lock
executionLockedAtNoISO timestamp of when the execution lock was acquired; pass null to clear

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark destructiveHint and idempotentHint. Description adds that a comment can be attached and returns the updated issue. It does not mention dependencies like checkout lock, but error handling covers invalid state transitions. No contradictions.

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?

Well-structured with purpose, args, returns, examples, and error handling sections. Front-loaded with key info. Slightly long due to 15 parameters, but each section earns its place.

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

Completeness5/5

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

Given 15 parameters, no output schema, and annotations present, the description covers all aspects: purpose, all params, return value, usage examples, and error handling. Fully adequate for an update 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 coverage is 100%, and the description repeats parameter details from the schema. While the description lists params clearly, it adds no new semantic meaning beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose5/5

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

Description clearly states 'Update one or more fields on an issue; optionally attach a comment in the same call.' This provides a specific verb and resource, and distinguishes it from sibling tools like paperclip_add_comment by allowing inline comment attachment.

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

Usage Guidelines5/5

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

Includes explicit 'Use when' and 'Don't use when' examples, referencing paperclip_checkout_issue for claiming issues. Also provides error handling guidance suggesting alternative tools like paperclip_list_issues and paperclip_get_issue.

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

paperclip_update_projectA
DestructiveIdempotent

Update a project's name, description, or status.

Args:

  • projectId: string — Project UUID (example: "prj_abc123")

  • name: string (optional) — New name

  • description: string (optional) — New description (markdown)

  • status: string (optional) — New status (example: "archived")

Returns: Returns the updated project object with all fields.

Examples:

  • Use when: archiving a completed project or renaming it after a scope change

  • Don't use when: you need to update workspace settings — use paperclip_update_workspace instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: project not found → verify ID with paperclip_list_projects

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject UUID
nameNoNew name
descriptionNoNew description (markdown)
statusNoNew status (e.g. active, archived)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already provide destructiveHint=true and idempotentHint=true. Description adds error handling (401, 404) and return format (updated project object), but does not mention side effects beyond 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?

Description is front-loaded with purpose, structured into Args, Returns, Examples, Error Handling sections, and every sentence adds value without redundancy.

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

Completeness5/5

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

With no output schema, description explains return value and includes error handling. It is fully sufficient for an agent to correctly invoke the tool.

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%. Description adds value with examples (e.g., 'prj_abc123', 'archived'), marks optional parameters, and clarifies status meaning (e.g., active, archived).

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?

Description explicitly states verb 'Update', resource 'project', and lists the specific fields (name, description, status). It clearly distinguishes from sibling tool paperclip_update_workspace.

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

Usage Guidelines5/5

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

Description provides explicit 'Use when' (archiving, renaming) and 'Don't use when' (update workspace settings) examples, naming the alternative tool paperclip_update_workspace.

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

paperclip_update_routineA
DestructiveIdempotent

Update a routine's title, description, or scheduling policies.

Args:

  • routineId: string — Routine UUID (example: "rtn_abc123")

  • title: string (optional) — New title

  • description: string (optional) — New description

  • concurrencyPolicy: string (optional) — New concurrency policy

  • catchUpPolicy: string (optional) — New catch-up policy

Returns: Returns the updated routine object with all fields.

Examples:

  • Use when: changing a routine's concurrency policy after observing overlapping runs

  • Don't use when: you need to change the trigger schedule — use paperclip_update_routine_trigger instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: routine not found → verify ID with paperclip_list_routines

ParametersJSON Schema
NameRequiredDescriptionDefault
routineIdYesRoutine UUID
titleNoNew title
descriptionNoNew description
concurrencyPolicyNoNew concurrency policy
catchUpPolicyNoNew catch-up policy

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide destructiveHint=true and idempotentHint=true. The description adds specifics like error codes and return value details, but does not contradict annotations. Slightly enhanced transparency.

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?

Well-structured with clear sections (Args, Returns, Examples, Error Handling). Slightly redundant with schema but overall efficient and easy to parse.

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?

Complete coverage: lists all updatable fields, returns updated object, error codes, and alternative tool for triggers. No output schema needed.

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 each parameter is documented. The description repeats these with an example UUID but adds minimal extra meaning. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Update a routine's title, description, or scheduling policies.' The verb 'Update' and resource 'routine' are explicit, and it distinguishes from sibling tools by noting when not to use it.

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

Usage Guidelines5/5

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

The description includes explicit 'Use when' and 'Don't use when' sections, referencing the sibling tool paperclip_update_routine_trigger for trigger changes. Error handling is also provided.

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

paperclip_update_routine_triggerA
DestructiveIdempotent

Update an existing routine trigger's kind or cron schedule.

Args:

  • triggerId: string — Routine trigger UUID (example: "trg_abc123")

  • kind: string (optional) — New trigger kind: schedule | webhook | api

  • cronExpression: string (optional) — New 5-field cron expression (example: "0 9 * * 1-5")

  • timezone: string (optional) — New timezone for schedule triggers

Returns: Returns the updated trigger object: id, routineId, kind, cronExpression, updatedAt.

Examples:

  • Use when: changing a routine from every 5 minutes to daily at 9 AM on weekdays

  • Don't use when: you need to add a new trigger — use paperclip_add_routine_trigger instead

Error Handling:

  • 400: invalid cron expression → ensure 5 whitespace-separated fields

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: trigger not found → verify ID with paperclip_get_routine

ParametersJSON Schema
NameRequiredDescriptionDefault
triggerIdYesRoutine trigger UUID
kindNoNew trigger kind
cronExpressionNoNew 5-field cron expression for schedule triggers
timezoneNoNew timezone for schedule triggers

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate destructive and idempotent behavior. Description adds return object details and common error codes, but could further clarify consequences of updating a schedule on ongoing tasks.

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?

Well-structured with clear sections (purpose, args, returns, examples, error handling). Front-loaded and no unnecessary words.

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

Completeness5/5

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

Given 4 parameters, no output schema, and annotations, the description adequately covers purpose, usage context, return object, and error handling. It explains optional parameters and gives concrete examples.

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?

Input schema has 100% description coverage, so description adds limited new semantic value. It provides examples for triggerId and cronExpression, but these are minor additions.

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?

Description clearly identifies the verb 'Update' and resource 'routine trigger', specifying what can be changed (kind or cron schedule). Differentiates from siblings by providing an explicit alternative for adding triggers.

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

Usage Guidelines5/5

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

Provides concrete examples of when to use (changing a schedule) and explicitly advises against using for adding new triggers, pointing to the sibling tool paperclip_add_routine_trigger. Error handling further guides correct usage.

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

paperclip_update_secretA
DestructiveIdempotent

⚠ Board-only: Update secret metadata (name, description, externalRef). To rotate the secret value, use paperclip_rotate_secret.

Args:

  • secretId: string — Secret UUID

  • name: string (optional) — New secret name

  • description: string | null (optional) — New description (null to clear)

  • externalRef: string | null (optional) — New external reference (null to clear)

Returns: Updated secret metadata: id, companyId, name, provider, externalRef, latestVersion, description, timestamps. Value is never returned.

Examples:

  • Use when: renaming a secret or updating its description or external reference without changing its value

  • Don't use when: you need to change the secret value — the value field is not accepted here; use paperclip_rotate_secret instead

Error Handling:

  • 404: secret not found → verify secretId with paperclip_list_secrets

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 403: permission denied → this tool requires a board (human-user) API key

ParametersJSON Schema
NameRequiredDescriptionDefault
secretIdYesSecret UUID
nameNoNew secret name
descriptionNoNew description (null to clear)
externalRefNoNew external reference (null to clear)

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already indicate destructive and idempotent behavior. Description adds significant context: board-only requirement, return format (value never returned), error handling. No contradiction with annotations.

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

Conciseness4/5

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

Well-structured with sections for args, returns, examples, error handling. Front-loaded with key caveats. While detailed, every sentence serves a purpose; slight room for trimming but not excessive.

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?

Comprehensive for a metadata update tool: covers purpose, usage boundaries, parameter details, return shape (despite no output schema), and error handling. Fully prepares the agent for correct invocation.

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 covers 100% with descriptions. Description restates parameter roles and notes null clears, but adds minimal new semantics beyond schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states it updates secret metadata (name, description, externalRef) and explicitly distinguishes from rotating the secret value. The verb 'update' and resource 'secret metadata' are specific, and it differentiates from the sibling tool paperclip_rotate_secret.

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

Usage Guidelines5/5

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

Provides explicit when-to-use (renaming, updating description/reference) and when-not-to-use (changing value, directing to paperclip_rotate_secret). Also includes error handling guidance for 404, 401, 403 with actionable next steps.

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

paperclip_update_workspaceA
DestructiveIdempotent

Update a workspace's cwd or repoUrl.

Args:

  • projectId: string — Project UUID (example: "prj_abc123")

  • workspaceId: string — Workspace UUID (example: "wsp_abc123")

  • cwd: string (optional) — New local working directory path

  • repoUrl: string (optional) — New remote repository URL

Returns: Returns the updated workspace object: id, cwd, repoUrl, projectId, updatedAt.

Examples:

  • Use when: updating the workspace path after the repo was moved to a new location

  • Don't use when: you need to create a new workspace — use paperclip_create_workspace instead

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: project or workspace not found → verify IDs with paperclip_list_workspaces

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject UUID
workspaceIdYesWorkspace UUID
cwdNoNew local working directory path
repoUrlNoNew remote repository URL

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds value by specifying the return object (updated workspace with id, cwd, repoUrl, updatedAt) and error codes (401, 404), providing behavioral context beyond the annotations.

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

Conciseness5/5

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

The description is well-structured with clear sections (Args, Returns, Examples, Error Handling). It is concise, front-loads the purpose, and every sentence adds value without 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?

Given no output schema, the description explains the return object. It covers parameter details, usage example, and error handling. It could be slightly more explicit about prerequisites (e.g., workspace must exist), but overall sufficiently complete for an update 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 all parameters. The description repeats parameter descriptions and adds example values (e.g., 'prj_abc123'), but does not significantly enhance understanding beyond what the schema provides. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update a workspace's cwd or repoUrl', specifying both the resource (workspace) and the action (update). It explicitly differentiates from the sibling tool paperclip_create_workspace by stating when not to use it. The verb and resource are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage examples ('Use when: updating the workspace path after the repo was moved') and a clear exclusion ('Don't use when: you need to create a new workspace — use paperclip_create_workspace instead'). It also lists error handling scenarios, guiding the agent on troubleshooting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

paperclip_upload_attachmentA

Upload a local file as an attachment to an issue.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

  • filePath: string — Absolute path to the local file (example: "/tmp/report.pdf")

  • filename: string (optional) — Override filename in the upload (defaults to basename of filePath)

  • mimeType: string (optional) — MIME type (example: "application/pdf")

Returns: Returns the created attachment record: id, filename, mimeType, size, createdAt.

Examples:

  • Use when: attaching a generated report, diff, or log file to an issue

  • Don't use when: you need to download an attachment — use paperclip_download_attachment instead

Error Handling:

  • 400: validation failure → check filePath is absolute and the file exists

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: issue not found → verify ID with paperclip_list_issues

  • 413: file too large → check Paperclip attachment size limits

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-22)
filePathYesAbsolute path to the local file to upload
filenameNoOverride filename in the upload (defaults to basename of filePath)
mimeTypeNoMIME type of the file (e.g. text/plain, application/pdf)

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=false, and the description adds valuable behavioral context: it returns the created attachment record with fields, and lists specific error codes (400, 401, 404, 413) with explanations. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: one-sentence summary, clear args list, returns, examples, and error handling. It is front-loaded with the core action and contains no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, no output schema, no nested objects, and good annotations, the description fully covers the tool's behavior, usage, error handling, and return format. It is complete for effective agent usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are well-documented in schema. The description adds value by providing examples, clarifying defaults (e.g., filename defaults to basename), and requiring absolute paths. However, the schema already covers the meaning, so slightly above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Upload a local file as an attachment to an issue.' It distinguishes from sibling tools like paperclip_download_attachment by explicitly stating 'Don't use when: you need to download an attachment — use paperclip_download_attachment instead.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use ('attaching a generated report, diff, or log file') and when-not-to-use ('need to download an attachment'). It also includes error handling guidance (e.g., check filePath exists, verify issue ID) that helps the agent decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

paperclip_upsert_documentA
Idempotent

Create or update an issue document. Send baseRevisionId for safe concurrent updates.

Args:

  • issueId: string — Issue ID or identifier (example: "PAP-42")

  • key: string — Document key (example: "plan")

  • title: string — Document title

  • body: string — Document body (markdown)

  • format: "markdown" (optional) — Document format (default: markdown)

  • baseRevisionId: string (optional) — Current revision ID from a prior get; omit on first create

Returns: Returns the updated document object: key, title, body, revisionId, updatedAt.

Examples:

  • Use when: writing or updating the implementation plan document on an issue mid-run

  • Don't use when: you want to delete a document — use paperclip_delete_document (board-only)

Error Handling:

  • 400: validation failure → check title and body are non-empty

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: issue not found → verify ID with paperclip_list_issues

  • 409: conflict — baseRevisionId mismatch → re-read with paperclip_get_document and retry

ParametersJSON Schema
NameRequiredDescriptionDefault
issueIdYesIssue ID or identifier (e.g. PAP-22)
keyYesDocument key (e.g. `plan`)
titleYesDocument title
bodyYesDocument body (markdown)
formatNoDocument format (default: markdown)
baseRevisionIdNoCurrent revision ID for optimistic concurrency — omit on first create

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description explains safe concurrent updates via baseRevisionId, idempotent behavior (retry safety), and error handling for 400/401/404/409. Annotations already declare idempotentHint=true, which is consistent. No contradictions.

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?

Well-structured with clear sections (overview, Args, Returns, Examples, Error Handling). Each sentence adds value without redundancy. Length is appropriate for the tool's complexity.

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?

Despite no output schema, description specifies return fields (key, title, body, revisionId, updatedAt). Covers error scenarios and prerequisite actions (verify issue ID, re-read on conflict). Complete for a create/update tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds meaningful context: examples for issueId and key, explanation of optional format default, and detailed semantics of baseRevisionId for optimistic concurrency. This exceeds what the schema 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?

The description clearly states 'Create or update an issue document' with specific verbs and resource. It distinguishes from sibling tools by explicitly mentioning when not to use (paperclip_delete_document) and provides alternatives like paperclip_get_document for conflict resolution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use (writing/updating implementation plan) and when-not-to-use (deleting). References sibling tools for alternative actions (paperclip_delete_document, paperclip_get_document, paperclip_list_issues). Includes guidance on baseRevisionId for first create vs update.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

paperclip_wakeup_agentA

Wake up an agent by invoking a wakeup request on-demand.

Args:

  • agentId: string — Agent UUID (example: "agt_abc123")

  • source: "timer"|"assignment"|"on_demand"|"automation" (optional) — Invocation source

  • triggerDetail: "manual"|"ping"|"callback"|"system" (optional) — Trigger qualifier

  • reason: string|null (optional) — Human-readable reason for the wakeup

  • payload: object|null (optional) — Arbitrary JSON passed to the agent session

  • idempotencyKey: string|null (optional) — Same key within 60s returns existing run

  • forceFreshSession: boolean (optional) — Force a new session even if one is active

Returns: Heartbeat run object { id, agentId, companyId, status, invocationSource, triggerDetail, startedAt, createdAt } OR { status: 'skipped' } if the agent is already running or paused.

Examples:

  • Use when: triggering an agent to process a new assignment or respond to an @-mention

  • Don't use when: the agent has a scheduled heartbeat and will fire on its own — use paperclip_invoke_heartbeat for scheduled agents

Error Handling:

  • 401: authentication failed → check PAPERCLIP_API_KEY

  • 404: agent not found → verify ID with paperclip_list_agents

  • 409: agent already running → check returned { status: 'skipped' } response

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYesAgent UUID to wake up
sourceNoInvocation source (default: on_demand)
triggerDetailNoTrigger detail qualifier (default: manual)
reasonNoHuman-readable reason for the wakeup
payloadNoArbitrary JSON payload passed to the agent session
idempotencyKeyNoIdempotency key — same key within 60s returns the existing run
forceFreshSessionNoStart a new session even if one is already active

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description thoroughly covers behavior: returns a run object or { status: 'skipped' } if already running/paused, explains idempotency and forceFreshSession, and provides detailed error handling for 401, 404, 409. This goes well beyond the minimal annotations (destructiveHint: false, openWorldHint: false).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Args, Returns, Examples, Error Handling). It is concise, each sentence adds value, and it is easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description defines the return object. All 7 parameters are documented, usage guidelines are provided, error handling is covered, and context signals show high schema coverage. The description is complete for a complex tool with many parameters.

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 baseline is 3. The description adds value by including an example for agentId, specifying defaults for source (on_demand) and triggerDetail (manual), and explaining the idempotency window (60s). It adds 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 clearly states 'Wake up an agent by invoking a wakeup request on-demand,' providing a specific verb and resource. It distinguishes from the sibling tool paperclip_invoke_heartbeat by noting that it is for on-demand wakeups, not scheduled heartbeats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use when: triggering an agent to process a new assignment or respond to an @-mention' and 'Don't use when: the agent has a scheduled heartbeat... use paperclip_invoke_heartbeat for scheduled agents.' This provides clear when-to-use and when-not-to-use guidance with a named alternative.

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. 104 tool updatesv2.1.1
    • First observedpaperclip_add_approval_comment
    • First observedpaperclip_add_comment
    • First observedpaperclip_add_routine_trigger
    • First observedpaperclip_apply_company_import
    • First observedpaperclip_approve
    • First observedpaperclip_archive_company
    • First observedpaperclip_checkout_issue
    • First observedpaperclip_create_agent
    • First observedpaperclip_create_agent_hire
    • First observedpaperclip_create_agent_key
    • First observedpaperclip_create_approval
    • First observedpaperclip_create_company
    • First observedpaperclip_create_goal
    • First observedpaperclip_create_issue
    • First observedpaperclip_create_label
    • First observedpaperclip_create_project
    • First observedpaperclip_create_routine
    • First observedpaperclip_create_secret
    • First observedpaperclip_create_workspace
    • First observedpaperclip_delete_attachment
    • First observedpaperclip_delete_document
    • First observedpaperclip_delete_routine_trigger
    • First observedpaperclip_delete_workspace
    • First observedpaperclip_disable_plugin
    • First observedpaperclip_download_attachment
    • First observedpaperclip_enable_plugin
    • First observedpaperclip_export_company
    • First observedpaperclip_get_activity
    • First observedpaperclip_get_agent
    • First observedpaperclip_get_approval
    • First observedpaperclip_get_comment
    • First observedpaperclip_get_company
    • First observedpaperclip_get_cost_summary
    • First observedpaperclip_get_costs_by_agent
    • First observedpaperclip_get_costs_by_project
    • First observedpaperclip_get_current_user
    • First observedpaperclip_get_dashboard
    • First observedpaperclip_get_document
    • First observedpaperclip_get_document_revisions
    • First observedpaperclip_get_feedback_trace_bundle
    • First observedpaperclip_get_goal
    • First observedpaperclip_get_heartbeat_context
    • First observedpaperclip_get_inbox
    • First observedpaperclip_get_issue
    • First observedpaperclip_get_me
    • First observedpaperclip_get_org_chart
    • First observedpaperclip_get_plugin
    • First observedpaperclip_get_project
    • First observedpaperclip_get_routine
    • First observedpaperclip_get_run_log
    • First observedpaperclip_install_plugin
    • First observedpaperclip_invoke_heartbeat
    • First observedpaperclip_list_agent_config_revisions
    • First observedpaperclip_list_agents
    • First observedpaperclip_list_approval_comments
    • First observedpaperclip_list_approval_issues
    • First observedpaperclip_list_approvals
    • First observedpaperclip_list_attachments
    • First observedpaperclip_list_comments
    • First observedpaperclip_list_companies
    • First observedpaperclip_list_company_skills
    • First observedpaperclip_list_documents
    • First observedpaperclip_list_feedback_traces
    • First observedpaperclip_list_goals
    • First observedpaperclip_list_heartbeat_runs
    • First observedpaperclip_list_issue_feedback_traces
    • First observedpaperclip_list_issues
    • First observedpaperclip_list_labels
    • First observedpaperclip_list_plugin_examples
    • First observedpaperclip_list_plugins
    • First observedpaperclip_list_projects
    • First observedpaperclip_list_routine_runs
    • First observedpaperclip_list_routines
    • First observedpaperclip_list_run_events
    • First observedpaperclip_list_secrets
    • First observedpaperclip_list_workspaces
    • First observedpaperclip_pause_agent
    • First observedpaperclip_preview_company_import
    • First observedpaperclip_reject
    • First observedpaperclip_release_issue
    • First observedpaperclip_report_cost_event
    • First observedpaperclip_request_revision
    • First observedpaperclip_resubmit_approval
    • First observedpaperclip_resume_agent
    • First observedpaperclip_revoke_current_session
    • First observedpaperclip_rollback_agent_config
    • First observedpaperclip_rotate_secret
    • First observedpaperclip_run_routine
    • First observedpaperclip_set_agent_instructions_path
    • First observedpaperclip_sync_agent_skills
    • First observedpaperclip_terminate_agent
    • First observedpaperclip_update_agent
    • First observedpaperclip_update_agent_permissions
    • First observedpaperclip_update_company
    • First observedpaperclip_update_goal
    • First observedpaperclip_update_issue
    • First observedpaperclip_update_project
    • First observedpaperclip_update_routine
    • First observedpaperclip_update_routine_trigger
    • First observedpaperclip_update_secret
    • First observedpaperclip_update_workspace
    • First observedpaperclip_upload_attachment
    • First observedpaperclip_upsert_document
    • First observedpaperclip_wakeup_agent

TDQS

A4/5.0

Scored across 104 tools

Disambiguation3/5

Most tools target a distinct resource and action, and descriptions do a good job of cross-referencing siblings. However, there are several genuinely confusable pairs — invoke_heartbeat vs wakeup_agent, create_agent vs create_agent_hire vs create_approval, and update_agent vs set_agent_instructions_path — that an agent would need to study closely to disambiguate. At 104 tools, the cumulative surface creates real selection risk.

Naming Consistency4/5

The paperclip_ prefix plus snake_case verb_noun naming is used consistently across nearly all tools, making the overall pattern highly predictable. Minor deviations exist, such as bare verbs like approve and reject (rather than approve_approval/reject_approval) and the semantically overlapping invoke_heartbeat vs wakeup_agent pair, but these are exceptions rather than the rule.

Tool Count1/5

With 104 tools, this server far exceeds even a generous MCP surface and lands in the extreme-count category. While the domain is broad, agents would be overwhelmed by hundreds of choices, and many tools could be consolidated or split into separate domain-specific MCP servers.

Completeness3/5

The surface is remarkably broad, covering agents, companies, goals, projects, issues, approvals, routines, plugins, secrets, costs, feedback traces, and import/export flows. However, there are notable dead ends: paperclip_delete_routine and the plugin uninstall flow are referenced in descriptions but no such tools exist in the set, and several resources (labels, secrets, goals, projects) lack delete operations.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP server that spawns autonomous Claude Code agents in GitHub repos, enabling task delegation with persistent state, multi-step workflows, and job monitoring.
    47
    79 npm
    2
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for integrating Linear with Claude Code and other MCP clients. Enables issue management, project planning, and status tracking through a set of tools.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server and automation watcher for Plane project management, enabling Claude to interact with Plane via 40+ tools and auto-trigger on labeled issues.
    -