MD Planner MCP Server
Markdown-based project management MCP server with directory storage.
Tools
Task (15)
list_tasks List all tasks in the project. Filter by section, project, or milestone.
| Name | Type | Required | Description |
|---|---|---|---|
| assignee | string | optional | Filter by assignee person ID (matches config.assignee) |
| completed | boolean | optional | Filter by completion state (false = open only, true = completed only) |
| milestone | string | optional | Filter by milestone name (matches config.milestone) |
| priority | integer | optional | Filter by priority level (1 = highest, 5 = lowest) |
| project | string | optional | Filter by project name (matches config.project) |
| ready | boolean | optional | Dependency-aware filter. true = tasks whose blocked_by are all Done or completed. false = tasks with open blockers. Evaluated after all other filters. |
| section | string | optional | Filter by section name e.g. 'Todo', 'In Progress', 'Done' |
| tags | array | optional | Filter by tags — returns tasks that have ANY of the given tags |
get_task Get a single task by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Task ID |
get_task_by_name Get a task by its title (case-insensitive). Prefer this over list_tasks when the exact title is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Task title |
get_task_slim Get a minimal view of a task by ID. Returns only id, title, description, section, milestone, blockedBy, and the last N comments. Omits config fields, timestamps, revision, assignee, effort, dates, and files. Use instead of get_task to reduce token usage when full task details are not needed.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Task ID |
| last_comments | integer | optional | Number of most-recent comments to include (default: 5, max: 20) |
create_task Create a new task in the project.
| Name | Type | Required | Description |
|---|---|---|---|
| assignee | string | optional | |
| claim | boolean | optional | Atomic create-and-claim. Sets section to 'In Progress', records claimedBy/claimedAt. Requires assignee. |
| description | string | optional | Task description (markdown) |
| due_date | string | optional | Due date (YYYY-MM-DD) |
| effort | integer | optional | Effort estimate (story points or hours) |
| milestone | string | optional | Milestone name |
| parentId | string | optional | Parent task ID — creates this task as a subtask |
| planned_end | string | optional | Planned end date (YYYY-MM-DD) |
| planned_start | string | optional | Planned start date (YYYY-MM-DD) |
| priority | integer | optional | |
| project | string | optional | Project name |
| section | string | optional | Section / status (default: 'Todo') |
| tags | array | optional | |
| title | string | required | Task title |
| withResult | boolean | optional | Return the full created task (default: false — returns only { id }) |
update_task Update an existing task's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| agent_id | string | optional | Person ID of the calling agent. When provided, In Progress tasks claimed by a different agent are rejected with CLAIM_GUARD error. |
| assignee | string | optional | |
| blocked_by | array | optional | List of task IDs this task is blocked by |
| claimed_at | string | optional | ISO timestamp when the task was claimed |
| claimed_by | string | optional | Person ID of the agent actively working on this task |
| completed | boolean | optional | |
| description | string | optional | Full replacement description (markdown) |
| due_date | string | optional | |
| effort | integer | optional | Effort estimate (story points or hours) |
| expected_revision | integer | optional | If provided, reject with REVISION_CONFLICT when the task's current revision does not match. Use for optimistic locking in multi-agent scenarios. |
| files | array | optional | Relevant source file paths (relative to codebase root). Surfaced in get_context_pack as relevantFiles. |
| id | string | required | Task ID |
| milestone | string | optional | Milestone name |
| planned_end | string | optional | Planned end date (YYYY-MM-DD) |
| planned_start | string | optional | Planned start date (YYYY-MM-DD) |
| priority | integer | optional | |
| project | string | optional | Project name |
| section | string | optional | |
| tags | array | optional | |
| title | string | optional | |
| withResult | boolean | optional | Return the full updated task (default: false — returns only { id, success }) |
add_task_comment Add a comment to a task's comment thread. Use this to track progress, note what was done, or record a commit hash. Comments are stored separately from the task description.
| Name | Type | Required | Description |
|---|---|---|---|
| author | string | optional | Author name (defaults to 'Claude' when called from MCP) |
| comment | string | required | Comment text. E.g. '[v0.7.1] Fixed by commit abc1234 — ...' |
| id | string | required | Task ID |
| metadata | object | optional | Structured metadata for machine-readable progress. Predefined keys: action (started|progress|completed|blocked|deferred), commit, branch, files_changed, next_step |
add_task_attachments Add file attachment paths to a task's attachments frontmatter field.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Task ID |
| paths | array | required | List of file paths relative to the project directory (e.g. ['uploads/2026/03/01/file.pdf']) |
move_task Move a task to a different section (column). Optionally specify a position for ordered placement.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Task ID |
| position | integer | optional | Zero-based position within the section (omit to append at end) |
| section | string | required | Target section name (e.g. 'Todo', 'In Progress', 'Done') |
delete_task Delete a task by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Task ID |
claim_task Atomically claim a task: move it to 'In Progress' and assign it. Fails with CLAIM_CONFLICT if the task is not in the expected section (default: 'Todo'). Use this instead of update_task when multiple agents may compete for the same task.
| Name | Type | Required | Description |
|---|---|---|---|
| assignee | string | required | Person ID of the claimant |
| expected_revision | integer | optional | If provided, reject with REVISION_CONFLICT when the task's current revision does not match. |
| expected_section | string | optional | Section the task must be in to claim it (default: 'Todo') |
| id | string | required | Task ID |
| withResult | boolean | optional | Return the full claimed task (default: false — returns only { id, success }) |
batch_update_tasks Update multiple tasks in a single call. Each entry follows the same fields as update_task. Returns per-task success/error results. Use this to move a batch to In Progress, add comments to several tasks, or move a batch to Done in one round-trip.
| Name | Type | Required | Description |
|---|---|---|---|
| updates | array | required | Array of task updates (1-50). Each entry needs at least an id. |
get_next_task Find the highest-priority ready task matching an agent's skills. Cross-references task tags with the agent's person.skills array, sorted by priority. Falls back to untagged tasks, then any task. Returns one task or null.
| Name | Type | Required | Description |
|---|---|---|---|
| agent_id | string | required | Person ID of the agent |
| exclude_tags | array | optional | Skip tasks that have ANY of these tags |
| project | string | optional | Filter by project name (matches config.project) |
| section | string | optional | Section to search in (default: 'Todo') |
approve_task Approve a task in 'Pending Review'. Moves it to Done. Typically called by the human owner or a delegated reviewer.
| Name | Type | Required | Description |
|---|---|---|---|
| decided_by | string | optional | Person ID of the approver |
| feedback | string | optional | Optional approval note |
| id | string | required | Task ID |
reject_task Reject a task in 'Pending Review'. Moves it back to In Progress and reassigns to the original requesting agent. Structured rejection type allows the agent to route without parsing prose feedback.
| Name | Type | Required | Description |
|---|---|---|---|
| decided_by | string | optional | Person ID of the reviewer |
| feedback | string | required | Explanation of what needs to change (required on rejection) |
| id | string | required | Task ID |
| rejection_type | string | required | Structured rejection category |
Claim (1)
sweep_stale_claims Release tasks whose claim has expired. Scans In Progress tasks where claimedAt + TTL has passed, moves them back to Todo, clears claimedBy/claimedAt, and adds a system comment. Returns the list of released task IDs.
| Name | Type | Required | Description |
|---|---|---|---|
| ttl_minutes | integer | optional | Claim TTL in minutes (default: 30). Tasks claimed longer ago are released. |
Approval (2)
request_approval Submit a task for human review. Call this instead of moving the task to Done. Attaches a structured summary (with optional commit hash) and moves the task to 'Pending Review'. At the next boot session the verdict will appear in inProgress tasks (if rejected) or the task will be in Done (if approved).
| Name | Type | Required | Description |
|---|---|---|---|
| artifact_urls | array | optional | Links to PRs, releases, or previews |
| commit_hash | string | optional | Short git commit hash |
| id | string | required | Task ID |
| requested_by | string | optional | Person ID of the requesting agent (defaults to current task assignee) |
| summary | string | required | What was done — markdown. Include what changed, why, and how to verify. |
list_pending_approvals List all tasks in 'Pending Review' — the human owner's review queue. Returns stubs: id, title, requestedBy, requestedAt, summary excerpt, commit hash.
| Name | Type | Required | Description |
|---|---|---|---|
| project | string | optional | Filter by project name (case-insensitive) |
Note (7)
list_notes List all notes in the project. Filter by title or project to stay focused.
| Name | Type | Required | Description |
|---|---|---|---|
| project | string | optional | Filter by portfolio project name (exact match, case-insensitive). Use this to scope notes to a specific codebase or project. |
| search | string | optional | Filter by title (case-insensitive substring match) |
get_note Get a single note by its ID, including full content.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Note ID |
get_notes_batch Fetch multiple notes by ID in one call. Returns full content for each found note and lists IDs that were not found. Use this after get_context_pack returns note stubs to avoid N sequential get_note round-trips.
| Name | Type | Required | Description |
|---|---|---|---|
| ids | array | required | Array of note IDs to fetch |
get_note_by_name Get a note by its title (case-insensitive). Prefer this over list_notes when the exact title is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Note title |
create_note Create a new note.
| Name | Type | Required | Description |
|---|---|---|---|
| content | string | optional | Note body (markdown) |
| project | string | optional | Portfolio project name to associate with this note |
| title | string | required | Note title |
update_note Update an existing note's title, content, or project.
| Name | Type | Required | Description |
|---|---|---|---|
| content | string | optional | Full replacement content (markdown) |
| id | string | required | Note ID |
| project | string | optional | Portfolio project name to associate with this note |
| title | string | optional |
delete_note Delete a note by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Note ID |
Goal (6)
list_goals List all goals in the project. Optionally filter by status.
| Name | Type | Required | Description |
|---|---|---|---|
| status | string | optional | Filter by goal status |
| type | string | optional | Filter by goal type |
get_goal Get a single goal by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Goal ID |
get_goal_by_name Get a goal by its title (case-insensitive). Prefer this over list_goals when the title is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Goal title |
create_goal Create a new goal in the project.
| Name | Type | Required | Description |
|---|---|---|---|
| description | string | optional | Goal description (markdown) |
| endDate | string | optional | End date (YYYY-MM-DD) |
| kpi | string | optional | Key performance indicator |
| kpiMetric | string | optional | KPI snapshot metric to track (e.g. mrr, active_users, growth_rate) |
| kpiTarget | number | optional | Target value for the KPI metric |
| linkedPortfolioItems | array | optional | Portfolio item IDs this goal is linked to |
| startDate | string | optional | Start date (YYYY-MM-DD) |
| status | string | optional | Goal status (default: planning) |
| title | string | required | Goal title |
| type | string | optional | Goal type (default: project) |
update_goal Update an existing goal's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| description | string | optional | |
| endDate | string | optional | |
| id | string | required | Goal ID |
| kpi | string | optional | |
| kpiMetric | string | optional | KPI snapshot metric to track (null to clear) |
| kpiTarget | number | optional | Target value for the KPI metric (null to clear) |
| linkedPortfolioItems | array | optional | Portfolio item IDs this goal is linked to |
| startDate | string | optional | |
| status | string | optional | |
| title | string | optional | |
| type | string | optional |
delete_goal Delete a goal by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Goal ID |
Meeting (6)
list_meetings List all meetings sorted by date descending.
| Name | Type | Required | Description |
|---|---|---|---|
| date_from | string | optional | Only include meetings on or after this date (YYYY-MM-DD) |
| date_to | string | optional | Only include meetings on or before this date (YYYY-MM-DD) |
| open_actions_only | boolean | optional | Only include meetings that have at least one open action item |
get_meeting Get a single meeting by its ID, including agenda, notes, and action items.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Meeting ID |
get_meeting_by_name Get a meeting by its title (case-insensitive). Prefer this over list_meetings when the title is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Meeting title |
create_meeting Create a new meeting record.
| Name | Type | Required | Description |
|---|---|---|---|
| actions | array | optional | Action items for this meeting |
| agenda | string | optional | Meeting agenda (markdown) |
| attendees | array | optional | List of attendee names or person IDs |
| date | string | required | Meeting date (YYYY-MM-DD or ISO datetime) |
| notes | string | optional | Meeting notes (markdown body) |
| title | string | required | Meeting title |
update_meeting Update an existing meeting's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| actions | array | optional | Full replacement list of action items |
| agenda | string | optional | |
| attendees | array | optional | |
| date | string | optional | |
| id | string | required | Meeting ID |
| notes | string | optional | |
| title | string | optional |
delete_meeting Delete a meeting by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Meeting ID |
Journal (5)
list_journal_entries List all journal entries sorted by date descending.
No input parameters.
get_journal_entry Get a single journal entry by its ID, including full body.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Journal entry ID |
create_journal_entry Create a new journal entry.
| Name | Type | Required | Description |
|---|---|---|---|
| body | string | optional | Entry body (markdown) |
| date | string | required | Entry date (YYYY-MM-DD) |
| mood | string | optional | Optional mood |
| tags | array | optional | Optional tags |
| title | string | optional | Optional title |
update_journal_entry Update an existing journal entry's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| body | string | optional | |
| date | string | optional | |
| id | string | required | Journal entry ID |
| mood | string | optional | |
| tags | array | optional | |
| title | string | optional |
delete_journal_entry Delete a journal entry by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Journal entry ID |
People (4)
list_people List all people in the project's people registry.
| Name | Type | Required | Description |
|---|---|---|---|
| department | string | optional | Filter by department |
get_people_tree Get the org chart as a hierarchical tree. Each node has a person record with a 'children' array of their direct reports.
No input parameters.
get_people_summary Get people registry summary statistics: total headcount, breakdown by department, managers count.
No input parameters.
get_people_departments List all department names used in the people registry.
No input parameters.
Person (5)
get_person Get a single person by their ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Person ID |
get_person_reports Get the direct reports for a given person.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Person ID |
create_person Add a new person to the people registry.
| Name | Type | Required | Description |
|---|---|---|---|
| agentType | string | optional | Agent type: human, ai, or hybrid |
| departments | array | optional | |
| string | optional | ||
| hoursPerDay | number | optional | Working hours per day (used by capacity planning) |
| models | array | optional | AI models this agent can use |
| name | string | required | Full name |
| notes | string | optional | |
| phone | string | optional | |
| reportsTo | string | optional | Person ID of direct manager |
| role | string | optional | Role within the team (e.g. 'developer', 'designer') |
| skills | array | optional | Capabilities (e.g. ['go', 'typescript', 'code-review']) |
| startDate | string | optional | Start date (YYYY-MM-DD) |
| systemPrompt | string | optional | Default system prompt / persona for AI agents |
| title | string | optional | Job title |
| workingDays | array | optional | Working days of the week (e.g. ['Mon','Tue','Wed','Thu','Fri']) |
update_person Update an existing person's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| agentType | string | optional | Agent type: human, ai, or hybrid |
| currentTaskId | string | optional | Task ID the agent is currently working on |
| departments | array | optional | |
| string | optional | ||
| hoursPerDay | number | optional | |
| id | string | required | Person ID |
| lastSeen | string | optional | ISO timestamp of last agent interaction (auto-set or manual) |
| models | array | optional | AI models this agent can use |
| name | string | optional | |
| notes | string | optional | |
| phone | string | optional | |
| reportsTo | string | optional | |
| role | string | optional | |
| skills | array | optional | Capabilities (e.g. ['go', 'typescript', 'code-review']) |
| startDate | string | optional | |
| status | string | optional | Agent availability status |
| systemPrompt | string | optional | Default system prompt / persona for AI agents |
| title | string | optional | |
| workingDays | array | optional |
delete_person Delete a person from the registry by their ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Person ID |
Agent (1)
agent_heartbeat Update an agent's lastSeen timestamp and optionally set status and currentTaskId. Call periodically to signal the agent is alive.
| Name | Type | Required | Description |
|---|---|---|---|
| currentTaskId | string | optional | Task ID the agent is currently working on (empty string to clear) |
| id | string | required | Person ID of the agent |
| status | string | optional | Agent status (default: keeps current value) |
Project (7)
get_project_config Get project metadata: name, description, status, features, and configuration.
No input parameters.
update_project_config Update project name, description, and/or feature visibility configuration.
| Name | Type | Required | Description |
|---|---|---|---|
| description | array | optional | Project description lines (markdown) |
| features | array | optional | Enabled feature keys (e.g. ['tasks','notes','goals']). Replaces the full features list. |
| name | string | optional | Project name |
list_project_value_boards List all Project Value Boards.
No input parameters.
get_project_value_board Get a single Project Value Board by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Board ID |
create_project_value_board Create a new Project Value Board.
| Name | Type | Required | Description |
|---|---|---|---|
| benefit | any | optional | Expected benefits |
| customerSegments | array | optional | Target customer segments |
| date | string | optional | Date (YYYY-MM-DD) |
| problem | any | optional | Problems to solve |
| solution | any | optional | Proposed solutions |
| title | string | required | Board title |
update_project_value_board Update an existing Project Value Board.
| Name | Type | Required | Description |
|---|---|---|---|
| benefit | any | optional | |
| customerSegments | array | optional | |
| date | string | optional | |
| id | string | required | Board ID |
| problem | any | optional | |
| solution | any | optional | |
| title | string | optional |
delete_project_value_board Delete a Project Value Board by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Board ID |
Analytic (1)
get_analytics Get cross-entity project health analytics: task completion rates, goal progress, open action items, storage usage, people count, and more.
No input parameters.
Search (1)
search Full-text search across all entity types (tasks, notes, goals, meetings, people, etc.). Requires the server to be started with the --cache flag.
| Name | Type | Required | Description |
|---|---|---|---|
| limit | integer | optional | Maximum number of results (default: 20) |
| project | string | optional | Filter results to entities belonging to this project name (case-insensitive). Entities without a project field are excluded when this is set. |
| query | string | required | Search query string |
| types | array | optional | Optional list of entity types to restrict the search (e.g. ['task', 'note', 'goal', 'meeting', 'person']) |
Milestone (7)
list_milestones List all milestones in the project.
| Name | Type | Required | Description |
|---|---|---|---|
| project | string | optional | Filter by project name (matches milestone.project) |
| status | string | optional | Filter by milestone status |
get_milestone Get a single milestone by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Milestone ID |
get_milestone_by_name Get a milestone by its name (case-insensitive). Prefer this over list_milestones when the name is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Milestone name |
get_milestone_summary Get a milestone's tasks pre-grouped by section with slim fields. Returns milestone metadata plus tasks grouped into In Progress, Pending Review, Todo, Done (and any other sections). Each task stub has only id, title, and tags. Replaces list_tasks { milestone } + manual grouping — one call, ~3 KB instead of ~60 KB.
| Name | Type | Required | Description |
|---|---|---|---|
| milestone | string | required | Milestone name (e.g. 'v0.36.2') |
| project | string | optional | Filter tasks by project name (case-insensitive) |
create_milestone Create a new milestone. project and name together must be unique — creating a duplicate returns an error.
| Name | Type | Required | Description |
|---|---|---|---|
| description | string | optional | Short description of what this milestone delivers (strongly recommended) |
| name | string | required | Milestone name |
| project | string | required | Project this milestone belongs to (required to keep milestones unique per project) |
| status | string | optional | |
| target | string | optional | Target date (YYYY-MM-DD) |
update_milestone Update an existing milestone's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| description | string | optional | |
| id | string | required | Milestone ID |
| name | string | optional | |
| project | string | optional | |
| status | string | optional | |
| target | string | optional | Target date (YYYY-MM-DD) |
delete_milestone Delete a milestone by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Milestone ID |
Idea (6)
list_ideas List all ideas in the project.
| Name | Type | Required | Description |
|---|---|---|---|
| category | string | optional | Filter by category |
get_idea Get a single idea by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Idea ID |
get_idea_by_name Get an idea by its title (case-insensitive). Prefer this over list_ideas when the title is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Idea title |
create_idea Create a new idea.
| Name | Type | Required | Description |
|---|---|---|---|
| category | string | optional | |
| description | string | optional | Idea description (markdown) |
| end_date | string | optional | YYYY-MM-DD |
| priority | string | optional | |
| resources | string | optional | |
| start_date | string | optional | YYYY-MM-DD |
| title | string | required | Idea title |
update_idea Update an existing idea's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| category | string | optional | |
| description | string | optional | |
| end_date | string | optional | |
| id | string | required | Idea ID |
| priority | string | optional | |
| resources | string | optional | |
| start_date | string | optional | |
| title | string | optional |
delete_idea Delete an idea by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Idea ID |
Brainstorm (6)
list_brainstorms List all brainstorms in the project.
| Name | Type | Required | Description |
|---|---|---|---|
| tag | string | optional | Filter by tag |
get_brainstorm Get a single brainstorm by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Brainstorm ID |
get_brainstorm_by_name Get a brainstorm by its title (case-insensitive). Prefer this over list_brainstorms when the title is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Brainstorm title |
create_brainstorm Create a new brainstorm session. Questions are H2-level prompts with optional answers.
| Name | Type | Required | Description |
|---|---|---|---|
| linked_goals | array | optional | Goal IDs to link |
| linked_projects | array | optional | Project IDs to link |
| linked_tasks | array | optional | Task IDs to link |
| questions | array | optional | Questions with optional answers |
| tags | array | optional | |
| title | string | required | Brainstorm title |
update_brainstorm Update an existing brainstorm's fields or questions.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Brainstorm ID |
| linked_goals | array | optional | |
| linked_projects | array | optional | |
| linked_tasks | array | optional | |
| questions | array | optional | |
| tags | array | optional | |
| title | string | optional |
delete_brainstorm Delete a brainstorm by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Brainstorm ID |
Reflection (12)
list_reflection_templates List all reflection templates in the project.
| Name | Type | Required | Description |
|---|---|---|---|
| tag | string | optional | Filter by tag |
get_reflection_template Get a single reflection template by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Template ID |
get_reflection_template_by_name Get a reflection template by its title (case-insensitive). Prefer this over list_reflection_templates when the title is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Template title |
create_reflection_template Create a new reflection template — a reusable set of questions for recurring self-inquiry sessions.
| Name | Type | Required | Description |
|---|---|---|---|
| description | string | optional | What this template is for |
| questions | array | optional | Question prompts (H2-level headers in the template file) |
| tags | array | optional | |
| title | string | required | Template title |
update_reflection_template Update an existing reflection template.
| Name | Type | Required | Description |
|---|---|---|---|
| description | string | optional | |
| id | string | required | Template ID |
| questions | array | optional | |
| tags | array | optional | |
| title | string | optional |
delete_reflection_template Delete a reflection template by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Template ID |
list_reflections List all reflections in the project.
| Name | Type | Required | Description |
|---|---|---|---|
| tag | string | optional | Filter by tag |
| template_id | string | optional | Filter by template ID |
get_reflection Get a single reflection by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Reflection ID |
get_reflection_by_name Get a reflection by its title (case-insensitive). Prefer this over list_reflections when the title is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Reflection title |
create_reflection Create a new reflection session. Optionally load questions from a template. Questions are H2-level prompts with optional answers.
| Name | Type | Required | Description |
|---|---|---|---|
| linked_goals | array | optional | Goal IDs to link |
| linked_projects | array | optional | Project IDs to link |
| linked_tasks | array | optional | Task IDs to link |
| questions | array | optional | Questions with optional answers |
| tags | array | optional | |
| template_id | string | optional | Template ID to pre-populate questions from |
| title | string | required | Reflection title |
update_reflection Update an existing reflection's fields or answers. Reflections are immutable snapshots — changing the template does not alter existing reflections.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Reflection ID |
| linked_goals | array | optional | |
| linked_projects | array | optional | |
| linked_tasks | array | optional | |
| questions | array | optional | |
| tags | array | optional | |
| template_id | string | optional | |
| title | string | optional |
delete_reflection Delete a reflection by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Reflection ID |
Portfolio (9)
list_portfolio List all portfolio projects.
| Name | Type | Required | Description |
|---|---|---|---|
| status | string | optional | Filter by status (e.g. active, completed, archived) |
get_portfolio_item Get a single portfolio project by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Portfolio item ID |
get_portfolio_by_name Get a portfolio project by its name (case-insensitive). Prefer this over list_portfolio when the project name is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Portfolio project name |
get_portfolio_summary Get aggregated portfolio statistics: total count, breakdown by status, breakdown by category, average progress, total revenue, total expenses.
No input parameters.
create_portfolio_item Create a new portfolio project.
| Name | Type | Required | Description |
|---|---|---|---|
| billing_customer_id | string | optional | Billing customer ID linking this project to a billing customer |
| brain_managed | boolean | optional | Whether this project is managed by a brain protocol |
| category | string | optional | |
| client | string | optional | Client name |
| description | string | optional | |
| end_date | string | optional | YYYY-MM-DD |
| expenses | number | optional | Total expenses |
| github_repo | string | optional | GitHub repository in owner/repo format |
| kpis | array | optional | Key performance indicators |
| license | string | optional | |
| linked_goals | array | optional | Goal IDs linked to this portfolio item |
| logo | string | optional | Logo path (relative to project dir) or external URL |
| name | string | required | Project name |
| progress | number | optional | Completion percentage (0–100) |
| revenue | number | optional | Total revenue |
| start_date | string | optional | YYYY-MM-DD |
| status | string | optional | Status (e.g. active, completed, archived, production, maintenance, cancelled) |
| team | array | optional | Team member names or person IDs |
| tech_stack | array | optional | |
| urls | array | optional | Project URLs (website, repo, docs, etc.) |
update_portfolio_item Update an existing portfolio project's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| billing_customer_id | string | optional | |
| brain_managed | boolean | optional | Whether this project is managed by a brain protocol |
| category | string | optional | |
| client | string | optional | |
| description | string | optional | |
| end_date | string | optional | |
| expenses | number | optional | |
| github_repo | string | optional | |
| id | string | required | Portfolio item ID |
| kpis | array | optional | |
| license | string | optional | |
| linked_goals | array | optional | Goal IDs linked to this portfolio item |
| logo | string | optional | |
| name | string | optional | |
| progress | number | optional | |
| revenue | number | optional | |
| start_date | string | optional | |
| status | string | optional | |
| team | array | optional | |
| tech_stack | array | optional | |
| urls | array | optional |
add_portfolio_status_update Add a status update entry to a portfolio project's timeline.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Portfolio item ID |
| message | string | required | Status update message |
delete_portfolio_status_update Delete a status update entry from a portfolio project.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Portfolio item ID |
| update_id | string | required | Status update ID to delete |
delete_portfolio_item Delete a portfolio project by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Portfolio item ID |
Moscow (5)
list_moscow List all MoSCoW analyses in the project.
No input parameters.
get_moscow Get a single MoSCoW analysis by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | MoSCoW analysis ID |
create_moscow Create a new MoSCoW analysis.
| Name | Type | Required | Description |
|---|---|---|---|
| date | string | optional | Date (YYYY-MM-DD) |
| title | string | required | Analysis title |
update_moscow Update a MoSCoW analysis (title, description, or item lists).
| Name | Type | Required | Description |
|---|---|---|---|
| could | array | optional | Could-have items |
| description | string | optional | |
| id | string | required | MoSCoW analysis ID |
| must | array | optional | Must-have items |
| should | array | optional | Should-have items |
| title | string | optional | |
| wont | array | optional | Won't-have items |
delete_moscow Delete a MoSCoW analysis by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | MoSCoW analysis ID |
Eisenhower (5)
list_eisenhower List all Eisenhower matrices in the project.
No input parameters.
get_eisenhower Get a single Eisenhower matrix by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Eisenhower matrix ID |
create_eisenhower Create a new Eisenhower matrix.
| Name | Type | Required | Description |
|---|---|---|---|
| date | string | optional | Date (YYYY-MM-DD) |
| title | string | required | Matrix title |
update_eisenhower Update an Eisenhower matrix (title or quadrant items).
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Eisenhower matrix ID |
| notUrgentImportant | array | optional | Not Urgent + Important items |
| notUrgentNotImportant | array | optional | Not Urgent + Not Important items |
| title | string | optional | |
| urgentImportant | array | optional | Urgent + Important items |
| urgentNotImportant | array | optional | Urgent + Not Important items |
delete_eisenhower Delete an Eisenhower matrix by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Eisenhower matrix ID |
Retrospective (5)
list_retrospectives List all retrospectives in the project.
No input parameters.
get_retrospective Get a single retrospective by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Retrospective ID |
create_retrospective Create a new retrospective.
| Name | Type | Required | Description |
|---|---|---|---|
| date | string | optional | Date (YYYY-MM-DD) |
| status | string | optional | |
| title | string | required | Retrospective title |
update_retrospective Update a retrospective's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| continue | array | optional | Things to continue doing |
| date | string | optional | |
| id | string | required | Retrospective ID |
| start | array | optional | Things to start doing |
| status | string | optional | |
| stop | array | optional | Things to stop doing |
| title | string | optional |
delete_retrospective Delete a retrospective by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Retrospective ID |
Swot (5)
list_swot List all SWOT analyses in the project.
No input parameters.
get_swot Get a single SWOT analysis by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | SWOT analysis ID |
create_swot Create a new SWOT analysis.
| Name | Type | Required | Description |
|---|---|---|---|
| date | string | optional | Date (YYYY-MM-DD) |
| title | string | required | SWOT analysis title |
update_swot Update a SWOT analysis.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | SWOT analysis ID |
| opportunities | array | optional | |
| strengths | array | optional | |
| threats | array | optional | |
| title | string | optional | |
| weaknesses | array | optional |
delete_swot Delete a SWOT analysis by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | SWOT analysis ID |
Risk (5)
list_risks List all risk analyses in the project.
No input parameters.
get_risk Get a single risk analysis by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Risk analysis ID |
create_risk Create a new risk analysis.
| Name | Type | Required | Description |
|---|---|---|---|
| date | string | optional | Date (YYYY-MM-DD) |
| title | string | required | Risk analysis title |
update_risk Update a risk analysis title or quadrant items.
| Name | Type | Required | Description |
|---|---|---|---|
| highImpactHighProb | array | optional | High impact, high probability risks |
| highImpactLowProb | array | optional | High impact, low probability risks |
| id | string | required | Risk analysis ID |
| lowImpactHighProb | array | optional | Low impact, high probability risks |
| lowImpactLowProb | array | optional | Low impact, low probability risks |
| title | string | optional |
delete_risk Delete a risk analysis by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Risk analysis ID |
Brief (5)
list_briefs List all project briefs.
No input parameters.
get_brief Get a single brief by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Brief ID |
create_brief Create a new project brief (RACI + summary + principles).
| Name | Type | Required | Description |
|---|---|---|---|
| accountable | array | optional | |
| changeCapacity | array | optional | |
| consulted | array | optional | |
| culture | array | optional | |
| date | string | optional | Date (YYYY-MM-DD) |
| guidingPrinciples | array | optional | |
| highLevelBudget | array | optional | |
| highLevelTimeline | array | optional | |
| informed | array | optional | |
| mission | array | optional | |
| responsible | array | optional | |
| summary | array | optional | Executive summary bullet points |
| title | string | required | Brief title |
update_brief Update an existing brief's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| accountable | array | optional | |
| changeCapacity | array | optional | |
| consulted | array | optional | |
| culture | array | optional | |
| guidingPrinciples | array | optional | |
| highLevelBudget | array | optional | |
| highLevelTimeline | array | optional | |
| id | string | required | Brief ID |
| informed | array | optional | |
| mission | array | optional | |
| responsible | array | optional | |
| summary | array | optional | |
| title | string | optional |
delete_brief Delete a brief by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Brief ID |
Safe (5)
list_safe List all SAFE agreements.
No input parameters.
get_safe Get a single SAFE agreement by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | SAFE agreement ID |
create_safe Create a new SAFE agreement.
| Name | Type | Required | Description |
|---|---|---|---|
| amount | number | required | Investment amount |
| date | string | optional | Agreement date (YYYY-MM-DD) |
| discount | number | optional | Discount rate 0-100 (e.g. 20 for 20%) |
| investor | string | required | Investor name |
| notes | string | optional | |
| status | string | optional | Agreement status (default: draft) |
| type | string | optional | SAFE type (default: post-money) |
| valuation_cap | number | optional | Valuation cap (0 if none) |
update_safe Update a SAFE agreement.
| Name | Type | Required | Description |
|---|---|---|---|
| amount | number | optional | |
| date | string | optional | |
| discount | number | optional | |
| id | string | required | SAFE agreement ID |
| investor | string | optional | |
| notes | string | optional | |
| status | string | optional | |
| type | string | optional | |
| valuation_cap | number | optional |
delete_safe Delete a SAFE agreement by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | SAFE agreement ID |
Finance (5)
list_finances List all financial periods.
No input parameters.
get_finance Get a single financial period by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Financial period ID |
create_finance Create a new financial period. Revenue and expenses are arrays of {category, amount} line items.
| Name | Type | Required | Description |
|---|---|---|---|
| cash_on_hand | number | optional | End-of-period cash balance |
| expenses | array | optional | Expense line items |
| notes | string | optional | |
| period | string | required | Period label (e.g. 2026-02 or Q1-2026) |
| revenue | array | optional | Revenue line items |
update_finance Update a financial period.
| Name | Type | Required | Description |
|---|---|---|---|
| cash_on_hand | number | optional | |
| expenses | array | optional | |
| id | string | required | Financial period ID |
| notes | string | optional | |
| period | string | optional | |
| revenue | array | optional |
delete_finance Delete a financial period by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Financial period ID |
Onboarding (10)
list_onboarding List all onboarding records.
No input parameters.
get_onboarding Get a single onboarding record by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Onboarding record ID |
create_onboarding Create a new onboarding record for a team member.
| Name | Type | Required | Description |
|---|---|---|---|
| employeeName | string | required | Employee full name |
| notes | string | optional | |
| personId | string | optional | Person ID from people registry |
| role | string | required | Employee role or job title |
| startDate | string | optional | Start date (YYYY-MM-DD) |
update_onboarding Update an onboarding record.
| Name | Type | Required | Description |
|---|---|---|---|
| employeeName | string | optional | |
| id | string | required | Onboarding record ID |
| notes | string | optional | |
| role | string | optional | |
| startDate | string | optional |
delete_onboarding Delete an onboarding record by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Onboarding record ID |
list_onboarding_templates List all onboarding templates.
No input parameters.
get_onboarding_template Get a single onboarding template by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Template ID |
create_onboarding_template Create a new onboarding template with step definitions.
| Name | Type | Required | Description |
|---|---|---|---|
| description | string | optional | |
| name | string | required | Template name |
| steps | array | optional | Onboarding step definitions |
update_onboarding_template Update an existing onboarding template.
| Name | Type | Required | Description |
|---|---|---|---|
| description | string | optional | |
| id | string | required | Template ID |
| name | string | optional | |
| steps | array | optional | Full replacement step list |
delete_onboarding_template Delete an onboarding template by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Template ID |
Company (6)
list_companies List all CRM companies.
No input parameters.
get_company Get a single company by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Company ID |
get_company_by_name Get a company by its name (case-insensitive). Prefer this over list_companies when the name is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Company name |
create_company Create a new company in the CRM.
| Name | Type | Required | Description |
|---|---|---|---|
| industry | string | optional | |
| name | string | required | Company name |
| notes | string | optional | |
| phone | string | optional | |
| website | string | optional |
update_company Update a company's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Company ID |
| industry | string | optional | |
| name | string | optional | |
| notes | string | optional | |
| phone | string | optional | |
| website | string | optional |
delete_company Delete a company by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Company ID |
Contact (6)
list_contacts List all CRM contacts.
| Name | Type | Required | Description |
|---|---|---|---|
| company_id | string | optional | Filter by company ID |
get_contact Get a single contact by their ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Contact ID |
get_contact_by_name Get a contact by name (case-insensitive). Accepts full name, first name, or last name. Prefer this over list_contacts when the name is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Contact name (full, first, or last) |
create_contact Add a new contact to the CRM.
| Name | Type | Required | Description |
|---|---|---|---|
| company_id | string | required | Associated company ID |
| string | optional | ||
| first_name | string | required | Contact first name |
| is_primary | boolean | optional | Whether this is the primary contact |
| last_name | string | required | Contact last name |
| notes | string | optional | |
| phone | string | optional | |
| title | string | optional | Job title |
update_contact Update a contact's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| company_id | string | optional | |
| string | optional | ||
| first_name | string | optional | |
| id | string | required | Contact ID |
| is_primary | boolean | optional | |
| last_name | string | optional | |
| notes | string | optional | |
| phone | string | optional | |
| title | string | optional |
delete_contact Delete a contact by their ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Contact ID |
Deal (6)
list_deals List all CRM deals.
| Name | Type | Required | Description |
|---|---|---|---|
| company_id | string | optional | Filter by company ID |
| stage | string | optional | Filter by stage |
get_deal Get a single deal by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Deal ID |
get_deal_by_name Get a deal by its title (case-insensitive). Prefer this over list_deals when the title is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Deal title |
create_deal Create a new deal in the CRM pipeline.
| Name | Type | Required | Description |
|---|---|---|---|
| company_id | string | required | Associated company ID |
| expected_close_date | string | optional | Expected close date (YYYY-MM-DD) |
| notes | string | optional | |
| probability | number | optional | Win probability 0-100 |
| stage | string | optional | |
| title | string | required | Deal title |
| value | number | optional | Deal value |
update_deal Update a deal's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| company_id | string | optional | |
| expected_close_date | string | optional | |
| id | string | required | Deal ID |
| notes | string | optional | |
| probability | number | optional | |
| stage | string | optional | |
| title | string | optional | |
| value | number | optional |
delete_deal Delete a deal by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Deal ID |
Customer (5)
list_customers List all billing customers.
No input parameters.
get_customer Get a single billing customer by their ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Customer ID |
create_customer Create a new billing customer.
| Name | Type | Required | Description |
|---|---|---|---|
| address | string | optional | |
| company | string | optional | |
| string | optional | ||
| name | string | required | Customer name |
| notes | string | optional |
update_customer Update a billing customer's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| address | string | optional | |
| company | string | optional | |
| string | optional | ||
| id | string | required | Customer ID |
| name | string | optional | |
| notes | string | optional |
delete_customer Delete a billing customer by their ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Customer ID |
Quote (5)
list_quotes List all quotes.
No input parameters.
get_quote Get a single quote by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Quote ID |
create_quote Create a new quote.
| Name | Type | Required | Description |
|---|---|---|---|
| customer_id | string | required | Customer ID |
| line_items | array | optional | Line items. Each must have at minimum 'description' and 'amount'. |
| notes | string | optional | |
| status | string | optional | Status (draft, sent, accepted, rejected — default: draft) |
| tax_rate | number | optional | Tax rate as a percentage (e.g. 15 for 15%) |
| title | string | optional | Quote title |
| valid_until | string | optional | Expiry date (YYYY-MM-DD) |
update_quote Update an existing quote's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Quote ID |
| line_items | array | optional | Full replacement list of line items |
| notes | string | optional | |
| status | string | optional | |
| tax_rate | number | optional | |
| title | string | optional | |
| valid_until | string | optional |
delete_quote Delete a quote by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Quote ID |
Invoice (5)
list_invoices List all invoices.
No input parameters.
get_invoice Get a single invoice by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Invoice ID |
create_invoice Create a new invoice.
| Name | Type | Required | Description |
|---|---|---|---|
| customer_id | string | required | Customer ID |
| due_date | string | optional | Due date (YYYY-MM-DD) |
| line_items | array | optional | |
| notes | string | optional | |
| quote_id | string | optional | Quote ID if this invoice is derived from a quote |
| status | string | optional | Status (draft, sent, paid, overdue — default: draft) |
| tax_rate | number | optional | |
| title | string | optional | Invoice title |
update_invoice Update an existing invoice's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| due_date | string | optional | |
| id | string | required | Invoice ID |
| line_items | array | optional | Full replacement list of line items |
| notes | string | optional | |
| paid_amount | number | optional | Amount paid so far |
| status | string | optional | |
| tax_rate | number | optional | |
| title | string | optional |
delete_invoice Delete an invoice by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Invoice ID |
Sticky (3)
list_sticky_notes List all sticky notes on the canvas.
No input parameters.
create_sticky_note Add a new sticky note to the canvas.
| Name | Type | Required | Description |
|---|---|---|---|
| color | string | optional | Note color |
| content | string | required | Note content |
| x | number | optional | X position |
| y | number | optional | Y position |
delete_sticky_note Delete a sticky note by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Sticky note ID |
Capacity (9)
list_capacity_plans List all capacity plans.
No input parameters.
get_capacity_plan Get a single capacity plan by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Capacity plan ID |
create_capacity_plan Create a new capacity plan.
| Name | Type | Required | Description |
|---|---|---|---|
| budgetHours | number | optional | Total budget hours |
| date | string | optional | Date (YYYY-MM-DD) |
| title | string | required | Plan title |
update_capacity_plan Update a capacity plan's title, date, or budget hours.
| Name | Type | Required | Description |
|---|---|---|---|
| budgetHours | number | optional | |
| date | string | optional | Date (YYYY-MM-DD) |
| id | string | required | Capacity plan ID |
| title | string | optional |
add_capacity_member Add a team member to a capacity plan.
| Name | Type | Required | Description |
|---|---|---|---|
| hours_per_day | number | optional | Override person's default hours per day for this plan |
| person_id | string | required | Person ID from the people registry |
| plan_id | string | required | Capacity plan ID |
| working_days | array | optional | Override working days for this plan (e.g. ['Mon','Tue','Wed','Thu','Fri']) |
remove_capacity_member Remove a team member from a capacity plan and delete their allocations.
| Name | Type | Required | Description |
|---|---|---|---|
| member_id | string | required | Member ID within the plan |
| plan_id | string | required | Capacity plan ID |
add_capacity_allocation Add a weekly allocation for a team member in a capacity plan.
| Name | Type | Required | Description |
|---|---|---|---|
| allocated_hours | number | required | Hours allocated this week |
| member_id | string | required | Member ID within the plan |
| notes | string | optional | |
| plan_id | string | required | Capacity plan ID |
| target_id | string | optional | ID of the project or task being allocated to |
| target_type | string | optional | What the allocation is for (default: project) |
| week_start | string | required | Week start date (YYYY-MM-DD, should be a Monday) |
remove_capacity_allocation Remove an allocation from a capacity plan.
| Name | Type | Required | Description |
|---|---|---|---|
| allocation_id | string | required | Allocation ID to remove |
| plan_id | string | required | Capacity plan ID |
delete_capacity_plan Delete a capacity plan by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Capacity plan ID |
Habit (8)
list_habits List all habits in the project.
No input parameters.
get_habit Get a single habit by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Habit ID |
get_habit_by_name Get a habit by its name (case-insensitive). Prefer this over list_habits when the name is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Habit name |
create_habit Create a new habit to track.
| Name | Type | Required | Description |
|---|---|---|---|
| description | string | optional | |
| frequency | string | optional | Tracking frequency (default: daily) |
| name | string | required | Habit name |
| notes | string | optional | Markdown body notes |
| target_days | array | optional | Target days for weekly habits (e.g. ['Mon','Wed','Fri']) |
update_habit Update an existing habit's metadata.
| Name | Type | Required | Description |
|---|---|---|---|
| day_notes | object | optional | Per-day notes keyed by ISO date (YYYY-MM-DD). Merged with existing day notes. |
| description | string | optional | |
| frequency | string | optional | |
| id | string | required | Habit ID |
| name | string | optional | |
| notes | string | optional | |
| target_days | array | optional |
mark_habit_complete Mark a habit as completed for a specific date (defaults to today).
| Name | Type | Required | Description |
|---|---|---|---|
| date | string | optional | ISO date (YYYY-MM-DD, defaults to today) |
| id | string | required | Habit ID |
| note | string | optional | Optional note for this day |
unmark_habit_complete Remove a completion mark for a specific date.
| Name | Type | Required | Description |
|---|---|---|---|
| date | string | required | ISO date (YYYY-MM-DD) to unmark |
| id | string | required | Habit ID |
delete_habit Delete a habit by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Habit ID |
Kpi (5)
list_kpis List all KPI snapshots.
No input parameters.
get_kpi Get a single KPI snapshot by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | KPI snapshot ID |
create_kpi Create a new KPI snapshot for a reporting period.
| Name | Type | Required | Description |
|---|---|---|---|
| active_users | number | optional | Active user count at end of period |
| cac | number | optional | Customer Acquisition Cost (USD) |
| churn_rate | number | optional | Monthly churn rate (percentage) |
| gross_margin | number | optional | Gross margin (percentage) |
| growth_rate | number | optional | Month-over-month growth rate (percentage) |
| ltv | number | optional | Customer Lifetime Value (USD) |
| mrr | number | optional | Monthly Recurring Revenue (USD) |
| notes | string | optional | |
| nrr | number | optional | Net Revenue Retention (percentage) |
| period | string | required | Reporting period label (e.g. '2026-Q1', '2026-03') |
update_kpi Update an existing KPI snapshot.
| Name | Type | Required | Description |
|---|---|---|---|
| active_users | number | optional | |
| cac | number | optional | |
| churn_rate | number | optional | |
| gross_margin | number | optional | |
| growth_rate | number | optional | |
| id | string | required | KPI snapshot ID |
| ltv | number | optional | |
| mrr | number | optional | |
| notes | string | optional | |
| nrr | number | optional | |
| period | string | optional |
delete_kpi Delete a KPI snapshot by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | KPI snapshot ID |
Investor (5)
list_investors List all investors in the pipeline.
| Name | Type | Required | Description |
|---|---|---|---|
| status | string | optional | Filter by status |
get_investor Get a single investor by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Investor ID |
create_investor Add an investor to the pipeline.
| Name | Type | Required | Description |
|---|---|---|---|
| amount_target | number | optional | Target investment amount (USD) |
| contact | string | optional | Contact person name or email |
| intro_date | string | optional | Date of first introduction (YYYY-MM-DD) |
| last_contact | string | optional | Date of last contact (YYYY-MM-DD) |
| name | string | required | Investor or firm name |
| notes | string | optional | |
| stage | string | optional | Contact stage (default: lead) |
| status | string | optional | Pipeline status (default: not_started) |
| type | string | optional | Investor type (default: vc) |
update_investor Update an existing investor record.
| Name | Type | Required | Description |
|---|---|---|---|
| amount_target | number | optional | |
| contact | string | optional | |
| id | string | required | Investor ID |
| intro_date | string | optional | |
| last_contact | string | optional | |
| name | string | optional | |
| notes | string | optional | |
| stage | string | optional | |
| status | string | optional | |
| type | string | optional |
delete_investor Delete an investor record by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Investor ID |
Fishbone (5)
list_fishbones List all Fishbone (Ishikawa) diagrams.
No input parameters.
get_fishbone Get a single Fishbone diagram by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Fishbone diagram ID |
create_fishbone Create a new Fishbone diagram for cause-and-effect analysis.
| Name | Type | Required | Description |
|---|---|---|---|
| causes | array | optional | Cause categories with their contributing factors |
| description | string | optional | |
| title | string | required | Problem or effect statement (placed at the right end of the spine) |
update_fishbone Update an existing Fishbone diagram.
| Name | Type | Required | Description |
|---|---|---|---|
| causes | array | optional | Full replacement cause list |
| description | string | optional | |
| id | string | required | Fishbone diagram ID |
| title | string | optional |
delete_fishbone Delete a Fishbone diagram by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Fishbone diagram ID |
Dn (9)
list_dns_domains List all tracked DNS domains.
No input parameters.
get_dns_domain Get a single DNS domain by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Domain ID |
create_dns_domain Add a new domain to track.
| Name | Type | Required | Description |
|---|---|---|---|
| auto_renew | boolean | optional | Whether the domain auto-renews |
| domain | string | required | Domain name (e.g. example.com) |
| expiry_date | string | optional | Registration expiry date (YYYY-MM-DD) |
| nameservers | array | optional | |
| notes | string | optional | |
| provider | string | optional | Registrar or DNS provider (e.g. 'cloudflare', 'namecheap') |
| renewal_cost_usd | number | optional | Annual renewal cost in USD |
update_dns_domain Update an existing DNS domain record.
| Name | Type | Required | Description |
|---|---|---|---|
| auto_renew | boolean | optional | |
| domain | string | optional | |
| expiry_date | string | optional | |
| id | string | required | Domain ID |
| nameservers | array | optional | |
| notes | string | optional | |
| provider | string | optional | |
| renewal_cost_usd | number | optional |
delete_dns_domain Delete a DNS domain by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Domain ID |
list_dns_records List DNS records for a specific domain. Returns records synced from Cloudflare or manually added.
| Name | Type | Required | Description |
|---|---|---|---|
| domain_id | string | required | Domain ID |
add_dns_record Add a DNS record to a domain.
| Name | Type | Required | Description |
|---|---|---|---|
| domain_id | string | required | Domain ID |
| name | string | required | Record name (e.g. '@', 'www', 'mail') |
| proxied | boolean | optional | Whether the record is proxied (Cloudflare-specific) |
| ttl | number | optional | TTL in seconds (default: 3600) |
| type | string | required | Record type (A, AAAA, CNAME, MX, TXT, NS, SRV, etc.) |
| value | string | required | Record value |
update_dns_record Update a DNS record on a domain by its index in the records array.
| Name | Type | Required | Description |
|---|---|---|---|
| domain_id | string | required | Domain ID |
| name | string | optional | |
| proxied | boolean | optional | |
| record_index | integer | required | Zero-based index of the record in the domain's dnsRecords array |
| ttl | number | optional | |
| type | string | optional | |
| value | string | optional |
delete_dns_record Delete a DNS record from a domain by its index in the records array.
| Name | Type | Required | Description |
|---|---|---|---|
| domain_id | string | required | Domain ID |
| record_index | integer | required | Zero-based index of the record to delete |
Cloudflare (1)
sync_cloudflare_dns Sync all domains from Cloudflare into the DNS tracker. Requires a Cloudflare API token configured in project settings.
No input parameters.
Github (9)
github_get_repo Fetch summary stats for a GitHub repository: stars, open issues, open PRs, last push date, license. Requires GitHub token configured in Settings.
| Name | Type | Required | Description |
|---|---|---|---|
| owner | string | required | Repository owner (GitHub username or org) |
| repo | string | required | Repository name |
github_get_issue Fetch the state and details of a single GitHub issue by number.
| Name | Type | Required | Description |
|---|---|---|---|
| number | integer | required | Issue number |
| owner | string | required | Repository owner |
| repo | string | required | Repository name |
github_create_issue Create a new GitHub issue in a repository. Returns the created issue number and URL.
| Name | Type | Required | Description |
|---|---|---|---|
| body | string | optional | Issue body / description (markdown) |
| owner | string | required | Repository owner |
| repo | string | required | Repository name |
| title | string | required | Issue title |
github_set_issue_state Close or reopen a GitHub issue. Use state='closed' to close, state='open' to reopen.
| Name | Type | Required | Description |
|---|---|---|---|
| number | integer | required | Issue number |
| owner | string | required | Repository owner |
| repo | string | required | Repository name |
| state | string | required | Target state: 'open' or 'closed' |
github_list_repos List GitHub repositories accessible to the authenticated user. Supports optional query filter.
| Name | Type | Required | Description |
|---|---|---|---|
| query | string | optional | Optional filter string to narrow results by repo full name |
github_list_issues List issues for a GitHub repository. Filters out pull requests. Supports state and assignee filters.
| Name | Type | Required | Description |
|---|---|---|---|
| assignee | string | optional | Filter by assignee login |
| owner | string | required | Repository owner |
| repo | string | required | Repository name |
| state | string | optional | Filter by state (default: open) |
github_list_prs List pull requests for a GitHub repository. Supports state filter.
| Name | Type | Required | Description |
|---|---|---|---|
| owner | string | required | Repository owner |
| repo | string | required | Repository name |
| state | string | optional | Filter by state (default: open) |
github_merge_pr Merge a GitHub pull request. Defaults to squash merge. Fails if PR is not mergeable.
| Name | Type | Required | Description |
|---|---|---|---|
| merge_method | string | optional | Merge strategy (default: squash) |
| number | integer | required | Pull request number |
| owner | string | required | Repository owner |
| repo | string | required | Repository name |
github_get_pr Fetch the state and details of a single GitHub pull request by number.
| Name | Type | Required | Description |
|---|---|---|---|
| number | integer | required | Pull request number |
| owner | string | required | Repository owner |
| repo | string | required | Repository name |
Mindmap (5)
list_mindmaps List all mindmaps in the project.
No input parameters.
get_mindmap Get a single mindmap by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Mindmap ID |
create_mindmap Create a new mindmap.
| Name | Type | Required | Description |
|---|---|---|---|
| nodes | array | optional | Initial node tree. Each node: { id, text, level, children: [], parent? } |
| title | string | required | Mindmap title |
update_mindmap Update an existing mindmap's title or node tree.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Mindmap ID |
| nodes | array | optional | Full replacement node tree |
| title | string | optional |
delete_mindmap Delete a mindmap by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Mindmap ID |
Marketing (6)
list_marketing_plans List all marketing plans in the project.
No input parameters.
get_marketing_plan Get a single marketing plan by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Marketing plan ID |
get_marketing_plan_by_name Get a marketing plan by its name (case-insensitive). Prefer this over list_marketing_plans when the name is known.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Marketing plan name |
create_marketing_plan Create a new marketing plan with strategy, channels, campaigns, and KPI targets.
| Name | Type | Required | Description |
|---|---|---|---|
| budget_currency | string | optional | Currency code (e.g. USD) |
| budget_total | number | optional | Total budget amount |
| campaigns | array | optional | Marketing campaigns |
| channels | array | optional | Marketing channels with budget allocation |
| description | string | optional | Plan description / summary |
| end_date | string | optional | End date (YYYY-MM-DD) |
| kpi_targets | array | optional | KPI targets to track |
| name | string | required | Plan name |
| notes | string | optional | Markdown body notes |
| start_date | string | optional | Start date (YYYY-MM-DD) |
| status | string | optional | Plan status (default: draft) |
| target_audiences | array | optional | Target audience segments |
update_marketing_plan Update an existing marketing plan.
| Name | Type | Required | Description |
|---|---|---|---|
| budget_currency | string | optional | |
| budget_total | number | optional | |
| campaigns | array | optional | |
| channels | array | optional | |
| description | string | optional | |
| end_date | string | optional | |
| id | string | required | Marketing plan ID |
| kpi_targets | array | optional | |
| name | string | optional | |
| notes | string | optional | |
| start_date | string | optional | |
| status | string | optional | |
| target_audiences | array | optional |
delete_marketing_plan Delete a marketing plan by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Marketing plan ID |
Time (4)
list_time_entries List all time entries across all tasks. Returns a map of taskId to entries array.
No input parameters.
get_time_entries_for_task Get all time entries for a specific task.
| Name | Type | Required | Description |
|---|---|---|---|
| task_id | string | required | Task ID to get time entries for |
create_time_entry Log a time entry against a task. Returns the new entry ID.
| Name | Type | Required | Description |
|---|---|---|---|
| date | string | optional | Date (YYYY-MM-DD, defaults to today) |
| description | string | optional | What was done during this time |
| hours | number | required | Hours worked |
| person | string | optional | Person name or ID who did the work |
| task_id | string | required | Task ID to log time against |
delete_time_entry Delete a time entry from a task.
| Name | Type | Required | Description |
|---|---|---|---|
| entry_id | string | required | Time entry ID to delete |
| task_id | string | required | Task ID the entry belongs to |
C4 (8)
list_c4_components List all C4 architecture components across all diagram levels.
No input parameters.
get_c4_component Get a single C4 component by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Component ID |
get_c4_by_level Get all C4 components at a specific diagram level (context, container, component, code).
| Name | Type | Required | Description |
|---|---|---|---|
| level | string | required | C4 diagram level |
create_c4_component Create a new C4 architecture component.
| Name | Type | Required | Description | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| description | string | required | What this component does | ||||||||||||
| level | string | required | C4 diagram level | ||||||||||||
| name | string | required | Component name | ||||||||||||
| parent | string | optional | Parent component ID (for nesting) | ||||||||||||
| position | object | optional |
Canvas position (defaults to 0,0)
|
||||||||||||
| technology | string | optional | Technology stack (e.g. 'Deno, TypeScript, SQLite') | ||||||||||||
| type | string | required | Component type (e.g. 'Person', 'System', 'Service', 'Database') |
update_c4_component Update an existing C4 component's fields.
| Name | Type | Required | Description |
|---|---|---|---|
| description | string | optional | |
| id | string | required | Component ID |
| level | string | optional | |
| name | string | optional | |
| parent | string | optional | |
| technology | string | optional | |
| type | string | optional |
delete_c4_component Delete a C4 component by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Component ID |
add_c4_connection Add a connection (dependency) between two C4 components.
| Name | Type | Required | Description |
|---|---|---|---|
| label | string | required | Connection label (e.g. 'Uses', 'Reads from', 'Sends events to') |
| source_id | string | required | Source component ID |
| target_id | string | required | Target component ID |
remove_c4_connection Remove a connection between two C4 components.
| Name | Type | Required | Description |
|---|---|---|---|
| source_id | string | required | Source component ID |
| target_id | string | required | Target component ID |
Strategic (8)
list_strategic_levels List all Strategic Levels builders.
No input parameters.
get_strategic_levels Get a single Strategic Levels builder by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Builder ID |
create_strategic_levels Create a new Strategic Levels builder.
| Name | Type | Required | Description |
|---|---|---|---|
| date | string | optional | Date (YYYY-MM-DD) |
| title | string | required | Builder title |
update_strategic_levels Update an existing Strategic Levels builder.
| Name | Type | Required | Description |
|---|---|---|---|
| date | string | optional | |
| id | string | required | Builder ID |
| title | string | optional |
delete_strategic_levels Delete a Strategic Levels builder by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Builder ID |
add_strategic_level Add a level entry to a Strategic Levels builder.
| Name | Type | Required | Description |
|---|---|---|---|
| builder_id | string | required | Builder ID |
| description | string | optional | Level description |
| level | string | required | Level type (vision, mission, goals, objectives, strategies, tactics) |
| parent_id | string | optional | Parent level ID |
| title | string | required | Level title |
update_strategic_level Update a level entry within a Strategic Levels builder.
| Name | Type | Required | Description |
|---|---|---|---|
| builder_id | string | required | Builder ID |
| description | string | optional | |
| level | string | optional | |
| level_id | string | required | Level entry ID |
| title | string | optional |
remove_strategic_level Remove a level entry from a Strategic Levels builder.
| Name | Type | Required | Description |
|---|---|---|---|
| builder_id | string | required | Builder ID |
| level_id | string | required | Level entry ID |
Busines (5)
list_business_models List all Business Model Canvases.
No input parameters.
get_business_model Get a single Business Model Canvas by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Canvas ID |
create_business_model Create a new Business Model Canvas.
| Name | Type | Required | Description |
|---|---|---|---|
| channels | any | optional | Channels |
| costStructure | any | optional | Cost Structure |
| customerRelationships | any | optional | Customer Relationships |
| customerSegments | any | optional | Customer Segments |
| date | string | optional | Date (YYYY-MM-DD) |
| keyActivities | any | optional | Key Activities |
| keyPartners | array | optional | Key Partners |
| keyResources | any | optional | Key Resources |
| revenueStreams | any | optional | Revenue Streams |
| title | string | required | Canvas title |
| valueProposition | any | optional | Value Propositions |
update_business_model Update an existing Business Model Canvas.
| Name | Type | Required | Description |
|---|---|---|---|
| channels | any | optional | |
| costStructure | any | optional | |
| customerRelationships | any | optional | |
| customerSegments | any | optional | |
| date | string | optional | |
| id | string | required | Canvas ID |
| keyActivities | any | optional | |
| keyPartners | array | optional | |
| keyResources | any | optional | |
| revenueStreams | any | optional | |
| title | string | optional | |
| valueProposition | any | optional |
delete_business_model Delete a Business Model Canvas by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Canvas ID |
Lean (5)
list_lean_canvases List all Lean Canvases.
No input parameters.
get_lean_canvas Get a single Lean Canvas by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Canvas ID |
create_lean_canvas Create a new Lean Canvas.
| Name | Type | Required | Description |
|---|---|---|---|
| channels | any | optional | Path to customers |
| costStructure | any | optional | Fixed and variable costs |
| customerSegments | any | optional | Target customers |
| date | string | optional | Date (YYYY-MM-DD) |
| earlyAdopters | any | optional | Characteristics of the ideal customer |
| existingAlternatives | any | optional | How problems are solved today |
| highLevelConcept | any | optional | X for Y analogy (e.g. YouTube for pets) |
| keyMetrics | any | optional | Key activities to measure |
| problem | array | optional | Top 1-3 problems |
| revenueStreams | any | optional | Revenue model and sources |
| solution | any | optional | Top 3 features |
| title | string | required | Canvas title |
| unfairAdvantage | any | optional | Cannot be easily copied or bought |
| uniqueValueProp | any | optional | Single, clear, compelling message |
update_lean_canvas Update an existing Lean Canvas.
| Name | Type | Required | Description |
|---|---|---|---|
| channels | any | optional | |
| costStructure | any | optional | |
| customerSegments | any | optional | |
| date | string | optional | |
| earlyAdopters | any | optional | |
| existingAlternatives | any | optional | |
| highLevelConcept | any | optional | |
| id | string | required | Canvas ID |
| keyMetrics | any | optional | |
| problem | array | optional | |
| revenueStreams | any | optional | |
| solution | any | optional | |
| title | string | optional | |
| unfairAdvantage | any | optional | |
| uniqueValueProp | any | optional |
delete_lean_canvas Delete a Lean Canvas by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Canvas ID |
Context (1)
get_context_pack Single-call agent boot. Returns people, active milestone, in-progress tasks, top-10 todo tasks, most recent progress note excerpt, and decision/architecture/constraint note titles. Replaces 8+ sequential MCP calls from Phase 1 Boot.
| Name | Type | Required | Description |
|---|---|---|---|
| milestone | string | optional | Milestone name. Defaults to the most recently created open milestone. |
| project | string | optional | Project name to scope all entities (e.g. 'MD Planner') |
Resources
project application/json
| URI | mdplanner://project |
| Name | project |
| MIME Type | application/json |
| Description | Project configuration and metadata |
tasks application/json
| URI | mdplanner://tasks |
| Name | tasks |
| MIME Type | application/json |
| Description | All tasks in the project |
notes application/json
| URI | mdplanner://notes |
| Name | notes |
| MIME Type | application/json |
| Description | All notes in the project |
goals application/json
| URI | mdplanner://goals |
| Name | goals |
| MIME Type | application/json |
| Description | All goals in the project |
Prompts
session-start Run the full Phase 1 boot sequence. Reads local-dev.md, loads context pack, checks git state.
| Name | Required | Description |
|---|---|---|
| project | optional | MCP project name to scope context (e.g. 'MD Planner') |
end-session Close the session: write a progress note, create HANDOFF.md, and move completed in-progress tasks to Pending Review.
No arguments.
daily Daily standup summary: tasks done, in-progress, and blocked for the project.
| Name | Required | Description |
|---|---|---|
| project | optional | Project name to scope the summary |
approve Approve a task in Pending Review and move it to Done.
| Name | Required | Description |
|---|---|---|
| task_id | required | ID of the task to approve |
| feedback | optional | Optional approval note |
next Return the highest-priority ready task for the project — what to work on right now.
| Name | Required | Description |
|---|---|---|
| project | optional | Project name to scope the search |