@vibescope/mcp-server 0.3.13 → 0.3.15

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.
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Validation API Methods
3
+ *
4
+ * Handles task validation workflow for code review and approval.
5
+ */
6
+ import type { ApiResponse, ProxyFn } from './types.js';
7
+ export interface TaskAwaitingValidation {
8
+ id: string;
9
+ title: string;
10
+ completed_at?: string;
11
+ completed_by_session_id?: string;
12
+ }
13
+ export interface ValidationMethods {
14
+ getTasksAwaitingValidation(projectId: string): Promise<ApiResponse<{
15
+ tasks: TaskAwaitingValidation[];
16
+ }>>;
17
+ claimValidation(taskId: string, sessionId?: string): Promise<ApiResponse<{
18
+ success: boolean;
19
+ task_id: string;
20
+ }>>;
21
+ validateTask(taskId: string, params: {
22
+ approved: boolean;
23
+ validation_notes?: string;
24
+ skip_pr_check?: boolean;
25
+ pr_checks_passing?: boolean;
26
+ create_fix_task?: boolean;
27
+ }, sessionId?: string): Promise<ApiResponse<{
28
+ success: boolean;
29
+ approved: boolean;
30
+ task_id: string;
31
+ message?: string;
32
+ workflow?: string;
33
+ }>>;
34
+ }
35
+ export declare function createValidationMethods(proxy: ProxyFn): ValidationMethods;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Validation API Methods
3
+ *
4
+ * Handles task validation workflow for code review and approval.
5
+ */
6
+ export function createValidationMethods(proxy) {
7
+ return {
8
+ async getTasksAwaitingValidation(projectId) {
9
+ return proxy('get_tasks_awaiting_validation', { project_id: projectId });
10
+ },
11
+ async claimValidation(taskId, sessionId) {
12
+ return proxy('claim_validation', { task_id: taskId }, sessionId ? {
13
+ session_id: sessionId
14
+ } : undefined);
15
+ },
16
+ async validateTask(taskId, params, sessionId) {
17
+ return proxy('validate_task', {
18
+ task_id: taskId,
19
+ ...params
20
+ }, sessionId ? { session_id: sessionId } : undefined);
21
+ }
22
+ };
23
+ }
@@ -4,7 +4,11 @@
4
4
  * HTTP client for communicating with the Vibescope API.
5
5
  * All database operations are handled server-side through these endpoints.
6
6
  */
7
+ import crypto from 'crypto';
7
8
  const DEFAULT_API_URL = 'https://vibescope.dev';
9
+ // Stable instance ID for this process — persists across start_work_session calls
10
+ // so the API can recognise reconnections after context clears
11
+ const PROCESS_INSTANCE_ID = crypto.randomUUID();
8
12
  // Retry configuration defaults
9
13
  const DEFAULT_RETRY_STATUS_CODES = [429, 503, 504];
10
14
  const DEFAULT_MAX_RETRIES = 3;
@@ -133,7 +137,10 @@ export class VibescopeApiClient {
133
137
  }
134
138
  // Session endpoints
135
139
  async startSession(params) {
136
- return this.request('POST', '/api/mcp/sessions/start', params);
140
+ return this.request('POST', '/api/mcp/sessions/start', {
141
+ ...params,
142
+ instance_id: PROCESS_INSTANCE_ID,
143
+ });
137
144
  }
138
145
  async heartbeat(sessionId, options) {
139
146
  return this.request('POST', '/api/mcp/sessions/heartbeat', {
@@ -27,12 +27,8 @@ const listCloudAgentsSchema = {
27
27
  * Clean up stale cloud agents that failed to start or lost connection.
28
28
  * Only operates on agents in the specified project (security scoped).
29
29
  */
30
- export const cleanupStaleCloudAgents = async (args, ctx) => {
30
+ export const cleanupStaleCloudAgents = async (args, _ctx) => {
31
31
  const { project_id, stale_minutes, include_running, dry_run } = parseArgs(args, cleanupStaleAgentsSchema);
32
- // Ensure user has an active session with this project (security check)
33
- if (ctx.session.currentProjectId && ctx.session.currentProjectId !== project_id) {
34
- return error('Cannot cleanup agents for a different project than your current session');
35
- }
36
32
  const apiClient = getApiClient();
37
33
  // Call the cleanup endpoint via fetch (since it's a new endpoint not in the client)
38
34
  const response = await apiClient.proxy('cleanup_stale_cloud_agents', {
@@ -41,7 +37,7 @@ export const cleanupStaleCloudAgents = async (args, ctx) => {
41
37
  includeRunning: include_running,
42
38
  dryRun: dry_run,
43
39
  });
44
- if (!response.ok) {
40
+ if (!response.ok || !response.data) {
45
41
  return error(response.error || 'Failed to cleanup stale agents');
46
42
  }
47
43
  const data = response.data;
@@ -63,18 +59,14 @@ export const cleanupStaleCloudAgents = async (args, ctx) => {
63
59
  /**
64
60
  * List cloud agents for a project with optional status filter.
65
61
  */
66
- export const listCloudAgents = async (args, ctx) => {
62
+ export const listCloudAgents = async (args, _ctx) => {
67
63
  const { project_id, status } = parseArgs(args, listCloudAgentsSchema);
68
- // Ensure user has an active session with this project (security check)
69
- if (ctx.session.currentProjectId && ctx.session.currentProjectId !== project_id) {
70
- return error('Cannot list agents for a different project than your current session');
71
- }
72
64
  const apiClient = getApiClient();
73
65
  const response = await apiClient.proxy('list_cloud_agents', {
74
66
  project_id,
75
67
  status: status === 'all' ? undefined : status,
76
68
  });
77
- if (!response.ok) {
69
+ if (!response.ok || !response.data) {
78
70
  return error(response.error || 'Failed to list cloud agents');
79
71
  }
80
72
  return success({
@@ -319,6 +319,7 @@ export const TOOL_CATEGORIES = {
319
319
  cloud_agents: {
320
320
  description: 'Cloud agent management and cleanup',
321
321
  tools: [
322
+ { name: 'update_agent_status', brief: 'Update agent dashboard status message' },
322
323
  { name: 'cleanup_stale_cloud_agents', brief: 'Clean up stale cloud agents' },
323
324
  { name: 'list_cloud_agents', brief: 'List cloud agents for project' },
324
325
  ],
@@ -13,7 +13,7 @@ import { parseArgs, uuidValidator, createEnumValidator } from '../validators.js'
13
13
  import { getApiClient } from '../api-client.js';
14
14
  const VALID_FINDING_CATEGORIES = ['performance', 'security', 'code_quality', 'accessibility', 'documentation', 'architecture', 'testing', 'other'];
15
15
  const VALID_FINDING_SEVERITIES = ['info', 'low', 'medium', 'high', 'critical'];
16
- const VALID_FINDING_STATUSES = ['open', 'addressed', 'dismissed', 'wontfix'];
16
+ const VALID_FINDING_STATUSES = ['open', 'in_development', 'implemented', 'addressed', 'dismissed', 'wontfix'];
17
17
  // Argument schemas for type-safe parsing
18
18
  const addFindingSchema = {
19
19
  project_id: { type: 'string', required: true, validate: uuidValidator },
@@ -12,7 +12,7 @@
12
12
  */
13
13
  import { parseArgs, uuidValidator, priorityValidator, minutesValidator, createEnumValidator, } from '../validators.js';
14
14
  import { getApiClient } from '../api-client.js';
15
- const VALID_IDEA_STATUSES = ['raw', 'exploring', 'planned', 'in_development', 'shipped'];
15
+ const VALID_IDEA_STATUSES = ['raw', 'exploring', 'planned', 'in_development', 'implemented', 'shipped'];
16
16
  // Argument schemas for type-safe parsing
17
17
  const addIdeaSchema = {
18
18
  project_id: { type: 'string', required: true, validate: uuidValidator },
@@ -292,6 +292,7 @@ export const startWorkSession = async (args, ctx) => {
292
292
  }
293
293
  agentRules.push('COMPLETE TASKS: Always call complete_task() after creating a PR. This is mandatory.');
294
294
  agentRules.push('REVIEW REQUIRED: All tasks must be reviewed by another agent before merging.');
295
+ agentRules.push('STATUS UPDATES: Call update_agent_status(status_message: "Working on: TASK_TITLE") whenever you start a new task, and update_task(task_id, status: "in_progress") to claim it.');
295
296
  result.AGENT_RULES = agentRules;
296
297
  // Add next action at end - pending requests take priority over validation, then regular tasks
297
298
  if (hasUrgentQuestions) {
@@ -980,4 +980,348 @@ Query aggregated project knowledge in a single call. Reduces token usage by comb
980
980
  **Token savings:** Replaces multiple tool calls (get_findings, get_decisions, get_blockers, etc.) with one call.
981
981
 
982
982
  **Example:** query_knowledge_base(project_id, categories: ["findings", "decisions"], limit: 10)`,
983
+ // Session tools (additional)
984
+ report_token_usage: `# report_token_usage
985
+ Report actual token usage from Claude API responses.
986
+
987
+ **Parameters:**
988
+ - session_id (optional): Session UUID (uses current session if not provided)
989
+ - input_tokens (required): Number of input tokens
990
+ - output_tokens (required): Number of output tokens
991
+ - model (optional): Model used (e.g., "claude-3-opus")
992
+
993
+ **Returns:** Updated token usage summary`,
994
+ signal_idle: `# signal_idle
995
+ Signal that the agent is idle and available for work.
996
+
997
+ **Parameters:**
998
+ - session_id (optional): Session UUID (uses current session if not provided)
999
+
1000
+ **Returns:** Idle status confirmation, may include suggested activities`,
1001
+ confirm_agent_setup: `# confirm_agent_setup
1002
+ Confirm that agent setup is complete after following setup instructions.
1003
+
1004
+ **Parameters:**
1005
+ - project_id (required): Project UUID
1006
+ - agent_type (required): Type of agent (e.g., "claude", "gemini")
1007
+
1008
+ **Returns:** Setup confirmation status`,
1009
+ // Project tools (additional)
1010
+ get_project_summary: `# get_project_summary
1011
+ Get unified project statistics overview in a single call.
1012
+
1013
+ **Parameters:**
1014
+ - project_id (required): Project UUID
1015
+
1016
+ **Returns:** Task counts, blocker counts, finding counts, decision counts, and more`,
1017
+ // Blocker tools (additional)
1018
+ get_blocker: `# get_blocker
1019
+ Get a single blocker by ID.
1020
+
1021
+ **Parameters:**
1022
+ - blocker_id (required): Blocker UUID
1023
+
1024
+ **Returns:** Blocker details including description, status, resolution`,
1025
+ get_blockers_stats: `# get_blockers_stats
1026
+ Get aggregate blocker statistics.
1027
+
1028
+ **Parameters:**
1029
+ - project_id (required): Project UUID
1030
+
1031
+ **Returns:** Open/resolved counts, breakdown by age`,
1032
+ // Decision tools (additional)
1033
+ get_decision: `# get_decision
1034
+ Get a single decision by ID.
1035
+
1036
+ **Parameters:**
1037
+ - decision_id (required): Decision UUID
1038
+
1039
+ **Returns:** Decision details including title, description, rationale`,
1040
+ get_decisions_stats: `# get_decisions_stats
1041
+ Get aggregate decision statistics.
1042
+
1043
+ **Parameters:**
1044
+ - project_id (required): Project UUID
1045
+
1046
+ **Returns:** Total count, recent decisions count`,
1047
+ // Idea tools (additional)
1048
+ get_idea: `# get_idea
1049
+ Get a single idea by ID.
1050
+
1051
+ **Parameters:**
1052
+ - idea_id (required): Idea UUID
1053
+
1054
+ **Returns:** Idea details including title, description, status`,
1055
+ // Finding tools (additional)
1056
+ get_finding: `# get_finding
1057
+ Get a single finding by ID.
1058
+
1059
+ **Parameters:**
1060
+ - finding_id (required): Finding UUID
1061
+
1062
+ **Returns:** Finding details including title, category, severity, status`,
1063
+ get_findings_stats: `# get_findings_stats
1064
+ Get aggregate finding statistics.
1065
+
1066
+ **Parameters:**
1067
+ - project_id (required): Project UUID
1068
+
1069
+ **Returns:** Counts by category, severity, and status`,
1070
+ // Deployment tools (additional)
1071
+ get_deployment_requirements_stats: `# get_deployment_requirements_stats
1072
+ Get aggregate deployment requirement statistics.
1073
+
1074
+ **Parameters:**
1075
+ - project_id (required): Project UUID
1076
+
1077
+ **Returns:** Counts by stage and status`,
1078
+ // Worktree tools
1079
+ get_stale_worktrees: `# get_stale_worktrees
1080
+ Find orphaned worktrees that need cleanup.
1081
+
1082
+ **Parameters:**
1083
+ - project_id (required): Project UUID
1084
+ - hostname (optional): Filter to worktrees created on this machine
1085
+
1086
+ **Returns:** List of stale worktrees with task info and cleanup commands`,
1087
+ clear_worktree_path: `# clear_worktree_path
1088
+ Clear worktree path from a task after cleanup.
1089
+
1090
+ **Parameters:**
1091
+ - task_id (required): Task UUID
1092
+
1093
+ **Note:** Call this AFTER running git worktree remove`,
1094
+ // Role tools
1095
+ get_role_settings: `# get_role_settings
1096
+ Get project role settings and configuration.
1097
+
1098
+ **Parameters:**
1099
+ - project_id (required): Project UUID
1100
+
1101
+ **Returns:** Role configuration including allowed roles, default role`,
1102
+ update_role_settings: `# update_role_settings
1103
+ Configure project role behavior.
1104
+
1105
+ **Parameters:**
1106
+ - project_id (required): Project UUID
1107
+ - default_role (optional): Default role for new sessions
1108
+ - allowed_roles (optional): Array of allowed role names
1109
+
1110
+ **Returns:** Updated role settings`,
1111
+ set_session_role: `# set_session_role
1112
+ Set the role for the current session.
1113
+
1114
+ **Parameters:**
1115
+ - session_id (optional): Session UUID (uses current session)
1116
+ - role (required): Role name (e.g., "developer", "validator", "deployer")
1117
+
1118
+ **Returns:** Updated session with new role`,
1119
+ get_agents_by_role: `# get_agents_by_role
1120
+ List active agents grouped by role.
1121
+
1122
+ **Parameters:**
1123
+ - project_id (required): Project UUID
1124
+
1125
+ **Returns:** Agents organized by role`,
1126
+ // File checkout/lock tools
1127
+ checkout_file: `# checkout_file
1128
+ Lock a file for editing to prevent conflicts with other agents.
1129
+
1130
+ **Parameters:**
1131
+ - project_id (required): Project UUID
1132
+ - file_path (required): Path to the file to lock
1133
+ - reason (optional): Why you need to edit this file
1134
+
1135
+ **Returns:** Checkout confirmation with expiry time`,
1136
+ checkin_file: `# checkin_file
1137
+ Release a file lock after editing.
1138
+
1139
+ **Parameters:**
1140
+ - project_id (required): Project UUID
1141
+ - file_path (required): Path to the file to release
1142
+
1143
+ **Returns:** Checkin confirmation`,
1144
+ get_file_checkouts: `# get_file_checkouts
1145
+ List current file locks.
1146
+
1147
+ **Parameters:**
1148
+ - project_id (required): Project UUID
1149
+ - file_path (optional): Filter to specific file
1150
+
1151
+ **Returns:** List of active file checkouts`,
1152
+ get_file_checkouts_stats: `# get_file_checkouts_stats
1153
+ Get file checkout statistics.
1154
+
1155
+ **Parameters:**
1156
+ - project_id (required): Project UUID
1157
+
1158
+ **Returns:** Active checkout count, breakdown by agent`,
1159
+ abandon_checkout: `# abandon_checkout
1160
+ Force-release a file lock (use with caution).
1161
+
1162
+ **Parameters:**
1163
+ - project_id (required): Project UUID
1164
+ - file_path (required): Path to the file to release
1165
+
1166
+ **Note:** Only use when the original agent is unreachable`,
1167
+ is_file_available: `# is_file_available
1168
+ Check if a file is available for checkout.
1169
+
1170
+ **Parameters:**
1171
+ - project_id (required): Project UUID
1172
+ - file_path (required): Path to check
1173
+
1174
+ **Returns:** Availability status, current holder if locked`,
1175
+ // Connector tools
1176
+ get_connectors: `# get_connectors
1177
+ List project connectors (integrations).
1178
+
1179
+ **Parameters:**
1180
+ - project_id (required): Project UUID
1181
+
1182
+ **Returns:** Array of configured connectors`,
1183
+ get_connector: `# get_connector
1184
+ Get connector details.
1185
+
1186
+ **Parameters:**
1187
+ - connector_id (required): Connector UUID
1188
+
1189
+ **Returns:** Connector configuration and status`,
1190
+ add_connector: `# add_connector
1191
+ Create a new external integration connector.
1192
+
1193
+ **Parameters:**
1194
+ - project_id (required): Project UUID
1195
+ - type (required): Connector type (webhook, slack, discord, etc.)
1196
+ - name (required): Display name
1197
+ - config (required): Type-specific configuration
1198
+
1199
+ **Returns:** Created connector details`,
1200
+ update_connector: `# update_connector
1201
+ Update connector configuration.
1202
+
1203
+ **Parameters:**
1204
+ - connector_id (required): Connector UUID
1205
+ - name (optional): New display name
1206
+ - config (optional): Updated configuration
1207
+ - enabled (optional): Enable/disable connector
1208
+
1209
+ **Returns:** Updated connector details`,
1210
+ delete_connector: `# delete_connector
1211
+ Remove a connector.
1212
+
1213
+ **Parameters:**
1214
+ - connector_id (required): Connector UUID
1215
+
1216
+ **Returns:** Deletion confirmation`,
1217
+ test_connector: `# test_connector
1218
+ Send a test event to verify connector configuration.
1219
+
1220
+ **Parameters:**
1221
+ - connector_id (required): Connector UUID
1222
+
1223
+ **Returns:** Test result with success/failure details`,
1224
+ get_connector_events: `# get_connector_events
1225
+ Get event history for a connector.
1226
+
1227
+ **Parameters:**
1228
+ - connector_id (required): Connector UUID
1229
+ - limit (optional): Max events to return (default: 50)
1230
+
1231
+ **Returns:** Array of sent events with status`,
1232
+ // Cloud agent tools
1233
+ update_agent_status: `# update_agent_status
1234
+ Update your status message on the dashboard. Call this after start_work_session and whenever you start a new task.
1235
+
1236
+ **Parameters:**
1237
+ - status_message (required): Status text shown on dashboard (e.g. "Working on: Task title")
1238
+ - agent_name (required): Your agent name
1239
+ - project_id (required): Project UUID
1240
+
1241
+ **Example:** update_agent_status(status_message: "Working on: Progress Report Modal", agent_name: "Leon", project_id: "...")`,
1242
+ cleanup_stale_cloud_agents: `# cleanup_stale_cloud_agents
1243
+ Clean up stale cloud agents that failed to start or lost connection.
1244
+
1245
+ **Parameters:**
1246
+ - project_id (required): Project UUID
1247
+ - stale_minutes (optional): Minutes of inactivity before considered stale (default: 5)
1248
+ - include_running (optional): Include running agents in cleanup (default: false)
1249
+ - dry_run (optional): Preview what would be cleaned without actually cleaning (default: false)
1250
+
1251
+ **Returns:**
1252
+ - cleaned: Number of agents cleaned up
1253
+ - failed: Number of cleanup failures
1254
+ - agents: Array of affected agents with status
1255
+
1256
+ **Example:** cleanup_stale_cloud_agents(project_id, stale_minutes: 10, dry_run: true)`,
1257
+ list_cloud_agents: `# list_cloud_agents
1258
+ List cloud agents for a project with optional status filter.
1259
+
1260
+ **Parameters:**
1261
+ - project_id (required): Project UUID
1262
+ - status (optional): Filter by status - starting, running, stopped, failed, or all (default: all)
1263
+
1264
+ **Returns:**
1265
+ - agents: Array of agents with id, name, status, created_at, last_heartbeat, public_ip, ecs_task_id
1266
+ - count: Total number of agents returned
1267
+
1268
+ **Example:** list_cloud_agents(project_id, status: "running")`,
1269
+ // Chat tools
1270
+ send_project_message: `# send_project_message
1271
+ Send a message to the project chat channel for agent and user communication.
1272
+
1273
+ **Parameters:**
1274
+ - project_id (required): Project UUID
1275
+ - message (required): Message content to send
1276
+ - author_name (optional): Name of the message sender (defaults to session persona)
1277
+
1278
+ **Returns:**
1279
+ - message_id: UUID of the sent message
1280
+ - timestamp: When the message was sent
1281
+
1282
+ **Example:** send_project_message(project_id: "123e4567-e89b-12d3-a456-426614174000", message: "Deployment completed successfully")`,
1283
+ get_project_messages: `# get_project_messages
1284
+ Read recent project chat messages to stay informed about project communication.
1285
+
1286
+ **Parameters:**
1287
+ - project_id (required): Project UUID
1288
+ - limit (optional): Number of recent messages to retrieve (default: 20, max: 100)
1289
+ - since (optional): ISO timestamp to get messages after this time
1290
+
1291
+ **Returns:**
1292
+ - messages: Array of messages with id, author_name, message, timestamp
1293
+ - count: Number of messages returned
1294
+
1295
+ **Example:** get_project_messages(project_id: "123e4567-e89b-12d3-a456-426614174000", limit: 10)`,
1296
+ // Version management tools
1297
+ check_mcp_version: `# check_mcp_version
1298
+ Check for available MCP server updates and version information.
1299
+
1300
+ **Parameters:**
1301
+ - check_remote (optional): Whether to check remote registry for updates (default: true)
1302
+
1303
+ **Returns:**
1304
+ - current_version: Currently running MCP server version
1305
+ - latest_version: Latest available version (if check_remote is true)
1306
+ - update_available: Boolean indicating if an update is available
1307
+ - release_notes: Summary of changes in latest version (if available)
1308
+
1309
+ **Example:** check_mcp_version(check_remote: true)`,
1310
+ update_mcp_server: `# update_mcp_server
1311
+ Self-update the MCP server to the latest available version.
1312
+
1313
+ **Parameters:**
1314
+ - version (optional): Specific version to update to (defaults to latest)
1315
+ - restart_after_update (optional): Whether to restart after update (default: true)
1316
+ - backup_config (optional): Whether to backup current config (default: true)
1317
+
1318
+ **Returns:**
1319
+ - success: Boolean indicating if update succeeded
1320
+ - old_version: Previous version before update
1321
+ - new_version: Version after update
1322
+ - restart_required: Whether manual restart is needed
1323
+
1324
+ **Example:** update_mcp_server()
1325
+
1326
+ **Note:** This operation may temporarily disconnect active sessions during restart.`,
983
1327
  };
package/docs/TOOLS.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > Auto-generated from tool definitions. Do not edit manually.
4
4
  >
5
- > Generated: 2026-02-18
5
+ > Generated: 2026-02-21
6
6
  >
7
7
  > Total tools: 159
8
8
 
@@ -33,7 +33,7 @@
33
33
  - [roles](#roles) - Agent role management (4 tools)
34
34
  - [file_locks](#file-locks) - File checkout/locking for multi-agent (6 tools)
35
35
  - [connectors](#connectors) - External integration connectors (7 tools)
36
- - [cloud_agents](#cloud-agents) - Cloud agent management and cleanup (2 tools)
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 (2 tools)
38
38
  - [version](#version) - MCP server version management and updates (2 tools)
39
39
 
@@ -2416,6 +2416,34 @@ Get event history for a connector or project. Shows delivery status and errors.
2416
2416
 
2417
2417
  *Cloud agent management and cleanup*
2418
2418
 
2419
+ ### update_agent_status
2420
+
2421
+ Report what you're currently doing. This updates the status message shown on the dashboard.
2422
+
2423
+ Call this at key milestones during boot and work:
2424
+
2425
+ - "Installing dependencies..."
2426
+
2427
+ - "Running start_work_session..."
2428
+
2429
+ - "Working on: <task title>"
2430
+
2431
+ - "Running tests..."
2432
+
2433
+ - "Committing changes..."
2434
+
2435
+ Keep messages short (under 80 chars). The dashboard shows this in real-time.
2436
+
2437
+ **Parameters:**
2438
+
2439
+ | Parameter | Type | Required | Description |
2440
+ |-----------|------|----------|-------------|
2441
+ | `status_message` | `string` | Yes | Short status message to display on dashboard (max 80 chars) |
2442
+ | `project_id` | `string` | No | Project UUID (optional if session has project context) |
2443
+ | `agent_name` | `string` | No | Agent name (used to find the spawned_agents record) |
2444
+
2445
+ ---
2446
+
2419
2447
  ### cleanup_stale_cloud_agents
2420
2448
 
2421
2449
  Clean up stale cloud agents that failed to start or lost connection.
@@ -2515,35 +2543,3 @@ Update the Vibescope MCP server to the latest version. Runs npm install to fetch
2515
2543
  | `global` | `boolean` | No | If true, update the global installation (npm install -g). If false, update locally. Default: true. |
2516
2544
 
2517
2545
  ---
2518
-
2519
- ## Uncategorized
2520
-
2521
- *Tools not yet assigned to a category*
2522
-
2523
- ### update_agent_status
2524
-
2525
- Report what you're currently doing. This updates the status message shown on the dashboard.
2526
-
2527
- Call this at key milestones during boot and work:
2528
-
2529
- - "Installing dependencies..."
2530
-
2531
- - "Running start_work_session..."
2532
-
2533
- - "Working on: <task title>"
2534
-
2535
- - "Running tests..."
2536
-
2537
- - "Committing changes..."
2538
-
2539
- Keep messages short (under 80 chars). The dashboard shows this in real-time.
2540
-
2541
- **Parameters:**
2542
-
2543
- | Parameter | Type | Required | Description |
2544
- |-----------|------|----------|-------------|
2545
- | `status_message` | `string` | Yes | Short status message to display on dashboard (max 80 chars) |
2546
- | `project_id` | `string` | No | Project UUID (optional if session has project context) |
2547
- | `agent_name` | `string` | No | Agent name (used to find the spawned_agents record) |
2548
-
2549
- ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibescope/mcp-server",
3
- "version": "0.3.13",
3
+ "version": "0.3.15",
4
4
  "description": "MCP server for Vibescope - AI project tracking tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Fallback Activity API Methods
3
+ *
4
+ * Handles background activities when agents are idle with no pending tasks.
5
+ */
6
+
7
+ import type { ApiResponse, ProxyFn } from './types.js';
8
+
9
+ export interface FallbackActivityResult {
10
+ success: boolean;
11
+ activity: string;
12
+ message: string;
13
+ git_workflow?: {
14
+ workflow: string;
15
+ base_branch: string;
16
+ worktree_recommended: boolean;
17
+ note: string;
18
+ };
19
+ worktree_setup?: {
20
+ message: string;
21
+ commands: string[];
22
+ worktree_path: string;
23
+ branch_name: string;
24
+ cleanup_command: string;
25
+ report_worktree: string;
26
+ };
27
+ next_step?: string;
28
+ }
29
+
30
+ export interface FallbackMethods {
31
+ startFallbackActivity(projectId: string, activity: string, sessionId?: string): Promise<ApiResponse<FallbackActivityResult>>;
32
+
33
+ stopFallbackActivity(projectId: string, summary?: string, sessionId?: string): Promise<ApiResponse<{ success: boolean }>>;
34
+ }
35
+
36
+ export function createFallbackMethods(proxy: ProxyFn): FallbackMethods {
37
+ return {
38
+ async startFallbackActivity(projectId, activity, sessionId) {
39
+ return proxy('start_fallback_activity', {
40
+ project_id: projectId,
41
+ activity
42
+ }, sessionId ? { session_id: sessionId } : undefined);
43
+ },
44
+
45
+ async stopFallbackActivity(projectId, summary, sessionId) {
46
+ return proxy('stop_fallback_activity', {
47
+ project_id: projectId,
48
+ summary
49
+ }, sessionId ? { session_id: sessionId } : undefined);
50
+ }
51
+ };
52
+ }