@vibescope/mcp-server 0.4.0 → 0.4.2

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.
Files changed (70) hide show
  1. package/dist/api-client/fallback.d.ts +33 -0
  2. package/dist/api-client/fallback.js +21 -0
  3. package/dist/api-client/findings.d.ts +69 -0
  4. package/dist/api-client/findings.js +36 -0
  5. package/dist/api-client/index.d.ts +78 -1
  6. package/dist/api-client/index.js +74 -4
  7. package/dist/api-client/milestones.d.ts +59 -0
  8. package/dist/api-client/milestones.js +30 -0
  9. package/dist/api-client/validation.d.ts +35 -0
  10. package/dist/api-client/validation.js +23 -0
  11. package/dist/api-client.d.ts +4 -0
  12. package/dist/cli-init.d.ts +17 -0
  13. package/dist/cli-init.js +497 -0
  14. package/dist/handlers/cloud-agents.d.ts +4 -0
  15. package/dist/handlers/cloud-agents.js +26 -12
  16. package/dist/handlers/discovery.js +15 -0
  17. package/dist/handlers/findings.js +1 -1
  18. package/dist/handlers/ideas.js +1 -1
  19. package/dist/handlers/index.d.ts +1 -0
  20. package/dist/handlers/index.js +3 -0
  21. package/dist/handlers/session.js +115 -2
  22. package/dist/handlers/tasks.js +7 -5
  23. package/dist/handlers/tool-docs.js +344 -0
  24. package/dist/handlers/version.d.ts +5 -0
  25. package/dist/handlers/version.js +53 -0
  26. package/dist/index.js +7 -0
  27. package/dist/templates/agent-guidelines.d.ts +3 -1
  28. package/dist/templates/agent-guidelines.js +5 -1
  29. package/dist/templates/help-content.js +2 -2
  30. package/dist/tools/chat.d.ts +7 -0
  31. package/dist/tools/chat.js +43 -0
  32. package/dist/tools/cloud-agents.js +31 -0
  33. package/dist/tools/index.d.ts +3 -1
  34. package/dist/tools/index.js +6 -1
  35. package/dist/tools/project.js +1 -1
  36. package/dist/tools/tasks.js +8 -0
  37. package/dist/tools/version.d.ts +5 -0
  38. package/dist/tools/version.js +28 -0
  39. package/dist/version.d.ts +28 -0
  40. package/dist/version.js +91 -0
  41. package/docs/TOOLS.md +93 -3
  42. package/package.json +4 -2
  43. package/src/api-client/fallback.ts +52 -0
  44. package/src/api-client/findings.ts +100 -0
  45. package/src/api-client/index.ts +91 -9
  46. package/src/api-client/milestones.ts +83 -0
  47. package/src/api-client/validation.ts +60 -0
  48. package/src/api-client.ts +4 -0
  49. package/src/cli-init.ts +557 -0
  50. package/src/handlers/cloud-agents.test.ts +438 -0
  51. package/src/handlers/cloud-agents.ts +35 -17
  52. package/src/handlers/discovery.ts +15 -0
  53. package/src/handlers/findings.ts +1 -1
  54. package/src/handlers/ideas.ts +1 -1
  55. package/src/handlers/index.ts +3 -0
  56. package/src/handlers/session.ts +128 -2
  57. package/src/handlers/tasks.ts +7 -5
  58. package/src/handlers/tool-docs.test.ts +511 -0
  59. package/src/handlers/tool-docs.ts +382 -0
  60. package/src/handlers/version.ts +63 -0
  61. package/src/index.ts +9 -0
  62. package/src/templates/agent-guidelines.ts +6 -1
  63. package/src/templates/help-content.ts +2 -2
  64. package/src/tools/chat.ts +46 -0
  65. package/src/tools/cloud-agents.ts +31 -0
  66. package/src/tools/index.ts +6 -0
  67. package/src/tools/project.ts +1 -1
  68. package/src/tools/tasks.ts +8 -0
  69. package/src/tools/version.ts +34 -0
  70. package/src/version.ts +109 -0
@@ -1106,4 +1106,386 @@ Query aggregated project knowledge in a single call. Reduces token usage by comb
1106
1106
  **Token savings:** Replaces multiple tool calls (get_findings, get_decisions, get_blockers, etc.) with one call.
1107
1107
 
1108
1108
  **Example:** query_knowledge_base(project_id, categories: ["findings", "decisions"], limit: 10)`,
1109
+
1110
+ // Session tools (additional)
1111
+ report_token_usage: `# report_token_usage
1112
+ Report actual token usage from Claude API responses.
1113
+
1114
+ **Parameters:**
1115
+ - session_id (optional): Session UUID (uses current session if not provided)
1116
+ - input_tokens (required): Number of input tokens
1117
+ - output_tokens (required): Number of output tokens
1118
+ - model (optional): Model used (e.g., "claude-3-opus")
1119
+
1120
+ **Returns:** Updated token usage summary`,
1121
+
1122
+ signal_idle: `# signal_idle
1123
+ Signal that the agent is idle and available for work.
1124
+
1125
+ **Parameters:**
1126
+ - session_id (optional): Session UUID (uses current session if not provided)
1127
+
1128
+ **Returns:** Idle status confirmation, may include suggested activities`,
1129
+
1130
+ confirm_agent_setup: `# confirm_agent_setup
1131
+ Confirm that agent setup is complete after following setup instructions.
1132
+
1133
+ **Parameters:**
1134
+ - project_id (required): Project UUID
1135
+ - agent_type (required): Type of agent (e.g., "claude", "gemini")
1136
+
1137
+ **Returns:** Setup confirmation status`,
1138
+
1139
+ // Project tools (additional)
1140
+ get_project_summary: `# get_project_summary
1141
+ Get unified project statistics overview in a single call.
1142
+
1143
+ **Parameters:**
1144
+ - project_id (required): Project UUID
1145
+
1146
+ **Returns:** Task counts, blocker counts, finding counts, decision counts, and more`,
1147
+
1148
+ // Blocker tools (additional)
1149
+ get_blocker: `# get_blocker
1150
+ Get a single blocker by ID.
1151
+
1152
+ **Parameters:**
1153
+ - blocker_id (required): Blocker UUID
1154
+
1155
+ **Returns:** Blocker details including description, status, resolution`,
1156
+
1157
+ get_blockers_stats: `# get_blockers_stats
1158
+ Get aggregate blocker statistics.
1159
+
1160
+ **Parameters:**
1161
+ - project_id (required): Project UUID
1162
+
1163
+ **Returns:** Open/resolved counts, breakdown by age`,
1164
+
1165
+ // Decision tools (additional)
1166
+ get_decision: `# get_decision
1167
+ Get a single decision by ID.
1168
+
1169
+ **Parameters:**
1170
+ - decision_id (required): Decision UUID
1171
+
1172
+ **Returns:** Decision details including title, description, rationale`,
1173
+
1174
+ get_decisions_stats: `# get_decisions_stats
1175
+ Get aggregate decision statistics.
1176
+
1177
+ **Parameters:**
1178
+ - project_id (required): Project UUID
1179
+
1180
+ **Returns:** Total count, recent decisions count`,
1181
+
1182
+ // Idea tools (additional)
1183
+ get_idea: `# get_idea
1184
+ Get a single idea by ID.
1185
+
1186
+ **Parameters:**
1187
+ - idea_id (required): Idea UUID
1188
+
1189
+ **Returns:** Idea details including title, description, status`,
1190
+
1191
+ // Finding tools (additional)
1192
+ get_finding: `# get_finding
1193
+ Get a single finding by ID.
1194
+
1195
+ **Parameters:**
1196
+ - finding_id (required): Finding UUID
1197
+
1198
+ **Returns:** Finding details including title, category, severity, status`,
1199
+
1200
+ get_findings_stats: `# get_findings_stats
1201
+ Get aggregate finding statistics.
1202
+
1203
+ **Parameters:**
1204
+ - project_id (required): Project UUID
1205
+
1206
+ **Returns:** Counts by category, severity, and status`,
1207
+
1208
+ // Deployment tools (additional)
1209
+ get_deployment_requirements_stats: `# get_deployment_requirements_stats
1210
+ Get aggregate deployment requirement statistics.
1211
+
1212
+ **Parameters:**
1213
+ - project_id (required): Project UUID
1214
+
1215
+ **Returns:** Counts by stage and status`,
1216
+
1217
+ // Worktree tools
1218
+ get_stale_worktrees: `# get_stale_worktrees
1219
+ Find orphaned worktrees that need cleanup.
1220
+
1221
+ **Parameters:**
1222
+ - project_id (required): Project UUID
1223
+ - hostname (optional): Filter to worktrees created on this machine
1224
+
1225
+ **Returns:** List of stale worktrees with task info and cleanup commands`,
1226
+
1227
+ clear_worktree_path: `# clear_worktree_path
1228
+ Clear worktree path from a task after cleanup.
1229
+
1230
+ **Parameters:**
1231
+ - task_id (required): Task UUID
1232
+
1233
+ **Note:** Call this AFTER running git worktree remove`,
1234
+
1235
+ // Role tools
1236
+ get_role_settings: `# get_role_settings
1237
+ Get project role settings and configuration.
1238
+
1239
+ **Parameters:**
1240
+ - project_id (required): Project UUID
1241
+
1242
+ **Returns:** Role configuration including allowed roles, default role`,
1243
+
1244
+ update_role_settings: `# update_role_settings
1245
+ Configure project role behavior.
1246
+
1247
+ **Parameters:**
1248
+ - project_id (required): Project UUID
1249
+ - default_role (optional): Default role for new sessions
1250
+ - allowed_roles (optional): Array of allowed role names
1251
+
1252
+ **Returns:** Updated role settings`,
1253
+
1254
+ set_session_role: `# set_session_role
1255
+ Set the role for the current session.
1256
+
1257
+ **Parameters:**
1258
+ - session_id (optional): Session UUID (uses current session)
1259
+ - role (required): Role name (e.g., "developer", "validator", "deployer")
1260
+
1261
+ **Returns:** Updated session with new role`,
1262
+
1263
+ get_agents_by_role: `# get_agents_by_role
1264
+ List active agents grouped by role.
1265
+
1266
+ **Parameters:**
1267
+ - project_id (required): Project UUID
1268
+
1269
+ **Returns:** Agents organized by role`,
1270
+
1271
+ // File checkout/lock tools
1272
+ checkout_file: `# checkout_file
1273
+ Lock a file for editing to prevent conflicts with other agents.
1274
+
1275
+ **Parameters:**
1276
+ - project_id (required): Project UUID
1277
+ - file_path (required): Path to the file to lock
1278
+ - reason (optional): Why you need to edit this file
1279
+
1280
+ **Returns:** Checkout confirmation with expiry time`,
1281
+
1282
+ checkin_file: `# checkin_file
1283
+ Release a file lock after editing.
1284
+
1285
+ **Parameters:**
1286
+ - project_id (required): Project UUID
1287
+ - file_path (required): Path to the file to release
1288
+
1289
+ **Returns:** Checkin confirmation`,
1290
+
1291
+ get_file_checkouts: `# get_file_checkouts
1292
+ List current file locks.
1293
+
1294
+ **Parameters:**
1295
+ - project_id (required): Project UUID
1296
+ - file_path (optional): Filter to specific file
1297
+
1298
+ **Returns:** List of active file checkouts`,
1299
+
1300
+ get_file_checkouts_stats: `# get_file_checkouts_stats
1301
+ Get file checkout statistics.
1302
+
1303
+ **Parameters:**
1304
+ - project_id (required): Project UUID
1305
+
1306
+ **Returns:** Active checkout count, breakdown by agent`,
1307
+
1308
+ abandon_checkout: `# abandon_checkout
1309
+ Force-release a file lock (use with caution).
1310
+
1311
+ **Parameters:**
1312
+ - project_id (required): Project UUID
1313
+ - file_path (required): Path to the file to release
1314
+
1315
+ **Note:** Only use when the original agent is unreachable`,
1316
+
1317
+ is_file_available: `# is_file_available
1318
+ Check if a file is available for checkout.
1319
+
1320
+ **Parameters:**
1321
+ - project_id (required): Project UUID
1322
+ - file_path (required): Path to check
1323
+
1324
+ **Returns:** Availability status, current holder if locked`,
1325
+
1326
+ // Connector tools
1327
+ get_connectors: `# get_connectors
1328
+ List project connectors (integrations).
1329
+
1330
+ **Parameters:**
1331
+ - project_id (required): Project UUID
1332
+
1333
+ **Returns:** Array of configured connectors`,
1334
+
1335
+ get_connector: `# get_connector
1336
+ Get connector details.
1337
+
1338
+ **Parameters:**
1339
+ - connector_id (required): Connector UUID
1340
+
1341
+ **Returns:** Connector configuration and status`,
1342
+
1343
+ add_connector: `# add_connector
1344
+ Create a new external integration connector.
1345
+
1346
+ **Parameters:**
1347
+ - project_id (required): Project UUID
1348
+ - type (required): Connector type (webhook, slack, discord, etc.)
1349
+ - name (required): Display name
1350
+ - config (required): Type-specific configuration
1351
+
1352
+ **Returns:** Created connector details`,
1353
+
1354
+ update_connector: `# update_connector
1355
+ Update connector configuration.
1356
+
1357
+ **Parameters:**
1358
+ - connector_id (required): Connector UUID
1359
+ - name (optional): New display name
1360
+ - config (optional): Updated configuration
1361
+ - enabled (optional): Enable/disable connector
1362
+
1363
+ **Returns:** Updated connector details`,
1364
+
1365
+ delete_connector: `# delete_connector
1366
+ Remove a connector.
1367
+
1368
+ **Parameters:**
1369
+ - connector_id (required): Connector UUID
1370
+
1371
+ **Returns:** Deletion confirmation`,
1372
+
1373
+ test_connector: `# test_connector
1374
+ Send a test event to verify connector configuration.
1375
+
1376
+ **Parameters:**
1377
+ - connector_id (required): Connector UUID
1378
+
1379
+ **Returns:** Test result with success/failure details`,
1380
+
1381
+ get_connector_events: `# get_connector_events
1382
+ Get event history for a connector.
1383
+
1384
+ **Parameters:**
1385
+ - connector_id (required): Connector UUID
1386
+ - limit (optional): Max events to return (default: 50)
1387
+
1388
+ **Returns:** Array of sent events with status`,
1389
+
1390
+ // Cloud agent tools
1391
+ update_agent_status: `# update_agent_status
1392
+ Update your status message on the dashboard. Call this after start_work_session and whenever you start a new task.
1393
+
1394
+ **Parameters:**
1395
+ - status_message (required): Status text shown on dashboard (e.g. "Working on: Task title")
1396
+ - agent_name (required): Your agent name
1397
+ - project_id (required): Project UUID
1398
+
1399
+ **Example:** update_agent_status(status_message: "Working on: Progress Report Modal", agent_name: "Leon", project_id: "...")`,
1400
+
1401
+ cleanup_stale_cloud_agents: `# cleanup_stale_cloud_agents
1402
+ Clean up stale cloud agents that failed to start or lost connection.
1403
+
1404
+ **Parameters:**
1405
+ - project_id (required): Project UUID
1406
+ - stale_minutes (optional): Minutes of inactivity before considered stale (default: 5)
1407
+ - include_running (optional): Include running agents in cleanup (default: false)
1408
+ - dry_run (optional): Preview what would be cleaned without actually cleaning (default: false)
1409
+
1410
+ **Returns:**
1411
+ - cleaned: Number of agents cleaned up
1412
+ - failed: Number of cleanup failures
1413
+ - agents: Array of affected agents with status
1414
+
1415
+ **Example:** cleanup_stale_cloud_agents(project_id, stale_minutes: 10, dry_run: true)`,
1416
+
1417
+ list_cloud_agents: `# list_cloud_agents
1418
+ List cloud agents for a project with optional status filter.
1419
+
1420
+ **Parameters:**
1421
+ - project_id (required): Project UUID
1422
+ - status (optional): Filter by status - starting, running, stopped, failed, or all (default: all)
1423
+
1424
+ **Returns:**
1425
+ - agents: Array of agents with id, name, status, created_at, last_heartbeat, public_ip, ecs_task_id
1426
+ - count: Total number of agents returned
1427
+
1428
+ **Example:** list_cloud_agents(project_id, status: "running")`,
1429
+
1430
+ // Chat tools
1431
+ send_project_message: `# send_project_message
1432
+ Send a message to the project chat channel for agent and user communication.
1433
+
1434
+ **Parameters:**
1435
+ - project_id (required): Project UUID
1436
+ - message (required): Message content to send
1437
+ - author_name (optional): Name of the message sender (defaults to session persona)
1438
+
1439
+ **Returns:**
1440
+ - message_id: UUID of the sent message
1441
+ - timestamp: When the message was sent
1442
+
1443
+ **Example:** send_project_message(project_id: "123e4567-e89b-12d3-a456-426614174000", message: "Deployment completed successfully")`,
1444
+
1445
+ get_project_messages: `# get_project_messages
1446
+ Read recent project chat messages to stay informed about project communication.
1447
+
1448
+ **Parameters:**
1449
+ - project_id (required): Project UUID
1450
+ - limit (optional): Number of recent messages to retrieve (default: 20, max: 100)
1451
+ - since (optional): ISO timestamp to get messages after this time
1452
+
1453
+ **Returns:**
1454
+ - messages: Array of messages with id, author_name, message, timestamp
1455
+ - count: Number of messages returned
1456
+
1457
+ **Example:** get_project_messages(project_id: "123e4567-e89b-12d3-a456-426614174000", limit: 10)`,
1458
+
1459
+ // Version management tools
1460
+ check_mcp_version: `# check_mcp_version
1461
+ Check for available MCP server updates and version information.
1462
+
1463
+ **Parameters:**
1464
+ - check_remote (optional): Whether to check remote registry for updates (default: true)
1465
+
1466
+ **Returns:**
1467
+ - current_version: Currently running MCP server version
1468
+ - latest_version: Latest available version (if check_remote is true)
1469
+ - update_available: Boolean indicating if an update is available
1470
+ - release_notes: Summary of changes in latest version (if available)
1471
+
1472
+ **Example:** check_mcp_version(check_remote: true)`,
1473
+
1474
+ update_mcp_server: `# update_mcp_server
1475
+ Self-update the MCP server to the latest available version.
1476
+
1477
+ **Parameters:**
1478
+ - version (optional): Specific version to update to (defaults to latest)
1479
+ - restart_after_update (optional): Whether to restart after update (default: true)
1480
+ - backup_config (optional): Whether to backup current config (default: true)
1481
+
1482
+ **Returns:**
1483
+ - success: Boolean indicating if update succeeded
1484
+ - old_version: Previous version before update
1485
+ - new_version: Version after update
1486
+ - restart_required: Whether manual restart is needed
1487
+
1488
+ **Example:** update_mcp_server()
1489
+
1490
+ **Note:** This operation may temporarily disconnect active sessions during restart.`,
1109
1491
  };
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Version management handlers
3
+ */
4
+
5
+ import { execSync } from 'child_process';
6
+ import type { HandlerRegistry } from './types.js';
7
+ import { success, error } from './types.js';
8
+ import { checkVersion, getLocalVersion } from '../version.js';
9
+
10
+ const PACKAGE_NAME = '@vibescope/mcp-server';
11
+
12
+ export const versionHandlers: HandlerRegistry = {
13
+ check_mcp_version: async (_args, _ctx) => {
14
+ const info = await checkVersion();
15
+
16
+ if (info.error) {
17
+ return success({
18
+ current_version: info.current,
19
+ latest_version: info.latest,
20
+ update_available: false,
21
+ warning: info.error,
22
+ });
23
+ }
24
+
25
+ return success({
26
+ current_version: info.current,
27
+ latest_version: info.latest,
28
+ update_available: info.updateAvailable,
29
+ message: info.updateAvailable
30
+ ? `Update available! v${info.current} → v${info.latest}. Ask the user if they would like to update using the update_mcp_server tool.`
31
+ : `Vibescope MCP server is up to date (v${info.current}).`,
32
+ });
33
+ },
34
+
35
+ update_mcp_server: async (args, _ctx) => {
36
+ const useGlobal = args.global !== false; // default true
37
+ const flag = useGlobal ? '-g ' : '';
38
+ const command = `npm install ${flag}${PACKAGE_NAME}@latest`;
39
+
40
+ try {
41
+ const output = execSync(command, {
42
+ encoding: 'utf-8',
43
+ timeout: 60000,
44
+ stdio: ['pipe', 'pipe', 'pipe'],
45
+ });
46
+
47
+ // Check the new version
48
+ const newVersion = getLocalVersion();
49
+
50
+ return success({
51
+ updated: true,
52
+ command_run: command,
53
+ output: output.trim(),
54
+ new_version: newVersion,
55
+ message:
56
+ 'Update complete. The MCP server must be restarted to use the new version. Please ask the user to restart their editor/MCP client, or reconnect the MCP server.',
57
+ });
58
+ } catch (err) {
59
+ const message = err instanceof Error ? err.message : String(err);
60
+ return error(`Failed to update: ${message}. The user may need to run manually: ${command}`);
61
+ }
62
+ },
63
+ };
package/src/index.ts CHANGED
@@ -43,6 +43,7 @@ import {
43
43
  setCurrentModel,
44
44
  type TokenUsage,
45
45
  } from './token-tracking.js';
46
+ import { getUpdateWarning } from './version.js';
46
47
 
47
48
  // ============================================================================
48
49
  // Agent Instance Tracking
@@ -654,6 +655,13 @@ async function main() {
654
655
  process.exit(1);
655
656
  }
656
657
 
658
+ // Check for updates (non-blocking, with timeout)
659
+ const updateWarning = await getUpdateWarning();
660
+
661
+ const serverInstructions = updateWarning
662
+ ? `${updateWarning}\n\nVibescope MCP server - AI project tracking and coordination tools.`
663
+ : 'Vibescope MCP server - AI project tracking and coordination tools.';
664
+
657
665
  const server = new Server(
658
666
  {
659
667
  name: 'vibescope',
@@ -663,6 +671,7 @@ async function main() {
663
671
  capabilities: {
664
672
  tools: {},
665
673
  },
674
+ instructions: serverInstructions,
666
675
  }
667
676
  );
668
677
 
@@ -6,7 +6,11 @@
6
6
  * agents follow proper workflows and maintain visibility.
7
7
  */
8
8
 
9
- export const AGENT_GUIDELINES_TEMPLATE = `# Vibescope Agent Guidelines
9
+ export const VIBESCOPE_SECTION_START = '<!-- vibescope:start -->';
10
+ export const VIBESCOPE_SECTION_END = '<!-- vibescope:end -->';
11
+
12
+ export const AGENT_GUIDELINES_TEMPLATE = `${VIBESCOPE_SECTION_START}
13
+ # Vibescope Agent Guidelines
10
14
 
11
15
  ## Quick Start
12
16
 
@@ -183,6 +187,7 @@ claude mcp add vibescope npx @vibescope/mcp-server@latest \\
183
187
  1. Copy \`.mcp.json.example\` to \`.mcp.json\`
184
188
  2. Get \`VIBESCOPE_API_KEY\` from https://vibescope.dev/dashboard/settings
185
189
  3. Restart Claude Code
190
+ ${VIBESCOPE_SECTION_END}
186
191
  `;
187
192
 
188
193
  /**
@@ -217,14 +217,14 @@ add_finding(
217
217
  title: "Fix exists but awaits deployment",
218
218
  category: "other",
219
219
  severity: "info",
220
- description: "The fix for [issue] was implemented in PR #XXX but hasn't been deployed yet.",
220
+ description: "The fix for [issue] was implemented in PR #{pr_number} but hasn't been deployed yet.",
221
221
  related_task_id: task_id
222
222
  )
223
223
  \`\`\`
224
224
 
225
225
  2. **Complete the task** (investigation is done):
226
226
  \`\`\`
227
- complete_task(task_id, summary: "Fix already exists in codebase (PR #XXX). Needs deployment to production.")
227
+ complete_task(task_id, summary: "Fix already exists in codebase (PR #{pr_number}). Needs deployment to production.")
228
228
  \`\`\`
229
229
 
230
230
  3. **Request deployment** if not already pending:
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Project chat tools:
3
+ * - send_project_message
4
+ * - get_project_messages
5
+ */
6
+
7
+ import type { Tool } from './types.js';
8
+
9
+ export const chatTools: Tool[] = [
10
+ {
11
+ name: 'send_project_message',
12
+ description: 'Send a message to the project chat channel. All agents and the project owner can see messages here. Use this to communicate status updates, ask questions, report blockers, or coordinate with other agents.',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ project_id: {
17
+ type: 'string',
18
+ description: 'Project UUID',
19
+ },
20
+ message: {
21
+ type: 'string',
22
+ description: 'Message content (supports markdown)',
23
+ },
24
+ },
25
+ required: ['project_id', 'message'],
26
+ },
27
+ },
28
+ {
29
+ name: 'get_project_messages',
30
+ description: 'Read recent messages from the project chat channel. Use this to check if the user or other agents have posted anything.',
31
+ inputSchema: {
32
+ type: 'object',
33
+ properties: {
34
+ project_id: {
35
+ type: 'string',
36
+ description: 'Project UUID',
37
+ },
38
+ limit: {
39
+ type: 'number',
40
+ description: 'Number of recent messages to fetch (default: 20, max: 100)',
41
+ },
42
+ },
43
+ required: ['project_id'],
44
+ },
45
+ },
46
+ ];
@@ -66,5 +66,36 @@ Use this to check the state of cloud agents before/after cleanup.`,
66
66
  },
67
67
  required: ['project_id']
68
68
  }
69
+ },
70
+ {
71
+ name: 'update_agent_status',
72
+ description: `Report what you're currently doing. This updates the status message shown on the dashboard.
73
+
74
+ Call this at key milestones during boot and work:
75
+ - "Installing dependencies..."
76
+ - "Running start_work_session..."
77
+ - "Working on: <task title>"
78
+ - "Running tests..."
79
+ - "Committing changes..."
80
+
81
+ Keep messages short (under 80 chars). The dashboard shows this in real-time.`,
82
+ inputSchema: {
83
+ type: 'object',
84
+ properties: {
85
+ status_message: {
86
+ type: 'string',
87
+ description: 'Short status message to display on dashboard (max 80 chars)'
88
+ },
89
+ project_id: {
90
+ type: 'string',
91
+ description: 'Project UUID (optional if session has project context)'
92
+ },
93
+ agent_name: {
94
+ type: 'string',
95
+ description: 'Agent name (used to find the spawned_agents record)'
96
+ }
97
+ },
98
+ required: ['status_message']
99
+ }
69
100
  }
70
101
  ];
@@ -33,6 +33,8 @@ import { sprintTools } from './sprints.js';
33
33
  import { gitIssueTools } from './git-issues.js';
34
34
  import { connectorTools } from './connectors.js';
35
35
  import { cloudAgentTools } from './cloud-agents.js';
36
+ import { versionTools } from './version.js';
37
+ import { chatTools } from './chat.js';
36
38
 
37
39
  /**
38
40
  * All MCP tool definitions combined
@@ -62,6 +64,8 @@ export const tools: Tool[] = [
62
64
  ...gitIssueTools,
63
65
  ...connectorTools,
64
66
  ...cloudAgentTools,
67
+ ...versionTools,
68
+ ...chatTools,
65
69
  ];
66
70
 
67
71
  /**
@@ -100,6 +104,7 @@ export const toolCategories = {
100
104
  gitIssues: gitIssueTools.map((t) => t.name),
101
105
  connectors: connectorTools.map((t) => t.name),
102
106
  cloudAgents: cloudAgentTools.map((t) => t.name),
107
+ version: versionTools.map((t) => t.name),
103
108
  } as const;
104
109
 
105
110
  // Re-export domain tools for selective imports
@@ -128,4 +133,5 @@ export {
128
133
  gitIssueTools,
129
134
  connectorTools,
130
135
  cloudAgentTools,
136
+ versionTools,
131
137
  };
@@ -64,7 +64,7 @@ export const projectTools: Tool[] = [
64
64
  },
65
65
  goal: {
66
66
  type: 'string',
67
- description: 'What does "done" look like for this project?',
67
+ description: 'High-level project goal or purpose (e.g. "A multiplayer card game platform")',
68
68
  },
69
69
  git_url: {
70
70
  type: 'string',
@@ -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
  },
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Version management tool definitions
3
+ */
4
+
5
+ import type { Tool } from './types.js';
6
+
7
+ export const versionTools: Tool[] = [
8
+ {
9
+ name: 'check_mcp_version',
10
+ description:
11
+ 'Check if the Vibescope MCP server is up to date. Compares the locally installed version against the latest published version on npm. Call this when starting a session or when the server instructions indicate an update is available.',
12
+ inputSchema: {
13
+ type: 'object' as const,
14
+ properties: {},
15
+ required: [],
16
+ },
17
+ },
18
+ {
19
+ name: 'update_mcp_server',
20
+ description:
21
+ 'Update the Vibescope MCP server to the latest version. Runs npm install to fetch the latest version. After updating, the server must be restarted (the agent should ask the user to restart their MCP client/editor). Only call this when the user agrees to update.',
22
+ inputSchema: {
23
+ type: 'object' as const,
24
+ properties: {
25
+ global: {
26
+ type: 'boolean',
27
+ description:
28
+ 'If true, update the global installation (npm install -g). If false, update locally. Default: true.',
29
+ },
30
+ },
31
+ required: [],
32
+ },
33
+ },
34
+ ];