@viberaven/mcp 1.1.0 → 1.1.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.
- package/README.md +34 -70
- package/bin/server.js +41 -279
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,80 +10,44 @@ This package exposes VibeRaven CLI actions as MCP tools for Codex, Claude Code,
|
|
|
10
10
|
|
|
11
11
|
The MCP server wraps the stable CLI package: `npx -y viberaven`.
|
|
12
12
|
|
|
13
|
-
## Run
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
npx -y @viberaven/mcp
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
MCP
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Tools
|
|
26
|
-
|
|
27
|
-
- `viberaven_check_readiness` -> `npx -y viberaven --agent-mode`
|
|
28
|
-
- `viberaven_verify` -> `npx -y viberaven --verify`
|
|
29
|
-
- `viberaven_audit` -> `npx -y viberaven audit --vercel-supabase`
|
|
30
|
-
- `viberaven_init_rules` -> `npx -y viberaven init`
|
|
31
|
-
- `viberaven_clean_plan` -> `npx -y viberaven clean --plan`
|
|
32
|
-
- `viberaven_strict_gate` -> `npx -y viberaven --agent-mode --strict --json`
|
|
33
|
-
- `viberaven_gate_result` -> `npx -y viberaven --agent-mode --json`
|
|
34
|
-
- `viberaven_context_map` -> `npx -y viberaven --condense`
|
|
35
|
-
- `
|
|
36
|
-
- `
|
|
37
|
-
- `
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
- `viberaven_heal_plan` -> `npx -y viberaven --heal --plan`
|
|
41
|
-
- `viberaven_heal_prompt` -> `npx -y viberaven --heal --prompt`
|
|
42
|
-
- `viberaven_heal_apply` -> `npx -y viberaven --heal --apply`
|
|
43
|
-
- `viberaven_validate_npm_package` -> check npm package names before install
|
|
44
|
-
|
|
45
|
-
`viberaven_check_readiness` is the canonical entrypoint. It runs VibeRaven as the Agent Context + Production Gate and writes `.viberaven/agent-tasklist.md`, `.viberaven/gate-result.json`, and `.viberaven/context-map.json`.
|
|
13
|
+
## Run
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx -y @viberaven/mcp
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
You can also start the MCP server from the main CLI package:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx -y viberaven mcp
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Tools
|
|
26
|
+
|
|
27
|
+
- `viberaven_check_readiness` -> `npx -y viberaven --agent-mode`
|
|
28
|
+
- `viberaven_verify` -> `npx -y viberaven --verify`
|
|
29
|
+
- `viberaven_audit` -> `npx -y viberaven audit --vercel-supabase`
|
|
30
|
+
- `viberaven_init_rules` -> `npx -y viberaven init`
|
|
31
|
+
- `viberaven_clean_plan` -> `npx -y viberaven clean --plan`
|
|
32
|
+
- `viberaven_strict_gate` -> `npx -y viberaven --agent-mode --strict --json`
|
|
33
|
+
- `viberaven_gate_result` -> `npx -y viberaven --agent-mode --json`
|
|
34
|
+
- `viberaven_context_map` -> `npx -y viberaven --condense`
|
|
35
|
+
- `viberaven_heal_plan` -> `npx -y viberaven --heal --plan`
|
|
36
|
+
- `viberaven_heal_prompt` -> `npx -y viberaven --heal --prompt`
|
|
37
|
+
- `viberaven_heal_apply` -> `npx -y viberaven --heal --apply`
|
|
38
|
+
|
|
39
|
+
`viberaven_check_readiness` is the canonical entrypoint. It runs VibeRaven as the Agent Context + Production Gate and writes `.viberaven/agent-tasklist.md`, `.viberaven/gate-result.json`, and `.viberaven/context-map.json`.
|
|
46
40
|
|
|
47
41
|
After one fix, call `viberaven_verify`. Before deploy or CI pass, call `viberaven_strict_gate` or run:
|
|
48
42
|
|
|
49
43
|
```bash
|
|
50
|
-
npx -y viberaven --strict
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
##
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
Run the canonical agent command:
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
npx -y viberaven --agent-mode
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Then have the AI coding agent read:
|
|
64
|
-
|
|
65
|
-
- `.viberaven/prp.json`
|
|
66
|
-
- `.viberaven/mission-map.md`
|
|
67
|
-
- `.viberaven/context-map.json`
|
|
68
|
-
|
|
69
|
-
The agent should fix `nextActions` in order and must not claim production-ready while `decision.status` is `blocked`.
|
|
70
|
-
|
|
71
|
-
## Production Protocol Resources
|
|
72
|
-
|
|
73
|
-
The MCP server exposes VibeRaven Production Protocol artifacts directly:
|
|
74
|
-
|
|
75
|
-
- `prp://current`
|
|
76
|
-
- `prp://findings`
|
|
77
|
-
- `prp://next-actions`
|
|
78
|
-
- `prp://mission-map`
|
|
79
|
-
- `prp://context-map`
|
|
80
|
-
|
|
81
|
-
Use `viberaven_check_readiness` to generate the artifacts, then use `viberaven_prp_current`, `viberaven_prp_findings`, or `viberaven_prp_next_action` so agents can act without scraping terminal prose.
|
|
82
|
-
|
|
83
|
-
## Machine Artifact Contract
|
|
84
|
-
|
|
85
|
-
```text
|
|
86
|
-
docs/contracts/artifacts.md
|
|
44
|
+
npx -y viberaven --strict
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Machine Artifact Contract
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
docs/contracts/artifacts.md
|
|
87
51
|
https://viberaven.dev/schemas/gate-result.schema.json
|
|
88
52
|
https://viberaven.dev/schemas/context-map.schema.json
|
|
89
53
|
https://viberaven.dev/schemas/gap.schema.json
|
package/bin/server.js
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
const { spawn } = require('node:child_process');
|
|
3
|
-
|
|
4
|
-
const { join } = require('node:path');
|
|
5
|
-
let spawnChild = spawn;
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const { spawn } = require('node:child_process');
|
|
3
|
+
let spawnChild = spawn;
|
|
6
4
|
|
|
7
|
-
const SERVER_INFO = { name: 'viberaven-mcp', version: '1.1.
|
|
8
|
-
const CLI_PACKAGE = '@viberaven/cli';
|
|
9
|
-
const PRP_MISSING_MESSAGE = '.viberaven/prp.json not found. Run npx -y viberaven --agent-mode first.';
|
|
10
|
-
const PRP_INVALID_JSON_MESSAGE = '.viberaven/prp.json is invalid JSON. Re-run npx -y viberaven --agent-mode.';
|
|
5
|
+
const SERVER_INFO = { name: 'viberaven-mcp', version: '1.1.5' };
|
|
6
|
+
const CLI_PACKAGE = '@viberaven/cli';
|
|
11
7
|
|
|
12
8
|
const cwdSchema = {
|
|
13
9
|
type: 'object',
|
|
@@ -17,7 +13,7 @@ const cwdSchema = {
|
|
|
17
13
|
additionalProperties: false
|
|
18
14
|
};
|
|
19
15
|
|
|
20
|
-
const healSchema = {
|
|
16
|
+
const healSchema = {
|
|
21
17
|
type: 'object',
|
|
22
18
|
properties: {
|
|
23
19
|
cwd: { type: 'string' },
|
|
@@ -25,48 +21,8 @@ const healSchema = {
|
|
|
25
21
|
gap: { type: 'string' },
|
|
26
22
|
yes: { type: 'boolean' }
|
|
27
23
|
},
|
|
28
|
-
additionalProperties: false
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
const manualEvidenceSchema = {
|
|
32
|
-
type: 'object',
|
|
33
|
-
properties: {
|
|
34
|
-
cwd: { type: 'string' },
|
|
35
|
-
id: { type: 'string' },
|
|
36
|
-
summary: { type: 'string' },
|
|
37
|
-
source: { type: 'string' }
|
|
38
|
-
},
|
|
39
|
-
required: ['id', 'summary'],
|
|
40
|
-
additionalProperties: false
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const RESOURCES = [
|
|
44
|
-
{
|
|
45
|
-
uri: 'prp://current',
|
|
46
|
-
name: 'Current VibeRaven Production Protocol',
|
|
47
|
-
mimeType: 'application/json'
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
uri: 'prp://findings',
|
|
51
|
-
name: 'VibeRaven PRP Findings',
|
|
52
|
-
mimeType: 'application/json'
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
uri: 'prp://next-actions',
|
|
56
|
-
name: 'VibeRaven PRP Next Actions',
|
|
57
|
-
mimeType: 'application/json'
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
uri: 'prp://mission-map',
|
|
61
|
-
name: 'VibeRaven Mission Map',
|
|
62
|
-
mimeType: 'text/markdown'
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
uri: 'prp://context-map',
|
|
66
|
-
name: 'VibeRaven Context Map',
|
|
67
|
-
mimeType: 'application/json'
|
|
68
|
-
}
|
|
69
|
-
];
|
|
24
|
+
additionalProperties: false
|
|
25
|
+
};
|
|
70
26
|
|
|
71
27
|
const TOOLS = [
|
|
72
28
|
{
|
|
@@ -119,47 +75,14 @@ const TOOLS = [
|
|
|
119
75
|
description: 'Run VibeRaven agent-mode JSON output and return gate-result.json content.',
|
|
120
76
|
inputSchema: cwdSchema
|
|
121
77
|
},
|
|
122
|
-
{
|
|
123
|
-
name: 'viberaven_context_map',
|
|
124
|
-
description: 'Refresh .viberaven/context-map.json from the last scan.',
|
|
125
|
-
inputSchema: cwdSchema
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
name: '
|
|
129
|
-
description: '
|
|
130
|
-
inputSchema: cwdSchema
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
name: 'viberaven_prp_findings',
|
|
134
|
-
description: 'List PRP findings from .viberaven/prp.json.',
|
|
135
|
-
inputSchema: cwdSchema
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
name: 'viberaven_prp_next_action',
|
|
139
|
-
description: 'Return the first PRP next action from .viberaven/prp.json.',
|
|
140
|
-
inputSchema: cwdSchema
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
name: 'viberaven_verify_url',
|
|
144
|
-
description:
|
|
145
|
-
'Run VibeRaven verify for the current workspace. URL-specific verification is reported when supported by the CLI.',
|
|
146
|
-
inputSchema: {
|
|
147
|
-
type: 'object',
|
|
148
|
-
properties: {
|
|
149
|
-
cwd: { type: 'string' },
|
|
150
|
-
url: { type: 'string' }
|
|
151
|
-
},
|
|
152
|
-
additionalProperties: false
|
|
153
|
-
}
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
name: 'viberaven_mark_manual_evidence',
|
|
157
|
-
description: 'Append manual evidence to PRP. Manual evidence is not live provider proof.',
|
|
158
|
-
inputSchema: manualEvidenceSchema
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
name: 'viberaven_heal_plan',
|
|
162
|
-
description: 'Write a non-destructive VibeRaven heal plan for a target file or gap.',
|
|
78
|
+
{
|
|
79
|
+
name: 'viberaven_context_map',
|
|
80
|
+
description: 'Refresh .viberaven/context-map.json from the last scan.',
|
|
81
|
+
inputSchema: cwdSchema
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'viberaven_heal_plan',
|
|
85
|
+
description: 'Write a non-destructive VibeRaven heal plan for a target file or gap.',
|
|
163
86
|
inputSchema: healSchema
|
|
164
87
|
},
|
|
165
88
|
{
|
|
@@ -258,17 +181,17 @@ async function handleRawMessage(raw) {
|
|
|
258
181
|
async function handleRequest(method, params) {
|
|
259
182
|
if (method === 'initialize') {
|
|
260
183
|
return {
|
|
261
|
-
protocolVersion: params.protocolVersion || '2024-11-05',
|
|
262
|
-
capabilities: { tools: {}
|
|
263
|
-
serverInfo: SERVER_INFO
|
|
264
|
-
};
|
|
265
|
-
}
|
|
184
|
+
protocolVersion: params.protocolVersion || '2024-11-05',
|
|
185
|
+
capabilities: { tools: {} },
|
|
186
|
+
serverInfo: SERVER_INFO
|
|
187
|
+
};
|
|
188
|
+
}
|
|
266
189
|
|
|
267
190
|
if (method === 'tools/list') {
|
|
268
191
|
return { tools: TOOLS };
|
|
269
192
|
}
|
|
270
193
|
|
|
271
|
-
if (method === 'tools/call') {
|
|
194
|
+
if (method === 'tools/call') {
|
|
272
195
|
const name = params.name;
|
|
273
196
|
const args = params.arguments || {};
|
|
274
197
|
const text = await callTool(name, args);
|
|
@@ -276,62 +199,25 @@ async function handleRequest(method, params) {
|
|
|
276
199
|
return {
|
|
277
200
|
content: [{ type: 'text', text }],
|
|
278
201
|
...(parsed ? { structuredContent: parsed } : {})
|
|
279
|
-
};
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
const text = await readResourceText(uri, params.cwd);
|
|
289
|
-
return { contents: [{ uri, text }] };
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
throw new Error(`Unsupported MCP method: ${method}`);
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
async function callTool(name, args) {
|
|
296
|
-
if (name === 'viberaven_prp_current') {
|
|
297
|
-
return readPrpText(args && args.cwd);
|
|
298
|
-
}
|
|
299
|
-
if (name === 'viberaven_prp_findings') {
|
|
300
|
-
return readPrpFindingsText(args && args.cwd);
|
|
301
|
-
}
|
|
302
|
-
if (name === 'viberaven_prp_next_action') {
|
|
303
|
-
return readPrpNextActionText(args && args.cwd);
|
|
304
|
-
}
|
|
305
|
-
if (name === 'viberaven_verify_url' && Object.prototype.hasOwnProperty.call(args || {}, 'url')) {
|
|
306
|
-
return JSON.stringify(
|
|
307
|
-
{
|
|
308
|
-
ok: false,
|
|
309
|
-
unsupported: 'url-verification',
|
|
310
|
-
message: 'URL-specific verification is not supported yet; run viberaven_verify for workspace verification.',
|
|
311
|
-
fallbackTool: 'viberaven_verify'
|
|
312
|
-
},
|
|
313
|
-
null,
|
|
314
|
-
2
|
|
315
|
-
);
|
|
316
|
-
}
|
|
317
|
-
if (name === 'viberaven_mark_manual_evidence') {
|
|
318
|
-
return markManualEvidence(args || {});
|
|
319
|
-
}
|
|
320
|
-
return runVibeRaven(['-y', CLI_PACKAGE, ...buildToolArgs(name, args || {})], args && args.cwd);
|
|
321
|
-
}
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
throw new Error(`Unsupported MCP method: ${method}`);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
async function callTool(name, args) {
|
|
209
|
+
return runVibeRaven(['-y', CLI_PACKAGE, ...buildToolArgs(name, args || {})], args && args.cwd);
|
|
210
|
+
}
|
|
322
211
|
|
|
323
212
|
function buildToolArgs(name, args) {
|
|
324
213
|
if (name === 'viberaven_check_readiness') {
|
|
325
214
|
return ['--agent-mode'];
|
|
326
215
|
}
|
|
327
|
-
if (name === 'viberaven_verify') {
|
|
328
|
-
return ['--verify'];
|
|
329
|
-
}
|
|
330
|
-
if (name === '
|
|
331
|
-
return ['--
|
|
332
|
-
}
|
|
333
|
-
if (name === 'viberaven_audit') {
|
|
334
|
-
return ['audit', '--vercel-supabase', ...(args.json ? ['--json'] : [])];
|
|
216
|
+
if (name === 'viberaven_verify') {
|
|
217
|
+
return ['--verify'];
|
|
218
|
+
}
|
|
219
|
+
if (name === 'viberaven_audit') {
|
|
220
|
+
return ['audit', '--vercel-supabase', ...(args.json ? ['--json'] : [])];
|
|
335
221
|
}
|
|
336
222
|
if (name === 'viberaven_init_rules') {
|
|
337
223
|
const cliArgs = ['init'];
|
|
@@ -403,7 +289,7 @@ function safeStringArg(value, label) {
|
|
|
403
289
|
return value;
|
|
404
290
|
}
|
|
405
291
|
|
|
406
|
-
function resolveCwd(cwd) {
|
|
292
|
+
function resolveCwd(cwd) {
|
|
407
293
|
if (cwd === undefined || cwd === null) {
|
|
408
294
|
return process.cwd();
|
|
409
295
|
}
|
|
@@ -416,134 +302,10 @@ function resolveCwd(cwd) {
|
|
|
416
302
|
throw new Error('Invalid cwd: expected non-empty string');
|
|
417
303
|
}
|
|
418
304
|
|
|
419
|
-
return cwd;
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
function
|
|
423
|
-
return join(resolveCwd(cwd), '.viberaven', 'prp.json');
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
async function readPrpText(cwd) {
|
|
427
|
-
try {
|
|
428
|
-
return await readFile(prpPath(cwd), 'utf8');
|
|
429
|
-
} catch (error) {
|
|
430
|
-
if (error && error.code === 'ENOENT') {
|
|
431
|
-
return `ERROR: ${PRP_MISSING_MESSAGE}`;
|
|
432
|
-
}
|
|
433
|
-
throw error;
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
async function readExistingPrpJson(cwd) {
|
|
438
|
-
let text;
|
|
439
|
-
try {
|
|
440
|
-
text = await readFile(prpPath(cwd), 'utf8');
|
|
441
|
-
} catch (error) {
|
|
442
|
-
if (error && error.code === 'ENOENT') {
|
|
443
|
-
throw new Error(PRP_MISSING_MESSAGE);
|
|
444
|
-
}
|
|
445
|
-
throw error;
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
try {
|
|
449
|
-
return JSON.parse(text);
|
|
450
|
-
} catch {
|
|
451
|
-
throw new Error(PRP_INVALID_JSON_MESSAGE);
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
async function readPrpFindingsText(cwd) {
|
|
456
|
-
try {
|
|
457
|
-
const prp = await readExistingPrpJson(cwd);
|
|
458
|
-
return JSON.stringify({ findings: prp.findings || [] }, null, 2);
|
|
459
|
-
} catch (error) {
|
|
460
|
-
return JSON.stringify({ error: errorMessage(error), findings: [] }, null, 2);
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
async function readPrpNextActionText(cwd) {
|
|
465
|
-
try {
|
|
466
|
-
const prp = await readExistingPrpJson(cwd);
|
|
467
|
-
return JSON.stringify({ nextAction: (prp.nextActions || [])[0] || null }, null, 2);
|
|
468
|
-
} catch (error) {
|
|
469
|
-
return JSON.stringify({ error: errorMessage(error), nextAction: null }, null, 2);
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
async function readPrpNextActionsText(cwd) {
|
|
474
|
-
try {
|
|
475
|
-
const prp = await readExistingPrpJson(cwd);
|
|
476
|
-
return JSON.stringify({ nextActions: prp.nextActions || [] }, null, 2);
|
|
477
|
-
} catch (error) {
|
|
478
|
-
return JSON.stringify({ error: errorMessage(error), nextActions: [] }, null, 2);
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
async function markManualEvidence(args) {
|
|
483
|
-
if (typeof args.id !== 'string' || !args.id.trim()) {
|
|
484
|
-
throw new Error('Invalid id: expected non-empty string');
|
|
485
|
-
}
|
|
486
|
-
if (typeof args.summary !== 'string' || !args.summary.trim()) {
|
|
487
|
-
throw new Error('Invalid summary: expected non-empty string');
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
const prp = await readExistingPrpJson(args.cwd);
|
|
491
|
-
const evidence = Array.isArray(prp.evidence) ? prp.evidence : [];
|
|
492
|
-
evidence.push({
|
|
493
|
-
id: args.id,
|
|
494
|
-
kind: 'manual',
|
|
495
|
-
status: 'present',
|
|
496
|
-
source: typeof args.source === 'string' && args.source.trim() ? args.source : 'manual',
|
|
497
|
-
summary: `${args.summary} Manual confirmation is not live provider proof.`
|
|
498
|
-
});
|
|
499
|
-
prp.evidence = evidence;
|
|
500
|
-
await writeFile(prpPath(args.cwd), `${JSON.stringify(prp, null, 2)}\n`);
|
|
501
|
-
return JSON.stringify({ ok: true, evidenceId: args.id, kind: 'manual' }, null, 2);
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
async function readResourceText(uri, cwd) {
|
|
505
|
-
if (typeof uri !== 'string') {
|
|
506
|
-
throw new Error('Invalid resource uri: expected string');
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
if (uri === 'prp://current') {
|
|
510
|
-
return readPrpText(cwd);
|
|
511
|
-
}
|
|
512
|
-
if (uri === 'prp://findings') {
|
|
513
|
-
return readPrpFindingsText(cwd);
|
|
514
|
-
}
|
|
515
|
-
if (uri === 'prp://next-actions') {
|
|
516
|
-
return readPrpNextActionsText(cwd);
|
|
517
|
-
}
|
|
518
|
-
if (uri === 'prp://mission-map') {
|
|
519
|
-
try {
|
|
520
|
-
return await readFile(join(resolveCwd(cwd), '.viberaven', 'mission-map.md'), 'utf8');
|
|
521
|
-
} catch (error) {
|
|
522
|
-
if (error && error.code === 'ENOENT') {
|
|
523
|
-
return 'ERROR: .viberaven/mission-map.md not found. Run npx -y viberaven --agent-mode first.';
|
|
524
|
-
}
|
|
525
|
-
throw error;
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
if (uri === 'prp://context-map') {
|
|
529
|
-
try {
|
|
530
|
-
return await readFile(join(resolveCwd(cwd), '.viberaven', 'context-map.json'), 'utf8');
|
|
531
|
-
} catch (error) {
|
|
532
|
-
if (error && error.code === 'ENOENT') {
|
|
533
|
-
return 'ERROR: .viberaven/context-map.json not found. Run npx -y viberaven --agent-mode first.';
|
|
534
|
-
}
|
|
535
|
-
throw error;
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
throw new Error(`Unknown resource uri: ${uri}`);
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
function errorMessage(error) {
|
|
543
|
-
return error instanceof Error ? error.message : String(error);
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
function buildNpxCommand(args) {
|
|
305
|
+
return cwd;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
function buildNpxCommand(args) {
|
|
547
309
|
if (process.platform === 'win32') {
|
|
548
310
|
return {
|
|
549
311
|
command: 'cmd.exe',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@viberaven/mcp",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.5",
|
|
4
4
|
"description": "MCP server for VibeRaven production-readiness: check_readiness, verify, heal, audit, and strict gate tools for Cursor, Claude Code, and Codex.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"author": "VibeRaven",
|