@vibescope/mcp-server 0.4.7 → 0.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -96,7 +96,8 @@ export interface ProjectMethods {
96
96
  require_time_estimates?: boolean;
97
97
  fallback_activities_enabled?: boolean;
98
98
  preferred_fallback_activities?: string[];
99
- allow_agent_task_creation?: boolean;
99
+ allow_local_agent_task_creation?: boolean;
100
+ allow_cloud_agent_task_creation?: boolean;
100
101
  }): Promise<ApiResponse<{
101
102
  success: boolean;
102
103
  project_id: string;
@@ -247,7 +247,8 @@ export declare class VibescopeApiClient {
247
247
  require_time_estimates?: boolean;
248
248
  fallback_activities_enabled?: boolean;
249
249
  preferred_fallback_activities?: string[];
250
- allow_agent_task_creation?: boolean;
250
+ allow_local_agent_task_creation?: boolean;
251
+ allow_cloud_agent_task_creation?: boolean;
251
252
  }): Promise<ApiResponse<{
252
253
  success: boolean;
253
254
  project_id: string;
@@ -486,6 +487,12 @@ export declare class VibescopeApiClient {
486
487
  completeTask(taskId: string, params: {
487
488
  summary?: string;
488
489
  session_id?: string;
490
+ commit_hash?: string;
491
+ check_results?: Array<{
492
+ command: string;
493
+ passed: boolean;
494
+ output?: string;
495
+ }>;
489
496
  }): Promise<ApiResponse<{
490
497
  success: boolean;
491
498
  directive: string;
@@ -285,6 +285,8 @@ export class VibescopeApiClient {
285
285
  return this.proxy('complete_task', {
286
286
  task_id: taskId,
287
287
  summary: params.summary,
288
+ ...(params.commit_hash ? { commit_hash: params.commit_hash } : {}),
289
+ ...(params.check_results ? { check_results: params.check_results } : {}),
288
290
  }, params.session_id ? { session_id: params.session_id, persona: null, instance_id: '' } : undefined);
289
291
  }
290
292
  async deleteTask(taskId) {
@@ -340,6 +340,12 @@ export const TOOL_CATEGORIES = {
340
340
  { name: 'update_mcp_server', brief: 'Self-update the MCP server' },
341
341
  ],
342
342
  },
343
+ persona_templates: {
344
+ description: 'Persona templates — behavioral archetypes that shape agent behavior',
345
+ tools: [
346
+ { name: 'get_persona_templates', brief: 'List available persona templates for a project' },
347
+ ],
348
+ },
343
349
  features: {
344
350
  description: 'Feature specs — flesh out ideas into full specs before breaking into tasks',
345
351
  tools: [
@@ -50,7 +50,8 @@ const updateProjectSchema = {
50
50
  require_time_estimates: { type: 'boolean' },
51
51
  fallback_activities_enabled: { type: 'boolean' },
52
52
  preferred_fallback_activities: { type: 'array' },
53
- allow_agent_task_creation: { type: 'boolean' },
53
+ allow_local_agent_task_creation: { type: 'boolean' },
54
+ allow_cloud_agent_task_creation: { type: 'boolean' },
54
55
  };
55
56
  const updateProjectReadmeSchema = {
56
57
  project_id: { type: 'string', required: true, validate: uuidValidator },
@@ -112,7 +113,7 @@ export const createProject = async (args, _ctx) => {
112
113
  export const updateProject = async (args, _ctx) => {
113
114
  const { project_id, name, description, goal, git_url, tech_stack, status, git_workflow, git_main_branch, git_develop_branch, git_auto_branch, git_auto_tag, deployment_instructions,
114
115
  // New project settings
115
- git_delete_branch_on_merge, require_pr_for_validation, auto_merge_on_approval, validation_required, default_task_priority, require_time_estimates, fallback_activities_enabled, preferred_fallback_activities, allow_agent_task_creation } = parseArgs(args, updateProjectSchema);
116
+ git_delete_branch_on_merge, require_pr_for_validation, auto_merge_on_approval, validation_required, default_task_priority, require_time_estimates, fallback_activities_enabled, preferred_fallback_activities, allow_local_agent_task_creation, allow_cloud_agent_task_creation } = parseArgs(args, updateProjectSchema);
116
117
  const apiClient = getApiClient();
117
118
  const response = await apiClient.updateProject(project_id, {
118
119
  name,
@@ -136,7 +137,8 @@ export const updateProject = async (args, _ctx) => {
136
137
  require_time_estimates,
137
138
  fallback_activities_enabled,
138
139
  preferred_fallback_activities: preferred_fallback_activities,
139
- allow_agent_task_creation: allow_agent_task_creation
140
+ allow_local_agent_task_creation: allow_local_agent_task_creation,
141
+ allow_cloud_agent_task_creation: allow_cloud_agent_task_creation
140
142
  });
141
143
  if (!response.ok) {
142
144
  return { result: { error: response.error || 'Failed to update project' }, isError: true };
@@ -67,6 +67,8 @@ const completeTaskSchema = {
67
67
  task_id: { type: 'string', required: true, validate: uuidValidator },
68
68
  summary: { type: 'string' },
69
69
  session_id: { type: 'string' },
70
+ commit_hash: { type: 'string' },
71
+ check_results: { type: 'object' },
70
72
  };
71
73
  const deleteTaskSchema = {
72
74
  task_id: { type: 'string', required: true, validate: uuidValidator },
@@ -429,11 +431,13 @@ export const updateTask = async (args, ctx) => {
429
431
  return { result };
430
432
  };
431
433
  export const completeTask = async (args, ctx) => {
432
- const { task_id, summary, session_id: explicit_session_id } = parseArgs(args, completeTaskSchema);
434
+ const { task_id, summary, session_id: explicit_session_id, commit_hash, check_results } = parseArgs(args, completeTaskSchema);
433
435
  const api = getApiClient();
434
436
  const response = await api.completeTask(task_id, {
435
437
  summary,
436
438
  session_id: explicit_session_id || ctx.session.currentSessionId || undefined,
439
+ commit_hash,
440
+ check_results: check_results,
437
441
  });
438
442
  if (!response.ok) {
439
443
  return { result: { error: response.error || 'Failed to complete task' }, isError: true };
@@ -1300,6 +1300,17 @@ Read recent project chat messages to stay informed about project communication.
1300
1300
  - count: Number of messages returned
1301
1301
 
1302
1302
  **Example:** get_project_messages(project_id: "123e4567-e89b-12d3-a456-426614174000", limit: 10)`,
1303
+ post_progress: `# post_progress
1304
+ Post a structured progress update to the project chat. Use at key milestones: starting a task, creating a PR, hitting a blocker, or completing work.
1305
+
1306
+ **Parameters:**
1307
+ - project_id (required): Project UUID
1308
+ - message (required): Progress update message (supports markdown)
1309
+ - type (optional): Update type — info (general), milestone (key achievement), blocker (blocking issue), question (asking for input). Default: info
1310
+
1311
+ **Returns:** Confirmation with message_id and timestamp.
1312
+
1313
+ **Example:** post_progress(project_id: "123e4567-e89b-12d3-a456-426614174000", message: "PR #42 created for auth feature", type: "milestone")`,
1303
1314
  // Version management tools
1304
1315
  check_mcp_version: `# check_mcp_version
1305
1316
  Check for available MCP server updates and version information.
@@ -1331,6 +1342,17 @@ Self-update the MCP server to the latest available version.
1331
1342
  **Example:** update_mcp_server()
1332
1343
 
1333
1344
  **Note:** This operation may temporarily disconnect active sessions during restart.`,
1345
+ // Persona template tools
1346
+ get_persona_templates: `# get_persona_templates
1347
+ List available persona templates for a project. Returns both global defaults and project-specific templates.
1348
+
1349
+ **Parameters:**
1350
+ - project_id (required): Project UUID
1351
+
1352
+ **Returns:**
1353
+ - templates: Array of persona templates with id, name, description, focus_areas, icon, is_default, scope (global/project)
1354
+
1355
+ **Example:** get_persona_templates(project_id: "123e4567-e89b-12d3-a456-426614174000")`,
1334
1356
  add_feature: `# add_feature
1335
1357
  Create a draft feature spec. Features sit between ideas (quick thoughts) and tasks (actionable work).
1336
1358
 
@@ -32,6 +32,7 @@ import { connectorTools } from './connectors.js';
32
32
  import { cloudAgentTools } from './cloud-agents.js';
33
33
  import { versionTools } from './version.js';
34
34
  import { featureTools } from './features.js';
35
+ import { personaTemplateTools } from './persona-templates.js';
35
36
  /**
36
37
  * All MCP tool definitions combined
37
38
  */
@@ -71,5 +72,6 @@ export declare const toolCategories: {
71
72
  readonly cloudAgents: string[];
72
73
  readonly version: string[];
73
74
  readonly features: string[];
75
+ readonly personaTemplates: string[];
74
76
  };
75
- export { sessionTools, costTools, discoveryTools, worktreeTools, projectTools, taskTools, progressTools, blockerTools, decisionTools, ideaTools, findingTools, validationTools, deploymentTools, fallbackTools, requestTools, milestoneTools, bodiesOfWorkTools, organizationTools, fileCheckoutTools, roleTools, sprintTools, gitIssueTools, connectorTools, cloudAgentTools, versionTools, featureTools, };
77
+ export { sessionTools, costTools, discoveryTools, worktreeTools, projectTools, taskTools, progressTools, blockerTools, decisionTools, ideaTools, findingTools, validationTools, deploymentTools, fallbackTools, requestTools, milestoneTools, bodiesOfWorkTools, organizationTools, fileCheckoutTools, roleTools, sprintTools, gitIssueTools, connectorTools, cloudAgentTools, versionTools, featureTools, personaTemplateTools, };
@@ -32,6 +32,7 @@ import { cloudAgentTools } from './cloud-agents.js';
32
32
  import { versionTools } from './version.js';
33
33
  import { chatTools } from './chat.js';
34
34
  import { featureTools } from './features.js';
35
+ import { personaTemplateTools } from './persona-templates.js';
35
36
  /**
36
37
  * All MCP tool definitions combined
37
38
  */
@@ -63,6 +64,7 @@ export const tools = [
63
64
  ...versionTools,
64
65
  ...chatTools,
65
66
  ...featureTools,
67
+ ...personaTemplateTools,
66
68
  ];
67
69
  /**
68
70
  * Build the complete tool list from all domain modules
@@ -101,6 +103,7 @@ export const toolCategories = {
101
103
  cloudAgents: cloudAgentTools.map((t) => t.name),
102
104
  version: versionTools.map((t) => t.name),
103
105
  features: featureTools.map((t) => t.name),
106
+ personaTemplates: personaTemplateTools.map((t) => t.name),
104
107
  };
105
108
  // Re-export domain tools for selective imports
106
- export { sessionTools, costTools, discoveryTools, worktreeTools, projectTools, taskTools, progressTools, blockerTools, decisionTools, ideaTools, findingTools, validationTools, deploymentTools, fallbackTools, requestTools, milestoneTools, bodiesOfWorkTools, organizationTools, fileCheckoutTools, roleTools, sprintTools, gitIssueTools, connectorTools, cloudAgentTools, versionTools, featureTools, };
109
+ export { sessionTools, costTools, discoveryTools, worktreeTools, projectTools, taskTools, progressTools, blockerTools, decisionTools, ideaTools, findingTools, validationTools, deploymentTools, fallbackTools, requestTools, milestoneTools, bodiesOfWorkTools, organizationTools, fileCheckoutTools, roleTools, sprintTools, gitIssueTools, connectorTools, cloudAgentTools, versionTools, featureTools, personaTemplateTools, };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Persona Template Tool Definitions
3
+ *
4
+ * Tools for managing persona templates:
5
+ * - get_persona_templates
6
+ */
7
+ import type { Tool } from './types.js';
8
+ export declare const personaTemplateTools: Tool[];
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Persona Template Tool Definitions
3
+ *
4
+ * Tools for managing persona templates:
5
+ * - get_persona_templates
6
+ */
7
+ export const personaTemplateTools = [
8
+ {
9
+ name: 'get_persona_templates',
10
+ description: 'List available persona templates for a project. Returns both global defaults and project-specific templates. Persona templates define behavioral archetypes (e.g., Code Reviewer, QA Engineer) that shape agent behavior.',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ project_id: {
15
+ type: 'string',
16
+ description: 'Project UUID',
17
+ },
18
+ },
19
+ required: ['project_id'],
20
+ },
21
+ },
22
+ ];
@@ -160,9 +160,13 @@ export const projectTools = [
160
160
  items: { type: 'string' },
161
161
  description: 'Array of preferred fallback activities (e.g., ["code_review", "security_review"]). Null means all allowed.',
162
162
  },
163
- allow_agent_task_creation: {
163
+ allow_local_agent_task_creation: {
164
164
  type: 'boolean',
165
- description: 'Allow agents to create tasks via add_task (default: false). When disabled, agents receive a helpful error directing them to log suggestions in their completion summary instead.',
165
+ description: 'Allow local agents (running on developer machine) to create tasks via add_task (default: true).',
166
+ },
167
+ allow_cloud_agent_task_creation: {
168
+ type: 'boolean',
169
+ description: 'Allow cloud/remote agents to create tasks via add_task (default: false).',
166
170
  },
167
171
  },
168
172
  required: ['project_id'],
@@ -222,6 +222,10 @@ WHEN TO USE: If the user gives you work directly (e.g., "implement feature X", "
222
222
  enum: ['haiku', 'sonnet', 'opus'],
223
223
  description: 'Recommended model capability: haiku (simple tasks), sonnet (standard), opus (complex reasoning)',
224
224
  },
225
+ assigned_agent_name: {
226
+ type: 'string',
227
+ description: 'Pre-assign this task to a specific agent by persona name. Only that agent will pick it up via get_next_task.',
228
+ },
225
229
  },
226
230
  required: ['project_id', 'title'],
227
231
  },
@@ -292,6 +296,10 @@ For projects without git branching (trunk-based or none), use skip_worktree_requ
292
296
  enum: ['haiku', 'sonnet', 'opus'],
293
297
  description: 'Recommended model capability: haiku (simple tasks), sonnet (standard), opus (complex reasoning)',
294
298
  },
299
+ assigned_agent_name: {
300
+ type: ['string', 'null'],
301
+ description: 'Pre-assign this task to a specific agent by persona name. Set to null to unassign. Only the assigned agent will pick it up via get_next_task.',
302
+ },
295
303
  skip_worktree_requirement: {
296
304
  type: 'boolean',
297
305
  description: 'Skip git_branch requirement for projects without branching workflows (trunk-based or none). Default: false',
@@ -334,6 +342,23 @@ The auto_continue: true flag in the response means you are expected to continue
334
342
  type: 'string',
335
343
  description: 'Session ID from start_work_session. Required for cloud agents using mcporter.',
336
344
  },
345
+ commit_hash: {
346
+ type: 'string',
347
+ description: 'Git commit hash (7-40 hex chars) of your last commit. Stored on the task for verification.',
348
+ },
349
+ check_results: {
350
+ type: 'array',
351
+ description: 'Results of pre-completion checks (required if project has pre_completion_commands configured). Each item: { command, passed, output? }',
352
+ items: {
353
+ type: 'object',
354
+ properties: {
355
+ command: { type: 'string', description: 'The command that was run' },
356
+ passed: { type: 'boolean', description: 'Whether the command succeeded' },
357
+ output: { type: 'string', description: 'First 500 chars of output if failed' },
358
+ },
359
+ required: ['command', 'passed'],
360
+ },
361
+ },
337
362
  },
338
363
  required: ['task_id'],
339
364
  },
package/docs/TOOLS.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  > Auto-generated from tool definitions. Do not edit manually.
4
4
  >
5
- > Generated: 2026-03-04
5
+ > Generated: 2026-03-10
6
6
  >
7
- > Total tools: 167
7
+ > Total tools: 168
8
8
 
9
9
  ## Table of Contents
10
10
 
@@ -36,6 +36,7 @@
36
36
  - [cloud_agents](#cloud-agents) - Cloud agent management and cleanup (3 tools)
37
37
  - [chat](#chat) - Project-wide chat channel for agent and user communication (3 tools)
38
38
  - [version](#version) - MCP server version management and updates (2 tools)
39
+ - [persona_templates](#persona-templates) - Persona templates — behavioral archetypes that shape agent behavior (1 tools)
39
40
  - [features](#features) - Feature specs — flesh out ideas into full specs before breaking into tasks (6 tools)
40
41
 
41
42
  ## session
@@ -245,7 +246,8 @@ Update project details (name, description, goal, settings).
245
246
  | `require_time_estimates` | `boolean` | No | Require estimated_minutes when creating tasks (default: false) |
246
247
  | `fallback_activities_enabled` | `boolean` | No | Allow agents to perform background activities when no tasks available (default: true) |
247
248
  | `preferred_fallback_activities` | `string[]` | No | Array of preferred fallback activities (e.g., ["code_review", "security_review"]). Null means all allowed. |
248
- | `allow_agent_task_creation` | `boolean` | No | Allow agents to create tasks via add_task (default: false). When disabled, agents receive a helpful error directing them to log suggestions in their completion summary instead. |
249
+ | `allow_local_agent_task_creation` | `boolean` | No | Allow local agents (running on developer machine) to create tasks via add_task (default: true). |
250
+ | `allow_cloud_agent_task_creation` | `boolean` | No | Allow cloud/remote agents to create tasks via add_task (default: false). |
249
251
 
250
252
  ---
251
253
 
@@ -380,6 +382,7 @@ WHEN TO USE: If the user gives you work directly (e.g., "implement feature X", "
380
382
  | `estimated_minutes` | `number` | No | Estimated time to complete in minutes (min: 1) |
381
383
  | `blocking` | `boolean` | No | When true, this task blocks all other work until complete (used for deployment finalization) |
382
384
  | `model_capability` | `"haiku" | "sonnet" | "opus"` | No | Recommended model capability: haiku (simple tasks), sonnet (standard), opus (complex reasoning) |
385
+ | `assigned_agent_name` | `string` | No | Pre-assign this task to a specific agent by persona name. Only that agent will pick it up via get_next_task. |
383
386
 
384
387
  ---
385
388
 
@@ -417,6 +420,7 @@ For projects without git branching (trunk-based or none), use skip_worktree_requ
417
420
  | `worktree_path` | `string` | No | Git worktree path for this task (e.g., "../project-task-abc123"). Store this for cleanup tracking across sessions. |
418
421
  | `worktree_hostname` | `string` | No | Machine hostname where worktree was created (os.hostname()). Required with worktree_path to enable machine-aware cleanup. |
419
422
  | `model_capability` | `"haiku" | "sonnet" | "opus"` | No | Recommended model capability: haiku (simple tasks), sonnet (standard), opus (complex reasoning) |
423
+ | `assigned_agent_name` | `string,null` | No | Pre-assign this task to a specific agent by persona name. Set to null to unassign. Only the assigned agent will pick it up via get_next_task. |
420
424
  | `skip_worktree_requirement` | `boolean` | No | Skip git_branch requirement for projects without branching workflows (trunk-based or none). Default: false |
421
425
  | `session_id` | `string` | No | Session ID from start_work_session. Required for cloud agents using mcporter (session context is not preserved between calls). Links the task to your agent on the dashboard. |
422
426
 
@@ -451,6 +455,8 @@ The auto_continue: true flag in the response means you are expected to continue
451
455
  | `task_id` | `string` | Yes | Task UUID |
452
456
  | `summary` | `string` | No | Brief summary of what was done. This is stored on the task as completion_summary and displayed when reviewing completed tasks. |
453
457
  | `session_id` | `string` | No | Session ID from start_work_session. Required for cloud agents using mcporter. |
458
+ | `commit_hash` | `string` | No | Git commit hash (7-40 hex chars) of your last commit. Stored on the task for verification. |
459
+ | `check_results` | `object[]` | No | Results of pre-completion checks (required if project has pre_completion_commands configured). Each item: { command, passed, output? } |
454
460
 
455
461
  ---
456
462
 
@@ -2574,6 +2580,22 @@ Update the Vibescope MCP server to the latest version. Runs npm install to fetch
2574
2580
 
2575
2581
  ---
2576
2582
 
2583
+ ## persona_templates
2584
+
2585
+ *Persona templates — behavioral archetypes that shape agent behavior*
2586
+
2587
+ ### get_persona_templates
2588
+
2589
+ List available persona templates for a project. Returns both global defaults and project-specific templates. Persona templates define behavioral archetypes (e.g., Code Reviewer, QA Engineer) that shape agent behavior.
2590
+
2591
+ **Parameters:**
2592
+
2593
+ | Parameter | Type | Required | Description |
2594
+ |-----------|------|----------|-------------|
2595
+ | `project_id` | `string` | Yes | Project UUID |
2596
+
2597
+ ---
2598
+
2577
2599
  ## features
2578
2600
 
2579
2601
  *Feature specs — flesh out ideas into full specs before breaking into tasks*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibescope/mcp-server",
3
- "version": "0.4.7",
3
+ "version": "0.4.9",
4
4
  "description": "MCP server for Vibescope - AI project tracking tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -101,7 +101,8 @@ export interface ProjectMethods {
101
101
  require_time_estimates?: boolean;
102
102
  fallback_activities_enabled?: boolean;
103
103
  preferred_fallback_activities?: string[];
104
- allow_agent_task_creation?: boolean;
104
+ allow_local_agent_task_creation?: boolean;
105
+ allow_cloud_agent_task_creation?: boolean;
105
106
  }): Promise<ApiResponse<{
106
107
  success: boolean;
107
108
  project_id: string;
package/src/api-client.ts CHANGED
@@ -449,7 +449,8 @@ export class VibescopeApiClient {
449
449
  require_time_estimates?: boolean;
450
450
  fallback_activities_enabled?: boolean;
451
451
  preferred_fallback_activities?: string[];
452
- allow_agent_task_creation?: boolean;
452
+ allow_local_agent_task_creation?: boolean;
453
+ allow_cloud_agent_task_creation?: boolean;
453
454
  }): Promise<ApiResponse<{
454
455
  success: boolean;
455
456
  project_id: string;
@@ -754,6 +755,8 @@ export class VibescopeApiClient {
754
755
  async completeTask(taskId: string, params: {
755
756
  summary?: string;
756
757
  session_id?: string;
758
+ commit_hash?: string;
759
+ check_results?: Array<{ command: string; passed: boolean; output?: string }>;
757
760
  }): Promise<ApiResponse<{
758
761
  success: boolean;
759
762
  directive: string;
@@ -778,6 +781,8 @@ export class VibescopeApiClient {
778
781
  return this.proxy('complete_task', {
779
782
  task_id: taskId,
780
783
  summary: params.summary,
784
+ ...(params.commit_hash ? { commit_hash: params.commit_hash } : {}),
785
+ ...(params.check_results ? { check_results: params.check_results } : {}),
781
786
  }, params.session_id ? { session_id: params.session_id, persona: null, instance_id: '' } : undefined);
782
787
  }
783
788
 
@@ -348,6 +348,12 @@ export const TOOL_CATEGORIES: Record<string, { description: string; tools: Array
348
348
  { name: 'update_mcp_server', brief: 'Self-update the MCP server' },
349
349
  ],
350
350
  },
351
+ persona_templates: {
352
+ description: 'Persona templates — behavioral archetypes that shape agent behavior',
353
+ tools: [
354
+ { name: 'get_persona_templates', brief: 'List available persona templates for a project' },
355
+ ],
356
+ },
351
357
  features: {
352
358
  description: 'Feature specs — flesh out ideas into full specs before breaking into tasks',
353
359
  tools: [
@@ -64,7 +64,8 @@ const updateProjectSchema = {
64
64
  require_time_estimates: { type: 'boolean' as const },
65
65
  fallback_activities_enabled: { type: 'boolean' as const },
66
66
  preferred_fallback_activities: { type: 'array' as const },
67
- allow_agent_task_creation: { type: 'boolean' as const },
67
+ allow_local_agent_task_creation: { type: 'boolean' as const },
68
+ allow_cloud_agent_task_creation: { type: 'boolean' as const },
68
69
  };
69
70
 
70
71
  const updateProjectReadmeSchema = {
@@ -167,7 +168,8 @@ export const updateProject: Handler = async (args, _ctx) => {
167
168
  require_time_estimates,
168
169
  fallback_activities_enabled,
169
170
  preferred_fallback_activities,
170
- allow_agent_task_creation
171
+ allow_local_agent_task_creation,
172
+ allow_cloud_agent_task_creation
171
173
  } = parseArgs(args, updateProjectSchema);
172
174
 
173
175
  const apiClient = getApiClient();
@@ -193,7 +195,8 @@ export const updateProject: Handler = async (args, _ctx) => {
193
195
  require_time_estimates,
194
196
  fallback_activities_enabled,
195
197
  preferred_fallback_activities: preferred_fallback_activities as string[] | undefined,
196
- allow_agent_task_creation: allow_agent_task_creation as boolean | undefined
198
+ allow_local_agent_task_creation: allow_local_agent_task_creation as boolean | undefined,
199
+ allow_cloud_agent_task_creation: allow_cloud_agent_task_creation as boolean | undefined
197
200
  });
198
201
 
199
202
  if (!response.ok) {
@@ -85,6 +85,8 @@ const completeTaskSchema = {
85
85
  task_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
86
86
  summary: { type: 'string' as const },
87
87
  session_id: { type: 'string' as const },
88
+ commit_hash: { type: 'string' as const },
89
+ check_results: { type: 'object' as const },
88
90
  };
89
91
 
90
92
  const deleteTaskSchema = {
@@ -529,12 +531,14 @@ export const updateTask: Handler = async (args, ctx) => {
529
531
  };
530
532
 
531
533
  export const completeTask: Handler = async (args, ctx) => {
532
- const { task_id, summary, session_id: explicit_session_id } = parseArgs(args, completeTaskSchema);
534
+ const { task_id, summary, session_id: explicit_session_id, commit_hash, check_results } = parseArgs(args, completeTaskSchema);
533
535
 
534
536
  const api = getApiClient();
535
537
  const response = await api.completeTask(task_id, {
536
538
  summary,
537
539
  session_id: explicit_session_id || ctx.session.currentSessionId || undefined,
540
+ commit_hash,
541
+ check_results: check_results as unknown as Array<{ command: string; passed: boolean; output?: string }>,
538
542
  });
539
543
 
540
544
  if (!response.ok) {
@@ -1464,6 +1464,18 @@ Read recent project chat messages to stay informed about project communication.
1464
1464
 
1465
1465
  **Example:** get_project_messages(project_id: "123e4567-e89b-12d3-a456-426614174000", limit: 10)`,
1466
1466
 
1467
+ post_progress: `# post_progress
1468
+ Post a structured progress update to the project chat. Use at key milestones: starting a task, creating a PR, hitting a blocker, or completing work.
1469
+
1470
+ **Parameters:**
1471
+ - project_id (required): Project UUID
1472
+ - message (required): Progress update message (supports markdown)
1473
+ - type (optional): Update type — info (general), milestone (key achievement), blocker (blocking issue), question (asking for input). Default: info
1474
+
1475
+ **Returns:** Confirmation with message_id and timestamp.
1476
+
1477
+ **Example:** post_progress(project_id: "123e4567-e89b-12d3-a456-426614174000", message: "PR #42 created for auth feature", type: "milestone")`,
1478
+
1467
1479
  // Version management tools
1468
1480
  check_mcp_version: `# check_mcp_version
1469
1481
  Check for available MCP server updates and version information.
@@ -1497,6 +1509,18 @@ Self-update the MCP server to the latest available version.
1497
1509
 
1498
1510
  **Note:** This operation may temporarily disconnect active sessions during restart.`,
1499
1511
 
1512
+ // Persona template tools
1513
+ get_persona_templates: `# get_persona_templates
1514
+ List available persona templates for a project. Returns both global defaults and project-specific templates.
1515
+
1516
+ **Parameters:**
1517
+ - project_id (required): Project UUID
1518
+
1519
+ **Returns:**
1520
+ - templates: Array of persona templates with id, name, description, focus_areas, icon, is_default, scope (global/project)
1521
+
1522
+ **Example:** get_persona_templates(project_id: "123e4567-e89b-12d3-a456-426614174000")`,
1523
+
1500
1524
  add_feature: `# add_feature
1501
1525
  Create a draft feature spec. Features sit between ideas (quick thoughts) and tasks (actionable work).
1502
1526
 
@@ -36,6 +36,7 @@ import { cloudAgentTools } from './cloud-agents.js';
36
36
  import { versionTools } from './version.js';
37
37
  import { chatTools } from './chat.js';
38
38
  import { featureTools } from './features.js';
39
+ import { personaTemplateTools } from './persona-templates.js';
39
40
 
40
41
  /**
41
42
  * All MCP tool definitions combined
@@ -68,6 +69,7 @@ export const tools: Tool[] = [
68
69
  ...versionTools,
69
70
  ...chatTools,
70
71
  ...featureTools,
72
+ ...personaTemplateTools,
71
73
  ];
72
74
 
73
75
  /**
@@ -108,6 +110,7 @@ export const toolCategories = {
108
110
  cloudAgents: cloudAgentTools.map((t) => t.name),
109
111
  version: versionTools.map((t) => t.name),
110
112
  features: featureTools.map((t) => t.name),
113
+ personaTemplates: personaTemplateTools.map((t) => t.name),
111
114
  } as const;
112
115
 
113
116
  // Re-export domain tools for selective imports
@@ -138,4 +141,5 @@ export {
138
141
  cloudAgentTools,
139
142
  versionTools,
140
143
  featureTools,
144
+ personaTemplateTools,
141
145
  };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Persona Template Tool Definitions
3
+ *
4
+ * Tools for managing persona templates:
5
+ * - get_persona_templates
6
+ */
7
+
8
+ import type { Tool } from './types.js';
9
+
10
+ export const personaTemplateTools: Tool[] = [
11
+ {
12
+ name: 'get_persona_templates',
13
+ description: 'List available persona templates for a project. Returns both global defaults and project-specific templates. Persona templates define behavioral archetypes (e.g., Code Reviewer, QA Engineer) that shape agent behavior.',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: {
17
+ project_id: {
18
+ type: 'string',
19
+ description: 'Project UUID',
20
+ },
21
+ },
22
+ required: ['project_id'],
23
+ },
24
+ },
25
+ ];
@@ -163,9 +163,13 @@ export const projectTools: Tool[] = [
163
163
  items: { type: 'string' },
164
164
  description: 'Array of preferred fallback activities (e.g., ["code_review", "security_review"]). Null means all allowed.',
165
165
  },
166
- allow_agent_task_creation: {
166
+ allow_local_agent_task_creation: {
167
167
  type: 'boolean',
168
- description: 'Allow agents to create tasks via add_task (default: false). When disabled, agents receive a helpful error directing them to log suggestions in their completion summary instead.',
168
+ description: 'Allow local agents (running on developer machine) to create tasks via add_task (default: true).',
169
+ },
170
+ allow_cloud_agent_task_creation: {
171
+ type: 'boolean',
172
+ description: 'Allow cloud/remote agents to create tasks via add_task (default: false).',
169
173
  },
170
174
  },
171
175
  required: ['project_id'],
@@ -225,6 +225,10 @@ WHEN TO USE: If the user gives you work directly (e.g., "implement feature X", "
225
225
  enum: ['haiku', 'sonnet', 'opus'],
226
226
  description: 'Recommended model capability: haiku (simple tasks), sonnet (standard), opus (complex reasoning)',
227
227
  },
228
+ assigned_agent_name: {
229
+ type: 'string',
230
+ description: 'Pre-assign this task to a specific agent by persona name. Only that agent will pick it up via get_next_task.',
231
+ },
228
232
  },
229
233
  required: ['project_id', 'title'],
230
234
  },
@@ -295,6 +299,10 @@ For projects without git branching (trunk-based or none), use skip_worktree_requ
295
299
  enum: ['haiku', 'sonnet', 'opus'],
296
300
  description: 'Recommended model capability: haiku (simple tasks), sonnet (standard), opus (complex reasoning)',
297
301
  },
302
+ assigned_agent_name: {
303
+ type: ['string', 'null'],
304
+ description: 'Pre-assign this task to a specific agent by persona name. Set to null to unassign. Only the assigned agent will pick it up via get_next_task.',
305
+ },
298
306
  skip_worktree_requirement: {
299
307
  type: 'boolean',
300
308
  description: 'Skip git_branch requirement for projects without branching workflows (trunk-based or none). Default: false',
@@ -337,6 +345,23 @@ The auto_continue: true flag in the response means you are expected to continue
337
345
  type: 'string',
338
346
  description: 'Session ID from start_work_session. Required for cloud agents using mcporter.',
339
347
  },
348
+ commit_hash: {
349
+ type: 'string',
350
+ description: 'Git commit hash (7-40 hex chars) of your last commit. Stored on the task for verification.',
351
+ },
352
+ check_results: {
353
+ type: 'array',
354
+ description: 'Results of pre-completion checks (required if project has pre_completion_commands configured). Each item: { command, passed, output? }',
355
+ items: {
356
+ type: 'object',
357
+ properties: {
358
+ command: { type: 'string', description: 'The command that was run' },
359
+ passed: { type: 'boolean', description: 'Whether the command succeeded' },
360
+ output: { type: 'string', description: 'First 500 chars of output if failed' },
361
+ },
362
+ required: ['command', 'passed'],
363
+ },
364
+ },
340
365
  },
341
366
  required: ['task_id'],
342
367
  },
package/dist/tools.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
- export declare const tools: Tool[];