opencode-mcp 1.4.0 → 1.8.0
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/CHANGELOG.md +55 -0
- package/README.md +25 -8
- package/dist/client.d.ts +3 -1
- package/dist/client.js +29 -1
- package/dist/client.js.map +1 -1
- package/dist/helpers.d.ts +45 -0
- package/dist/helpers.js +293 -11
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +82 -11
- package/dist/index.js.map +1 -1
- package/dist/prompts.js +65 -0
- package/dist/prompts.js.map +1 -1
- package/dist/tools/config.js +70 -3
- package/dist/tools/config.js.map +1 -1
- package/dist/tools/events.js +1 -1
- package/dist/tools/events.js.map +1 -1
- package/dist/tools/file.js +38 -17
- package/dist/tools/file.js.map +1 -1
- package/dist/tools/global.js +6 -3
- package/dist/tools/global.js.map +1 -1
- package/dist/tools/message.js +10 -2
- package/dist/tools/message.js.map +1 -1
- package/dist/tools/misc.js +145 -11
- package/dist/tools/misc.js.map +1 -1
- package/dist/tools/project.js +41 -3
- package/dist/tools/project.js.map +1 -1
- package/dist/tools/provider.js +94 -28
- package/dist/tools/provider.js.map +1 -1
- package/dist/tools/session.js +126 -19
- package/dist/tools/session.js.map +1 -1
- package/dist/tools/workflow.js +278 -88
- package/dist/tools/workflow.js.map +1 -1
- package/package.json +2 -2
package/dist/helpers.js
CHANGED
|
@@ -7,6 +7,12 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { z } from "zod";
|
|
9
9
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
10
|
+
// ── Tool Annotations ─────────────────────────────────────────────────
|
|
11
|
+
// MCP spec tool annotations help clients understand tool behavior.
|
|
12
|
+
/** Read-only tool: does not modify state. */
|
|
13
|
+
export const readOnly = { readOnlyHint: true, destructiveHint: false };
|
|
14
|
+
/** Destructive tool: permanently deletes data or shuts down services. */
|
|
15
|
+
export const destructive = { readOnlyHint: false, destructiveHint: true };
|
|
10
16
|
/**
|
|
11
17
|
* Shared Zod parameter for project directory targeting.
|
|
12
18
|
* When provided, sent as the x-opencode-directory header so the
|
|
@@ -26,10 +32,8 @@ export const directoryParam = z
|
|
|
26
32
|
export function formatMessageResponse(response) {
|
|
27
33
|
const r = response;
|
|
28
34
|
const sections = [];
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
sections.push(`[${role ?? "unknown"}] Message ${id ?? "?"}${createdAt ? ` at ${createdAt}` : ""}`);
|
|
32
|
-
}
|
|
35
|
+
// Omit verbose message header for cleaner output; the caller (opencode_ask etc.)
|
|
36
|
+
// already provides session context. Keep a minimal role tag only when it adds info.
|
|
33
37
|
if (r?.parts && Array.isArray(r.parts)) {
|
|
34
38
|
for (const part of r.parts) {
|
|
35
39
|
switch (part.type) {
|
|
@@ -40,8 +44,39 @@ export function formatMessageResponse(response) {
|
|
|
40
44
|
case "tool-result":
|
|
41
45
|
sections.push(`[Tool: ${part.toolName ?? "unknown"}] ${part.error ? `ERROR: ${part.error}` : typeof part.output === "string" ? part.output : JSON.stringify(part.output ?? part.input, null, 2)}`);
|
|
42
46
|
break;
|
|
47
|
+
case "step-start":
|
|
48
|
+
case "step-finish":
|
|
49
|
+
// Internal lifecycle events — omit from user-facing output.
|
|
50
|
+
// Optionally surface cost/token info from step-finish.
|
|
51
|
+
if (part.type === "step-finish" && (part.cost != null || part.tokens)) {
|
|
52
|
+
const meta = [];
|
|
53
|
+
if (part.cost != null)
|
|
54
|
+
meta.push(`cost: $${Number(part.cost).toFixed(4)}`);
|
|
55
|
+
if (part.tokens) {
|
|
56
|
+
const t = part.tokens;
|
|
57
|
+
const tokParts = [];
|
|
58
|
+
if (t.input)
|
|
59
|
+
tokParts.push(`${t.input} in`);
|
|
60
|
+
if (t.output)
|
|
61
|
+
tokParts.push(`${t.output} out`);
|
|
62
|
+
if (t.reasoning)
|
|
63
|
+
tokParts.push(`${t.reasoning} reasoning`);
|
|
64
|
+
if (tokParts.length > 0)
|
|
65
|
+
meta.push(`tokens: ${tokParts.join(", ")}`);
|
|
66
|
+
}
|
|
67
|
+
if (meta.length > 0)
|
|
68
|
+
sections.push(`_${meta.join(" | ")}_`);
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
43
71
|
default:
|
|
44
|
-
|
|
72
|
+
// Skip unknown internal part types to keep output clean
|
|
73
|
+
if (part.text || part.content) {
|
|
74
|
+
sections.push(part.text ?? part.content);
|
|
75
|
+
}
|
|
76
|
+
// Only dump JSON for truly unknown parts that have meaningful data
|
|
77
|
+
else if (part.type && !["source"].includes(part.type)) {
|
|
78
|
+
sections.push(`[${part.type}] ${JSON.stringify(part, null, 2)}`);
|
|
79
|
+
}
|
|
45
80
|
}
|
|
46
81
|
}
|
|
47
82
|
}
|
|
@@ -49,6 +84,11 @@ export function formatMessageResponse(response) {
|
|
|
49
84
|
}
|
|
50
85
|
/**
|
|
51
86
|
* Format a list of messages, extracting text content from each.
|
|
87
|
+
*
|
|
88
|
+
* When the assistant message has no text content (common with some providers
|
|
89
|
+
* that only emit tool calls), we show a concise summary of tool actions
|
|
90
|
+
* instead of blank output. Cost/token metadata from step-finish parts is
|
|
91
|
+
* appended when available.
|
|
52
92
|
*/
|
|
53
93
|
export function formatMessageList(messages) {
|
|
54
94
|
if (!messages || messages.length === 0)
|
|
@@ -61,19 +101,84 @@ export function formatMessageList(messages) {
|
|
|
61
101
|
const parts = Array.isArray(msg?.parts) ? msg.parts : [];
|
|
62
102
|
const textParts = parts
|
|
63
103
|
.filter((p) => p.type === "text")
|
|
64
|
-
.map((p) => p.text ?? p.content ?? "")
|
|
65
|
-
.
|
|
104
|
+
.map((p) => (p.text ?? p.content ?? "").trim())
|
|
105
|
+
.filter(Boolean)
|
|
106
|
+
.join("\n");
|
|
66
107
|
const toolParts = parts.filter((p) => p.type === "tool-invocation" || p.type === "tool-result");
|
|
108
|
+
// Extract cost/token metadata from step-finish parts
|
|
109
|
+
const costMeta = extractCostMeta(parts);
|
|
67
110
|
let summary = `--- Message ${i + 1} [${role}] (${id}) ---\n`;
|
|
68
|
-
if (textParts)
|
|
111
|
+
if (textParts) {
|
|
69
112
|
summary += textParts;
|
|
70
|
-
|
|
71
|
-
|
|
113
|
+
if (toolParts.length > 0) {
|
|
114
|
+
summary += `\n[${toolParts.length} tool call(s)]`;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else if (toolParts.length > 0) {
|
|
118
|
+
// No text but agent performed actions — show concise tool summaries
|
|
119
|
+
const toolSummaries = toolParts.slice(0, 10).map((p) => {
|
|
120
|
+
const name = p.toolName ?? "unknown";
|
|
121
|
+
// Extract the most useful arg (file path, command, etc.)
|
|
122
|
+
const hint = summarizeToolInput(p.input);
|
|
123
|
+
const errTag = p.error ? " ERROR" : "";
|
|
124
|
+
return ` ${name}${hint ? `: ${hint}` : ""}${errTag}`;
|
|
125
|
+
});
|
|
126
|
+
summary += `Agent performed ${toolParts.length} action(s):\n${toolSummaries.join("\n")}`;
|
|
127
|
+
if (toolParts.length > 10) {
|
|
128
|
+
summary += `\n ... and ${toolParts.length - 10} more`;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
summary += "(no content)";
|
|
72
133
|
}
|
|
134
|
+
if (costMeta)
|
|
135
|
+
summary += `\n${costMeta}`;
|
|
73
136
|
return summary;
|
|
74
137
|
})
|
|
75
138
|
.join("\n\n");
|
|
76
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Extract a short hint from a tool-call input object.
|
|
142
|
+
* Prefers path, command, file, query — the most informative single arg.
|
|
143
|
+
*/
|
|
144
|
+
function summarizeToolInput(input) {
|
|
145
|
+
if (!input || typeof input !== "object")
|
|
146
|
+
return "";
|
|
147
|
+
const obj = input;
|
|
148
|
+
// Ordered by likely usefulness
|
|
149
|
+
for (const key of ["path", "filePath", "file", "command", "query", "url", "pattern", "text"]) {
|
|
150
|
+
const val = obj[key];
|
|
151
|
+
if (typeof val === "string" && val.length > 0) {
|
|
152
|
+
return val.length > 80 ? val.slice(0, 77) + "..." : val;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return "";
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Extract cost/token metadata from step-finish parts and return a
|
|
159
|
+
* compact line, or empty string if none found.
|
|
160
|
+
*/
|
|
161
|
+
function extractCostMeta(parts) {
|
|
162
|
+
const stepFinish = parts.find((p) => p.type === "step-finish" && (p.cost != null || p.tokens));
|
|
163
|
+
if (!stepFinish)
|
|
164
|
+
return "";
|
|
165
|
+
const meta = [];
|
|
166
|
+
if (stepFinish.cost != null)
|
|
167
|
+
meta.push(`cost: $${Number(stepFinish.cost).toFixed(4)}`);
|
|
168
|
+
if (stepFinish.tokens) {
|
|
169
|
+
const t = stepFinish.tokens;
|
|
170
|
+
const tokParts = [];
|
|
171
|
+
if (t.input)
|
|
172
|
+
tokParts.push(`${t.input} in`);
|
|
173
|
+
if (t.output)
|
|
174
|
+
tokParts.push(`${t.output} out`);
|
|
175
|
+
if (t.reasoning)
|
|
176
|
+
tokParts.push(`${t.reasoning} reasoning`);
|
|
177
|
+
if (tokParts.length > 0)
|
|
178
|
+
meta.push(`tokens: ${tokParts.join(", ")}`);
|
|
179
|
+
}
|
|
180
|
+
return meta.length > 0 ? `_${meta.join(" | ")}_` : "";
|
|
181
|
+
}
|
|
77
182
|
/**
|
|
78
183
|
* Format a diff response into a readable summary.
|
|
79
184
|
*/
|
|
@@ -178,6 +283,151 @@ export function analyzeMessageResponse(response) {
|
|
|
178
283
|
}
|
|
179
284
|
return { isEmpty: false, hasError: false, warning: null };
|
|
180
285
|
}
|
|
286
|
+
/**
|
|
287
|
+
* Detect if a string value looks like an API key or secret token,
|
|
288
|
+
* regardless of the key name it's stored under.
|
|
289
|
+
*/
|
|
290
|
+
const SECRET_VALUE_PREFIXES = /^(?:sk-|tvly-|ctx7sk-|pplx-|hf_|ghp_|gho_|ghu_|ghs_|ghr_|xoxb-|xoxp-|xapp-|whsec_|rk-|pk_live_|sk_live_|sk_test_|pk_test_|FLWSECK_|access_|bearer\s)/i;
|
|
291
|
+
const LONG_HEX_OR_BASE64 = /^[A-Za-z0-9+/=_-]{32,}$/;
|
|
292
|
+
function looksLikeSecret(val) {
|
|
293
|
+
if (val.length < 16)
|
|
294
|
+
return false;
|
|
295
|
+
if (SECRET_VALUE_PREFIXES.test(val))
|
|
296
|
+
return true;
|
|
297
|
+
// Long alphanumeric strings without spaces (probable tokens)
|
|
298
|
+
if (LONG_HEX_OR_BASE64.test(val) && !val.includes(" "))
|
|
299
|
+
return true;
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Redact query-parameter values in a URL string that look like secrets.
|
|
304
|
+
*/
|
|
305
|
+
function redactUrlSecrets(url) {
|
|
306
|
+
try {
|
|
307
|
+
const parsed = new URL(url);
|
|
308
|
+
let changed = false;
|
|
309
|
+
const sensitiveParamPattern = /(?:key|token|secret|password|credential|auth)/i;
|
|
310
|
+
for (const [name, val] of parsed.searchParams.entries()) {
|
|
311
|
+
if ((sensitiveParamPattern.test(name) && val.length > 8) || looksLikeSecret(val)) {
|
|
312
|
+
parsed.searchParams.set(name, val.slice(0, 4) + "***REDACTED***");
|
|
313
|
+
changed = true;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return changed ? parsed.toString() : url;
|
|
317
|
+
}
|
|
318
|
+
catch {
|
|
319
|
+
return url;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Redact values that look like API keys, tokens, or secrets.
|
|
324
|
+
* Replaces the value with the first 4 characters + "***REDACTED***".
|
|
325
|
+
* Works recursively on objects and arrays.
|
|
326
|
+
*
|
|
327
|
+
* Three layers of detection:
|
|
328
|
+
* 1. Key-name based: key names matching sensitive patterns (KEY, TOKEN, SECRET, etc.)
|
|
329
|
+
* 2. Value-based: string values matching known API key prefixes or long hex/base64 tokens
|
|
330
|
+
* 3. URL-based: query parameters in URL strings that contain secrets
|
|
331
|
+
*/
|
|
332
|
+
export function redactSecrets(value) {
|
|
333
|
+
if (value === null || value === undefined)
|
|
334
|
+
return value;
|
|
335
|
+
if (typeof value === "string")
|
|
336
|
+
return value;
|
|
337
|
+
if (Array.isArray(value)) {
|
|
338
|
+
return value.map((item) => {
|
|
339
|
+
// Redact string items in arrays that look like secrets (e.g. command args)
|
|
340
|
+
if (typeof item === "string" && looksLikeSecret(item)) {
|
|
341
|
+
return item.slice(0, 4) + "***REDACTED***";
|
|
342
|
+
}
|
|
343
|
+
return redactSecrets(item);
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
if (typeof value === "object") {
|
|
347
|
+
const result = {};
|
|
348
|
+
const sensitiveKeyPattern = /(?:key|token|secret|password|credential|api_key|apikey|auth)/i;
|
|
349
|
+
for (const [k, v] of Object.entries(value)) {
|
|
350
|
+
if (typeof v === "string") {
|
|
351
|
+
if (v.length > 8 && sensitiveKeyPattern.test(k)) {
|
|
352
|
+
// Layer 1: key-name match
|
|
353
|
+
result[k] = v.slice(0, 4) + "***REDACTED***";
|
|
354
|
+
}
|
|
355
|
+
else if (looksLikeSecret(v)) {
|
|
356
|
+
// Layer 2: value looks like a secret
|
|
357
|
+
result[k] = v.slice(0, 4) + "***REDACTED***";
|
|
358
|
+
}
|
|
359
|
+
else if (v.includes("://") && v.includes("?")) {
|
|
360
|
+
// Layer 3: URL with query params — redact secret params
|
|
361
|
+
result[k] = redactUrlSecrets(v);
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
result[k] = v;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
else if (typeof v === "object" && v !== null) {
|
|
368
|
+
result[k] = redactSecrets(v);
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
result[k] = v;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
return result;
|
|
375
|
+
}
|
|
376
|
+
return value;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Determine whether a provider object from the OpenCode API is truly configured
|
|
380
|
+
* (i.e. has usable credentials), as opposed to being a built-in default.
|
|
381
|
+
*
|
|
382
|
+
* Detection layers:
|
|
383
|
+
* - source "env" / "config" / "api" → always configured
|
|
384
|
+
* - source "custom" with a non-empty apiKey → configured
|
|
385
|
+
* - source "custom" for "anthropic" with extra option keys (OAuth sets headers) → configured
|
|
386
|
+
* - Everything else → not configured
|
|
387
|
+
*/
|
|
388
|
+
export function isProviderConfigured(p) {
|
|
389
|
+
const source = p.source;
|
|
390
|
+
if (source === "env" || source === "config" || source === "api")
|
|
391
|
+
return true;
|
|
392
|
+
if (source === "custom") {
|
|
393
|
+
const opts = p.options;
|
|
394
|
+
if (typeof opts?.apiKey === "string" && opts.apiKey !== "")
|
|
395
|
+
return true;
|
|
396
|
+
// Anthropic heuristic: OAuth sets headers but no apiKey
|
|
397
|
+
if (p.id === "anthropic" && opts && Object.keys(opts).some((k) => k !== "apiKey"))
|
|
398
|
+
return true;
|
|
399
|
+
}
|
|
400
|
+
return false;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Resolve a session status value from the OpenCode API.
|
|
404
|
+
*
|
|
405
|
+
* The API may return status as a plain string ("idle", "running") or as an
|
|
406
|
+
* object like `{ state: "running", ... }`. This helper normalises both forms
|
|
407
|
+
* into a human-readable string.
|
|
408
|
+
*/
|
|
409
|
+
export function resolveSessionStatus(raw) {
|
|
410
|
+
if (raw === null || raw === undefined)
|
|
411
|
+
return "idle";
|
|
412
|
+
if (typeof raw === "string")
|
|
413
|
+
return raw;
|
|
414
|
+
if (typeof raw === "object") {
|
|
415
|
+
const obj = raw;
|
|
416
|
+
// Try common property names the API might use
|
|
417
|
+
for (const key of ["state", "status", "type"]) {
|
|
418
|
+
if (typeof obj[key] === "string")
|
|
419
|
+
return obj[key];
|
|
420
|
+
}
|
|
421
|
+
// Last resort: check for a meaningful boolean flag
|
|
422
|
+
if (obj.running === true)
|
|
423
|
+
return "running";
|
|
424
|
+
if (obj.done === true)
|
|
425
|
+
return "completed";
|
|
426
|
+
if (obj.error === true)
|
|
427
|
+
return "error";
|
|
428
|
+
}
|
|
429
|
+
return "unknown";
|
|
430
|
+
}
|
|
181
431
|
/**
|
|
182
432
|
* Standard tool response builder.
|
|
183
433
|
*/
|
|
@@ -189,7 +439,39 @@ export function toolResult(text, isError = false) {
|
|
|
189
439
|
}
|
|
190
440
|
export function toolError(e) {
|
|
191
441
|
const msg = e instanceof Error ? e.message : String(e);
|
|
192
|
-
|
|
442
|
+
const suggestions = diagnoseError(msg);
|
|
443
|
+
const text = suggestions
|
|
444
|
+
? `Error: ${msg}\n\n**Suggestions:**\n${suggestions}`
|
|
445
|
+
: `Error: ${msg}`;
|
|
446
|
+
return toolResult(text, true);
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Analyze an error message and return contextual suggestions, or empty
|
|
450
|
+
* string if no specific advice applies. Keeps suggestions concise to
|
|
451
|
+
* minimise token overhead.
|
|
452
|
+
*/
|
|
453
|
+
function diagnoseError(msg) {
|
|
454
|
+
const lower = msg.toLowerCase();
|
|
455
|
+
const tips = [];
|
|
456
|
+
if (lower.includes("api key") || lower.includes("401") || lower.includes("403") || lower.includes("unauthorized") || lower.includes("forbidden")) {
|
|
457
|
+
tips.push("- Check credentials with `opencode_provider_test`");
|
|
458
|
+
tips.push("- Set a key with `opencode_auth_set`");
|
|
459
|
+
}
|
|
460
|
+
else if (lower.includes("timeout") || lower.includes("timed out") || lower.includes("aborted")) {
|
|
461
|
+
tips.push("- Use `opencode_message_send_async` + `opencode_wait` for long tasks");
|
|
462
|
+
tips.push("- Check session progress with `opencode_conversation`");
|
|
463
|
+
}
|
|
464
|
+
else if (lower.includes("not found") && lower.includes("session")) {
|
|
465
|
+
tips.push("- List active sessions with `opencode_sessions_overview`");
|
|
466
|
+
}
|
|
467
|
+
else if (lower.includes("rate limit") || lower.includes("429")) {
|
|
468
|
+
tips.push("- Wait a moment and retry, or switch provider");
|
|
469
|
+
tips.push("- Try a free model: `opencode_ask` with providerID `opencode`, modelID `minimax-m2.1-free`");
|
|
470
|
+
}
|
|
471
|
+
else if (lower.includes("unreachable") || lower.includes("econnrefused") || lower.includes("fetch failed")) {
|
|
472
|
+
tips.push("- Is `opencode serve` running? Check with `opencode_setup`");
|
|
473
|
+
}
|
|
474
|
+
return tips.join("\n");
|
|
193
475
|
}
|
|
194
476
|
export function toolJson(value) {
|
|
195
477
|
return toolResult(safeStringify(value));
|
package/dist/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* providers, and more.
|
|
9
9
|
*
|
|
10
10
|
* Features:
|
|
11
|
-
* -
|
|
11
|
+
* - 75 tools covering the entire OpenCode API surface
|
|
12
12
|
* - High-level workflow tools (opencode_ask, opencode_reply, etc.)
|
|
13
13
|
* - Smart response formatting for LLM-friendly output
|
|
14
14
|
* - MCP Resources for browseable project data
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* providers, and more.
|
|
9
9
|
*
|
|
10
10
|
* Features:
|
|
11
|
-
* -
|
|
11
|
+
* - 75 tools covering the entire OpenCode API surface
|
|
12
12
|
* - High-level workflow tools (opencode_ask, opencode_reply, etc.)
|
|
13
13
|
* - Smart response formatting for LLM-friendly output
|
|
14
14
|
* - MCP Resources for browseable project data
|
|
@@ -50,15 +50,86 @@ const autoServe = process.env.OPENCODE_AUTO_SERVE !== "false";
|
|
|
50
50
|
const client = new OpenCodeClient({ baseUrl, username, password });
|
|
51
51
|
const server = new McpServer({
|
|
52
52
|
name: "opencode-mcp",
|
|
53
|
-
version: "1.
|
|
54
|
-
description: "
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
53
|
+
version: "1.8.0",
|
|
54
|
+
description: "MCP server wrapping the OpenCode AI coding agent. " +
|
|
55
|
+
"Delegates complex coding tasks (build apps, refactor, debug) to an autonomous AI agent. " +
|
|
56
|
+
"Start with opencode_setup, then use opencode_ask for simple tasks or opencode_message_send_async + opencode_wait for complex ones.",
|
|
57
|
+
}, {
|
|
58
|
+
instructions: [
|
|
59
|
+
"# OpenCode MCP — Guide for LLM Clients",
|
|
60
|
+
"",
|
|
61
|
+
"You are connected to OpenCode, an autonomous AI coding agent that can build, edit, and debug software projects.",
|
|
62
|
+
"This server exposes ~75 tools organized into tiers. Use high-level tools first; drop to low-level only when needed.",
|
|
63
|
+
"",
|
|
64
|
+
"## Getting Started (First Time)",
|
|
65
|
+
"1. Call `opencode_setup` — checks server health, shows configured providers, and suggests next steps.",
|
|
66
|
+
"2. Call `opencode_provider_models({providerId: 'anthropic'})` — lists available models for a provider.",
|
|
67
|
+
"3. Pick a provider and model. IMPORTANT: Always pass `providerID` and `modelID` when sending prompts, or you may get empty responses.",
|
|
68
|
+
"",
|
|
69
|
+
"## Tool Tiers (prefer higher tiers)",
|
|
70
|
+
"",
|
|
71
|
+
"### Tier 1 — Essential (use these first)",
|
|
72
|
+
"- `opencode_setup` — first-time onboarding, health check (read-only)",
|
|
73
|
+
"- `opencode_ask` — one-shot question/task, creates session + gets response in one call. Simplest way to use OpenCode.",
|
|
74
|
+
"- `opencode_reply` — continue a conversation in an existing session",
|
|
75
|
+
"- `opencode_context` — get project info (path, git branch, config, agents) (read-only)",
|
|
76
|
+
"",
|
|
77
|
+
"### Tier 2 — Async Tasks (for complex/long work)",
|
|
78
|
+
"- `opencode_message_send_async` — send a task without waiting (fire-and-forget). Returns immediately.",
|
|
79
|
+
"- `opencode_wait` — block until a session finishes processing. Use after `opencode_message_send_async`. Sends progress notifications.",
|
|
80
|
+
"- `opencode_session_todo` — see the agent's internal task list for a session (read-only)",
|
|
81
|
+
"",
|
|
82
|
+
"### Tier 3 — Monitoring & Review",
|
|
83
|
+
"- `opencode_review_changes` — see all file diffs from a session (read-only)",
|
|
84
|
+
"- `opencode_conversation` — get full message history (read-only)",
|
|
85
|
+
"- `opencode_sessions_overview` — list all sessions with status (read-only)",
|
|
86
|
+
"- `opencode_provider_models` — list models for a specific provider (read-only)",
|
|
87
|
+
"- `opencode_status` — quick server health dashboard (read-only)",
|
|
88
|
+
"",
|
|
89
|
+
"### Tier 4 — Fine-Grained Control",
|
|
90
|
+
"- `opencode_session_*` — create, delete, fork, abort, share sessions",
|
|
91
|
+
"- `opencode_message_*` — send messages, list history, execute commands",
|
|
92
|
+
"- `opencode_file_*` / `opencode_find_*` — search files, read content, check VCS status",
|
|
93
|
+
"- `opencode_provider_*` — manage providers, auth, OAuth flows",
|
|
94
|
+
"",
|
|
95
|
+
"### Tier 5 — Specialist (rarely needed)",
|
|
96
|
+
"- `opencode_tui_*` — control the terminal UI (only if a TUI is running)",
|
|
97
|
+
"- `opencode_events_poll` — poll raw SSE events",
|
|
98
|
+
"- `opencode_mcp_*` — manage MCP servers inside OpenCode",
|
|
99
|
+
"- `opencode_instance_dispose` — shut down the server (DESTRUCTIVE!)",
|
|
100
|
+
"",
|
|
101
|
+
"## Recommended Workflows",
|
|
102
|
+
"",
|
|
103
|
+
"### Quick question or small task:",
|
|
104
|
+
"```",
|
|
105
|
+
'opencode_ask({prompt: "How does auth work in this project?", providerID: "anthropic", modelID: "claude-sonnet-4-5"})',
|
|
106
|
+
"```",
|
|
107
|
+
"",
|
|
108
|
+
"### Complex multi-step task (build an app, refactor code, etc.):",
|
|
109
|
+
"```",
|
|
110
|
+
"// Step 1: Create a session",
|
|
111
|
+
'opencode_session_create({title: "Build login page"})',
|
|
112
|
+
"// Step 2: Send the task asynchronously",
|
|
113
|
+
'opencode_message_send_async({sessionId: "ses_xxx", text: "Build a React login form...", providerID: "anthropic", modelID: "claude-opus-4-6"})',
|
|
114
|
+
"// Step 3: Wait for completion (blocks with progress updates)",
|
|
115
|
+
'opencode_wait({sessionId: "ses_xxx", timeoutSeconds: 300})',
|
|
116
|
+
"// Step 4: Review what was built",
|
|
117
|
+
'opencode_review_changes({sessionId: "ses_xxx"})',
|
|
118
|
+
"```",
|
|
119
|
+
"",
|
|
120
|
+
"### Continue working on an existing session:",
|
|
121
|
+
"```",
|
|
122
|
+
'opencode_reply({sessionId: "ses_xxx", prompt: "Now add form validation", providerID: "anthropic", modelID: "claude-sonnet-4-5"})',
|
|
123
|
+
"```",
|
|
124
|
+
"",
|
|
125
|
+
"## Important Notes",
|
|
126
|
+
"- ALWAYS specify `providerID` and `modelID` when using `opencode_ask`, `opencode_reply`, `opencode_message_send`, or `opencode_message_send_async`. Without these, the agent may return empty responses.",
|
|
127
|
+
"- The `directory` parameter on every tool targets a specific project. Omit it to use the server's default project.",
|
|
128
|
+
"- Tools marked with `readOnlyHint: true` in their annotations are safe and don't modify state.",
|
|
129
|
+
"- Tools marked with `destructiveHint: true` (`opencode_instance_dispose`, `opencode_session_delete`) permanently delete data — confirm with the user before calling.",
|
|
130
|
+
"- `opencode_wait` sends `notifications/message` progress updates while blocking. If it times out, it returns a progress report instead of failing.",
|
|
131
|
+
"- For very long tasks, use `opencode_message_send_async` + periodically call `opencode_session_todo` to check progress, rather than blocking with `opencode_wait`.",
|
|
132
|
+
].join("\n"),
|
|
62
133
|
});
|
|
63
134
|
// ── Low-level API tools ─────────────────────────────────────────────
|
|
64
135
|
registerGlobalTools(server, client);
|
|
@@ -94,7 +165,7 @@ async function main() {
|
|
|
94
165
|
// Step 2: Connect the MCP transport.
|
|
95
166
|
const transport = new StdioServerTransport();
|
|
96
167
|
await server.connect(transport);
|
|
97
|
-
console.error(`opencode-mcp v1.
|
|
168
|
+
console.error(`opencode-mcp v1.8.0 started (OpenCode server at ${baseUrl})`);
|
|
98
169
|
}
|
|
99
170
|
main().catch((err) => {
|
|
100
171
|
console.error("Fatal error starting opencode-mcp:", err);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,cAAc;AACd,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,wBAAwB;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,uBAAuB,CAAC;AAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACtD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,OAAO,CAAC;AAE9D,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;AAEnE,MAAM,MAAM,GAAG,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/prompts.js
CHANGED
|
@@ -116,6 +116,71 @@ Steps:
|
|
|
116
116
|
},
|
|
117
117
|
],
|
|
118
118
|
}));
|
|
119
|
+
// ─── Best Practices ─────────────────────────────────────────────────
|
|
120
|
+
server.prompt("opencode-best-practices", "Get best practices for using OpenCode MCP tools effectively. Covers tool selection, async workflows, provider configuration, and common pitfalls.", {}, async () => ({
|
|
121
|
+
messages: [
|
|
122
|
+
{
|
|
123
|
+
role: "user",
|
|
124
|
+
content: {
|
|
125
|
+
type: "text",
|
|
126
|
+
text: `# OpenCode MCP Best Practices
|
|
127
|
+
|
|
128
|
+
## 1. First-Time Setup
|
|
129
|
+
- Always start with \`opencode_setup\` to check server health and see available providers.
|
|
130
|
+
- Use \`opencode_provider_models({providerId: "anthropic"})\` to see which models are available.
|
|
131
|
+
- Test a provider with \`opencode_provider_test({providerId: "anthropic"})\` if you're unsure it's working.
|
|
132
|
+
|
|
133
|
+
## 2. Always Specify Provider and Model
|
|
134
|
+
CRITICAL: When calling \`opencode_ask\`, \`opencode_reply\`, \`opencode_message_send\`, or \`opencode_message_send_async\`, ALWAYS pass \`providerID\` and \`modelID\`. Without these, the agent may select a default model that returns empty responses.
|
|
135
|
+
|
|
136
|
+
Good: \`opencode_ask({prompt: "...", providerID: "anthropic", modelID: "claude-sonnet-4-5"})\`
|
|
137
|
+
Bad: \`opencode_ask({prompt: "..."})\`
|
|
138
|
+
|
|
139
|
+
## 3. Choosing the Right Tool
|
|
140
|
+
|
|
141
|
+
| Task | Tool | Why |
|
|
142
|
+
|------|------|-----|
|
|
143
|
+
| Quick question | \`opencode_ask\` | One call, creates session + gets response |
|
|
144
|
+
| Multi-turn conversation | \`opencode_ask\` then \`opencode_reply\` | Builds on existing session |
|
|
145
|
+
| Complex build task (< 5 min) | \`opencode_ask\` with detailed prompt | Simple, blocks until done |
|
|
146
|
+
| Complex build task (5-10 min) | \`opencode_message_send_async\` + \`opencode_wait\` | Better timeout control |
|
|
147
|
+
| Very long task (10+ min) | \`opencode_message_send_async\` + periodic \`opencode_session_todo\` | Non-blocking progress checks |
|
|
148
|
+
|
|
149
|
+
## 4. Writing Good Prompts for OpenCode
|
|
150
|
+
The agent works best with structured, specific prompts:
|
|
151
|
+
- Specify the tech stack explicitly
|
|
152
|
+
- List all features/requirements as bullet points
|
|
153
|
+
- Define the project structure you want
|
|
154
|
+
- State what tests you expect
|
|
155
|
+
- Say "Run npm run build and fix any errors" at the end
|
|
156
|
+
|
|
157
|
+
## 5. Monitoring Long-Running Tasks
|
|
158
|
+
- \`opencode_session_todo\` — see the agent's internal checklist (cheapest check)
|
|
159
|
+
- \`opencode_wait\` — block until done, but has a timeout
|
|
160
|
+
- \`opencode_conversation\` — see full message history (expensive, lots of tokens)
|
|
161
|
+
- \`opencode_review_changes\` — see all file diffs (use after task completes)
|
|
162
|
+
|
|
163
|
+
## 6. Error Recovery
|
|
164
|
+
- If a session fails, use \`opencode_reply\` to give the agent the error and ask it to fix
|
|
165
|
+
- If the server is unreachable, call \`opencode_setup\` to diagnose
|
|
166
|
+
- If auth fails, use \`opencode_auth_set\` to update API keys
|
|
167
|
+
- If a session is stuck, use \`opencode_session_abort\` then retry
|
|
168
|
+
|
|
169
|
+
## 7. Tool Annotations
|
|
170
|
+
Tools are annotated with behavior hints:
|
|
171
|
+
- \`readOnlyHint: true\` — safe, doesn't change anything (setup, status, find, review)
|
|
172
|
+
- \`destructiveHint: true\` — permanently deletes data (session_delete, instance_dispose)
|
|
173
|
+
- No annotation — has side effects but is not destructive (ask, reply, send messages)
|
|
174
|
+
|
|
175
|
+
## 8. Common Pitfalls
|
|
176
|
+
- Don't call \`opencode_conversation\` on active sessions — it's expensive and the response is still being generated
|
|
177
|
+
- Don't create new sessions for each message — use \`opencode_reply\` to continue existing ones
|
|
178
|
+
- Don't forget the \`directory\` parameter when working with multiple projects
|
|
179
|
+
- Don't call \`opencode_instance_dispose\` unless you really want to shut down the server`,
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
}));
|
|
119
184
|
// ─── Session Summary ──────────────────────────────────────────────
|
|
120
185
|
server.prompt("opencode-session-summary", "Summarize what happened in an OpenCode session", {
|
|
121
186
|
sessionId: z.string().describe("Session ID to summarize"),
|
package/dist/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
|