MCP Tools Reference
Reference for the MCP tools (~90) exposed to Claude Code agents via the MultiTerminal MCP server. Tools are called as mcp__multiterminal__<tool_name> from Claude Code. The per-category listing below covers the core set; some newer tools (worktrees, branch outcomes, wiki, code graph) are documented on their own pages.
%APPDATA%\multiterminal\mcp\index.js) wraps the REST API at http://localhost:5050. Each tool call translates to one or more REST API calls.
Task Management
list_tasks
List all kanban tasks from the MultiTerminal board.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
status | string | No | Filter by status: all, todo, in_progress, done, suggestion. Default: all |
Returns
Formatted text listing all tasks with ID, title, status, assignee, and priority.
Example
list_tasks(status="in_progress")
create_task
Create a new kanban task (ticket) on the MultiTerminal board.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Task title |
description | string | Yes | Task description |
createdBy | string | Yes | Your name |
status | string | No | Initial status: todo, in_progress, done, suggestion. Default: todo |
priority | string | No | Priority: low, normal, high. Default: normal |
Returns
Task ID and confirmation message.
Example
create_task(
title="Add dark mode",
description="Implement dark/light theme toggle in settings panel",
createdBy="Alice",
priority="normal"
)
update_task_status
Update the status of a kanban task.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID |
status | string | Yes | New status: todo, in_progress, done, suggestion |
updatedBy | string | Yes | Your name |
Returns
Success confirmation.
Example
update_task_status(taskId="c0ce8037", status="in_progress", updatedBy="Alice")
delete_task
Delete a kanban task.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID to delete |
deletedBy | string | Yes | Your name |
Returns
Success confirmation.
Example
delete_task(taskId="c0ce8037", deletedBy="Alice")
claim_task
Claim/assign a kanban task to yourself or another team member.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID to claim |
assignee | string | Yes | Name of the person claiming the task |
Returns
Success confirmation. May include a complexity suggestion if the task is detected as complex.
Example
claim_task(taskId="c0ce8037", assignee="Alice")
set_task_active
Set a task as the active task, auto-pausing all other active tasks for the same assignee. Enforces the "only one active task" rule.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID to set active |
updatedBy | string | Yes | Your name |
Returns
Success confirmation with list of auto-paused task IDs and titles.
Example
set_task_active(taskId="c0ce8037", updatedBy="Alice")
get_task_detail
Get full task detail including checklist with notes history, continuation notes, plan, and summary. Shows checklist progress breakdown (done/coding/testing/pending counts).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID |
Returns
Formatted task detail with checklist summary, individual item statuses, notes history, plan, and continuation notes.
Example
get_task_detail(taskId="c0ce8037")
update_task_checklist
Transition a checklist item to a new status with mandatory notes. Enforces state machine: pending → coding → testing → done (cycling allowed between coding and testing). Notes required for coding→testing, testing→coding, and testing→done transitions.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID |
itemIndex | number | Yes | Zero-based index of the checklist item |
newStatus | string | Yes | New status: coding, testing, or done |
notes | string | Yes | Transition notes (what was done or what needs fixing) |
updatedBy | string | Yes | Your name |
Returns
Item name, previous/new status, cycle count, and whether escalation was triggered (at 3 cycles).
Example
update_task_checklist(
taskId="c0ce8037",
itemIndex=0,
newStatus="testing",
notes="Implemented database schema and CRUD operations",
updatedBy="Alice"
)
update_checklist
Replace all checklist items on a task. Use this to set up or edit the checklist items (not for transitioning status -- use update_task_checklist for that).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID |
checklistJson | string | Yes | JSON array of checklist items |
Returns
Success confirmation.
Example
update_checklist(
taskId="c0ce8037",
checklistJson='[{"item":"Setup database","status":"pending","notes":[]},{"item":"Create API","status":"pending","notes":[]}]'
)
append_checklist_items
Append items to a task's existing checklist without replacing it. Use this to add new items (e.g. to Pending) -- unlike update_checklist (full replace), you do not need to fetch and resend the existing list (no risk of mangling existing items when rebuilding them). New items default to status pending. The server is authoritative: it validates the status, ignores any caller-supplied notes/assignedTo/cycleCount, and serializes the write so a concurrent append/transition won't clobber it.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID |
itemsJson | string | Yes | JSON array of items to append. Each element may be a plain description string or an {item,status?} object. |
Returns
Success confirmation with the number of items appended.
Example
append_checklist_items(
taskId="c0ce8037",
itemsJson='["Add validation","Write tests"]'
)
assign_checklist_item
Assign a checklist item to a specific team agent. Set assignee to null to unassign.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID |
itemIndex | number | Yes | Zero-based index of the checklist item |
assignee | string | No | Name of the agent to assign to, or null to unassign |
Returns
Success confirmation.
Example
assign_checklist_item(taskId="c0ce8037", itemIndex=2, assignee="Bob")
update_task_plan
Set or update the implementation plan for a task (markdown formatted).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID |
plan | string | Yes | Implementation plan (markdown) |
updatedBy | string | Yes | Your name |
Returns
Success confirmation.
Example
update_task_plan(
taskId="c0ce8037",
plan="## Phase 1\n- Create migrations\n\n## Phase 2\n- Add endpoints",
updatedBy="Alice"
)
update_task_summary
Update a task's implementation summary and/or test results (markdown formatted).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID |
implementationSummary | string | No | What was built/changed (markdown). Pass null to leave unchanged. |
testResults | string | No | Test outcomes and verification (markdown). Pass null to leave unchanged. |
updatedBy | string | Yes | Your name |
Returns
Success confirmation.
Example
update_task_summary(
taskId="c0ce8037",
implementationSummary="Added ThemeService with dark/light toggle",
testResults="All 12 unit tests passing",
updatedBy="Alice"
)
update_task_continuation
Write continuation notes for session handoff. Describes where to pick up: current file, checklist progress, what's next, any blockers.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID |
continuationNotes | string | Yes | Continuation context for next session |
updatedBy | string | Yes | Your name |
Returns
Success confirmation.
Example
update_task_continuation(
taskId="c0ce8037",
continuationNotes="Working on item 3 (API validation). Next: add input sanitization for title field.",
updatedBy="Alice"
)
get_checklist_item_images
Get images attached to a checklist item. Returns base64-encoded image data that agents can visually analyze for context (e.g., screenshots of bugs, UI mockups, test results).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID |
itemIndex | number | Yes | Zero-based checklist item index |
Returns
Array of base64-encoded images with MIME type and filename, or a message if no images are attached.
Example
get_checklist_item_images(taskId="c0ce8037", itemIndex=0)
get_my_active_task
Get YOUR active in-progress task (filtered by your agent name). Returns full task detail with checklist summary. Use this instead of list_tasks when you just need your current active task.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
agentName | string | Yes | Your terminal/agent name (from MULTITERMINAL_NAME env var) |
Returns
Full task detail with checklist summary, or a message if no active task exists.
Example
get_my_active_task(agentName="Alice")
get_my_pickable_tasks
Get tasks you can work on: your assigned in-progress tasks + unassigned todo tasks available to claim. Returns a compact formatted list. Use this instead of list_tasks when browsing for work.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
agentName | string | Yes | Your terminal/agent name (from MULTITERMINAL_NAME env var) |
Returns
Compact list of pickable tasks with ID, title, status, priority, and your relationship to each (assigned, helper, or available).
Example
get_my_pickable_tasks(agentName="Alice")
Task Relationships
add_task_relationship
Add a blocking/dependency relationship between two tasks. Types: blocks (A blocks B), depends_on (A depends on B), related_to (informational). Automatically creates the inverse relationship.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
sourceTaskId | string | Yes | Source task ID (the task you're adding a relationship FROM) |
targetTaskId | string | Yes | Target task ID (the task you're adding a relationship TO) |
type | string | Yes | Relationship type: blocks, depends_on, related_to |
createdBy | string | Yes | Your name |
Returns
Success confirmation.
Example
add_task_relationship(sourceTaskId="c0ce8037", targetTaskId="d4e5f6a7", type="blocks", createdBy="Alice")
remove_task_relationship
Remove a relationship between two tasks (removes both directions).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
sourceTaskId | string | Yes | One of the two related task IDs |
targetTaskId | string | Yes | The other related task ID |
Returns
Success confirmation.
Example
remove_task_relationship(sourceTaskId="c0ce8037", targetTaskId="d4e5f6a7")
get_task_relationships
Get all relationships for a task (blocks, depends_on, related_to).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID to get relationships for |
Returns
List of relationships with source/target task IDs, type, and creator.
Example
get_task_relationships(taskId="c0ce8037")
Task File Links
link_task_file
Link a file to a task so agents know which files are relevant. Supports optional line ranges and descriptions.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID to link file to |
filePath | string | Yes | Absolute file path |
addedBy | string | Yes | Your name |
description | string | No | Why this file is relevant |
lineStart | number | No | Start line number |
lineEnd | number | No | End line number |
Returns
Success confirmation with file count.
Example
link_task_file(
taskId="c0ce8037",
filePath="H:\\DevLaptop\\...\\TaskDatabase.cs",
addedBy="Alice",
description="Core persistence layer being modified",
lineStart=100,
lineEnd=250
)
unlink_task_file
Remove a file link from a task.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID |
filePath | string | Yes | File path to unlink |
Returns
Success confirmation.
Example
unlink_task_file(taskId="c0ce8037", filePath="H:\\DevLaptop\\...\\TaskDatabase.cs")
get_task_files
Get all files linked to a task.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID |
Returns
List of linked files with paths, descriptions, line ranges, and who linked them.
Example
get_task_files(taskId="c0ce8037")
Task Reports
save_task_report
Save an agent report (HTML/markdown) linked to a kanban task. Use after generating a specialist agent report (verifier, code-reviewer, security-auditor) to persist it for future reference.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Kanban task ID this report belongs to |
agentName | string | Yes | Agent that generated the report (e.g. verifier, code-reviewer) |
reportContent | string | Yes | Full report content (HTML or markdown) |
reportType | string | No | Report format: html or markdown. Default: html |
verdict | string | No | Report verdict (e.g. PASS, FAIL, PASS WITH NOTES) |
score | number | No | Numeric score 0-100 |
invocationId | string | No | Agent invocation ID (links to agent_invocations table) |
createdBy | string | No | Who saved the report |
Returns
Success confirmation with report ID.
Example
save_task_report(
taskId="c0ce8037",
agentName="verifier",
reportContent="<h1>Verification Report</h1><p>All checks passed.</p>",
verdict="PASS",
score=95
)
get_task_reports
List reports saved for a kanban task. Returns metadata (no content) -- use the reportId with the REST API to fetch full content.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Kanban task ID |
agentName | string | No | Filter by agent name |
limit | number | No | Max reports to return. Default: 50 |
Returns
List of report metadata with IDs, agent names, verdicts, scores, and timestamps.
Example
get_task_reports(taskId="c0ce8037", agentName="verifier")
Messaging
list_terminals
List all active terminals (teammates) connected to MultiTerminal.
Parameters
None.
Returns
Formatted list of terminals with name, ID prefix, and last active time.
Example
list_terminals()
register_terminal
Register your terminal with MultiTerminal to send/receive messages.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Your terminal name |
docId | string | Yes | Unique document ID for this terminal |
Returns
Terminal ID for use in subsequent messaging calls.
Example
register_terminal(name="Alice", docId="session-abc123")
send_message
Send a message to another terminal.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
fromTerminalId | string | Yes | Your terminal ID |
to | string | Yes | Recipient terminal name |
message | string | Yes | Message content |
Returns
Delivery confirmation with sender and recipient names.
Example
send_message(fromTerminalId="a1b2c3d4", to="Bob", message="Can you review my PR?")
broadcast_message
Broadcast a message to all terminals.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
fromTerminalId | string | Yes | Your terminal ID |
message | string | Yes | Message content |
Returns
Delivery confirmation with recipient count.
Example
broadcast_message(fromTerminalId="a1b2c3d4", message="Build is ready for testing!")
get_messages
Get messages for your terminal. Messages are consumed on read.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
terminalId | string | Yes | Your terminal ID |
Returns
Formatted list of messages with sender, content, and timestamp.
Example
get_messages(terminalId="a1b2c3d4")
get_inbox
Get inbox messages for a user. Shows notifications for items ready for testing, escalations, task completions, and helper requests.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
userId | string | Yes | User ID to get inbox for (e.g., the owner's first name) |
unreadOnly | boolean | No | Only show unread messages. Default: false |
limit | number | No | Max messages to return. Default: 50 |
Returns
Formatted inbox with message type, summary, task context, and read/reply status.
Example
get_inbox(userId="Owner", unreadOnly=true)
mark_inbox_read
Mark an inbox message as read, or mark all messages as read for a user.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
messageId | string | No | Specific message ID to mark as read |
userId | string | No | Mark ALL messages as read for this user |
Returns
Success confirmation.
Example
mark_inbox_read(messageId="abc12345")
mark_inbox_read(userId="Owner")
reply_to_inbox
Reply to an inbox message with notes or feedback.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
messageId | string | Yes | Inbox message ID to reply to |
replyText | string | Yes | Your reply text |
Returns
Success confirmation.
Example
reply_to_inbox(messageId="abc12345", replyText="Looks good, marking as done")
Team & Helpers
get_team_roster
Get the team roster for a project with merged profile data (preferred_model, agent_instructions, role, skills). Use this to discover which agents to spawn for a team assembly workflow.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
projectPath | string | Yes | Absolute path to the project directory |
Returns
Project name and array of agents with name, model, role, skills, and online status.
Example
get_team_roster(projectPath="H:\\DevLaptop\\ClarionPowerShell\\MultiTerminal")
add_helper
Add a helper to a kanban task. Helpers assist with the task without being the primary assignee.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID to add helper to |
helper | string | Yes | Name of the helper to add |
addedBy | string | Yes | Your name |
Returns
Success confirmation with helper count.
Example
add_helper(taskId="c0ce8037", helper="Bob", addedBy="Alice")
remove_helper
Remove a helper from a kanban task.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Task ID to remove helper from |
helperName | string | Yes | Name of the helper to remove |
Returns
Success confirmation with remaining helper count.
Example
remove_helper(taskId="c0ce8037", helperName="Bob")
get_owner_profile
Get the owner's profile (git identity, GitHub username, token status). Use when you need git user.name/email for commits or GitHub username for repo operations.
Parameters
None.
Returns
Owner profile with fullName, email, gitHubUsername, hasGitHubToken, and timestamps.
Example
get_owner_profile()
Projects
list_projects
List all registered projects with summary info (name, path, type, version, lead).
Parameters
None.
Returns
Formatted list of projects with key metadata.
Example
list_projects()
get_project
Get a project with all associations (agents, MCP servers, specialists, paths, prompts, skills). Returns the full project context.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | Project ID (GUID). Use list_projects to find IDs. |
Returns
Full project context including all 7 association tables.
Example
get_project(projectId="proj-123-456")
update_project
Update one or more project fields.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | Project ID |
fields | object | Yes | Object of field names to values. Accepted keys: deployPath, buildCommand, projectType, description, icon, iconColor, teamLead, gitRepoUrl, gitDefaultBranch, gitAutoCommit, currentVersion, isPinned |
Returns
Success confirmation.
Example
update_project(
projectId="proj-123",
fields={"deployPath": "C:\\Deploy", "buildCommand": "dotnet build"}
)
add_project_agent
Add or update an agent assignment on a project.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | Project ID |
agentName | string | Yes | Agent name (e.g., "Alice", "Bob") |
role | string | No | Agent role (e.g., "backend", "frontend", "fullstack") |
preferredModel | string | No | Preferred Claude model: opus, sonnet, haiku |
Returns
Success confirmation.
Example
add_project_agent(projectId="proj-123", agentName="Alice", role="backend", preferredModel="sonnet")
remove_project_agent
Remove an agent from a project.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | Project ID |
agentName | string | Yes | Agent name to remove |
Returns
Success confirmation.
Example
remove_project_agent(projectId="proj-123", agentName="Alice")
add_project_association
Add an association to a project. Type determines what to add: mcp_server, specialist, path, prompt, or skill. Each type requires different fields.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | Project ID |
type | string | Yes | Association type: mcp_server, specialist, path, prompt, skill |
serverName | string | * | (mcp_server) MCP server name |
isEnabled | boolean | No | (mcp_server, specialist, skill) Whether enabled. Default: true |
agentType | string | * | (specialist) Agent type, e.g., "devils-advocate", "verifier" |
customPrompt | string | No | (specialist) Optional override prompt |
pathType | string | * | (path) Category: source, deploy, build_output, docs, etc. |
pathValue | string | * | (path) Filesystem path value |
description | string | No | (path) Optional description |
promptType | string | * | (prompt) Category: system, user, context, workflow |
promptText | string | * | (prompt) Prompt text content |
displayOrder | number | No | (prompt) Sort order. Default: 0 |
skillName | string | * | (skill) Skill name |
* Required based on the type selected.
Returns
Success confirmation.
Example
// Add an MCP server
add_project_association(projectId="proj-123", type="mcp_server", serverName="sqlite-mcp")
// Add a specialist agent
add_project_association(projectId="proj-123", type="specialist", agentType="verifier")
// Add a path
add_project_association(projectId="proj-123", type="path", pathType="deploy", pathValue="C:\\Deploy", description="Production deploy folder")
// Add a skill
add_project_association(projectId="proj-123", type="skill", skillName="kanban-task")
remove_project_association
Remove an association from a project. Type determines what to remove. Each type uses a different identifier.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | Project ID |
type | string | Yes | Association type: mcp_server, specialist, path, prompt, skill |
serverName | string | * | (mcp_server) Server name to remove |
agentType | string | * | (specialist) Agent type to remove |
pathId | number | * | (path) Path ID to remove (from get_project response) |
promptId | number | * | (prompt) Prompt ID to remove (from get_project response) |
skillName | string | * | (skill) Skill name to remove |
* Required based on the type selected.
Returns
Success confirmation.
Example
remove_project_association(projectId="proj-123", type="mcp_server", serverName="sqlite-mcp")
Knowledge Base
query_knowledge
Search the institutional knowledge base for decisions, patterns, gotchas, and anti-patterns. Uses FTS5 full-text search.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
query | string | Yes | Search text |
category | string | No | Filter: decision, pattern, gotcha, anti_pattern, debug_insight, preference |
projectId | string | No | Filter by project ID |
tags | string | No | Comma-separated tags to filter by |
limit | number | No | Max results. Default: 20 |
Returns
Formatted list of matching knowledge entries with title, content, category, tags, and confidence.
Example
query_knowledge(query="SQL injection", category="gotcha", limit=10)
add_knowledge
Add a knowledge entry to institutional memory.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Short title summarizing the entry |
content | string | Yes | Full content of the knowledge entry |
category | string | Yes | decision, pattern, gotcha, anti_pattern, debug_insight, preference |
projectId | string | No | Project ID (null for global) |
sourceType | string | No | How discovered: manual, session, debug, review. Default: manual |
sourceId | string | No | Reference ID of source (session ID, task ID) |
tags | string | No | Comma-separated tags |
confidence | string | No | confirmed, likely, uncertain. Default: confirmed |
Returns
Success confirmation with entry ID.
Example
add_knowledge(
title="Always escape single quotes in PowerShell",
content="Use Replace(\"'\", \"''\") before interpolating values into PowerShell commands to prevent injection.",
category="gotcha",
tags="security,powershell,injection",
confidence="confirmed"
)
get_code_digest
Get pre-analyzed summary of a source file. Returns null if no digest exists or if the digest is stale.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
filePath | string | Yes | Absolute path to the source file |
projectId | string | No | Project ID |
includeStale | boolean | No | Return stale digests too. Default: false |
Returns
File digest with purpose, key classes, key methods, patterns, gotchas, dependencies, and line count.
Example
get_code_digest(filePath="H:\\DevLaptop\\...\\MessageBroker.cs")
save_code_digest
Save or update a code digest for a source file.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | Project ID this file belongs to |
filePath | string | Yes | Absolute path to the source file |
fileHash | string | Yes | SHA256 hash for staleness detection |
purpose | string | No | One-sentence description of what this file does |
keyClasses | string | No | JSON array of key class names |
keyMethods | string | No | JSON array of key method/function names |
patterns | string | No | Notable patterns used |
gotchas | string | No | Gotchas and pitfalls |
dependencies | string | No | JSON array of key dependencies |
lineCount | number | No | Number of lines in the file |
digestModel | string | No | Model used to generate digest. Default: haiku |
Returns
Success confirmation with digest ID.
Example
save_code_digest(
projectId="proj-123",
filePath="H:\\DevLaptop\\...\\MessageBroker.cs",
fileHash="abc123def456",
purpose="Central hub routing all messages between terminals",
keyClasses='["MessageBroker"]',
keyMethods='["SendMessage","RegisterTerminal","CreateTask"]',
lineCount=4254
)
Sessions
import_session
Import a Claude Code session JSONL transcript file and link it to a kanban task. Extracts all messages, stores them in SQLite with FTS5 full-text search indexing, and creates a lineage record.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
sessionFilePath | string | Yes | Absolute path to the Claude Code session JSONL file |
taskId | string | Yes | Kanban task ID this session belongs to |
agentName | string | Yes | Name of the agent who ran this session |
parentSessionId | string | No | Parent session ID for chaining agent cycles |
sessionType | string | No | Semantic label: coding, review, testing |
Returns
Session ID and message count.
Example
import_session(
sessionFilePath="C:\\Users\\<username>\\.claude\\projects\\...\\abc123.jsonl",
taskId="c0ce8037",
agentName="Alice",
sessionType="coding"
)
get_task_sessions
Get all imported session lineage records for a kanban task. Returns session metadata including agent, type, timestamps, and parent chain links.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | Yes | Kanban task ID |
Returns
List of session records with metadata.
Example
get_task_sessions(taskId="c0ce8037")
get_session_lineage
Get the full lineage chain for a session, ordered from root to leaf. Walks the parent_session_id chain to reconstruct the full history of agent cycling.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
sessionId | string | Yes | Session ID to retrieve the lineage chain for |
Returns
Ordered chain of session records from root to leaf.
Example
get_session_lineage(sessionId="def456")
sync_sessions
Incrementally sync Claude Code session JSONL files from disk to SQLite. Scans a Claude project folder for unimported sessions and imports them. Skips already-imported sessions.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
claudeProjectPath | string | Yes | Absolute path to the Claude project folder |
agentName | string | No | Default agent name. Default: Unknown |
taskId | string | No | Task ID for unlinked sessions. Default: __unlinked__ |
Returns
Import summary: imported, skipped, failed, total counts.
Example
sync_sessions(
claudeProjectPath="C:\\Users\\<username>\\.claude\\projects\\H--DevLaptop-...",
agentName="Alice",
taskId="c0ce8037"
)
search_session_history
Full-text search across imported session messages. Uses SQLite FTS5 when available, falls back to LIKE search.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
taskId | string | No* | Kanban task ID to search within |
query | string | No* | Search text to find |
role | string | No | Filter: user or assistant |
agentName | string | No | Filter by agent name |
limit | number | No | Max results. Default: 50 |
* At least one of taskId or query required.
Returns
Matching session messages with context.
Example
search_session_history(taskId="c0ce8037", query="FTS5", role="assistant")
search_session_memory
Semantic (hybrid FTS5 + vector-similarity) search over session transcript chunks. Finds context by meaning rather than exact keywords -- ask a natural-language question. Use this when you remember the idea but not the wording; use search_session_history when you remember the words.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
query | string | Yes | Natural-language search text |
projectPath | string | No | Limit results to a project path |
topK | number | No | Max results to return (1-100). Default: 10 |
agentName | string | No | Filter by agent name |
Returns
Ranked transcript chunks with session ID, terminal name, project path, chunk text, and relevance score.
Example
search_session_memory(query="what was the WebView2 event bridge approach?", topK=5)
get_latest_session
Get the most recent session for a project, including cached summary and recent messages if no summary exists. Use at session start to get context from the previous session.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
projectPath | string | Yes | Filesystem path to the project |
agentName | string | No | Filter by agent name (e.g. "Alice"). Returns the most recent session for this specific agent. |
Returns
Session metadata, cached summary, and optionally recent messages for lazy summary generation.
Example
// Get latest session across all agents
get_latest_session(projectPath="H:\\DevLaptop\\ClarionPowerShell\\MultiTerminal")
// Get latest session for a specific agent
get_latest_session(projectPath="H:\\DevLaptop\\ClarionPowerShell\\MultiTerminal", agentName="Alice")
update_session_summary
Save a generated summary for a session. Called after an agent generates a recap of a previous session's work.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
sessionId | string | Yes | Session ID to update |
summary | string | Yes | Generated summary text |
Returns
Success confirmation.
Example
update_session_summary(
sessionId="def456",
summary="Implemented knowledge base with FTS5 search and code digest system"
)
get_unsummarized_sessions
Get sessions that have no cached summary for a project. Used at session start to batch-generate missing summaries.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
projectPath | string | Yes | Filesystem path to the project |
limit | number | No | Max sessions to return. Default: 10 |
Returns
List of sessions without summaries, with session IDs, agent names, and timestamps.
Example
get_unsummarized_sessions(projectPath="H:\\DevLaptop\\ClarionPowerShell\\MultiTerminal", limit=5)
Context Self-Management
Tools that let an agent see and manage its own context window. When context crosses a threshold (default 70%), the context-threshold-hook injects an advisory nudge; the agent then writes continuation notes and clears at a clean point of its own choosing. /clear is recoverable — the SessionStart(source=clear) flow rebuilds the agent from its continuation notes + session summary.
check_my_context
Check YOUR terminal's live context-window fill (plus rate-limit quota and token usage). Returns contextPct 0–100 — the signal for whether it's a good time to wrap up and clear. Reads the same statusline stats the HUD status bar shows.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
agentName | string | No | Your terminal/agent name. Omit to use $MULTITERMINAL_NAME. |
docId | string | No | Terminal docId. Omit to use $MULTITERMINAL_DOC_ID, or the newest stats file for the name. |
Returns
Context percentage with a recommendation (wrap-up vs headroom, relative to MULTITERMINAL_CONTEXT_THRESHOLD, default 70), plus 5h/7d quota, token total/cost, and staleness. Returns "not reporting" if the terminal hasn't written stats yet.
Example
check_my_context(agentName="Alice")
clear_my_context
Clear YOUR OWN context by submitting /clear into your terminal (types /clear + Enter). ⚠️ This wipes the conversation. Write continuation notes first (update_task_continuation) — SessionStart then rebuilds you from those notes + the session summary. Call it only at a clean continuation point you chose, and as the last action of your turn.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
agentName | string | No | Your terminal/agent name. Omit to use $MULTITERMINAL_NAME. |
acknowledge | boolean | No | Two-step guard. Without it, the tool returns a notes-first reminder instead of clearing. Set true to actually clear. |
Returns
A reminder (first call) or a confirmation that /clear was submitted (with acknowledge=true).
Example
// 1. write notes, then:
clear_my_context(agentName="Alice", acknowledge=true)
compact_my_context
Compact YOUR OWN context by submitting /compact into your terminal (types /compact + Enter). Unlike clear_my_context (which wipes the conversation), /compact preserves a running summary — use it at a mid-work boundary to reclaim context without losing your place and keep going. Write continuation notes first (update_task_continuation): /compact's auto-summary is lossy, so your notes stay the authoritative resume record. Single call — no acknowledge needed, since /compact is non-destructive. Make it the last action of your turn (it fires at turn end). compact = mid-work, keep going; clear = task-end, full reset. Targets your own terminal only — an explicit agentName that isn't you is rejected (compacting a different agent is a separate authorized tool).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
agentName | string | No | Your terminal/agent name. Omit to use $MULTITERMINAL_NAME. An explicit value that isn't your own identity is rejected — this tool self-targets only. |
focus | string | No | Optional guidance appended to /compact steering what the summary must preserve (e.g. keep the active task ID, modified files, next step). Omit for a plain /compact. Sanitized to a single line before use. |
Returns
A best-effort confirmation that /compact (plus any self-targeted focus text) was requested — the inject is fire-and-forget, so verify on your next turn — with a notes-first + lossy-summary reminder.
Example
// 1. write notes, then (omit agentName to self-target):
compact_my_context(focus="keep active task ID, modified files, next step")
Browser Tabs
Per-terminal tabbed browser (WebView2) in the HUD area. Agents can open tabs with URLs or raw HTML, execute JavaScript, read DOM elements, exchange messages bidirectionally with the page, and capture screenshots. Enables interactive dashboards, live previews, mini-apps, and visual debugging.
open_browser_tab
Open a new browser tab in your terminal's HUD area. Provide either a URL to navigate to, or raw HTML content to display.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
terminalId | string | Yes | Your terminal ID or name (from register_terminal) |
title | string | Yes | Tab title displayed in the tab strip |
url | string | No | URL to navigate to (optional if content provided) |
content | string | No | Raw HTML content to display (optional if url provided) |
Returns
Tab ID string used to reference this tab in subsequent calls.
Example
// Open a tab with raw HTML
open_browser_tab(terminalId="Alice", title="Dashboard", content="<h1>Hello</h1>")
// Open a tab with a URL
open_browser_tab(terminalId="Alice", title="Docs", url="file:///H:/docs/index.html")
set_browser_content
Update an existing browser tab's content, URL, or title.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
terminalId | string | Yes | Your terminal ID or name |
tabId | string | Yes | Tab ID returned from open_browser_tab |
url | string | No | New URL to navigate to |
content | string | No | New HTML content to display |
title | string | No | New tab title |
Returns
Confirmation message.
Example
set_browser_content(terminalId="Alice", tabId="abc123", content="<h1>Updated</h1>")
close_browser_tab
Close a browser tab in your terminal.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
terminalId | string | Yes | Your terminal ID or name |
tabId | string | Yes | Tab ID to close |
Returns
Confirmation message.
Example
close_browser_tab(terminalId="Alice", tabId="abc123")
execute_browser_script
Execute JavaScript in a browser tab and return the result. Use this to interact with page content, click buttons, read values, modify the DOM, or run any client-side code.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
terminalId | string | Yes | Your terminal ID or name |
tabId | string | Yes | Tab ID returned from open_browser_tab |
script | string | Yes | JavaScript code to execute. The return value of the last expression is returned as the result. |
Returns
The return value of the executed script (serialized as a string).
Example
// Read a value from the page
execute_browser_script(terminalId="Alice", tabId="abc123",
script="document.getElementById('status').textContent")
// Modify the page
execute_browser_script(terminalId="Alice", tabId="abc123",
script="document.body.style.background = '#1e1e2e'")
get_browser_console_logs
Get console log messages (log, warn, error, info) from a browser tab. Useful for debugging JavaScript in pages you've loaded.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
terminalId | string | Yes | Your terminal ID or name |
tabId | string | Yes | Tab ID returned from open_browser_tab |
limit | number | No | Maximum number of log entries to return (most recent first). Default: all. |
Returns
Array of console log entries with level, message, and timestamp.
Example
get_browser_console_logs(terminalId="Alice", tabId="abc123", limit=10)
get_browser_element_content
Read the content of a DOM element by CSS selector. Returns text content, innerHTML, or other properties.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
terminalId | string | Yes | Your terminal ID or name |
tabId | string | Yes | Tab ID returned from open_browser_tab |
selector | string | Yes | CSS selector (e.g., #myId, .myClass, div.content > p:first-child) |
property | string | No | Element property to read: textContent (default), innerHTML, outerHTML, value, className, id, or any attribute name |
Returns
The requested property value of the matched element.
Example
// Read text of a heading
get_browser_element_content(terminalId="Alice", tabId="abc123", selector="h1")
// Read innerHTML of a container
get_browser_element_content(terminalId="Alice", tabId="abc123",
selector="#results", property="innerHTML")
post_browser_message
Send a JSON message to a browser tab's page. The page receives it via window.chrome.webview.addEventListener('message', e => { /* e.data */ }). Use for bidirectional communication between agent and page JavaScript.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
terminalId | string | Yes | Your terminal ID or name |
tabId | string | Yes | Tab ID returned from open_browser_tab |
data | object | Yes | JSON data to send to the page. Available as e.data in the message event handler. |
Returns
Confirmation message.
Example
// Send a command to the page
post_browser_message(terminalId="Alice", tabId="abc123",
data={"type": "update", "cpu": 47, "status": "running"})
// Page receives it:
// window.chrome.webview.addEventListener('message', e => {
// console.log(e.data.type); // "update"
// console.log(e.data.cpu); // 47
// });
get_browser_messages
Get messages sent from a browser tab's page via window.chrome.webview.postMessage(). Pages use this to send data back to the agent. Returns buffered messages with timestamps.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
terminalId | string | Yes | Your terminal ID or name |
tabId | string | Yes | Tab ID returned from open_browser_tab |
limit | number | No | Maximum number of messages to return (most recent). Default: all. |
Returns
Array of messages sent from the page, each with data and timestamp.
Example
// Page sends: window.chrome.webview.postMessage({type: "click", id: "btn1"})
// Agent reads:
get_browser_messages(terminalId="Alice", tabId="abc123")
capture_browser_screenshot
Capture a PNG screenshot of a browser tab's content. Returns base64-encoded image data.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
terminalId | string | Yes | Your terminal ID or name |
tabId | string | Yes | Tab ID returned from open_browser_tab |
Returns
Base64-encoded PNG image data of the tab's visible content.
Example
capture_browser_screenshot(terminalId="Alice", tabId="abc123")
list_webmcp_tools
List WebMCP tools registered by a page in a browser tab. Pages use navigator.modelContext.registerTool() to expose structured tools. Returns tool names, descriptions, and input schemas. Use this before invoke_webmcp_tool to see what's available.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
terminalId | string | Yes | Your terminal ID or name |
tabId | string | Yes | Tab ID returned from open_browser_tab |
Returns
Array of registered tool definitions with names, descriptions, and input schemas.
Example
list_webmcp_tools(terminalId="Alice", tabId="abc123")
invoke_webmcp_tool
Invoke a WebMCP tool registered by a page in a browser tab. The page must have registered the tool via navigator.modelContext.registerTool(). Use list_webmcp_tools first to discover available tools and their input schemas.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
terminalId | string | Yes | Your terminal ID or name |
tabId | string | Yes | Tab ID returned from open_browser_tab |
toolName | string | Yes | Name of the WebMCP tool to invoke (from list_webmcp_tools) |
input | object | No | Input parameters for the tool, matching the tool's inputSchema |
Returns
The tool's return value as defined by the page.
Example
invoke_webmcp_tool(
terminalId="Alice",
tabId="abc123",
toolName="search_results",
input={"query": "SQL injection", "limit": 10}
)
XAML
render_xaml
Render a WPF XAML snippet to a PNG image and return it as base64. Use this to preview XAML UI layouts, dialogs, and controls without launching the app. The XAML must have a root element (e.g. Border, Grid, StackPanel) with xmlns declarations.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
xaml | string | Yes | WPF XAML markup (must include xmlns declarations) |
width | number | No | Render width in pixels. Default: 520 |
height | number | No | Render height in pixels. Default: 400 |
Returns
Base64-encoded PNG image of the rendered XAML.
Example
render_xaml(
xaml="<Border xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Background='#1e1e2e'><TextBlock Text='Hello' Foreground='White'/></Border>",
width=520,
height=400
)
Debug
debug_logs
Read debug log entries from MultiTerminal with filtering. Use to check system behavior, trace message delivery, monitor services.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
count | number | No | Number of entries. Default: 50, max: 500 |
offset | number | No | Skip entries for pagination. Default: 0 |
source | string | No | Filter by component (e.g., "InboxMonitor", "MessageBroker") |
level | string | No | Filter: Trace, Info, Warning, Error |
search | string | No | Text search within messages (case-insensitive) |
Returns
Formatted log entries with timestamp, source, level, and message.
Example
debug_logs(count=20, source="InboxMonitor", level="Info")
debug_clear
Clear all debug log entries.
Parameters
None.
Returns
Confirmation with previous entry count.
Example
debug_clear()
debug_pause
Pause debug logging. New entries will be silently discarded until resumed.
Parameters
None.
Returns
Confirmation of paused state.
Example
debug_pause()
debug_resume
Resume debug logging after a pause.
Parameters
None.
Returns
Confirmation of resumed state.
Example
debug_resume()
debug_status
Get debug log status: entry count, paused state, max capacity.
Parameters
None.
Returns
Status object with count, isPaused, and maxCapacity.
Example
debug_status()
debug_log_files
List all available debug log files from previous sessions, most recent first. Each session creates a timestamped log file that persists across restarts.
Parameters
None.
Returns
List of log file paths with timestamps and sizes.
Example
debug_log_files()
Code Search
Fast code and file search powered by ripgrep (bundled as tools/rg.exe). Provides regex search across codebases with structured results.
search_code
Search file contents using ripgrep. Returns matching lines with file paths and line numbers. Supports regex patterns, glob filtering, file type filtering, context lines, and more.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
pattern | string | Yes | Regex pattern to search for (or literal string if fixedStrings is true) |
path | string | Yes | Directory or file path to search in |
caseInsensitive | boolean | No | Case insensitive search (default: false) |
multiline | boolean | No | Enable multiline matching where . matches newlines |
fixedStrings | boolean | No | Treat pattern as literal string, not regex |
glob | string | No | Glob pattern to filter files (e.g. "*.cs", "*.{ts,tsx}") |
fileType | string | No | File type to search (e.g. "cs", "js", "py") |
maxCount | number | No | Maximum matches per file (0 = unlimited) |
context | number | No | Lines of context before and after each match |
before | number | No | Lines of context before each match |
after | number | No | Lines of context after each match |
filesWithMatches | boolean | No | Only return file paths that contain matches |
count | boolean | No | Only return match counts per file |
Returns
Formatted text with match count, stats (files searched, elapsed time), and matching lines as filepath:line:text.
Example
search_code(pattern="class.*Service", path="H:\\project", glob="*.cs", context=2)
search_files
Find files matching a glob pattern using ripgrep. Fast file discovery across directories.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
path | string | Yes | Directory to search in |
glob | string | No | Glob pattern to match file names (e.g. "*.cs", "test_*.py") |
fileType | string | No | File type filter (e.g. "cs", "js", "py") |
Returns
File count and list of matching file paths.
Example
search_files(path="H:\\project", glob="*.cs")