Skip to main content
Glama

Vibe Board MCP (ve-vibe-board)

MCP server on Glama Glama Score License: MIT Node

Your agent, but it remembers. Firestore-backed MCP server that gives Claude Code (and any MCP-speaking agent) persistent memory across sessions — tasks, progress, decisions, and handoff notes that survive context compaction and session death.

Companion repo: HuntsDesk/ve-kit — Vibe Coding Framework & Persistent Memory for Claude Code. ve-kit bundles this MCP server, a RIPER-CAT workflow, review-gate hooks, and an optional Docker worker.

Part of Vibe Entrepreneurs — a community for any vibe coders shipping real work with AI. Come say hi: vibeentrepreneurs.com.


Why this exists

Sound familiar?

  • You're six tool calls into a refactor. Context compacts. The agent comes back with vibes but no plan.

  • You start a new session tomorrow. It re-reads the same files, re-asks the same questions, re-decides things you already decided.

  • You watched it write a perfect TodoWrite checklist — then the conversation ended, and the checklist evaporated with it.

  • You opened three agents in parallel. None of them know what the others did.

This is what statelessness feels like in practice. The agent is brilliant for an hour and amnesiac forever after.

Vibe Board is where the state goes instead. It's a shared task + session board that lives outside any single conversation — in Firestore, not in context.

  • Agents create tasks during planning — they survive the session

  • Progress gets tracked during execution — visible to the next run

  • Handoff notes get written when sessions end — with references to the exact tasks still open

  • The next session calls board_create_session, reads the handoff, and resumes where the last one stopped

What you get: an agent that shows up on Tuesday knowing what it was doing on Monday. No re-explaining. No lost plans. No TodoWrite graveyard.

Free to run on Firebase's free tier.


Related MCP server: backlog

14 MCP tools

Category

Tools

Projects

board_get_projects, board_create_project, board_update_project

Tasks

board_get_tasks, board_get_task, board_create_task, board_update_task (supports moving between projects), board_bulk_update_tasks (1-100 at once), board_delete_task (safety-guarded)

Sessions

board_create_session (returns last session's handoff), board_end_session, board_get_handoff

Activity

board_log_activity, board_get_activity (cursor-paginated, filterable)

Fourteen tools, one job: give the agent a place to put state that isn't the conversation.


Install

1. Clone + build

git clone https://github.com/HuntsDesk/ve-vibe-board.git
cd ve-vibe-board
npm install
npm run build

2. Set up Firebase

Create a Firebase project (free tier works). Enable Firestore in Native mode. Create a service account with roles/datastore.user and download the key JSON.

GOOGLE_APPLICATION_CREDENTIALS accepts either a file path to the key JSON (canonical) or the raw JSON contents inline (handy for sandboxed environments like Glama's browser MCP Inspector, CI secrets, or Cloud Run's inlined-secret pattern).

Also deploy the Firestore composite indexes. The repo ships with firestore.indexes.json declaring all 5 required indexes (sessions, tasks, projects, activity_log). Deploy them with one command:

# From the ve-vibe-board repo root (contains firebase.json + firestore.indexes.json)
firebase use YOUR_PROJECT_ID
firebase deploy --only firestore:indexes

Requires the Firebase CLI (npm install -g firebase-tools) authenticated with an account that has roles/datastore.indexAdmin on the project. Wait 1-5 min for indexes to build.

gcloud firestore indexes composite create \
  --project=YOUR_PROJECT_ID \
  --collection-group=sessions \
  --field-config field-path=project_id,order=ascending \
  --field-config field-path=status,order=ascending \
  --field-config field-path=ended_at,order=descending

gcloud firestore indexes composite create \
  --project=YOUR_PROJECT_ID \
  --collection-group=tasks \
  --field-config field-path=project_id,order=ascending \
  --field-config field-path=status,order=ascending

gcloud firestore indexes composite create \
  --project=YOUR_PROJECT_ID \
  --collection-group=tasks \
  --field-config field-path=project_id,order=ascending \
  --field-config field-path=assigned_agent,order=ascending \
  --field-config field-path=status,order=ascending

gcloud firestore indexes composite create \
  --project=YOUR_PROJECT_ID \
  --collection-group=projects \
  --field-config field-path=status,order=ascending \
  --field-config field-path=updated_at,order=descending

gcloud firestore indexes composite create \
  --project=YOUR_PROJECT_ID \
  --collection-group=activity_log \
  --field-config field-path=task_id,order=ascending \
  --field-config field-path=created_at,order=descending

3. Configure Claude Code

Add to your project's .mcp.json:

{
  "mcpServers": {
    "vibe-board": {
      "command": "node",
      "args": ["/absolute/path/to/ve-vibe-board/dist/index.js"],
      "env": {
        "GOOGLE_APPLICATION_CREDENTIALS": "/absolute/path/to/your-key.json"
      }
    }
  }
}

Allow the tools in .claude/settings.local.json:

{
  "permissions": {
    "allow": [
      "mcp__vibe-board__board_get_projects",
      "mcp__vibe-board__board_create_project",
      "mcp__vibe-board__board_update_project",
      "mcp__vibe-board__board_get_tasks",
      "mcp__vibe-board__board_get_task",
      "mcp__vibe-board__board_create_task",
      "mcp__vibe-board__board_update_task",
      "mcp__vibe-board__board_bulk_update_tasks",
      "mcp__vibe-board__board_delete_task",
      "mcp__vibe-board__board_create_session",
      "mcp__vibe-board__board_end_session",
      "mcp__vibe-board__board_get_handoff",
      "mcp__vibe-board__board_log_activity",
      "mcp__vibe-board__board_get_activity"
    ]
  },
  "enabledMcpjsonServers": ["vibe-board"]
}

4. Verify

Start a new Claude Code session and call board_get_projects. Empty array = success.


Agent rules (paste into CLAUDE.md)

Drop this into your project's CLAUDE.md (or equivalent agent-instructions file). It's the same protocol the ve-kit framework ships, condensed for standalone MCP installs. The MCP server gives the agent a place to put state — these rules teach it to actually use it.

## Vibe Board

Persistent task tracking across sessions via Firebase Firestore MCP tools (`board_*`).
**Mandatory for every substantive session** (any session where you read, write, plan, debug, or deploy code).

### Use Board Tasks, NOT TodoWrite

TodoWrite is ephemeral — it dies when the session ends. Board tasks persist forever and enable cross-session handoff. When you would reach for TodoWrite to track multi-step work, use `board_create_task` instead.

**Nothing exists unless it's on the board.** If an action item, future phase, recommendation, or follow-up is mentioned in conversation or discovered in a document but has no board task, it WILL be forgotten. The board is the single source of truth for "what needs to be done." Conversation text, plan docs, and strategy docs are reference material — the board is the task list. When in doubt, create the task. A redundant board task costs nothing; a forgotten action item costs real work.

### Proactive Triggers

These are condition → action pairs. When the condition is true, take the action immediately.

| Condition | Action |
|-----------|--------|
| Session starts (substantive work) | `board_create_session` before any other work |
| Context compacted / continuation session | `board_create_session` IMMEDIATELY — compaction loses the active session ID |
| Multi-step task (3+ steps) | `board_create_task` for each step |
| Batch of items (fix 5 bugs, review 3 files) | Parent task + subtask per item via `board_create_task` |
| New work discovered during execution | `board_create_task` immediately |
| Significant decision or blocker | `board_log_activity` |
| Start working on a task | `board_update_task` → `in_progress` + set `assigned_agent` to your name |
| Finish a task | `board_update_task` → `done` |
| Review/audit produces findings | Parent task per severity tier + subtask per finding |
| Deploying a new service for the first time | `board_create_task` for: verify deployment, create CI/CD trigger, push to prod |
| Committing + pushing code | `board_log_activity` with commit hash; update related tasks |
| Read a doc/plan with unbuilt phases or pending items | `board_create_task` for each actionable item not already on the board |
| Mention a future action item in conversation | `board_create_task` immediately — conversation text is ephemeral, board tasks are permanent |
| A sub-agent reports a finding or recommendation | `board_create_task` if it requires future work (don't let it exist only in conversation) |
| User says "handoff" or signals session end | Create board tasks for ALL pending next steps, THEN `board_end_session` |
| Session ending OR context getting long | `board_end_session` with handoff notes |

**The test**: If this session died right now, could the next session reconstruct what you were doing from the board alone? If not, you haven't been proactive enough.

**The second test**: If a documented plan has unchecked items, unbuilt phases, or "pending" status markers — and there's no corresponding board task — that's a gap. Every actionable item in every plan doc should have a board task. Plans without board tasks get forgotten.

### Session Lifecycle

**Starting a session** (before any other work — **including after context compaction**):

**Context compaction destroys the active session ID.** If you're continuing from a compacted conversation, you MUST call `board_create_session` before doing anything else. This is the #1 failure mode — compaction preserves your behavioral patterns but loses board state.

1. Call `board_get_projects` to see all active projects
2. **Match work to the correct project** — read project names/descriptions and pick the best fit. Do NOT default to one project for everything. Use a general catch-all project only when no specific project fits.
3. Call `board_create_session` with the matched `project_id`
   - This auto-abandons any stale sessions and returns handoff context
   - Read the handoff carefully — it contains what the last session accomplished and what's next
4. Review active tasks via the handoff response or `board_get_tasks`

**During a session:**
- **Planning**: Create all tasks on the board immediately with status `todo`. This ensures the plan survives even if the session crashes before execution.
- **Reviewing**: Review the *task list on the board*, not just prose. Call `board_get_tasks`, then use `board_log_activity` with `task_id` and `action: "commented"` to attach review comments to specific tasks. ALL review output MUST go through the board — conversation text disappears when sessions end.
- **Review findings → board tasks**: When a review produces findings, every finding must become a board task — not just an activity log comment. Create one parent task per severity tier (e.g., "Tier 1: BLOCKING items"), then subtasks for each finding using `parent_task_id`. Map priorities: BLOCKING/FAIL → `critical`, HIGH/WARN → `high`, LOW/INFO → `low`. Include enough context in each subtask's description to fix the issue without re-reading the review.
- **Executing**: Move tasks to `in_progress` as work begins, then `done` when complete. `started_at` is set automatically on first move to `in_progress` — work duration = `completed_at - started_at`.
- **Committing**: Log the commit hash via `board_log_activity` on related tasks. When deploying a new service for the first time, create follow-up tasks: (1) verify deployment, (2) create CI/CD trigger, (3) push to production. These are predictable follow-ups — don't wait for the user to ask.
- **Tracking your own work**: The board isn't just for project plans — it tracks what YOU are doing right now. When you receive a batch of items, create a **parent task** for the batch and **subtasks** for each item using `parent_task_id`. Move each subtask to `in_progress` → `done` as you work. This creates a recoverable checkpoint: if the session dies mid-batch, the next agent sees exactly which items are done and which remain.
- **Sub-agent delegation**: When spawning specialist sub-agents that produce detailed findings, instruct them to write results directly to the board. Include the `project_id` and parent task ID in the prompt. The sub-agent returns only a brief summary. This keeps the main agent's context lean while preserving full detail on the board. Pattern: `"Write all findings to the Vibe Board (project: PROJECT_ID, parent task: TASK_ID). Return only a 1-sentence summary to me."`
- **All modes**: Log notable events via `board_log_activity`. Create additional tasks as new work is discovered — the board should always reflect the current state of work.

**Ending a session** (before the session ends or when the user signals they're done):
1. **Scan your tasks**: Check for any tasks still `in_progress` that you own — mark them `done` if complete, or add a `board_log_activity` comment explaining what remains.
2. **Create tasks for all next steps**: Every pending follow-up must exist as a board task BEFORE ending. Do not list future work only in handoff prose — if it's worth mentioning as a next step, it's worth tracking as a task.
3. Call `board_end_session` with progress_summary, handoff_notes (referencing task IDs, not just prose), and context_artifacts.

**This is the most critical step.** A session without handoff notes is a session whose context is lost forever.

**Proactive ending**: If you sense the conversation is getting long or you are approaching context limits, call `board_end_session` immediately — even a partial handoff is infinitely better than an abandoned session with no notes.

### Task Status Flow

backlog → todo → in_progress → review → done
                       ↓
                    blocked

### Priority Levels

- **critical**: Blocking other work, needs immediate attention
- **high**: Important, should be next
- **medium**: Standard priority (default)
- **low**: Nice to have, do when time allows

Want more?

The above is the standalone protocol. If you also want the broader framework — RIPER-CAT operational modes, a processor agent for delegated multi-specialist work, review-gate hooks, an autonomous Docker worker — see HuntsDesk/ve-kitdocs/ve-kit/02-VIBE-BOARD.md for the canonical reference and the rest of the kit.


License

MIT. See LICENSE.


Available Tools

14 tools
board_bulk_update_tasksA

Apply the same update to multiple tasks in one call. Useful for consolidation (move N tasks to a different project) or bulk status/priority/agent changes. All tasks are validated first — if any task is missing, NO tasks are updated (all-or-nothing). Activity log entries are written per task.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idsYesTask IDs to update (1-100)
project_idNoMove all listed tasks to this project. Target project must exist.
statusNoNew status for all listed tasks
priorityNoNew priority for all listed tasks
assigned_agentNoNew agent assignment for all listed tasks (empty string to unassign)

TDQS

A4.2/5.0
Behavior4/5

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

Discloses all-or-nothing validation and per-task activity logging. No annotations exist, so description carries full burden. Could mention authorization or idempotency.

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

Conciseness5/5

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

Three sentences, no fluff. Front-loaded with purpose and use cases.

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, behavior, and key constraint. No output schema, so missing return details. Missing permission or error handling info, but acceptable for bulk 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 covers all parameters with descriptions. Description adds overall semantics (same update applied to all) but does not deepen individual parameter meaning 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 'Apply the same update to multiple tasks' and gives specific use cases (consolidation, bulk status/priority/agent changes). Distinct from single-task update tool.

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

Usage Guidelines4/5

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

Describes when to use (consolidation, bulk changes) but lacks explicit when-not-to-use or alternatives. Context from siblings makes it clear.

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

board_create_projectA

Create a new project to group tasks and sessions under a shared goal. Projects are the top-level container — every task and session must belong to one. Use sparingly: create a new project for major initiatives (3+ related tasks), not for every piece of work. New projects are created with status='active' and priority='medium' (unless overridden). Returns { id, name, status, priority, message }.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProject name — short, human-readable title shown everywhere the project is referenced
descriptionNoOptional longer description of the project's scope, goals, or context. Omit if the name is self-explanatory.
priorityNoPortfolio-level importance — drives weekly focus and default sort order in board_get_projects. This is DISTINCT from task.priority, which orders execution within a single project. Use critical/high for projects that should dominate the coming week; medium for steady-state work (default); low for back-burner initiatives you want visible but not pressing. Defaults to 'medium' when omitted.
metadataNoOptional key/value metadata (e.g., linked doc paths, deadlines, stakeholder names). Merged shallowly on board_update_project.

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses defaults ('status='active', priority='medium' unless overridden'), the return structure, and the shallow merge behavior for metadata. It does not discuss auth or idempotency, but the description is sufficient 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.

Conciseness5/5

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

The description is five sentences, front-loaded with purpose, followed by usage guidelines, then defaults and return value. Every sentence adds value, with no redundancy or empty words. It is appropriately sized 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?

Given the lack of output schema and annotations, the description covers all essential aspects: creation purpose, defaults, return format, and usage guidelines. It also clarifies a nuanced parameter (priority). This completeness allows an AI agent to use the tool correctly without additional context.

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%, so baseline is 3. The description adds significant value: it explains the priority field's distinction from task.priority, suggests usage levels, and provides examples for metadata. Each parameter gets extra context beyond the schema, making this highly informative.

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 ('Create'), resource ('project'), and purpose ('to group tasks and sessions under a shared goal'). It distinguishes from sibling tools like board_create_task and board_create_session by emphasizing that projects are the top-level container. This meets the highest standard of purpose clarity.

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

Usage Guidelines4/5

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

The description provides explicit when-to-use guidance: 'Use sparingly: create a new project for major initiatives (3+ related tasks), not for every piece of work.' It implies that for small pieces of work, existing projects or task creation should be used. While it does not name alternatives explicitly, the sibling tool names provide enough context 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.

board_create_sessionA

Start a new work session on a project and get the previous session's handoff. Side effect: any currently-active sessions on the same project are automatically marked 'abandoned' with ended_at=now — there's only ever one active session per project. Call this at the start of every substantive session so the next one can pick up where you left off. The returned handoff includes: last_session (progress_summary + handoff_notes + context_artifacts from the previous run), active_tasks (priority-sorted non-done tasks), and recent_activity (last 20 activity_log entries). Returns { session_id, abandoned_sessions, handoff, message }.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID (from board_get_projects) the session operates on
session_typeNoSession type. 'solo' (default) = single agent, 'team' = coordinated multi-agent, 'background' = long-running async work like a Docker worker.
metadataNoOptional metadata (e.g., { worker_id: 'batch-123', hostname: 'mig-5' }). Stored on the session document verbatim.

TDQS

A4.7/5.0
Behavior5/5

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

Description clearly discloses the side effect: any currently-active sessions on the same project are automatically marked 'abandoned'. Also explains return structure in detail (handoff contents, activity log). Since no annotations are provided, the description fully covers behavioral 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?

Front-loaded with main purpose and side effect. Every sentence adds unique information (side effect, return fields, usage instruction). No fluff. Efficiently structured for an agent 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 explains the return object fields in detail (handoff sections, active_tasks, recent_activity). Fully covers what the agent needs to understand the tool's outcome and side effects.

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 meaning: for 'session_type', it explains the three types ('solo', 'team', 'background') with brief context; for 'metadata', provides example and states it is stored verbatim. 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?

Clearly states the tool starts a new work session and retrieves the previous handoff. Verbs are specific ('start', 'get') and resource identified ('session on a project'). Distinguishes from sibling tools like 'board_end_session' and 'board_get_handoff'.

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

Usage Guidelines4/5

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

Explicitly instructs to call at the start of every substantive session so the next one can pick up. Implies when to use but does not explicitly state when not to use or list alternatives. The side effect about aborting other sessions is clear context.

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

board_create_taskA

Create a task in a project. Status defaults to 'todo' and priority to 'medium' if not specified. If the initial status is 'in_progress', started_at is auto-set to now; if 'done', completed_at is auto-set. Writes an activity_log entry for audit. Use parent_task_id to create a subtask under another task (common pattern for decomposing work). Use depends_on to express ordering ('task B blocks on task A'). Returns { id, title, status, priority, message }.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID (from board_get_projects) where this task belongs
titleYesShort title — one line, what needs doing. Appears in handoff summaries and task lists.
descriptionNoLonger details: context, acceptance criteria, file refs, links. Recommended for any task that will outlive the current session.
statusNoInitial status. Default 'todo'. Use 'backlog' for not-yet-prioritized ideas.
priorityNoPriority — drives sort order in board_get_tasks and handoff. Default 'medium'. Reserve 'critical' for blocking issues.
assigned_agentNoAgent name responsible for this task (free-form string, e.g., 'main', 'code-reviewer', 'database-specialist'). Omit if unassigned.
parent_task_idNoIf this is a subtask, the ID of the parent task. Subtasks inherit no fields from the parent — they just share a parent_task_id link.
depends_onNoIDs of tasks that must complete before this one can start. The server does not auto-block — this is advisory metadata that callers can check.
riper_modeNoWhich RIPER phase this task belongs to. Useful when tasks span a multi-phase workflow.
metadataNoOptional key/value metadata (e.g., { file: 'src/foo.ts', line: 42, issue: 'XSS' }). Merged shallowly on board_update_task.

TDQS

A4.6/5.0
Behavior5/5

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

Discloses side effects: audits activity_log entry, auto-sets started_at/completed_at based on status, and notes depends_on is advisory. No annotations exist, so description fully covers behavioral traits.

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

Conciseness5/5

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

Six sentences, front-loaded with core purpose, every sentence adds value with no redundancy.

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

Completeness4/5

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

Covers key aspects: defaults, side effects, subtask pattern, dependency advisory, and return fields. Missing error handling or idempotency, but sufficient for a creation tool of this 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 coverage is 100%, but description adds value by explaining auto-set behavior for status transitions and contextual use of parent_task_id and depends_on beyond 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 creates a task in a project and details defaults and side effects. It distinguishes from siblings by explicitly covering creation-specific features like subtasks and dependencies.

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

Usage Guidelines4/5

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

Provides guidance on defaults, subtask creation (parent_task_id), and dependency usage (depends_on), and notes it's for decomposing work. Lacks explicit when-not-to-use or alternatives, but creation context is clear.

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

board_delete_taskA

Hard-delete a task and optionally its subtasks. Safety guard: by default only allows deleting tasks with status=done (prevents deleting in-progress work). Pass require_done=false to override. Also deletes associated activity_log entries. This is irreversible — cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask ID to delete
require_doneNoIf true (default), refuse to delete unless the task's status is 'done'. Pass false to force-delete a non-done task.
cascade_subtasksNoIf true, also delete all tasks with parent_task_id == task_id (each child also subject to require_done check). Default false — subtasks are orphaned but kept.

TDQS

A4.5/5.0
Behavior5/5

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

No annotations provided, so the description fully shoulders behavioral disclosure. It reveals irreversibility, hard-delete nature, cascading subtasks, deletion of activity_log entries, and the require_done safety guard. This is comprehensive.

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 sentences conveying all essential information without fluff. Front-loaded with the core action, then safety and side effects. Highly 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?

Despite no output schema, the description covers required parameters, side effects (activity_log), irreversibility, and safety guard. Sufficient 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?

Input schema has 100% coverage with descriptions for all 3 parameters. The description adds some extra nuance (e.g., 'Pass require_done=false to override'), but does not significantly exceed 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?

Clearly states it hard-deletes a task and optionally its subtasks. The verb 'delete' and resource 'task' are specific, and it distinguishes from siblings like board_update_task or board_create_task which are not delete operations.

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

Usage Guidelines4/5

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

Provides context on when to use (deleting done tasks) and safety guard to prevent deleting in-progress work. However, it does not explicitly compare with sibling tools or suggest alternatives for other operations.

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

board_end_sessionA

End the current session with a progress summary and handoff notes. This is the single most important call for cross-session continuity — without it, everything you did this session is invisible to the next one. Marks the session status='completed' and sets ended_at=now. The next board_create_session will surface this session's progress_summary, handoff_notes, and context_artifacts in its handoff response. Reference specific task IDs in handoff_notes (the next session reads this as prose, not a parsed list). Returns { session_id, status, message }.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession ID to end (the session_id returned from board_create_session at the start of this session)
progress_summaryYes1-3 sentences on what was accomplished this session. Shown verbatim at the start of the next session's handoff.
handoff_notesNoProse notes for the next session — reference task IDs for pending work ('task X is blocked on Y'), not vague descriptions. What the next agent needs to know to continue.
context_artifactsNoStructured context. Recognized keys: files_modified (paths touched), decisions_made (choices that set direction), blockers (what stopped progress), next_steps (what the next session should do). Additional keys allowed — passthrough.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description fully explains behavioral traits: marks session as 'completed', sets ended_at=now, and how the next session surfaces this session's data. It also specifies the return format. It could mention if the session can be reactivated or if ending is irreversible, but is sufficiently transparent.

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 5 sentences, each adding value. It is front-loaded with the most important point. Could be slightly more concise, but no extraneous information. Good structure.

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 shape. It integrates well with sibling tools (board_create_session). It documents required parameters and complex nested objects. Lacks error conditions or edge cases (e.g., ending already ended session), but is largely 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 adds value beyond schema: for handoff_notes it advises referencing task IDs and notes that the next session reads it as prose; for context_artifacts it explains recognized keys and that additional keys are passthrough. This helps the agent use parameters correctly.

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 ends the current session with a progress summary and handoff notes, and emphasizes its critical role in cross-session continuity. It distinguishes itself from siblings like board_create_session (which starts a session) and board_get_handoff (which retrieves handoff data).

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

Usage Guidelines4/5

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

The description explicitly says this call is essential for cross-session continuity and that without it, session work is invisible to the next one. It provides guidance on when to use it (at session end) and what to include (reference task IDs in handoff_notes). It does not explicitly state when not to use alternatives, but the context makes it clear.

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

board_get_activityA

Query the activity_log. Filter by task_id, session_id, agent_name, or action. Results are ordered newest-first and capped at limit (default 50, max 200). Useful for auditing what happened on a task, reconstructing a session, or following an agent's actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idNoFilter by related task ID
session_idNoFilter by related session ID
agent_nameNoFilter by agent name
actionNoFilter by action type
limitNoMax entries to return (default 50, max 200)

TDQS

A4.1/5.0
Behavior4/5

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

No annotations exist, so the description carries the burden. It discloses ordering (newest-first) and capping (default 50, max 200). It implies a read operation via 'Query', but could explicitly state it is read-only. Overall adequate.

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

Conciseness5/5

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

Two sentences, front-loaded with action, no wasted words. Each sentence adds value: what it does, filters, ordering, limit, use cases.

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

Completeness3/5

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

The description covers filters, ordering, and limit. However, without an output schema, it lacks return structure details. For a query tool with 5 optional parameters, it is mostly complete but could mention return fields.

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. The description groups the filters but adds little beyond schema descriptions, except for the limit default and max. The schema already specifies enum values for action.

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 'Query' and resource 'activity_log', and lists filter criteria and output characteristics. It clearly distinguishes itself from siblings like 'board_log_activity' and 'board_get_handoff'.

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

Usage Guidelines4/5

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

The description provides explicit use cases: auditing, reconstructing sessions, following actions. It mentions ordering and capping but does not explicitly state when not to use it or alternatives. However, the use cases are clear.

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

board_get_handoffA

Read the full handoff context for a project without starting a new session. board_create_session already returns this automatically at session start — use board_get_handoff mid-session when you need to re-check what was pending, or when a background agent needs context without claiming the session slot. Returns: project (id/name/status/description), last_session (progress_summary + handoff_notes + context_artifacts from the most recent completed/abandoned session, or null if none), active_tasks (all non-done tasks sorted critical → low priority, with id/title/status/priority/assigned_agent/riper_mode/depends_on), active_task_count, and recent_activity (last 20 activity_log entries, newest-first).

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID (from board_get_projects) to read handoff context for.

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, but description comprehensively lists returned fields. Does not disclose side effects or limitations, but for a read operation this is 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?

Description is informative and well-structured, front-loading purpose and usage. Slightly lengthy but 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?

Covers purpose, usage, and return shape thoroughly. No output schema but description details fields. Lacks error or rate limit info, but acceptable for a read tool.

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

Parameters3/5

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

Only one parameter with schema coverage 100%. Schema already describes it well; description adds no extra meaning beyond indicating it reads handoff 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 the tool reads handoff context for a project without starting a new session. It distinguishes from board_create_session, providing a specific verb and resource.

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: mid-session to re-check pending items or for background agents without claiming a session slot. Contrasts with board_create_session for session start.

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

board_get_projectsA

List all projects with per-status task counts. Call this at session start to discover available projects before creating tasks or sessions — the returned IDs are required inputs to board_create_session, board_create_task, and most other tools. Results are sorted by priority descending (critical → low), then updated_at descending as tiebreaker. Projects without an explicit priority are treated as 'medium' for sort purposes (backward compat). Each entry includes: id, name, description, status, priority, metadata, ISO-formatted created_at/updated_at, task_counts (e.g., {todo: 3, in_progress: 1, done: 12}), and total_tasks. Use this over board_get_tasks when you don't yet know which project to target.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter to a single status. Omit to return all projects regardless of status. Typical usage: 'active' for current work; 'paused' for projects intentionally on hold pending capacity or dependency; archived projects are usually hidden from day-to-day views.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses sorting order, default priority handling, and the exact output fields including task_counts. This provides comprehensive behavioral context for a read-only list tool.

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

Conciseness5/5

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

The description is front-loaded with the main action and context, every sentence adds value, and there is no redundant or extraneous information. It efficiently conveys all necessary 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 the tool's low complexity (one optional parameter) and no output schema, the description adequately explains the output structure, sorting, and usage context, making it complete for an AI 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?

The input schema covers 100% of parameters with a detailed description for the 'status' parameter, including usage notes. The tool description does not add additional parameter semantics beyond what the schema provides, 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 clearly states the tool's purpose: 'List all projects with per-status task counts.' It also explains the context of use (session start) and distinguishes from sibling board_get_tasks.

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 guides the agent to call this at session start before creating tasks, and notes that returned IDs are required for other tools. Directly recommends using this over board_get_tasks when target project is unknown.

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

board_get_taskA

Fetch a single task by its ID. Use this when you have a task ID (from board_create_task, a handoff note, or an activity_log entry) and need the full task record — for listing many tasks under a project, use board_get_tasks instead. Returns every field: id, project_id, title, description, status, priority, assigned_agent, parent_task_id, depends_on, riper_mode, metadata, and ISO timestamps (created_at, updated_at, started_at, completed_at). Returns { error } when the task doesn't exist rather than throwing — callers should check for the error key before treating the result as a task.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask ID to fetch. Get this from the response of board_create_task, from handoff notes, or from activity_log entries.

TDQS

A4.7/5.0
Behavior5/5

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

Without annotations, description fully discloses behavior: returns every field (listed), returns { error } on missing task instead of throwing, and advises callers to check for error key.

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

Conciseness5/5

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

Front-loaded with purpose, uses clear structure. The field listing is necessary due to no output schema, and the description is efficient without waste.

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 single-fetch tool with one parameter and no output schema, the description covers return format, error handling, and use case completely.

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?

Description largely echoes the schema's parameter description ('Task ID to fetch...'). While it adds context on usage, it does not provide significantly new semantics beyond the schema, so 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?

Description clearly states 'Fetch a single task by its ID', specifies verb and resource, and distinguishes from sibling board_get_tasks which lists many tasks.

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 tells when to use (when you have a task ID and need full record) and when not to (for listing many, use board_get_tasks). Also provides sources for obtaining the ID.

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

board_get_tasksA

List tasks in a project with optional filters. Results are sorted client-side by priority (critical → low) — not by creation time. By default excludes done tasks (pass include_done=true or set status='done' to see them). Use this for mid-session checks: almost always pass a status filter (e.g., 'in_progress' or 'todo') to keep responses tight. For a single task by ID, use board_get_task instead. Returns an array of task objects with id, project_id, title, description, status, priority, assigned_agent, parent_task_id, depends_on, riper_mode, metadata, and ISO timestamps (created_at, updated_at, started_at, completed_at).

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID (from board_get_projects) whose tasks to list
statusNoFilter to a single status. Omit to return all non-done tasks (unless include_done=true).
priorityNoFilter to a single priority. Omit to return all priorities.
assigned_agentNoFilter to tasks assigned to this agent name (exact match). Omit to return all assignments.
include_doneNoInclude tasks with status='done' (default false — done tasks are hidden to keep responses small). Ignored if an explicit status filter is set.

TDQS

A4.9/5.0
Behavior5/5

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

Discloses sorting by priority (client-side), default exclusion of done tasks, and the condition when include_done is ignored. Lists all returned fields including ISO timestamps. No annotations provided, so description carries full burden and meets it well.

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?

One paragraph, front-loaded with purpose and key behavioral note, then usage advice, alternative, and return format. 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?

Without output schema, description compensates by enumerating return fields. Covers behavior, filtering options, sorting, alternatives. Very 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 already provides descriptions for all 5 parameters (100% coverage). Description adds context like 'keep responses tight' and explains the logic of default done exclusion, but does not add new parameter-specific details beyond schema descriptions. However, the additional context is helpful for 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?

Description clearly states it lists tasks in a project with optional filters and distinguishes from board_get_task by pointing out the single-task counterpart. Specific verb 'list' and resource 'tasks'.

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 advice: use for mid-session checks, almost always pass a status filter to keep responses tight. Also points to board_get_task as an alternative for single task retrieval.

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

board_log_activityA

Append an entry to the activity_log — a write-only audit stream of what agents did, decided, or observed. Use this for: RESEARCH observations the next session should see, decisions made during PLAN/REVIEW, blockers, notable failures, or any context that shouldn't be lost. Most status/assignment changes via board_update_task and board_create_task already write their own activity_log entries automatically — call this explicitly for free-form comments (action='commented') or arbitrary actions. Read back via board_get_activity. Returns { id, action, message }.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_nameYesName of the agent (free-form string — e.g., 'main', 'code-reviewer', 'gcp-infra'). Used for filtering and audit.
actionYesAction type. Fixed enum. Most values correspond to lifecycle events written automatically by other tools; use 'commented' for free-form notes/observations logged manually.
detailsNoHuman-readable description of what happened. Required in practice for 'commented' — without it, the entry is empty.
task_idNoRelated task ID if this activity is about a specific task. Enables filtering via board_get_activity(task_id=...). Omit for project-level or session-level events.
session_idNoRelated session ID if this activity is scoped to a specific session. Enables filtering via board_get_activity(session_id=...).
metadataNoOptional structured payload (e.g., { commit_sha: 'abc123', build_id: 'build-456' }). Stored verbatim, not indexed.

TDQS

A4.8/5.0
Behavior4/5

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

No annotations provided, so the description carries the burden. It declares write-only behavior, return structure ({ id, action, message }), and that action is an enum. Does not discuss idempotency or side effects, but adequately conveys core 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?

Two paragraphs are concise and well-organized. The first sentence front-loads the purpose. Every sentence adds value, avoiding redundancy with the schema.

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 annotations and no output schema, the description thoroughly covers purpose, usage, parameter semantics, return value, and ties to sibling tools. Leaves no significant gaps for an agent to misunderstand.

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%, and the description adds significant context beyond the schema: explains use of 'commented' action, details requirement for 'commented', purpose of task_id/session_id for filtering, and that metadata is stored verbatim and unindexed.

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: appending entries to an activity_log as a write-only audit stream. It distinguishes itself from sibling tools that auto-log lifecycle events, emphasizing use for free-form comments and arbitrary 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?

Explicitly describes when to use (research observations, decisions, blockers, failures) and when not to (status/assignment changes are auto-logged). Provides alternatives like board_get_activity for reading and notes that board_update_task/board_create_task auto-log.

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

board_update_projectA

Update a project's status (active/paused/completed/archived), priority, name, description, or metadata. Use this to pause projects that are on hold, archive completed projects so they don't clutter the active list, or re-rank portfolio priority during weekly reviews. Pass null to description/metadata to clear them.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID to update
statusNoNew status. 'paused' means intentionally on hold pending capacity or dependency — not stalled, not archived. Revisit at priority review. Valid transitions: active→paused/completed/archived, paused→active/completed/archived, completed→archived/active, archived→active.
priorityNoPortfolio-level importance — drives weekly focus and default sort order in board_get_projects. DISTINCT from task.priority (which orders execution within a single project). Adjust during weekly portfolio reviews to promote/demote initiatives without touching the underlying tasks.
nameNoUpdated name
descriptionNoUpdated description. Pass null to clear; omit to leave unchanged.
metadataNoMetadata to shallow-merge with existing. Pass null to clear all metadata; omit to leave unchanged.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses behavioral traits like valid status transitions (active→paused, etc.) and the effect of passing null to description/metadata (clearing them). It also implies that archiving removes clutter from the active list. However, it doesn't mention permissions, reversibility of actions, or whether updates trigger side effects.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the main action. The first sentence states what it does, the second gives usage scenarios, and the third clarifies null handling. No extraneous information, every sentence 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?

Given the 6 parameters (1 required) and no output schema, the description covers the key functionality and clarifies important behaviors like status transitions and null semantics. However, it doesn't mention that project_id is required (though the schema lists it) or describe the response after a successful update. Still, it provides enough context for the agent to use the tool effectively.

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 detailed descriptions for each parameter. The tool description adds minimal extra nuance beyond summarizing the purpose. It reiterates the null behavior for description and metadata, but the schema already covers that. Therefore, the description does not significantly enhance parameter understanding beyond the schema.

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

Purpose5/5

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

The description clearly states it updates a project's status, priority, name, description, or metadata. It distinguishes from sibling tools by focusing on project-specific fields and providing concrete examples like pausing, archiving, and reranking priority.

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

Usage Guidelines4/5

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

The description gives explicit usage scenarios: pausing projects on hold, archiving completed ones, and reranking priority during weekly reviews. While it doesn't explicitly list when not to use or directly compare with siblings, the context is clear and actionable.

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

board_update_taskA

Update a task's status, assignment, priority, RIPER mode, project, or other fields. Pass project_id to move the task to a different project (the target project must exist; subtasks are NOT auto-moved — caller must move them separately if needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask ID to update
statusNoNew status
priorityNoNew priority
assigned_agentNoNew agent assignment (empty string to unassign)
riper_modeNoNew RIPER mode
titleNoUpdated title
descriptionNoUpdated description
depends_onNoUpdated dependency list
metadataNoMetadata to merge
project_idNoMove task to this project. Target project must exist. Subtasks are NOT auto-moved — their parent_task_id link will cross projects unless the caller also moves them. Returns a warning in the message if the task has subtasks still in the source project.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that moving a task to a different project requires the target project to exist and that subtasks are not automatically moved, which is a critical behavioral detail. However, it doesn't mention other side effects like idempotency or auth requirements.

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

Conciseness5/5

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

The description is extremely concise, consisting of two sentences that front-load the main purpose and immediately follow with the key behavioral caveat. Every sentence adds value with no redundancy.

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

Completeness4/5

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

Given the complexity (10 parameters including nested objects) and no output schema, the description covers the primary purpose and a critical behavioral detail. However, it does not explain the return value or error conditions, which would be helpful but are not required since no output schema exists.

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

Parameters3/5

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

The input schema has 100% description coverage, so the baseline is 3. The description adds value by explaining the project_id parameter's behavior (subtask handling warning). Other parameters are self-explanatory from the schema descriptions, so no significant additional meaning is needed.

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

Purpose5/5

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

The description explicitly states it updates a task's status, assignment, priority, RIPER mode, project, or other fields, distinguishing it from sibling tools like board_create_task or board_delete_task. It uses specific verbs and resources.

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

Usage Guidelines4/5

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

The description clearly indicates when to use the tool (to update various task fields) and includes a specific warning about moving tasks between projects and the need to handle subtasks separately. While it does not explicitly list alternatives, it provides sufficient context for usage decisions.

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. Dates show when Glama detected each change.

  1. 5 tool updates
    • Changedboard_create_project1 field changed
      • addedInput schema / properties / priority
        Added value: +{
        +  "description": "Portfolio-level importance — drives weekly focus and default sort order in board_get_projects. This is DISTINCT from task.priority, which orders execution within a single project. Use critical/high for projects that should dominate the coming week; medium for steady-state work (default); low for back-burner initiatives you want visible but not pressing. Defaults to 'medium' when omitted.",
        +  "enum": [
        +    "critical",
        +    "high",
        +    "medium",
        +    "low"
        +  ],
        +  "type": "string"
        +}
    • Changedboard_get_handoff1 field changed
      • changedInput schema / properties / project_id / description
        Previous value: -"Project ID"New value: +"Project ID (from board_get_projects) to read handoff context for."
    • Changedboard_get_projects2 fields changed
      • changedInput schema / properties / status / description
        Previous value: -"Filter by project status"New value: +"Filter to a single status. Omit to return all projects regardless of status. Typical usage: 'active' for current work; 'paused' for projects intentionally on hold pending capacity or dependency; archived projects are usually hidden from day-to-day views."
      • changedInput schema / properties / status / enum
        Previous value: -[
        -  "active",
        -  "completed",
        -  "archived"
        -]New value: +[
        +  "active",
        +  "paused",
        +  "completed",
        +  "archived"
        +]
    • Changedboard_get_task1 field changed
      • changedInput schema / properties / task_id / description
        Previous value: -"Task ID to fetch"New value: +"Task ID to fetch. Get this from the response of board_create_task, from handoff notes, or from activity_log entries."
    • Changedboard_update_project3 fields changed
      • addedInput schema / properties / priority
        Added value: +{
        +  "description": "Portfolio-level importance — drives weekly focus and default sort order in board_get_projects. DISTINCT from task.priority (which orders execution within a single project). Adjust during weekly portfolio reviews to promote/demote initiatives without touching the underlying tasks.",
        +  "enum": [
        +    "critical",
        +    "high",
        +    "medium",
        +    "low"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / status / description
        Previous value: -"New status. Valid transitions: active→completed/archived, completed→archived/active, archived→active."New value: +"New status. 'paused' means intentionally on hold pending capacity or dependency — not stalled, not archived. Revisit at priority review. Valid transitions: active→paused/completed/archived, paused→active/completed/archived, completed→archived/active, archived→active."
      • changedInput schema / properties / status / enum
        Previous value: -[
        -  "active",
        -  "completed",
        -  "archived"
        -]New value: +[
        +  "active",
        +  "paused",
        +  "completed",
        +  "archived"
        +]
  2. 14 tool updatesv1.0.0
    • First observedboard_bulk_update_tasks
    • First observedboard_create_project
    • First observedboard_create_session
    • First observedboard_create_task
    • First observedboard_delete_task
    • First observedboard_end_session
    • First observedboard_get_activity
    • First observedboard_get_handoff
    • First observedboard_get_projects
    • First observedboard_get_task
    • First observedboard_get_tasks
    • First observedboard_log_activity
    • First observedboard_update_project
    • First observedboard_update_task

TDQS

A4.4/5.0
Disambiguation5/5

Each tool targets a unique resource/action combination—project, session, task, activity, and handoff—with no overlap. Singular vs plural 'get' tools clearly separate single-fetch from list-fetch.

Naming Consistency5/5

All tools follow the 'board_verb_noun' snake_case pattern consistently. Verbs like create, get, update, delete, end, log, bulk_update are uniformly applied, and noun forms (singular/plural) match their function.

Tool Count5/5

14 tools is well-scoped for a board management server covering tasks, projects, sessions, and activity logging. The count feels neither bloated nor sparse—each tool serves a clear, necessary purpose.

Completeness4/5

Core CRUD operations are present for tasks and projects, plus session lifecycle and activity tracking. Minor gaps exist: no project deletion (only status update), no single-project fetch by ID, and no session list endpoint. These are non-critical for typical workflows.

Maintenance

ActivityNo data
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Persistent, cross-session task management for Claude Code. 24 MCP tools for tasks, projects, dependencies, and docs. 7 skills for planning, standups, and handoffs. Event-sourced storage with per-project isolation.
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Persistent knowledge base tools for Claude Code that store project context, decisions, and patterns locally across sessions, eliminating cold starts.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/HuntsDesk/ve-vibe-board'

If you have feedback or need assistance with the MCP directory API, please join our Discord server