@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.
- package/dist/api-client/fallback.d.ts +33 -0
- package/dist/api-client/fallback.js +21 -0
- package/dist/api-client/findings.d.ts +69 -0
- package/dist/api-client/findings.js +36 -0
- package/dist/api-client/index.d.ts +78 -1
- package/dist/api-client/index.js +74 -4
- package/dist/api-client/milestones.d.ts +59 -0
- package/dist/api-client/milestones.js +30 -0
- package/dist/api-client/validation.d.ts +35 -0
- package/dist/api-client/validation.js +23 -0
- package/dist/api-client.d.ts +4 -0
- package/dist/cli-init.d.ts +17 -0
- package/dist/cli-init.js +497 -0
- package/dist/handlers/cloud-agents.d.ts +4 -0
- package/dist/handlers/cloud-agents.js +26 -12
- package/dist/handlers/discovery.js +15 -0
- package/dist/handlers/findings.js +1 -1
- package/dist/handlers/ideas.js +1 -1
- package/dist/handlers/index.d.ts +1 -0
- package/dist/handlers/index.js +3 -0
- package/dist/handlers/session.js +115 -2
- package/dist/handlers/tasks.js +7 -5
- package/dist/handlers/tool-docs.js +344 -0
- package/dist/handlers/version.d.ts +5 -0
- package/dist/handlers/version.js +53 -0
- package/dist/index.js +7 -0
- package/dist/templates/agent-guidelines.d.ts +3 -1
- package/dist/templates/agent-guidelines.js +5 -1
- package/dist/templates/help-content.js +2 -2
- package/dist/tools/chat.d.ts +7 -0
- package/dist/tools/chat.js +43 -0
- package/dist/tools/cloud-agents.js +31 -0
- package/dist/tools/index.d.ts +3 -1
- package/dist/tools/index.js +6 -1
- package/dist/tools/project.js +1 -1
- package/dist/tools/tasks.js +8 -0
- package/dist/tools/version.d.ts +5 -0
- package/dist/tools/version.js +28 -0
- package/dist/version.d.ts +28 -0
- package/dist/version.js +91 -0
- package/docs/TOOLS.md +93 -3
- package/package.json +4 -2
- package/src/api-client/fallback.ts +52 -0
- package/src/api-client/findings.ts +100 -0
- package/src/api-client/index.ts +91 -9
- package/src/api-client/milestones.ts +83 -0
- package/src/api-client/validation.ts +60 -0
- package/src/api-client.ts +4 -0
- package/src/cli-init.ts +557 -0
- package/src/handlers/cloud-agents.test.ts +438 -0
- package/src/handlers/cloud-agents.ts +35 -17
- package/src/handlers/discovery.ts +15 -0
- package/src/handlers/findings.ts +1 -1
- package/src/handlers/ideas.ts +1 -1
- package/src/handlers/index.ts +3 -0
- package/src/handlers/session.ts +128 -2
- package/src/handlers/tasks.ts +7 -5
- package/src/handlers/tool-docs.test.ts +511 -0
- package/src/handlers/tool-docs.ts +382 -0
- package/src/handlers/version.ts +63 -0
- package/src/index.ts +9 -0
- package/src/templates/agent-guidelines.ts +6 -1
- package/src/templates/help-content.ts +2 -2
- package/src/tools/chat.ts +46 -0
- package/src/tools/cloud-agents.ts +31 -0
- package/src/tools/index.ts +6 -0
- package/src/tools/project.ts +1 -1
- package/src/tools/tasks.ts +8 -0
- package/src/tools/version.ts +34 -0
- 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
|
|
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 #
|
|
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 #
|
|
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
|
];
|
package/src/tools/index.ts
CHANGED
|
@@ -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
|
};
|
package/src/tools/project.ts
CHANGED
|
@@ -64,7 +64,7 @@ export const projectTools: Tool[] = [
|
|
|
64
64
|
},
|
|
65
65
|
goal: {
|
|
66
66
|
type: 'string',
|
|
67
|
-
description: '
|
|
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',
|
package/src/tools/tasks.ts
CHANGED
|
@@ -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
|
+
];
|