@vibescope/mcp-server 0.3.9 → 0.3.11

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.
@@ -151,6 +151,23 @@ export const startWorkSession = async (args, ctx) => {
151
151
  result.persona = data.persona;
152
152
  result.role = data.role;
153
153
  result.project = data.project;
154
+ // For cloud agents: include workspace setup instructions if repo not yet cloned
155
+ // Cloud agents pass git_url; check if workspace needs setup
156
+ if (git_url && data.project?.git_url) {
157
+ result.workspace_setup = {
158
+ message: 'If the project repo is NOT already cloned to your workspace, follow these steps:',
159
+ steps: [
160
+ `git clone ${data.project.git_url} ~/workspace/project`,
161
+ 'cd ~/workspace/project',
162
+ ...(data.project.git_workflow === 'git-flow'
163
+ ? [`git checkout ${data.project.git_develop_branch || 'develop'}`]
164
+ : []),
165
+ 'Install dependencies (check for pnpm-lock.yaml, package-lock.json, etc.)',
166
+ 'If using SvelteKit: run `pnpm exec svelte-kit sync` or equivalent',
167
+ ],
168
+ note: 'Skip these steps if ~/workspace/project already exists and has the repo.',
169
+ };
170
+ }
154
171
  // Inform agent if git_url was normalized (helps explain URL matching behavior)
155
172
  if (gitUrlWasNormalized) {
156
173
  result.git_url_normalized = {
@@ -60,10 +60,12 @@ const updateTaskSchema = {
60
60
  worktree_path: { type: 'string' },
61
61
  task_type: { type: 'string', validate: createEnumValidator(VALID_TASK_TYPES) },
62
62
  skip_worktree_requirement: { type: 'boolean', default: false },
63
+ session_id: { type: 'string' },
63
64
  };
64
65
  const completeTaskSchema = {
65
66
  task_id: { type: 'string', required: true, validate: uuidValidator },
66
67
  summary: { type: 'string' },
68
+ session_id: { type: 'string' },
67
69
  };
68
70
  const deleteTaskSchema = {
69
71
  task_id: { type: 'string', required: true, validate: uuidValidator },
@@ -278,7 +280,7 @@ export const addTask = async (args, ctx) => {
278
280
  return { result };
279
281
  };
280
282
  export const updateTask = async (args, ctx) => {
281
- const { task_id, title, description, priority, status, progress_percentage, progress_note, estimated_minutes, git_branch, worktree_path, task_type, skip_worktree_requirement } = parseArgs(args, updateTaskSchema);
283
+ const { task_id, title, description, priority, status, progress_percentage, progress_note, estimated_minutes, git_branch, worktree_path, task_type, skip_worktree_requirement, session_id: explicit_session_id } = parseArgs(args, updateTaskSchema);
282
284
  const updates = { title, description, priority, status, progress_percentage, estimated_minutes, git_branch, worktree_path, task_type };
283
285
  // Enforce worktree creation: require git_branch when marking task as in_progress
284
286
  // This ensures multi-agent collaboration works properly with isolated worktrees
@@ -300,7 +302,7 @@ export const updateTask = async (args, ctx) => {
300
302
  const response = await api.updateTask(task_id, {
301
303
  ...updates,
302
304
  progress_note,
303
- session_id: ctx.session.currentSessionId || undefined,
305
+ session_id: explicit_session_id || ctx.session.currentSessionId || undefined,
304
306
  });
305
307
  if (!response.ok) {
306
308
  // Check for specific error types
@@ -426,11 +428,11 @@ export const updateTask = async (args, ctx) => {
426
428
  return { result };
427
429
  };
428
430
  export const completeTask = async (args, ctx) => {
429
- const { task_id, summary } = parseArgs(args, completeTaskSchema);
431
+ const { task_id, summary, session_id: explicit_session_id } = parseArgs(args, completeTaskSchema);
430
432
  const api = getApiClient();
431
433
  const response = await api.completeTask(task_id, {
432
434
  summary,
433
- session_id: ctx.session.currentSessionId || undefined,
435
+ session_id: explicit_session_id || ctx.session.currentSessionId || undefined,
434
436
  });
435
437
  if (!response.ok) {
436
438
  return { result: { error: response.error || 'Failed to complete task' }, isError: true };
@@ -296,6 +296,10 @@ For projects without git branching (trunk-based or none), use skip_worktree_requ
296
296
  type: 'boolean',
297
297
  description: 'Skip git_branch requirement for projects without branching workflows (trunk-based or none). Default: false',
298
298
  },
299
+ session_id: {
300
+ type: 'string',
301
+ description: '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.',
302
+ },
299
303
  },
300
304
  required: ['task_id'],
301
305
  },
@@ -326,6 +330,10 @@ The auto_continue: true flag in the response means you are expected to continue
326
330
  type: 'string',
327
331
  description: 'Brief summary of what was done. This is stored on the task as completion_summary and displayed when reviewing completed tasks.',
328
332
  },
333
+ session_id: {
334
+ type: 'string',
335
+ description: 'Session ID from start_work_session. Required for cloud agents using mcporter.',
336
+ },
329
337
  },
330
338
  required: ['task_id'],
331
339
  },
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-02-13
5
+ > Generated: 2026-02-15
6
6
  >
7
- > Total tools: 158
7
+ > Total tools: 159
8
8
 
9
9
  ## Table of Contents
10
10
 
@@ -2513,3 +2513,35 @@ Update the Vibescope MCP server to the latest version. Runs npm install to fetch
2513
2513
  | `global` | `boolean` | No | If true, update the global installation (npm install -g). If false, update locally. Default: true. |
2514
2514
 
2515
2515
  ---
2516
+
2517
+ ## Uncategorized
2518
+
2519
+ *Tools not yet assigned to a category*
2520
+
2521
+ ### update_agent_status
2522
+
2523
+ Report what you're currently doing. This updates the status message shown on the dashboard.
2524
+
2525
+ Call this at key milestones during boot and work:
2526
+
2527
+ - "Installing dependencies..."
2528
+
2529
+ - "Running start_work_session..."
2530
+
2531
+ - "Working on: <task title>"
2532
+
2533
+ - "Running tests..."
2534
+
2535
+ - "Committing changes..."
2536
+
2537
+ Keep messages short (under 80 chars). The dashboard shows this in real-time.
2538
+
2539
+ **Parameters:**
2540
+
2541
+ | Parameter | Type | Required | Description |
2542
+ |-----------|------|----------|-------------|
2543
+ | `status_message` | `string` | Yes | Short status message to display on dashboard (max 80 chars) |
2544
+ | `project_id` | `string` | No | Project UUID (optional if session has project context) |
2545
+ | `agent_name` | `string` | No | Agent name (used to find the spawned_agents record) |
2546
+
2547
+ ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibescope/mcp-server",
3
- "version": "0.3.9",
3
+ "version": "0.3.11",
4
4
  "description": "MCP server for Vibescope - AI project tracking tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -183,6 +183,24 @@ export const startWorkSession: Handler = async (args, ctx) => {
183
183
  result.role = data.role;
184
184
  result.project = data.project;
185
185
 
186
+ // For cloud agents: include workspace setup instructions if repo not yet cloned
187
+ // Cloud agents pass git_url; check if workspace needs setup
188
+ if (git_url && data.project?.git_url) {
189
+ result.workspace_setup = {
190
+ message: 'If the project repo is NOT already cloned to your workspace, follow these steps:',
191
+ steps: [
192
+ `git clone ${data.project.git_url} ~/workspace/project`,
193
+ 'cd ~/workspace/project',
194
+ ...(data.project.git_workflow === 'git-flow'
195
+ ? [`git checkout ${data.project.git_develop_branch || 'develop'}`]
196
+ : []),
197
+ 'Install dependencies (check for pnpm-lock.yaml, package-lock.json, etc.)',
198
+ 'If using SvelteKit: run `pnpm exec svelte-kit sync` or equivalent',
199
+ ],
200
+ note: 'Skip these steps if ~/workspace/project already exists and has the repo.',
201
+ };
202
+ }
203
+
186
204
  // Inform agent if git_url was normalized (helps explain URL matching behavior)
187
205
  if (gitUrlWasNormalized) {
188
206
  result.git_url_normalized = {
@@ -77,11 +77,13 @@ const updateTaskSchema = {
77
77
  worktree_path: { type: 'string' as const },
78
78
  task_type: { type: 'string' as const, validate: createEnumValidator(VALID_TASK_TYPES) },
79
79
  skip_worktree_requirement: { type: 'boolean' as const, default: false },
80
+ session_id: { type: 'string' as const },
80
81
  };
81
82
 
82
83
  const completeTaskSchema = {
83
84
  task_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
84
85
  summary: { type: 'string' as const },
86
+ session_id: { type: 'string' as const },
85
87
  };
86
88
 
87
89
  const deleteTaskSchema = {
@@ -367,7 +369,7 @@ export const addTask: Handler = async (args, ctx) => {
367
369
  };
368
370
 
369
371
  export const updateTask: Handler = async (args, ctx) => {
370
- const { task_id, title, description, priority, status, progress_percentage, progress_note, estimated_minutes, git_branch, worktree_path, task_type, skip_worktree_requirement } = parseArgs(args, updateTaskSchema);
372
+ const { task_id, title, description, priority, status, progress_percentage, progress_note, estimated_minutes, git_branch, worktree_path, task_type, skip_worktree_requirement, session_id: explicit_session_id } = parseArgs(args, updateTaskSchema);
371
373
  const updates = { title, description, priority, status, progress_percentage, estimated_minutes, git_branch, worktree_path, task_type };
372
374
 
373
375
  // Enforce worktree creation: require git_branch when marking task as in_progress
@@ -391,7 +393,7 @@ export const updateTask: Handler = async (args, ctx) => {
391
393
  const response = await api.updateTask(task_id, {
392
394
  ...updates,
393
395
  progress_note,
394
- session_id: ctx.session.currentSessionId || undefined,
396
+ session_id: explicit_session_id || ctx.session.currentSessionId || undefined,
395
397
  });
396
398
 
397
399
  if (!response.ok) {
@@ -526,12 +528,12 @@ export const updateTask: Handler = async (args, ctx) => {
526
528
  };
527
529
 
528
530
  export const completeTask: Handler = async (args, ctx) => {
529
- const { task_id, summary } = parseArgs(args, completeTaskSchema);
531
+ const { task_id, summary, session_id: explicit_session_id } = parseArgs(args, completeTaskSchema);
530
532
 
531
533
  const api = getApiClient();
532
534
  const response = await api.completeTask(task_id, {
533
535
  summary,
534
- session_id: ctx.session.currentSessionId || undefined,
536
+ session_id: explicit_session_id || ctx.session.currentSessionId || undefined,
535
537
  });
536
538
 
537
539
  if (!response.ok) {
@@ -299,6 +299,10 @@ For projects without git branching (trunk-based or none), use skip_worktree_requ
299
299
  type: 'boolean',
300
300
  description: 'Skip git_branch requirement for projects without branching workflows (trunk-based or none). Default: false',
301
301
  },
302
+ session_id: {
303
+ type: 'string',
304
+ description: '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.',
305
+ },
302
306
  },
303
307
  required: ['task_id'],
304
308
  },
@@ -329,6 +333,10 @@ The auto_continue: true flag in the response means you are expected to continue
329
333
  type: 'string',
330
334
  description: 'Brief summary of what was done. This is stored on the task as completion_summary and displayed when reviewing completed tasks.',
331
335
  },
336
+ session_id: {
337
+ type: 'string',
338
+ description: 'Session ID from start_work_session. Required for cloud agents using mcporter.',
339
+ },
332
340
  },
333
341
  required: ['task_id'],
334
342
  },