@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
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
* in every project using Vibescope for agent tracking. These guidelines ensure
|
|
6
6
|
* agents follow proper workflows and maintain visibility.
|
|
7
7
|
*/
|
|
8
|
-
export const
|
|
8
|
+
export const VIBESCOPE_SECTION_START = '<!-- vibescope:start -->';
|
|
9
|
+
export const VIBESCOPE_SECTION_END = '<!-- vibescope:end -->';
|
|
10
|
+
export const AGENT_GUIDELINES_TEMPLATE = `${VIBESCOPE_SECTION_START}
|
|
11
|
+
# Vibescope Agent Guidelines
|
|
9
12
|
|
|
10
13
|
## Quick Start
|
|
11
14
|
|
|
@@ -182,6 +185,7 @@ claude mcp add vibescope npx @vibescope/mcp-server@latest \\
|
|
|
182
185
|
1. Copy \`.mcp.json.example\` to \`.mcp.json\`
|
|
183
186
|
2. Get \`VIBESCOPE_API_KEY\` from https://vibescope.dev/dashboard/settings
|
|
184
187
|
3. Restart Claude Code
|
|
188
|
+
${VIBESCOPE_SECTION_END}
|
|
185
189
|
`;
|
|
186
190
|
/**
|
|
187
191
|
* Get the agent guidelines template
|
|
@@ -214,14 +214,14 @@ add_finding(
|
|
|
214
214
|
title: "Fix exists but awaits deployment",
|
|
215
215
|
category: "other",
|
|
216
216
|
severity: "info",
|
|
217
|
-
description: "The fix for [issue] was implemented in PR #
|
|
217
|
+
description: "The fix for [issue] was implemented in PR #{pr_number} but hasn't been deployed yet.",
|
|
218
218
|
related_task_id: task_id
|
|
219
219
|
)
|
|
220
220
|
\`\`\`
|
|
221
221
|
|
|
222
222
|
2. **Complete the task** (investigation is done):
|
|
223
223
|
\`\`\`
|
|
224
|
-
complete_task(task_id, summary: "Fix already exists in codebase (PR #
|
|
224
|
+
complete_task(task_id, summary: "Fix already exists in codebase (PR #{pr_number}). Needs deployment to production.")
|
|
225
225
|
\`\`\`
|
|
226
226
|
|
|
227
227
|
3. **Request deployment** if not already pending:
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project chat tools:
|
|
3
|
+
* - send_project_message
|
|
4
|
+
* - get_project_messages
|
|
5
|
+
*/
|
|
6
|
+
export const chatTools = [
|
|
7
|
+
{
|
|
8
|
+
name: 'send_project_message',
|
|
9
|
+
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.',
|
|
10
|
+
inputSchema: {
|
|
11
|
+
type: 'object',
|
|
12
|
+
properties: {
|
|
13
|
+
project_id: {
|
|
14
|
+
type: 'string',
|
|
15
|
+
description: 'Project UUID',
|
|
16
|
+
},
|
|
17
|
+
message: {
|
|
18
|
+
type: 'string',
|
|
19
|
+
description: 'Message content (supports markdown)',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
required: ['project_id', 'message'],
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: 'get_project_messages',
|
|
27
|
+
description: 'Read recent messages from the project chat channel. Use this to check if the user or other agents have posted anything.',
|
|
28
|
+
inputSchema: {
|
|
29
|
+
type: 'object',
|
|
30
|
+
properties: {
|
|
31
|
+
project_id: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
description: 'Project UUID',
|
|
34
|
+
},
|
|
35
|
+
limit: {
|
|
36
|
+
type: 'number',
|
|
37
|
+
description: 'Number of recent messages to fetch (default: 20, max: 100)',
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
required: ['project_id'],
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
];
|
|
@@ -63,5 +63,36 @@ Use this to check the state of cloud agents before/after cleanup.`,
|
|
|
63
63
|
},
|
|
64
64
|
required: ['project_id']
|
|
65
65
|
}
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: 'update_agent_status',
|
|
69
|
+
description: `Report what you're currently doing. This updates the status message shown on the dashboard.
|
|
70
|
+
|
|
71
|
+
Call this at key milestones during boot and work:
|
|
72
|
+
- "Installing dependencies..."
|
|
73
|
+
- "Running start_work_session..."
|
|
74
|
+
- "Working on: <task title>"
|
|
75
|
+
- "Running tests..."
|
|
76
|
+
- "Committing changes..."
|
|
77
|
+
|
|
78
|
+
Keep messages short (under 80 chars). The dashboard shows this in real-time.`,
|
|
79
|
+
inputSchema: {
|
|
80
|
+
type: 'object',
|
|
81
|
+
properties: {
|
|
82
|
+
status_message: {
|
|
83
|
+
type: 'string',
|
|
84
|
+
description: 'Short status message to display on dashboard (max 80 chars)'
|
|
85
|
+
},
|
|
86
|
+
project_id: {
|
|
87
|
+
type: 'string',
|
|
88
|
+
description: 'Project UUID (optional if session has project context)'
|
|
89
|
+
},
|
|
90
|
+
agent_name: {
|
|
91
|
+
type: 'string',
|
|
92
|
+
description: 'Agent name (used to find the spawned_agents record)'
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
required: ['status_message']
|
|
96
|
+
}
|
|
66
97
|
}
|
|
67
98
|
];
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ import { sprintTools } from './sprints.js';
|
|
|
30
30
|
import { gitIssueTools } from './git-issues.js';
|
|
31
31
|
import { connectorTools } from './connectors.js';
|
|
32
32
|
import { cloudAgentTools } from './cloud-agents.js';
|
|
33
|
+
import { versionTools } from './version.js';
|
|
33
34
|
/**
|
|
34
35
|
* All MCP tool definitions combined
|
|
35
36
|
*/
|
|
@@ -67,5 +68,6 @@ export declare const toolCategories: {
|
|
|
67
68
|
readonly gitIssues: string[];
|
|
68
69
|
readonly connectors: string[];
|
|
69
70
|
readonly cloudAgents: string[];
|
|
71
|
+
readonly version: string[];
|
|
70
72
|
};
|
|
71
|
-
export { sessionTools, costTools, discoveryTools, worktreeTools, projectTools, taskTools, progressTools, blockerTools, decisionTools, ideaTools, findingTools, validationTools, deploymentTools, fallbackTools, requestTools, milestoneTools, bodiesOfWorkTools, organizationTools, fileCheckoutTools, roleTools, sprintTools, gitIssueTools, connectorTools, cloudAgentTools, };
|
|
73
|
+
export { sessionTools, costTools, discoveryTools, worktreeTools, projectTools, taskTools, progressTools, blockerTools, decisionTools, ideaTools, findingTools, validationTools, deploymentTools, fallbackTools, requestTools, milestoneTools, bodiesOfWorkTools, organizationTools, fileCheckoutTools, roleTools, sprintTools, gitIssueTools, connectorTools, cloudAgentTools, versionTools, };
|
package/dist/tools/index.js
CHANGED
|
@@ -29,6 +29,8 @@ import { sprintTools } from './sprints.js';
|
|
|
29
29
|
import { gitIssueTools } from './git-issues.js';
|
|
30
30
|
import { connectorTools } from './connectors.js';
|
|
31
31
|
import { cloudAgentTools } from './cloud-agents.js';
|
|
32
|
+
import { versionTools } from './version.js';
|
|
33
|
+
import { chatTools } from './chat.js';
|
|
32
34
|
/**
|
|
33
35
|
* All MCP tool definitions combined
|
|
34
36
|
*/
|
|
@@ -57,6 +59,8 @@ export const tools = [
|
|
|
57
59
|
...gitIssueTools,
|
|
58
60
|
...connectorTools,
|
|
59
61
|
...cloudAgentTools,
|
|
62
|
+
...versionTools,
|
|
63
|
+
...chatTools,
|
|
60
64
|
];
|
|
61
65
|
/**
|
|
62
66
|
* Build the complete tool list from all domain modules
|
|
@@ -93,6 +97,7 @@ export const toolCategories = {
|
|
|
93
97
|
gitIssues: gitIssueTools.map((t) => t.name),
|
|
94
98
|
connectors: connectorTools.map((t) => t.name),
|
|
95
99
|
cloudAgents: cloudAgentTools.map((t) => t.name),
|
|
100
|
+
version: versionTools.map((t) => t.name),
|
|
96
101
|
};
|
|
97
102
|
// Re-export domain tools for selective imports
|
|
98
|
-
export { sessionTools, costTools, discoveryTools, worktreeTools, projectTools, taskTools, progressTools, blockerTools, decisionTools, ideaTools, findingTools, validationTools, deploymentTools, fallbackTools, requestTools, milestoneTools, bodiesOfWorkTools, organizationTools, fileCheckoutTools, roleTools, sprintTools, gitIssueTools, connectorTools, cloudAgentTools, };
|
|
103
|
+
export { sessionTools, costTools, discoveryTools, worktreeTools, projectTools, taskTools, progressTools, blockerTools, decisionTools, ideaTools, findingTools, validationTools, deploymentTools, fallbackTools, requestTools, milestoneTools, bodiesOfWorkTools, organizationTools, fileCheckoutTools, roleTools, sprintTools, gitIssueTools, connectorTools, cloudAgentTools, versionTools, };
|
package/dist/tools/project.js
CHANGED
|
@@ -61,7 +61,7 @@ export const projectTools = [
|
|
|
61
61
|
},
|
|
62
62
|
goal: {
|
|
63
63
|
type: 'string',
|
|
64
|
-
description: '
|
|
64
|
+
description: 'High-level project goal or purpose (e.g. "A multiplayer card game platform")',
|
|
65
65
|
},
|
|
66
66
|
git_url: {
|
|
67
67
|
type: 'string',
|
package/dist/tools/tasks.js
CHANGED
|
@@ -296,6 +296,10 @@ For projects without git branching (trunk-based or none), use skip_worktree_requ
|
|
|
296
296
|
type: 'boolean',
|
|
297
297
|
description: 'Skip git_branch requirement for projects without branching workflows (trunk-based or none). Default: false',
|
|
298
298
|
},
|
|
299
|
+
session_id: {
|
|
300
|
+
type: 'string',
|
|
301
|
+
description: 'Session ID from start_work_session. Required for cloud agents using mcporter (session context is not preserved between calls). Links the task to your agent on the dashboard.',
|
|
302
|
+
},
|
|
299
303
|
},
|
|
300
304
|
required: ['task_id'],
|
|
301
305
|
},
|
|
@@ -326,6 +330,10 @@ The auto_continue: true flag in the response means you are expected to continue
|
|
|
326
330
|
type: 'string',
|
|
327
331
|
description: 'Brief summary of what was done. This is stored on the task as completion_summary and displayed when reviewing completed tasks.',
|
|
328
332
|
},
|
|
333
|
+
session_id: {
|
|
334
|
+
type: 'string',
|
|
335
|
+
description: 'Session ID from start_work_session. Required for cloud agents using mcporter.',
|
|
336
|
+
},
|
|
329
337
|
},
|
|
330
338
|
required: ['task_id'],
|
|
331
339
|
},
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version management tool definitions
|
|
3
|
+
*/
|
|
4
|
+
export const versionTools = [
|
|
5
|
+
{
|
|
6
|
+
name: 'check_mcp_version',
|
|
7
|
+
description: '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.',
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {},
|
|
11
|
+
required: [],
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
name: 'update_mcp_server',
|
|
16
|
+
description: '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.',
|
|
17
|
+
inputSchema: {
|
|
18
|
+
type: 'object',
|
|
19
|
+
properties: {
|
|
20
|
+
global: {
|
|
21
|
+
type: 'boolean',
|
|
22
|
+
description: 'If true, update the global installation (npm install -g). If false, update locally. Default: true.',
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
required: [],
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
];
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version checking utilities
|
|
3
|
+
*
|
|
4
|
+
* Compares the locally installed version against the latest published
|
|
5
|
+
* version on npm to detect available updates.
|
|
6
|
+
*/
|
|
7
|
+
export interface VersionInfo {
|
|
8
|
+
current: string;
|
|
9
|
+
latest: string | null;
|
|
10
|
+
updateAvailable: boolean;
|
|
11
|
+
error?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get the current locally installed version from package.json
|
|
15
|
+
*/
|
|
16
|
+
export declare function getLocalVersion(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Fetch the latest published version from npm registry
|
|
19
|
+
*/
|
|
20
|
+
export declare function getLatestVersion(): Promise<string | null>;
|
|
21
|
+
/**
|
|
22
|
+
* Check if an update is available
|
|
23
|
+
*/
|
|
24
|
+
export declare function checkVersion(): Promise<VersionInfo>;
|
|
25
|
+
/**
|
|
26
|
+
* Get the update warning message for server instructions, or null if up to date
|
|
27
|
+
*/
|
|
28
|
+
export declare function getUpdateWarning(): Promise<string | null>;
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version checking utilities
|
|
3
|
+
*
|
|
4
|
+
* Compares the locally installed version against the latest published
|
|
5
|
+
* version on npm to detect available updates.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync } from 'fs';
|
|
8
|
+
import { resolve, dirname } from 'path';
|
|
9
|
+
import { fileURLToPath } from 'url';
|
|
10
|
+
const NPM_REGISTRY_URL = 'https://registry.npmjs.org/@vibescope/mcp-server';
|
|
11
|
+
const PACKAGE_NAME = '@vibescope/mcp-server';
|
|
12
|
+
/**
|
|
13
|
+
* Get the current locally installed version from package.json
|
|
14
|
+
*/
|
|
15
|
+
export function getLocalVersion() {
|
|
16
|
+
try {
|
|
17
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
18
|
+
const pkgPath = resolve(__dirname, '..', 'package.json');
|
|
19
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
20
|
+
return pkg.version;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return 'unknown';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Fetch the latest published version from npm registry
|
|
28
|
+
*/
|
|
29
|
+
export async function getLatestVersion() {
|
|
30
|
+
try {
|
|
31
|
+
const controller = new AbortController();
|
|
32
|
+
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
33
|
+
const response = await fetch(`${NPM_REGISTRY_URL}/latest`, {
|
|
34
|
+
signal: controller.signal,
|
|
35
|
+
headers: { 'Accept': 'application/json' },
|
|
36
|
+
});
|
|
37
|
+
clearTimeout(timeout);
|
|
38
|
+
if (!response.ok)
|
|
39
|
+
return null;
|
|
40
|
+
const data = (await response.json());
|
|
41
|
+
return data.version ?? null;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Compare semver strings. Returns true if latest > current.
|
|
49
|
+
*/
|
|
50
|
+
function isNewer(current, latest) {
|
|
51
|
+
const parse = (v) => v.split('.').map(Number);
|
|
52
|
+
const c = parse(current);
|
|
53
|
+
const l = parse(latest);
|
|
54
|
+
for (let i = 0; i < 3; i++) {
|
|
55
|
+
if ((l[i] ?? 0) > (c[i] ?? 0))
|
|
56
|
+
return true;
|
|
57
|
+
if ((l[i] ?? 0) < (c[i] ?? 0))
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check if an update is available
|
|
64
|
+
*/
|
|
65
|
+
export async function checkVersion() {
|
|
66
|
+
const current = getLocalVersion();
|
|
67
|
+
const latest = await getLatestVersion();
|
|
68
|
+
if (!latest) {
|
|
69
|
+
return {
|
|
70
|
+
current,
|
|
71
|
+
latest: null,
|
|
72
|
+
updateAvailable: false,
|
|
73
|
+
error: 'Could not reach npm registry to check for updates',
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
current,
|
|
78
|
+
latest,
|
|
79
|
+
updateAvailable: isNewer(current, latest),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get the update warning message for server instructions, or null if up to date
|
|
84
|
+
*/
|
|
85
|
+
export async function getUpdateWarning() {
|
|
86
|
+
const info = await checkVersion();
|
|
87
|
+
if (info.updateAvailable && info.latest) {
|
|
88
|
+
return `⚠️ UPDATE AVAILABLE: Vibescope MCP server v${info.current} is outdated. Latest version is v${info.latest}. Before starting work, inform the user that an update is available and recommend running the \`check_mcp_version\` tool, or ask them to update with: npm install -g ${PACKAGE_NAME}@latest (or npx @vibescope/mcp-server@latest for auto-update on next run).`;
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
}
|
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-
|
|
5
|
+
> Generated: 2026-02-19
|
|
6
6
|
>
|
|
7
|
-
> Total tools:
|
|
7
|
+
> Total tools: 159
|
|
8
8
|
|
|
9
9
|
## Table of Contents
|
|
10
10
|
|
|
@@ -34,6 +34,8 @@
|
|
|
34
34
|
- [file_locks](#file-locks) - File checkout/locking for multi-agent (6 tools)
|
|
35
35
|
- [connectors](#connectors) - External integration connectors (7 tools)
|
|
36
36
|
- [cloud_agents](#cloud-agents) - Cloud agent management and cleanup (2 tools)
|
|
37
|
+
- [chat](#chat) - Project-wide chat channel for agent and user communication (2 tools)
|
|
38
|
+
- [version](#version) - MCP server version management and updates (2 tools)
|
|
37
39
|
|
|
38
40
|
## session
|
|
39
41
|
|
|
@@ -207,7 +209,7 @@ Create a new project to track in Vibescope.
|
|
|
207
209
|
|-----------|------|----------|-------------|
|
|
208
210
|
| `name` | `string` | Yes | Project display name |
|
|
209
211
|
| `description` | `string` | No | Brief project description |
|
|
210
|
-
| `goal` | `string` | No |
|
|
212
|
+
| `goal` | `string` | No | High-level project goal or purpose (e.g. "A multiplayer card game platform") |
|
|
211
213
|
| `git_url` | `string` | No | Git repository URL (if available) |
|
|
212
214
|
| `tech_stack` | `string[]` | No | Technologies used (e.g., ["TypeScript", "React", "PostgreSQL"]) |
|
|
213
215
|
|
|
@@ -414,6 +416,7 @@ For projects without git branching (trunk-based or none), use skip_worktree_requ
|
|
|
414
416
|
| `worktree_hostname` | `string` | No | Machine hostname where worktree was created (os.hostname()). Required with worktree_path to enable machine-aware cleanup. |
|
|
415
417
|
| `model_capability` | `"haiku" | "sonnet" | "opus"` | No | Recommended model capability: haiku (simple tasks), sonnet (standard), opus (complex reasoning) |
|
|
416
418
|
| `skip_worktree_requirement` | `boolean` | No | Skip git_branch requirement for projects without branching workflows (trunk-based or none). Default: false |
|
|
419
|
+
| `session_id` | `string` | No | 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. |
|
|
417
420
|
|
|
418
421
|
---
|
|
419
422
|
|
|
@@ -445,6 +448,7 @@ The auto_continue: true flag in the response means you are expected to continue
|
|
|
445
448
|
|-----------|------|----------|-------------|
|
|
446
449
|
| `task_id` | `string` | Yes | Task UUID |
|
|
447
450
|
| `summary` | `string` | No | Brief summary of what was done. This is stored on the task as completion_summary and displayed when reviewing completed tasks. |
|
|
451
|
+
| `session_id` | `string` | No | Session ID from start_work_session. Required for cloud agents using mcporter. |
|
|
448
452
|
|
|
449
453
|
---
|
|
450
454
|
|
|
@@ -2457,3 +2461,89 @@ Use this to check the state of cloud agents before/after cleanup.
|
|
|
2457
2461
|
| `status` | `"starting" | "running" | "stopped" | "failed" | "all"` | No | Filter by status (default: all) |
|
|
2458
2462
|
|
|
2459
2463
|
---
|
|
2464
|
+
|
|
2465
|
+
## chat
|
|
2466
|
+
|
|
2467
|
+
*Project-wide chat channel for agent and user communication*
|
|
2468
|
+
|
|
2469
|
+
### send_project_message
|
|
2470
|
+
|
|
2471
|
+
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.
|
|
2472
|
+
|
|
2473
|
+
**Parameters:**
|
|
2474
|
+
|
|
2475
|
+
| Parameter | Type | Required | Description |
|
|
2476
|
+
|-----------|------|----------|-------------|
|
|
2477
|
+
| `project_id` | `string` | Yes | Project UUID |
|
|
2478
|
+
| `message` | `string` | Yes | Message content (supports markdown) |
|
|
2479
|
+
|
|
2480
|
+
---
|
|
2481
|
+
|
|
2482
|
+
### get_project_messages
|
|
2483
|
+
|
|
2484
|
+
Read recent messages from the project chat channel. Use this to check if the user or other agents have posted anything.
|
|
2485
|
+
|
|
2486
|
+
**Parameters:**
|
|
2487
|
+
|
|
2488
|
+
| Parameter | Type | Required | Description |
|
|
2489
|
+
|-----------|------|----------|-------------|
|
|
2490
|
+
| `project_id` | `string` | Yes | Project UUID |
|
|
2491
|
+
| `limit` | `number` | No | Number of recent messages to fetch (default: 20, max: 100) |
|
|
2492
|
+
|
|
2493
|
+
---
|
|
2494
|
+
|
|
2495
|
+
## version
|
|
2496
|
+
|
|
2497
|
+
*MCP server version management and updates*
|
|
2498
|
+
|
|
2499
|
+
### check_mcp_version
|
|
2500
|
+
|
|
2501
|
+
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.
|
|
2502
|
+
|
|
2503
|
+
**Parameters:** None
|
|
2504
|
+
|
|
2505
|
+
---
|
|
2506
|
+
|
|
2507
|
+
### update_mcp_server
|
|
2508
|
+
|
|
2509
|
+
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.
|
|
2510
|
+
|
|
2511
|
+
**Parameters:**
|
|
2512
|
+
|
|
2513
|
+
| Parameter | Type | Required | Description |
|
|
2514
|
+
|-----------|------|----------|-------------|
|
|
2515
|
+
| `global` | `boolean` | No | If true, update the global installation (npm install -g). If false, update locally. Default: true. |
|
|
2516
|
+
|
|
2517
|
+
---
|
|
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,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibescope/mcp-server",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"description": "MCP server for Vibescope - AI project tracking tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"bin": {
|
|
9
9
|
"vibescope-mcp": "dist/index.js",
|
|
10
|
-
"vibescope-cli": "dist/cli.js"
|
|
10
|
+
"vibescope-cli": "dist/cli.js",
|
|
11
|
+
"vibescope": "dist/cli-init.js",
|
|
12
|
+
"vibescope-init": "dist/cli-init.js"
|
|
11
13
|
},
|
|
12
14
|
"repository": {
|
|
13
15
|
"type": "git",
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Findings API Methods
|
|
3
|
+
*
|
|
4
|
+
* Handles security findings, code quality issues, and audit findings.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { ApiResponse, ProxyFn } from './types.js';
|
|
8
|
+
|
|
9
|
+
export interface Finding {
|
|
10
|
+
id: string;
|
|
11
|
+
title: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
category: string;
|
|
14
|
+
severity: string;
|
|
15
|
+
status: string;
|
|
16
|
+
file_path?: string;
|
|
17
|
+
line_number?: number;
|
|
18
|
+
resolution_note?: string;
|
|
19
|
+
created_at: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface FindingsStats {
|
|
23
|
+
total: number;
|
|
24
|
+
by_status: Record<string, number>;
|
|
25
|
+
by_severity: Record<string, number>;
|
|
26
|
+
by_category: Record<string, number>;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface FindingsMethods {
|
|
30
|
+
getFindings(projectId: string, params?: {
|
|
31
|
+
category?: string;
|
|
32
|
+
severity?: string;
|
|
33
|
+
status?: string;
|
|
34
|
+
limit?: number;
|
|
35
|
+
offset?: number;
|
|
36
|
+
search_query?: string;
|
|
37
|
+
summary_only?: boolean;
|
|
38
|
+
}): Promise<ApiResponse<{ findings: Finding[]; total_count?: number; has_more?: boolean }>>;
|
|
39
|
+
|
|
40
|
+
getFinding(findingId: string): Promise<ApiResponse<{ finding: Finding }>>;
|
|
41
|
+
|
|
42
|
+
getFindingsStats(projectId: string): Promise<ApiResponse<FindingsStats>>;
|
|
43
|
+
|
|
44
|
+
addFinding(projectId: string, params: {
|
|
45
|
+
title: string;
|
|
46
|
+
description?: string;
|
|
47
|
+
category?: string;
|
|
48
|
+
severity?: string;
|
|
49
|
+
file_path?: string;
|
|
50
|
+
line_number?: number;
|
|
51
|
+
related_task_id?: string;
|
|
52
|
+
}, sessionId?: string): Promise<ApiResponse<{ success: boolean; finding_id: string }>>;
|
|
53
|
+
|
|
54
|
+
updateFinding(findingId: string, updates: {
|
|
55
|
+
title?: string;
|
|
56
|
+
description?: string;
|
|
57
|
+
severity?: string;
|
|
58
|
+
status?: string;
|
|
59
|
+
resolution_note?: string;
|
|
60
|
+
}): Promise<ApiResponse<{ success: boolean; finding_id: string }>>;
|
|
61
|
+
|
|
62
|
+
deleteFinding(findingId: string): Promise<ApiResponse<{ success: boolean }>>;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function createFindingsMethods(proxy: ProxyFn): FindingsMethods {
|
|
66
|
+
return {
|
|
67
|
+
async getFindings(projectId, params) {
|
|
68
|
+
return proxy('get_findings', {
|
|
69
|
+
project_id: projectId,
|
|
70
|
+
...params
|
|
71
|
+
});
|
|
72
|
+
},
|
|
73
|
+
|
|
74
|
+
async getFinding(findingId) {
|
|
75
|
+
return proxy('get_finding', { finding_id: findingId });
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
async getFindingsStats(projectId) {
|
|
79
|
+
return proxy('get_findings_stats', { project_id: projectId });
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
async addFinding(projectId, params, sessionId) {
|
|
83
|
+
return proxy('add_finding', {
|
|
84
|
+
project_id: projectId,
|
|
85
|
+
...params
|
|
86
|
+
}, sessionId ? { session_id: sessionId } : undefined);
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
async updateFinding(findingId, updates) {
|
|
90
|
+
return proxy('update_finding', {
|
|
91
|
+
finding_id: findingId,
|
|
92
|
+
...updates
|
|
93
|
+
});
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
async deleteFinding(findingId) {
|
|
97
|
+
return proxy('delete_finding', { finding_id: findingId });
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|