@ebowwa/claude-code-mcp 1.0.0 → 1.0.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/__tests__/advanced.test.d.ts +6 -0
- package/dist/__tests__/advanced.test.d.ts.map +1 -0
- package/dist/__tests__/advanced.test.js +354 -0
- package/dist/__tests__/advanced.test.js.map +1 -0
- package/dist/advanced.d.ts +109 -0
- package/dist/advanced.d.ts.map +1 -0
- package/dist/advanced.js +427 -0
- package/dist/advanced.js.map +1 -0
- package/dist/cli-wrapper.d.ts +202 -0
- package/dist/cli-wrapper.d.ts.map +1 -0
- package/dist/cli-wrapper.js +347 -0
- package/dist/cli-wrapper.js.map +1 -0
- package/dist/cli-wrapper.test.d.ts +12 -0
- package/dist/cli-wrapper.test.d.ts.map +1 -0
- package/dist/cli-wrapper.test.js +354 -0
- package/dist/cli-wrapper.test.js.map +1 -0
- package/dist/cli.d.ts +16 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +354 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +561 -0
- package/dist/index.js.map +1 -0
- package/dist/integration.test.d.ts +12 -0
- package/dist/integration.test.d.ts.map +1 -0
- package/dist/integration.test.js +716 -0
- package/dist/integration.test.js.map +1 -0
- package/dist/queue.d.ts +87 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +273 -0
- package/dist/queue.js.map +1 -0
- package/dist/teammates-integration.d.ts +128 -0
- package/dist/teammates-integration.d.ts.map +1 -0
- package/dist/teammates-integration.js +353 -0
- package/dist/teammates-integration.js.map +1 -0
- package/dist/test-config.d.ts +104 -0
- package/dist/test-config.d.ts.map +1 -0
- package/dist/test-config.js +439 -0
- package/dist/test-config.js.map +1 -0
- package/dist/tools.d.ts +97 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +627 -0
- package/dist/tools.js.map +1 -0
- package/package.json +7 -1
- package/ARCHITECTURE.md +0 -1802
- package/DOCUMENTATION.md +0 -747
- package/TESTING.md +0 -318
package/dist/tools.js
ADDED
|
@@ -0,0 +1,627 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* Claude Code MCP Server - Control Tools
|
|
4
|
+
*
|
|
5
|
+
* MCP server for controlling Claude Code instances with Doppler integration.
|
|
6
|
+
* Provides tools for starting, resuming, listing, and killing Claude Code sessions.
|
|
7
|
+
*
|
|
8
|
+
* This complements claude-code-history MCP which focuses on READ operations.
|
|
9
|
+
* This package focuses on CONTROL operations.
|
|
10
|
+
*/
|
|
11
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
12
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
13
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
import { spawn } from "child_process";
|
|
16
|
+
import { homedir } from "os";
|
|
17
|
+
import { join, resolve } from "path";
|
|
18
|
+
import { existsSync, readFile } from "fs";
|
|
19
|
+
import { promisify } from "util";
|
|
20
|
+
const readFileAsync = promisify(readFile);
|
|
21
|
+
function loadConfig() {
|
|
22
|
+
return {
|
|
23
|
+
claudeDir: process.env.CLAUDE_DIR || `${homedir()}/.claude`,
|
|
24
|
+
dopplerProject: process.env.DOPPLER_PROJECT,
|
|
25
|
+
dopplerConfig: process.env.DOPPLER_CONFIG || "dev",
|
|
26
|
+
dopplerToken: process.env.DOPPLER_TOKEN,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// In-memory session tracking (per MCP server instance)
|
|
30
|
+
const activeSessions = new Map();
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// Doppler Integration
|
|
33
|
+
// ============================================================================
|
|
34
|
+
/**
|
|
35
|
+
* Load secrets from Doppler for a Claude Code session
|
|
36
|
+
*/
|
|
37
|
+
async function loadDopplerSecrets(config, projectPath) {
|
|
38
|
+
const secrets = {};
|
|
39
|
+
if (!config.dopplerToken) {
|
|
40
|
+
return secrets;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
// Use doppler CLI to fetch secrets
|
|
44
|
+
const dopplerArgs = ["secrets", "download", "--format", "json"];
|
|
45
|
+
if (config.dopplerProject) {
|
|
46
|
+
dopplerArgs.push("--project", config.dopplerProject);
|
|
47
|
+
}
|
|
48
|
+
if (config.dopplerConfig) {
|
|
49
|
+
dopplerArgs.push("--config", config.dopplerConfig);
|
|
50
|
+
}
|
|
51
|
+
const dopplerProcess = spawn("doppler", dopplerArgs, {
|
|
52
|
+
env: {
|
|
53
|
+
...process.env,
|
|
54
|
+
DOPPLER_TOKEN: config.dopplerToken,
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
let output = "";
|
|
58
|
+
let errorOutput = "";
|
|
59
|
+
dopplerProcess.stdout?.on("data", (data) => {
|
|
60
|
+
output += data.toString();
|
|
61
|
+
});
|
|
62
|
+
dopplerProcess.stderr?.on("data", (data) => {
|
|
63
|
+
errorOutput += data.toString();
|
|
64
|
+
});
|
|
65
|
+
await new Promise((resolve, reject) => {
|
|
66
|
+
dopplerProcess.on("close", (code) => {
|
|
67
|
+
if (code === 0 && output) {
|
|
68
|
+
try {
|
|
69
|
+
const secretsData = JSON.parse(output);
|
|
70
|
+
Object.assign(secrets, secretsData);
|
|
71
|
+
resolve();
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
reject(new Error(`Failed to parse Doppler secrets: ${e}`));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
reject(new Error(`Doppler CLI failed: ${errorOutput || "Unknown error"}`));
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.error(`[claude-code-mcp] Failed to load Doppler secrets:`, error);
|
|
85
|
+
}
|
|
86
|
+
return secrets;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Inject Doppler secrets into environment for a Claude Code session
|
|
90
|
+
*/
|
|
91
|
+
async function injectDopplerEnv(config, projectPath) {
|
|
92
|
+
const baseEnv = { ...process.env };
|
|
93
|
+
// Preserve critical environment variables
|
|
94
|
+
const preservedVars = [
|
|
95
|
+
"PATH",
|
|
96
|
+
"HOME",
|
|
97
|
+
"USER",
|
|
98
|
+
"SHELL",
|
|
99
|
+
"TERM",
|
|
100
|
+
"LANG",
|
|
101
|
+
"NODE_ENV",
|
|
102
|
+
"DOPPLER_TOKEN",
|
|
103
|
+
"DOPPLER_PROJECT",
|
|
104
|
+
"DOPPLER_CONFIG",
|
|
105
|
+
];
|
|
106
|
+
const cleanEnv = {};
|
|
107
|
+
for (const key of preservedVars) {
|
|
108
|
+
if (baseEnv[key]) {
|
|
109
|
+
cleanEnv[key] = baseEnv[key];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Load secrets from Doppler
|
|
113
|
+
const secrets = await loadDopplerSecrets(config, projectPath);
|
|
114
|
+
Object.assign(cleanEnv, secrets);
|
|
115
|
+
return cleanEnv;
|
|
116
|
+
}
|
|
117
|
+
// ============================================================================
|
|
118
|
+
// Zod Schemas for Tool Validation
|
|
119
|
+
// ============================================================================
|
|
120
|
+
const StartSessionSchema = z.object({
|
|
121
|
+
projectPath: z.string().describe("Absolute path to the project directory"),
|
|
122
|
+
sessionId: z.string().uuid().optional().describe("Custom session UUID (optional, auto-generated if not provided)"),
|
|
123
|
+
model: z.string().optional().describe("Claude model to use (e.g., 'claude-sonnet-4-5-20250929')"),
|
|
124
|
+
maxTokens: z.number().optional().describe("Maximum tokens for responses"),
|
|
125
|
+
dopplerEnabled: z.boolean().optional().describe("Enable Doppler integration (default: true)"),
|
|
126
|
+
});
|
|
127
|
+
const ResumeSessionSchema = z.object({
|
|
128
|
+
sessionId: z.string().uuid().describe("Session UUID to resume"),
|
|
129
|
+
projectPath: z.string().optional().describe("Project path (optional, inferred from session if not provided)"),
|
|
130
|
+
});
|
|
131
|
+
const ListSessionsSchema = z.object({
|
|
132
|
+
status: z.enum(["all", "running", "stopped"]).optional().describe("Filter by session status"),
|
|
133
|
+
limit: z.number().optional().describe("Maximum sessions to return"),
|
|
134
|
+
});
|
|
135
|
+
const KillSessionSchema = z.object({
|
|
136
|
+
sessionId: z.string().describe("Session ID or UUID to kill"),
|
|
137
|
+
force: z.boolean().optional().describe("Force kill if graceful shutdown fails"),
|
|
138
|
+
});
|
|
139
|
+
const GetSessionStatusSchema = z.object({
|
|
140
|
+
sessionId: z.string().describe("Session ID or UUID to check"),
|
|
141
|
+
});
|
|
142
|
+
// ============================================================================
|
|
143
|
+
// Helper Functions
|
|
144
|
+
// ============================================================================
|
|
145
|
+
/**
|
|
146
|
+
* Generate a UUID v4
|
|
147
|
+
*/
|
|
148
|
+
function generateUUID() {
|
|
149
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
|
|
150
|
+
const r = (Math.random() * 16) | 0;
|
|
151
|
+
const v = c === "x" ? r : (r & 0x3) | 0x8;
|
|
152
|
+
return v.toString(16);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Create response object for MCP
|
|
157
|
+
*/
|
|
158
|
+
function createResponse(data, isError = false) {
|
|
159
|
+
return {
|
|
160
|
+
content: [
|
|
161
|
+
{
|
|
162
|
+
type: "text",
|
|
163
|
+
text: JSON.stringify(data, null, 2),
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
...(isError && { isError: true }),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Validate project path exists
|
|
171
|
+
*/
|
|
172
|
+
function validateProjectPath(projectPath) {
|
|
173
|
+
const resolvedPath = resolve(projectPath);
|
|
174
|
+
if (!existsSync(resolvedPath)) {
|
|
175
|
+
return { valid: false, error: `Project path does not exist: ${projectPath}` };
|
|
176
|
+
}
|
|
177
|
+
return { valid: true };
|
|
178
|
+
}
|
|
179
|
+
// ============================================================================
|
|
180
|
+
// Tool Implementations
|
|
181
|
+
// ============================================================================
|
|
182
|
+
/**
|
|
183
|
+
* Start a new Claude Code session
|
|
184
|
+
*/
|
|
185
|
+
async function startSession(args) {
|
|
186
|
+
const config = loadConfig();
|
|
187
|
+
const parsed = StartSessionSchema.safeParse(args);
|
|
188
|
+
if (!parsed.success) {
|
|
189
|
+
return createResponse({
|
|
190
|
+
error: "Invalid arguments",
|
|
191
|
+
details: parsed.error.issues,
|
|
192
|
+
}, true);
|
|
193
|
+
}
|
|
194
|
+
const { projectPath, sessionId, model, maxTokens, dopplerEnabled = true } = parsed.data;
|
|
195
|
+
// Validate project path
|
|
196
|
+
const validation = validateProjectPath(projectPath);
|
|
197
|
+
if (!validation.valid) {
|
|
198
|
+
return createResponse({ error: validation.error }, true);
|
|
199
|
+
}
|
|
200
|
+
// Generate session ID
|
|
201
|
+
const sessionUUID = sessionId || generateUUID();
|
|
202
|
+
// Check if session already exists
|
|
203
|
+
if (activeSessions.has(sessionUUID)) {
|
|
204
|
+
return createResponse({
|
|
205
|
+
error: "Session already exists",
|
|
206
|
+
sessionId: sessionUUID,
|
|
207
|
+
}, true);
|
|
208
|
+
}
|
|
209
|
+
try {
|
|
210
|
+
// Prepare environment with Doppler integration
|
|
211
|
+
const envVars = dopplerEnabled
|
|
212
|
+
? await injectDopplerEnv(config, projectPath)
|
|
213
|
+
: { ...process.env };
|
|
214
|
+
// Build Claude Code command
|
|
215
|
+
const claudeArgs = ["--session", sessionUUID];
|
|
216
|
+
if (model) {
|
|
217
|
+
claudeArgs.push("--model", model);
|
|
218
|
+
}
|
|
219
|
+
if (maxTokens) {
|
|
220
|
+
claudeArgs.push("--max-tokens", maxTokens.toString());
|
|
221
|
+
}
|
|
222
|
+
// Spawn Claude Code process
|
|
223
|
+
const childProcess = spawn("claude", claudeArgs, {
|
|
224
|
+
cwd: projectPath,
|
|
225
|
+
env: envVars,
|
|
226
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
227
|
+
});
|
|
228
|
+
// Create session record
|
|
229
|
+
const session = {
|
|
230
|
+
uuid: sessionUUID,
|
|
231
|
+
pid: childProcess.pid,
|
|
232
|
+
projectPath,
|
|
233
|
+
startTime: Date.now(),
|
|
234
|
+
status: "starting",
|
|
235
|
+
process: childProcess,
|
|
236
|
+
};
|
|
237
|
+
activeSessions.set(sessionUUID, session);
|
|
238
|
+
// Handle process events
|
|
239
|
+
childProcess.on("error", (err) => {
|
|
240
|
+
console.error(`[claude-code-mcp] Session ${sessionUUID} error:`, err);
|
|
241
|
+
session.status = "error";
|
|
242
|
+
});
|
|
243
|
+
childProcess.on("exit", (code) => {
|
|
244
|
+
console.error(`[claude-code-mcp] Session ${sessionUUID} exited with code ${code}`);
|
|
245
|
+
session.status = "stopped";
|
|
246
|
+
});
|
|
247
|
+
// Wait briefly to see if process starts successfully
|
|
248
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
249
|
+
if (childProcess.pid && !childProcess.killed) {
|
|
250
|
+
session.status = "running";
|
|
251
|
+
}
|
|
252
|
+
return createResponse({
|
|
253
|
+
success: true,
|
|
254
|
+
sessionId: sessionUUID,
|
|
255
|
+
pid: childProcess.pid,
|
|
256
|
+
status: session.status,
|
|
257
|
+
projectPath,
|
|
258
|
+
startTime: session.startTime,
|
|
259
|
+
dopplerEnabled,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
264
|
+
return createResponse({
|
|
265
|
+
error: "Failed to start session",
|
|
266
|
+
details: errorMessage,
|
|
267
|
+
}, true);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Resume an existing Claude Code session
|
|
272
|
+
*/
|
|
273
|
+
async function resumeSession(args) {
|
|
274
|
+
const config = loadConfig();
|
|
275
|
+
const parsed = ResumeSessionSchema.safeParse(args);
|
|
276
|
+
if (!parsed.success) {
|
|
277
|
+
return createResponse({
|
|
278
|
+
error: "Invalid arguments",
|
|
279
|
+
details: parsed.error.issues,
|
|
280
|
+
}, true);
|
|
281
|
+
}
|
|
282
|
+
const { sessionId, projectPath } = parsed.data;
|
|
283
|
+
// Check if session is in active tracking
|
|
284
|
+
const activeSession = activeSessions.get(sessionId);
|
|
285
|
+
if (activeSession) {
|
|
286
|
+
if (activeSession.status === "running") {
|
|
287
|
+
return createResponse({
|
|
288
|
+
success: true,
|
|
289
|
+
sessionId: activeSession.uuid,
|
|
290
|
+
status: activeSession.status,
|
|
291
|
+
message: "Session is already running",
|
|
292
|
+
pid: activeSession.pid,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
// Session was stopped, try to restart
|
|
297
|
+
return startSession({
|
|
298
|
+
projectPath: projectPath || activeSession.projectPath,
|
|
299
|
+
sessionId,
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// Try to find session in history
|
|
304
|
+
const historyPath = join(config.claudeDir, "history.jsonl");
|
|
305
|
+
if (!existsSync(historyPath)) {
|
|
306
|
+
return createResponse({
|
|
307
|
+
error: "Session not found",
|
|
308
|
+
sessionId,
|
|
309
|
+
details: "No history file found",
|
|
310
|
+
}, true);
|
|
311
|
+
}
|
|
312
|
+
try {
|
|
313
|
+
const historyContent = await readFileAsync(historyPath, "utf-8");
|
|
314
|
+
const lines = historyContent.trim().split("\n");
|
|
315
|
+
for (const line of lines.reverse()) {
|
|
316
|
+
const entry = JSON.parse(line);
|
|
317
|
+
if (entry.sessionId === sessionId) {
|
|
318
|
+
// Found session in history, start new instance with same ID
|
|
319
|
+
const resolvedProjectPath = projectPath || entry.project;
|
|
320
|
+
return startSession({
|
|
321
|
+
projectPath: resolvedProjectPath,
|
|
322
|
+
sessionId,
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return createResponse({
|
|
327
|
+
error: "Session not found",
|
|
328
|
+
sessionId,
|
|
329
|
+
details: "Session ID not found in history",
|
|
330
|
+
}, true);
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
return createResponse({
|
|
334
|
+
error: "Failed to resume session",
|
|
335
|
+
details: error instanceof Error ? error.message : "Unknown error",
|
|
336
|
+
}, true);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* List all Claude Code sessions
|
|
341
|
+
*/
|
|
342
|
+
async function listSessions(args) {
|
|
343
|
+
const parsed = ListSessionsSchema.safeParse(args);
|
|
344
|
+
if (!parsed.success) {
|
|
345
|
+
return createResponse({
|
|
346
|
+
error: "Invalid arguments",
|
|
347
|
+
details: parsed.error.issues,
|
|
348
|
+
}, true);
|
|
349
|
+
}
|
|
350
|
+
const { status = "all", limit } = parsed.data;
|
|
351
|
+
// Collect active sessions
|
|
352
|
+
let sessions = Array.from(activeSessions.values());
|
|
353
|
+
// Filter by status
|
|
354
|
+
if (status !== "all") {
|
|
355
|
+
sessions = sessions.filter((s) => s.status === status);
|
|
356
|
+
}
|
|
357
|
+
// Apply limit
|
|
358
|
+
if (limit && limit > 0) {
|
|
359
|
+
sessions = sessions.slice(0, limit);
|
|
360
|
+
}
|
|
361
|
+
return createResponse({
|
|
362
|
+
total: sessions.length,
|
|
363
|
+
sessions: sessions.map((s) => ({
|
|
364
|
+
uuid: s.uuid,
|
|
365
|
+
pid: s.pid,
|
|
366
|
+
projectPath: s.projectPath,
|
|
367
|
+
startTime: s.startTime,
|
|
368
|
+
status: s.status,
|
|
369
|
+
})),
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Kill a Claude Code session
|
|
374
|
+
*/
|
|
375
|
+
async function killSession(args) {
|
|
376
|
+
const parsed = KillSessionSchema.safeParse(args);
|
|
377
|
+
if (!parsed.success) {
|
|
378
|
+
return createResponse({
|
|
379
|
+
error: "Invalid arguments",
|
|
380
|
+
details: parsed.error.issues,
|
|
381
|
+
}, true);
|
|
382
|
+
}
|
|
383
|
+
const { sessionId, force = false } = parsed.data;
|
|
384
|
+
const session = activeSessions.get(sessionId);
|
|
385
|
+
if (!session) {
|
|
386
|
+
return createResponse({
|
|
387
|
+
error: "Session not found",
|
|
388
|
+
sessionId,
|
|
389
|
+
}, true);
|
|
390
|
+
}
|
|
391
|
+
if (!session.process || session.process.killed) {
|
|
392
|
+
return createResponse({
|
|
393
|
+
success: true,
|
|
394
|
+
message: "Session already stopped",
|
|
395
|
+
sessionId,
|
|
396
|
+
}, false);
|
|
397
|
+
}
|
|
398
|
+
try {
|
|
399
|
+
if (force) {
|
|
400
|
+
session.process.kill("SIGKILL");
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
session.process.kill("SIGTERM");
|
|
404
|
+
// Wait for graceful shutdown
|
|
405
|
+
await new Promise((resolve) => {
|
|
406
|
+
const timeout = setTimeout(() => {
|
|
407
|
+
if (!session.process?.killed) {
|
|
408
|
+
session.process?.kill("SIGKILL");
|
|
409
|
+
}
|
|
410
|
+
resolve();
|
|
411
|
+
}, 5000);
|
|
412
|
+
session.process?.once("exit", () => {
|
|
413
|
+
clearTimeout(timeout);
|
|
414
|
+
resolve();
|
|
415
|
+
});
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
session.status = "stopped";
|
|
419
|
+
return createResponse({
|
|
420
|
+
success: true,
|
|
421
|
+
message: "Session killed successfully",
|
|
422
|
+
sessionId,
|
|
423
|
+
method: force ? "SIGKILL" : "SIGTERM",
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
catch (error) {
|
|
427
|
+
return createResponse({
|
|
428
|
+
error: "Failed to kill session",
|
|
429
|
+
details: error instanceof Error ? error.message : "Unknown error",
|
|
430
|
+
}, true);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Get session status
|
|
435
|
+
*/
|
|
436
|
+
async function getSessionStatus(args) {
|
|
437
|
+
const parsed = GetSessionStatusSchema.safeParse(args);
|
|
438
|
+
if (!parsed.success) {
|
|
439
|
+
return createResponse({
|
|
440
|
+
error: "Invalid arguments",
|
|
441
|
+
details: parsed.error.issues,
|
|
442
|
+
}, true);
|
|
443
|
+
}
|
|
444
|
+
const { sessionId } = parsed.data;
|
|
445
|
+
const session = activeSessions.get(sessionId);
|
|
446
|
+
if (!session) {
|
|
447
|
+
return createResponse({
|
|
448
|
+
found: false,
|
|
449
|
+
error: "Session not found in active tracking",
|
|
450
|
+
sessionId,
|
|
451
|
+
}, false);
|
|
452
|
+
}
|
|
453
|
+
return createResponse({
|
|
454
|
+
found: true,
|
|
455
|
+
sessionId: session.uuid,
|
|
456
|
+
pid: session.pid,
|
|
457
|
+
projectPath: session.projectPath,
|
|
458
|
+
startTime: session.startTime,
|
|
459
|
+
status: session.status,
|
|
460
|
+
uptime: Date.now() - session.startTime,
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
// ============================================================================
|
|
464
|
+
// MCP Server Setup
|
|
465
|
+
// ============================================================================
|
|
466
|
+
const server = new Server({
|
|
467
|
+
name: "@mcp/claude-code",
|
|
468
|
+
version: "1.0.0",
|
|
469
|
+
}, {
|
|
470
|
+
capabilities: {
|
|
471
|
+
tools: {},
|
|
472
|
+
},
|
|
473
|
+
});
|
|
474
|
+
// Tool definitions
|
|
475
|
+
const tools = [
|
|
476
|
+
{
|
|
477
|
+
name: "start_session",
|
|
478
|
+
description: "Launch a new Claude Code instance with optional Doppler integration",
|
|
479
|
+
inputSchema: {
|
|
480
|
+
type: "object",
|
|
481
|
+
properties: {
|
|
482
|
+
projectPath: {
|
|
483
|
+
type: "string",
|
|
484
|
+
description: "Absolute path to the project directory",
|
|
485
|
+
},
|
|
486
|
+
sessionId: {
|
|
487
|
+
type: "string",
|
|
488
|
+
description: "Custom session UUID (optional, auto-generated if not provided)",
|
|
489
|
+
format: "uuid",
|
|
490
|
+
},
|
|
491
|
+
model: {
|
|
492
|
+
type: "string",
|
|
493
|
+
description: "Claude model to use (e.g., 'claude-sonnet-4-5-20250929')",
|
|
494
|
+
},
|
|
495
|
+
maxTokens: {
|
|
496
|
+
type: "number",
|
|
497
|
+
description: "Maximum tokens for responses",
|
|
498
|
+
},
|
|
499
|
+
dopplerEnabled: {
|
|
500
|
+
type: "boolean",
|
|
501
|
+
description: "Enable Doppler integration (default: true)",
|
|
502
|
+
},
|
|
503
|
+
},
|
|
504
|
+
required: ["projectPath"],
|
|
505
|
+
},
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
name: "resume_session",
|
|
509
|
+
description: "Resume an existing Claude Code session by UUID",
|
|
510
|
+
inputSchema: {
|
|
511
|
+
type: "object",
|
|
512
|
+
properties: {
|
|
513
|
+
sessionId: {
|
|
514
|
+
type: "string",
|
|
515
|
+
description: "Session UUID to resume",
|
|
516
|
+
format: "uuid",
|
|
517
|
+
},
|
|
518
|
+
projectPath: {
|
|
519
|
+
type: "string",
|
|
520
|
+
description: "Project path (optional, inferred from session if not provided)",
|
|
521
|
+
},
|
|
522
|
+
},
|
|
523
|
+
required: ["sessionId"],
|
|
524
|
+
},
|
|
525
|
+
},
|
|
526
|
+
{
|
|
527
|
+
name: "list_sessions",
|
|
528
|
+
description: "List all active Claude Code sessions with optional filtering",
|
|
529
|
+
inputSchema: {
|
|
530
|
+
type: "object",
|
|
531
|
+
properties: {
|
|
532
|
+
status: {
|
|
533
|
+
type: "string",
|
|
534
|
+
enum: ["all", "running", "stopped"],
|
|
535
|
+
description: "Filter by session status",
|
|
536
|
+
},
|
|
537
|
+
limit: {
|
|
538
|
+
type: "number",
|
|
539
|
+
description: "Maximum sessions to return",
|
|
540
|
+
},
|
|
541
|
+
},
|
|
542
|
+
},
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
name: "kill_session",
|
|
546
|
+
description: "Terminate a Claude Code session gracefully or forcefully",
|
|
547
|
+
inputSchema: {
|
|
548
|
+
type: "object",
|
|
549
|
+
properties: {
|
|
550
|
+
sessionId: {
|
|
551
|
+
type: "string",
|
|
552
|
+
description: "Session ID or UUID to kill",
|
|
553
|
+
},
|
|
554
|
+
force: {
|
|
555
|
+
type: "boolean",
|
|
556
|
+
description: "Force kill if graceful shutdown fails",
|
|
557
|
+
},
|
|
558
|
+
},
|
|
559
|
+
required: ["sessionId"],
|
|
560
|
+
},
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
name: "get_session_status",
|
|
564
|
+
description: "Check the status of a Claude Code session",
|
|
565
|
+
inputSchema: {
|
|
566
|
+
type: "object",
|
|
567
|
+
properties: {
|
|
568
|
+
sessionId: {
|
|
569
|
+
type: "string",
|
|
570
|
+
description: "Session ID or UUID to check",
|
|
571
|
+
},
|
|
572
|
+
},
|
|
573
|
+
required: ["sessionId"],
|
|
574
|
+
},
|
|
575
|
+
},
|
|
576
|
+
];
|
|
577
|
+
// Register handlers
|
|
578
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools }));
|
|
579
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
580
|
+
const { name, arguments: args } = request.params;
|
|
581
|
+
try {
|
|
582
|
+
switch (name) {
|
|
583
|
+
case "start_session":
|
|
584
|
+
return await startSession(args);
|
|
585
|
+
case "resume_session":
|
|
586
|
+
return await resumeSession(args);
|
|
587
|
+
case "list_sessions":
|
|
588
|
+
return await listSessions(args);
|
|
589
|
+
case "kill_session":
|
|
590
|
+
return await killSession(args);
|
|
591
|
+
case "get_session_status":
|
|
592
|
+
return await getSessionStatus(args);
|
|
593
|
+
default:
|
|
594
|
+
return createResponse({
|
|
595
|
+
error: "Unknown tool",
|
|
596
|
+
tool: name,
|
|
597
|
+
}, true);
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
catch (error) {
|
|
601
|
+
return createResponse({
|
|
602
|
+
error: "Tool execution failed",
|
|
603
|
+
tool: name,
|
|
604
|
+
details: error instanceof Error ? error.message : "Unknown error",
|
|
605
|
+
}, true);
|
|
606
|
+
}
|
|
607
|
+
});
|
|
608
|
+
// ============================================================================
|
|
609
|
+
// Server Entry Point
|
|
610
|
+
// ============================================================================
|
|
611
|
+
async function main() {
|
|
612
|
+
const config = loadConfig();
|
|
613
|
+
const transport = new StdioServerTransport();
|
|
614
|
+
await server.connect(transport);
|
|
615
|
+
console.error("Claude Code MCP server running on stdio");
|
|
616
|
+
console.error(`Config: CLAUDE_DIR=${config.claudeDir}`);
|
|
617
|
+
if (config.dopplerProject) {
|
|
618
|
+
console.error(`Config: DOPPLER_PROJECT=${config.dopplerProject}`);
|
|
619
|
+
console.error(`Config: DOPPLER_CONFIG=${config.dopplerConfig}`);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
main().catch((error) => {
|
|
623
|
+
console.error("Fatal error:", error);
|
|
624
|
+
process.exit(1);
|
|
625
|
+
});
|
|
626
|
+
export { server, startSession, resumeSession, listSessions, killSession, getSessionStatus };
|
|
627
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ebowwa/claude-code-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "MCP server for Claude Code integration - manage conversations, send messages, and sync context",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -8,6 +8,12 @@
|
|
|
8
8
|
"bin": {
|
|
9
9
|
"claude-code-mcp": "./bin/claude-code-mcp"
|
|
10
10
|
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"bin",
|
|
14
|
+
"README.md",
|
|
15
|
+
"LICENSE"
|
|
16
|
+
],
|
|
11
17
|
"scripts": {
|
|
12
18
|
"build": "tsc",
|
|
13
19
|
"dev": "bun --hot src/index.ts",
|