@vibescope/mcp-server 0.4.4 → 0.4.5

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 (65) hide show
  1. package/dist/api-client/bodies-of-work.d.ts +125 -0
  2. package/dist/api-client/bodies-of-work.js +78 -0
  3. package/dist/api-client/chat.d.ts +26 -0
  4. package/dist/api-client/chat.js +20 -0
  5. package/dist/api-client/connectors.d.ts +104 -0
  6. package/dist/api-client/connectors.js +46 -0
  7. package/dist/api-client/deployment.d.ts +190 -0
  8. package/dist/api-client/deployment.js +113 -0
  9. package/dist/api-client/file-checkouts.d.ts +71 -0
  10. package/dist/api-client/file-checkouts.js +43 -0
  11. package/dist/api-client/git-issues.d.ts +55 -0
  12. package/dist/api-client/git-issues.js +34 -0
  13. package/dist/api-client/index.d.ts +619 -1
  14. package/dist/api-client/index.js +148 -0
  15. package/dist/api-client/organizations.d.ts +101 -0
  16. package/dist/api-client/organizations.js +86 -0
  17. package/dist/api-client/progress.d.ts +61 -0
  18. package/dist/api-client/progress.js +34 -0
  19. package/dist/api-client/requests.d.ts +28 -0
  20. package/dist/api-client/requests.js +28 -0
  21. package/dist/api-client/sprints.d.ts +153 -0
  22. package/dist/api-client/sprints.js +82 -0
  23. package/dist/api-client/subtasks.d.ts +37 -0
  24. package/dist/api-client/subtasks.js +23 -0
  25. package/dist/api-client.d.ts +22 -0
  26. package/dist/api-client.js +15 -0
  27. package/dist/handlers/blockers.js +4 -0
  28. package/dist/handlers/chat.d.ts +21 -0
  29. package/dist/handlers/chat.js +59 -0
  30. package/dist/handlers/deployment.d.ts +3 -0
  31. package/dist/handlers/deployment.js +23 -0
  32. package/dist/handlers/discovery.js +1 -0
  33. package/dist/handlers/index.d.ts +1 -0
  34. package/dist/handlers/index.js +3 -0
  35. package/dist/handlers/session.js +7 -0
  36. package/dist/handlers/tasks.js +7 -0
  37. package/dist/handlers/tool-docs.js +7 -0
  38. package/dist/tools/deployment.js +13 -0
  39. package/docs/TOOLS.md +17 -3
  40. package/package.json +1 -1
  41. package/src/api-client/bodies-of-work.ts +194 -0
  42. package/src/api-client/chat.ts +50 -0
  43. package/src/api-client/connectors.ts +152 -0
  44. package/src/api-client/deployment.ts +313 -0
  45. package/src/api-client/file-checkouts.ts +115 -0
  46. package/src/api-client/git-issues.ts +88 -0
  47. package/src/api-client/index.ts +179 -13
  48. package/src/api-client/organizations.ts +185 -0
  49. package/src/api-client/progress.ts +94 -0
  50. package/src/api-client/requests.ts +54 -0
  51. package/src/api-client/sprints.ts +227 -0
  52. package/src/api-client/subtasks.ts +57 -0
  53. package/src/api-client.test.ts +16 -19
  54. package/src/api-client.ts +34 -0
  55. package/src/handlers/__test-setup__.ts +4 -0
  56. package/src/handlers/blockers.ts +9 -0
  57. package/src/handlers/chat.test.ts +185 -0
  58. package/src/handlers/chat.ts +69 -0
  59. package/src/handlers/deployment.ts +29 -0
  60. package/src/handlers/discovery.ts +1 -0
  61. package/src/handlers/index.ts +3 -0
  62. package/src/handlers/session.ts +12 -0
  63. package/src/handlers/tasks.ts +12 -0
  64. package/src/handlers/tool-docs.ts +8 -0
  65. package/src/tools/deployment.ts +13 -0
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Sprints API Methods
3
+ *
4
+ * Methods for sprint management:
5
+ * - createSprint: Create a new sprint
6
+ * - updateSprint: Update sprint details
7
+ * - getSprint: Get a sprint with tasks
8
+ * - getSprints: List sprints for a project
9
+ * - deleteSprint: Delete a sprint
10
+ * - startSprint: Activate a sprint
11
+ * - completeSprint: Complete a sprint
12
+ * - addTaskToSprint: Add a task to a sprint
13
+ * - removeTaskFromSprint: Remove a task from a sprint
14
+ * - getSprintBacklog: Get tasks available to add to a sprint
15
+ * - getSprintVelocity: Get velocity metrics for completed sprints
16
+ */
17
+ export function createSprintsMethods(proxy) {
18
+ return {
19
+ async createSprint(projectId, params) {
20
+ return proxy('create_sprint', {
21
+ project_id: projectId,
22
+ ...params
23
+ });
24
+ },
25
+ async updateSprint(sprintId, updates) {
26
+ return proxy('update_sprint', {
27
+ sprint_id: sprintId,
28
+ ...updates
29
+ });
30
+ },
31
+ async getSprint(sprintId, summaryOnly) {
32
+ return proxy('get_sprint', {
33
+ sprint_id: sprintId,
34
+ summary_only: summaryOnly
35
+ });
36
+ },
37
+ async getSprints(projectId, params) {
38
+ return proxy('get_sprints', {
39
+ project_id: projectId,
40
+ ...params
41
+ });
42
+ },
43
+ async deleteSprint(sprintId) {
44
+ return proxy('delete_sprint', { sprint_id: sprintId });
45
+ },
46
+ async startSprint(sprintId) {
47
+ return proxy('start_sprint', { sprint_id: sprintId });
48
+ },
49
+ async completeSprint(sprintId, params) {
50
+ return proxy('complete_sprint', {
51
+ sprint_id: sprintId,
52
+ ...params
53
+ });
54
+ },
55
+ async addTaskToSprint(sprintId, taskId, params) {
56
+ return proxy('add_task_to_sprint', {
57
+ sprint_id: sprintId,
58
+ task_id: taskId,
59
+ ...params
60
+ });
61
+ },
62
+ async removeTaskFromSprint(sprintId, taskId) {
63
+ return proxy('remove_task_from_sprint', {
64
+ sprint_id: sprintId,
65
+ task_id: taskId
66
+ });
67
+ },
68
+ async getSprintBacklog(projectId, sprintId, params) {
69
+ return proxy('get_sprint_backlog', {
70
+ project_id: projectId,
71
+ sprint_id: sprintId,
72
+ ...params
73
+ });
74
+ },
75
+ async getSprintVelocity(projectId, limit) {
76
+ return proxy('get_sprint_velocity', {
77
+ project_id: projectId,
78
+ limit
79
+ });
80
+ }
81
+ };
82
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Subtasks API Methods
3
+ *
4
+ * Methods for subtask management:
5
+ * - addSubtask: Add a subtask to a parent task
6
+ * - getSubtasks: Get subtasks for a parent task
7
+ */
8
+ import type { ApiResponse, ProxyFn } from './types.js';
9
+ export interface SubtasksMethods {
10
+ addSubtask(parentTaskId: string, params: {
11
+ title: string;
12
+ description?: string;
13
+ priority?: number;
14
+ estimated_minutes?: number;
15
+ }, sessionId?: string): Promise<ApiResponse<{
16
+ success: boolean;
17
+ subtask_id: string;
18
+ parent_task_id: string;
19
+ }>>;
20
+ getSubtasks(parentTaskId: string, status?: string): Promise<ApiResponse<{
21
+ subtasks: Array<{
22
+ id: string;
23
+ title: string;
24
+ description?: string;
25
+ priority: number;
26
+ status: string;
27
+ progress_percentage?: number;
28
+ estimated_minutes?: number;
29
+ }>;
30
+ stats: {
31
+ total: number;
32
+ completed: number;
33
+ progress_percentage: number;
34
+ };
35
+ }>>;
36
+ }
37
+ export declare function createSubtasksMethods(proxy: ProxyFn): SubtasksMethods;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Subtasks API Methods
3
+ *
4
+ * Methods for subtask management:
5
+ * - addSubtask: Add a subtask to a parent task
6
+ * - getSubtasks: Get subtasks for a parent task
7
+ */
8
+ export function createSubtasksMethods(proxy) {
9
+ return {
10
+ async addSubtask(parentTaskId, params, sessionId) {
11
+ return proxy('add_subtask', {
12
+ parent_task_id: parentTaskId,
13
+ ...params
14
+ }, sessionId ? { session_id: sessionId } : undefined);
15
+ },
16
+ async getSubtasks(parentTaskId, status) {
17
+ return proxy('get_subtasks', {
18
+ parent_task_id: parentTaskId,
19
+ status
20
+ });
21
+ }
22
+ };
23
+ }
@@ -1427,6 +1427,13 @@ export declare class VibescopeApiClient {
1427
1427
  completeDeploymentRequirement(requirementId: string): Promise<ApiResponse<{
1428
1428
  success: boolean;
1429
1429
  }>>;
1430
+ reorderDeploymentRequirements(projectId: string, params: {
1431
+ stage: string;
1432
+ requirement_ids: string[];
1433
+ }): Promise<ApiResponse<{
1434
+ success: boolean;
1435
+ reordered: number;
1436
+ }>>;
1430
1437
  scheduleDeployment(projectId: string, params: {
1431
1438
  scheduled_at: string;
1432
1439
  schedule_type?: string;
@@ -1730,6 +1737,21 @@ export declare class VibescopeApiClient {
1730
1737
  project_id: string;
1731
1738
  agent_type: string;
1732
1739
  }>>;
1740
+ sendProjectMessage(projectId: string, message: string, sessionId?: string): Promise<ApiResponse<{
1741
+ success: boolean;
1742
+ message_id: string;
1743
+ sent_at: string;
1744
+ }>>;
1745
+ getProjectMessages(projectId: string, limit?: number): Promise<ApiResponse<{
1746
+ messages: Array<{
1747
+ id: string;
1748
+ sender_type: string;
1749
+ sender_name: string | null;
1750
+ content: string;
1751
+ created_at: string;
1752
+ }>;
1753
+ count: number;
1754
+ }>>;
1733
1755
  }
1734
1756
  export declare function getApiClient(): VibescopeApiClient;
1735
1757
  export declare function initApiClient(config: ApiClientConfig): VibescopeApiClient;
@@ -863,6 +863,12 @@ export class VibescopeApiClient {
863
863
  async completeDeploymentRequirement(requirementId) {
864
864
  return this.proxy('complete_deployment_requirement', { requirement_id: requirementId });
865
865
  }
866
+ async reorderDeploymentRequirements(projectId, params) {
867
+ return this.proxy('reorder_deployment_requirements', {
868
+ project_id: projectId,
869
+ ...params,
870
+ });
871
+ }
866
872
  async scheduleDeployment(projectId, params) {
867
873
  return this.proxy('schedule_deployment', {
868
874
  project_id: projectId,
@@ -1012,6 +1018,15 @@ export class VibescopeApiClient {
1012
1018
  agent_type: agentType
1013
1019
  });
1014
1020
  }
1021
+ async sendProjectMessage(projectId, message, sessionId) {
1022
+ return this.proxy('send_project_message', { project_id: projectId, message }, sessionId ? { session_id: sessionId, persona: null, instance_id: '' } : undefined);
1023
+ }
1024
+ async getProjectMessages(projectId, limit) {
1025
+ return this.proxy('get_project_messages', {
1026
+ project_id: projectId,
1027
+ ...(limit !== undefined && { limit }),
1028
+ });
1029
+ }
1015
1030
  }
1016
1031
  // Singleton instance
1017
1032
  let apiClient = null;
@@ -10,6 +10,7 @@
10
10
  import { success, error } from './types.js';
11
11
  import { parseArgs, uuidValidator, createEnumValidator, VALID_BLOCKER_STATUSES, } from '../validators.js';
12
12
  import { getApiClient } from '../api-client.js';
13
+ import { autoPostActivity } from './chat.js';
13
14
  // Argument schemas for type-safe parsing
14
15
  const addBlockerSchema = {
15
16
  project_id: { type: 'string', required: true, validate: uuidValidator },
@@ -42,6 +43,9 @@ export const addBlocker = async (args, ctx) => {
42
43
  if (!response.ok) {
43
44
  return error(response.error || 'Failed to add blocker');
44
45
  }
46
+ // Auto-post blocker activity to project chat
47
+ const persona = ctx.session.currentPersona || 'Agent';
48
+ void autoPostActivity(project_id, `🚧 **${persona}** reported a blocker: ${description}`, ctx.session.currentSessionId);
45
49
  return success(response.data);
46
50
  };
47
51
  export const resolveBlocker = async (args, _ctx) => {
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Chat handlers
3
+ *
4
+ * Handlers for project chat tools:
5
+ * - send_project_message: Post a message to the project chat
6
+ * - get_project_messages: Read recent messages from project chat
7
+ *
8
+ * Also exports autoPostActivity — a fire-and-forget helper used by other
9
+ * handlers to log agent boot progress and key events to the chat window.
10
+ */
11
+ import type { Handler, HandlerRegistry } from './types.js';
12
+ export declare const sendProjectMessage: Handler;
13
+ export declare const getProjectMessages: Handler;
14
+ /**
15
+ * Auto-post an agent activity message to the project chat.
16
+ *
17
+ * Fire-and-forget: errors are silently swallowed so auto-posting never
18
+ * interrupts or breaks the main tool response.
19
+ */
20
+ export declare function autoPostActivity(projectId: string, message: string, sessionId?: string | null): Promise<void>;
21
+ export declare const chatHandlers: HandlerRegistry;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Chat handlers
3
+ *
4
+ * Handlers for project chat tools:
5
+ * - send_project_message: Post a message to the project chat
6
+ * - get_project_messages: Read recent messages from project chat
7
+ *
8
+ * Also exports autoPostActivity — a fire-and-forget helper used by other
9
+ * handlers to log agent boot progress and key events to the chat window.
10
+ */
11
+ import { parseArgs, uuidValidator } from '../validators.js';
12
+ import { getApiClient } from '../api-client.js';
13
+ const sendProjectMessageSchema = {
14
+ project_id: { type: 'string', required: true, validate: uuidValidator },
15
+ message: { type: 'string', required: true },
16
+ };
17
+ const getProjectMessagesSchema = {
18
+ project_id: { type: 'string', required: true, validate: uuidValidator },
19
+ limit: { type: 'number' },
20
+ };
21
+ export const sendProjectMessage = async (args, ctx) => {
22
+ const { project_id, message } = parseArgs(args, sendProjectMessageSchema);
23
+ const api = getApiClient();
24
+ const response = await api.sendProjectMessage(project_id, message, ctx.session.currentSessionId || undefined);
25
+ if (!response.ok) {
26
+ return { result: { error: response.error || 'Failed to send message' }, isError: true };
27
+ }
28
+ return { result: response.data };
29
+ };
30
+ export const getProjectMessages = async (args, _ctx) => {
31
+ const { project_id, limit } = parseArgs(args, getProjectMessagesSchema);
32
+ const api = getApiClient();
33
+ const response = await api.getProjectMessages(project_id, limit);
34
+ if (!response.ok) {
35
+ return { result: { error: response.error || 'Failed to fetch messages' }, isError: true };
36
+ }
37
+ return { result: response.data };
38
+ };
39
+ /**
40
+ * Auto-post an agent activity message to the project chat.
41
+ *
42
+ * Fire-and-forget: errors are silently swallowed so auto-posting never
43
+ * interrupts or breaks the main tool response.
44
+ */
45
+ export async function autoPostActivity(projectId, message, sessionId) {
46
+ if (!projectId)
47
+ return;
48
+ try {
49
+ const api = getApiClient();
50
+ await api.sendProjectMessage(projectId, message, sessionId ?? undefined);
51
+ }
52
+ catch {
53
+ // Silently ignore — activity logging must never break main functionality
54
+ }
55
+ }
56
+ export const chatHandlers = {
57
+ send_project_message: sendProjectMessage,
58
+ get_project_messages: getProjectMessages,
59
+ };
@@ -12,6 +12,8 @@
12
12
  * - add_deployment_requirement
13
13
  * - complete_deployment_requirement
14
14
  * - get_deployment_requirements
15
+ * - get_deployment_requirements_stats
16
+ * - reorder_deployment_requirements
15
17
  */
16
18
  import type { Handler, HandlerRegistry } from './types.js';
17
19
  export declare const requestDeployment: Handler;
@@ -30,6 +32,7 @@ export declare const getDeploymentRequirements: Handler;
30
32
  * More token-efficient than get_deployment_requirements when you just need to understand the overall state.
31
33
  */
32
34
  export declare const getDeploymentRequirementsStats: Handler;
35
+ export declare const reorderDeploymentRequirements: Handler;
33
36
  export declare const scheduleDeployment: Handler;
34
37
  export declare const getScheduledDeployments: Handler;
35
38
  export declare const updateScheduledDeployment: Handler;
@@ -12,6 +12,8 @@
12
12
  * - add_deployment_requirement
13
13
  * - complete_deployment_requirement
14
14
  * - get_deployment_requirements
15
+ * - get_deployment_requirements_stats
16
+ * - reorder_deployment_requirements
15
17
  */
16
18
  import { ValidationError, parseArgs, uuidValidator, createEnumValidator, } from '../validators.js';
17
19
  import { getApiClient } from '../api-client.js';
@@ -251,6 +253,26 @@ export const getDeploymentRequirementsStats = async (args, ctx) => {
251
253
  return { result: response.data };
252
254
  };
253
255
  // ============================================================================
256
+ // Reorder Deployment Requirements
257
+ // ============================================================================
258
+ const reorderDeploymentRequirementsSchema = {
259
+ project_id: { type: 'string', required: true, validate: uuidValidator },
260
+ stage: { type: 'string', required: true, validate: createEnumValidator(REQUIREMENT_STAGES) },
261
+ requirement_ids: { type: 'object', required: true },
262
+ };
263
+ export const reorderDeploymentRequirements = async (args, ctx) => {
264
+ const { project_id, stage, requirement_ids } = parseArgs(args, reorderDeploymentRequirementsSchema);
265
+ const apiClient = getApiClient();
266
+ const response = await apiClient.reorderDeploymentRequirements(project_id, {
267
+ stage,
268
+ requirement_ids: requirement_ids,
269
+ });
270
+ if (!response.ok) {
271
+ return { result: { error: response.error || 'Failed to reorder deployment requirements' }, isError: true };
272
+ }
273
+ return { result: response.data };
274
+ };
275
+ // ============================================================================
254
276
  // Scheduled Deployments
255
277
  // ============================================================================
256
278
  export const scheduleDeployment = async (args, ctx) => {
@@ -387,6 +409,7 @@ export const deploymentHandlers = {
387
409
  complete_deployment_requirement: completeDeploymentRequirement,
388
410
  get_deployment_requirements: getDeploymentRequirements,
389
411
  get_deployment_requirements_stats: getDeploymentRequirementsStats,
412
+ reorder_deployment_requirements: reorderDeploymentRequirements,
390
413
  // Scheduled deployments
391
414
  schedule_deployment: scheduleDeployment,
392
415
  get_scheduled_deployments: getScheduledDeployments,
@@ -159,6 +159,7 @@ export const TOOL_CATEGORIES = {
159
159
  { name: 'complete_deployment_requirement', brief: 'Mark step done' },
160
160
  { name: 'get_deployment_requirements', brief: 'List pre-deploy steps' },
161
161
  { name: 'get_deployment_requirements_stats', brief: 'Get requirements statistics' },
162
+ { name: 'reorder_deployment_requirements', brief: 'Reorder steps within a stage' },
162
163
  { name: 'schedule_deployment', brief: 'Schedule future deployment' },
163
164
  { name: 'get_scheduled_deployments', brief: 'List scheduled deployments' },
164
165
  { name: 'update_scheduled_deployment', brief: 'Update schedule config' },
@@ -29,6 +29,7 @@ export * from './roles.js';
29
29
  export * from './connectors.js';
30
30
  export * from './cloud-agents.js';
31
31
  export * from './version.js';
32
+ export * from './chat.js';
32
33
  import type { HandlerRegistry } from './types.js';
33
34
  /**
34
35
  * Build the complete handler registry from all modules
@@ -29,6 +29,7 @@ export * from './roles.js';
29
29
  export * from './connectors.js';
30
30
  export * from './cloud-agents.js';
31
31
  export * from './version.js';
32
+ export * from './chat.js';
32
33
  import { milestoneHandlers } from './milestones.js';
33
34
  import { sessionHandlers } from './session.js';
34
35
  import { ideaHandlers } from './ideas.js';
@@ -53,6 +54,7 @@ import { roleHandlers } from './roles.js';
53
54
  import { connectorHandlers } from './connectors.js';
54
55
  import { cloudAgentHandlers } from './cloud-agents.js';
55
56
  import { versionHandlers } from './version.js';
57
+ import { chatHandlers } from './chat.js';
56
58
  /**
57
59
  * Build the complete handler registry from all modules
58
60
  */
@@ -82,5 +84,6 @@ export function buildHandlerRegistry() {
82
84
  ...connectorHandlers,
83
85
  ...cloudAgentHandlers,
84
86
  ...versionHandlers,
87
+ ...chatHandlers,
85
88
  };
86
89
  }
@@ -15,6 +15,7 @@ import { getApiClient } from '../api-client.js';
15
15
  import { getAgentGuidelinesTemplate, getAgentGuidelinesSummary } from '../templates/agent-guidelines.js';
16
16
  import { getFallbackHelpContent, getAvailableHelpTopics } from '../templates/help-content.js';
17
17
  import { normalizeGitUrl } from '../utils.js';
18
+ import { autoPostActivity } from './chat.js';
18
19
  /**
19
20
  * Simple hash for content change detection.
20
21
  */
@@ -495,6 +496,12 @@ export const startWorkSession = async (args, ctx) => {
495
496
  ? `start_fallback_activity(project_id: "${data.project.id}", activity: "code_review")`
496
497
  : 'signal_idle() — no tasks available and fallback activities are disabled.';
497
498
  }
499
+ // Auto-post boot activity to project chat
500
+ if (data.project?.id) {
501
+ const persona = data.persona || 'Agent';
502
+ const nextTaskInfo = data.next_task ? ` Next task: **${data.next_task.title}**` : '';
503
+ void autoPostActivity(data.project.id, `🤖 **${persona}** started a work session.${nextTaskInfo}`, data.session_id);
504
+ }
498
505
  return { result };
499
506
  };
500
507
  export const heartbeat = async (args, ctx) => {
@@ -25,6 +25,7 @@ import os from 'os';
25
25
  import { parseArgs, uuidValidator, taskStatusValidator, priorityValidator, progressValidator, minutesValidator, createEnumValidator, ValidationError, } from '../validators.js';
26
26
  import { getApiClient } from '../api-client.js';
27
27
  import { capPagination, PAGINATION_LIMITS } from '../utils.js';
28
+ import { autoPostActivity } from './chat.js';
28
29
  // Auto-detect machine hostname for worktree tracking
29
30
  const MACHINE_HOSTNAME = os.hostname();
30
31
  // Valid task types
@@ -481,6 +482,12 @@ export const completeTask = async (args, ctx) => {
481
482
  timing: 'Remove immediately after PR is created and complete_task is called',
482
483
  };
483
484
  }
485
+ // Auto-post completion activity to project chat
486
+ if (ctx.session.currentProjectId) {
487
+ const persona = ctx.session.currentPersona || 'Agent';
488
+ const summaryText = summary ? `: ${summary}` : '';
489
+ void autoPostActivity(ctx.session.currentProjectId, `✅ **${persona}** completed a task${summaryText}`, ctx.session.currentSessionId || undefined);
490
+ }
484
491
  return { result };
485
492
  };
486
493
  export const deleteTask = async (args, ctx) => {
@@ -955,6 +955,13 @@ Get pending deployment requirements.
955
955
  - project_id (required): Project UUID
956
956
  - stage (optional): preparation, deployment, verification, or all
957
957
  - status (optional): pending, completed, converted_to_task, or all (default: pending)`,
958
+ reorder_deployment_requirements: `# reorder_deployment_requirements
959
+ Reorder deployment requirements within a stage.
960
+
961
+ **Parameters:**
962
+ - project_id (required): Project UUID
963
+ - stage (required): preparation, deployment, or verification
964
+ - requirement_ids (required): Array of requirement UUIDs in desired order`,
958
965
  // Knowledge base
959
966
  query_knowledge_base: `# query_knowledge_base
960
967
  Query aggregated project knowledge in a single call. Reduces token usage by combining multiple data sources.
@@ -262,6 +262,19 @@ export const deploymentTools = [
262
262
  required: ['project_id'],
263
263
  },
264
264
  },
265
+ {
266
+ name: 'reorder_deployment_requirements',
267
+ description: `Reorder deployment requirements within a stage. Pass the requirement IDs in the desired order.`,
268
+ inputSchema: {
269
+ type: 'object',
270
+ properties: {
271
+ project_id: { type: 'string', description: 'Project UUID' },
272
+ stage: { type: 'string', enum: ['preparation', 'deployment', 'verification'], description: 'Deployment stage' },
273
+ requirement_ids: { type: 'array', items: { type: 'string' }, description: 'Ordered array of requirement UUIDs' },
274
+ },
275
+ required: ['project_id', 'stage', 'requirement_ids'],
276
+ },
277
+ },
265
278
  {
266
279
  name: 'schedule_deployment',
267
280
  description: `Schedule a deployment for a specific time. Supports one-time and recurring schedules with auto-trigger or manual trigger modes.`,
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-21
5
+ > Generated: 2026-02-22
6
6
  >
7
- > Total tools: 159
7
+ > Total tools: 160
8
8
 
9
9
  ## Table of Contents
10
10
 
@@ -18,7 +18,7 @@
18
18
  - [ideas](#ideas) - Feature ideas tracking (6 tools)
19
19
  - [findings](#findings) - Audit findings/knowledge base (6 tools)
20
20
  - [validation](#validation) - Cross-agent task validation (3 tools)
21
- - [deployment](#deployment) - Deployment coordination (17 tools)
21
+ - [deployment](#deployment) - Deployment coordination (18 tools)
22
22
  - [fallback](#fallback) - Background activities when idle (4 tools)
23
23
  - [bodies_of_work](#bodies-of-work) - Group tasks into bodies of work (12 tools)
24
24
  - [sprints](#sprints) - Time-bounded sprints with velocity tracking (11 tools)
@@ -1192,6 +1192,20 @@ Get aggregate statistics about deployment requirements for a project. Returns to
1192
1192
 
1193
1193
  ---
1194
1194
 
1195
+ ### reorder_deployment_requirements
1196
+
1197
+ Reorder deployment requirements within a stage. Pass the requirement IDs in the desired order.
1198
+
1199
+ **Parameters:**
1200
+
1201
+ | Parameter | Type | Required | Description |
1202
+ |-----------|------|----------|-------------|
1203
+ | `project_id` | `string` | Yes | Project UUID |
1204
+ | `stage` | `"preparation" | "deployment" | "verification"` | Yes | Deployment stage |
1205
+ | `requirement_ids` | `string[]` | Yes | Ordered array of requirement UUIDs |
1206
+
1207
+ ---
1208
+
1195
1209
  ### schedule_deployment
1196
1210
 
1197
1211
  Schedule a deployment for a specific time. Supports one-time and recurring schedules with auto-trigger or manual trigger modes.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibescope/mcp-server",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "description": "MCP server for Vibescope - AI project tracking tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",