nebula-notebook-mcp 0.1.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/README.md +314 -0
- package/bin/nebula-mcp.js +10 -0
- package/dist/circuit-breaker.d.ts +157 -0
- package/dist/circuit-breaker.d.ts.map +1 -0
- package/dist/circuit-breaker.js +237 -0
- package/dist/circuit-breaker.js.map +1 -0
- package/dist/errors.d.ts +72 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +314 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +8 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +13 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +31 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +237 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/notebook/client.d.ts +643 -0
- package/dist/notebook/client.d.ts.map +1 -0
- package/dist/notebook/client.js +1720 -0
- package/dist/notebook/client.js.map +1 -0
- package/dist/notebook/index.d.ts +6 -0
- package/dist/notebook/index.d.ts.map +1 -0
- package/dist/notebook/index.js +6 -0
- package/dist/notebook/index.js.map +1 -0
- package/dist/notebook/tools.d.ts +244 -0
- package/dist/notebook/tools.d.ts.map +1 -0
- package/dist/notebook/tools.js +279 -0
- package/dist/notebook/tools.js.map +1 -0
- package/dist/tools/execution.d.ts +38 -0
- package/dist/tools/execution.d.ts.map +1 -0
- package/dist/tools/execution.js +116 -0
- package/dist/tools/execution.js.map +1 -0
- package/dist/tools/files.d.ts +70 -0
- package/dist/tools/files.d.ts.map +1 -0
- package/dist/tools/files.js +286 -0
- package/dist/tools/files.js.map +1 -0
- package/dist/tools/index.d.ts +74 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +217 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/kernel.d.ts +36 -0
- package/dist/tools/kernel.d.ts.map +1 -0
- package/dist/tools/kernel.js +182 -0
- package/dist/tools/kernel.js.map +1 -0
- package/dist/tools/notebook.d.ts +252 -0
- package/dist/tools/notebook.d.ts.map +1 -0
- package/dist/tools/notebook.js +1089 -0
- package/dist/tools/notebook.js.map +1 -0
- package/dist/tools/types.d.ts +78 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +8 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/types.d.ts +473 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/imageResize.d.ts +24 -0
- package/dist/utils/imageResize.d.ts.map +1 -0
- package/dist/utils/imageResize.js +67 -0
- package/dist/utils/imageResize.js.map +1 -0
- package/dist/utils/polling.d.ts +40 -0
- package/dist/utils/polling.d.ts.map +1 -0
- package/dist/utils/polling.js +49 -0
- package/dist/utils/polling.js.map +1 -0
- package/package.json +61 -0
- package/setup-mcp.js +468 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tools Index
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for all tool definitions.
|
|
5
|
+
* MCP server and other clients use these tools directly.
|
|
6
|
+
*/
|
|
7
|
+
// Import all tool categories
|
|
8
|
+
import { notebookTools } from './notebook.js';
|
|
9
|
+
import { kernelTools } from './kernel.js';
|
|
10
|
+
import { executionTools } from './execution.js';
|
|
11
|
+
import { fileTools } from './files.js';
|
|
12
|
+
// Re-export tool categories for direct access
|
|
13
|
+
export { notebookTools } from './notebook.js';
|
|
14
|
+
export { kernelTools } from './kernel.js';
|
|
15
|
+
export { executionTools } from './execution.js';
|
|
16
|
+
export { fileTools } from './files.js';
|
|
17
|
+
// Re-export individual tools for TypeScript consumers who need type safety
|
|
18
|
+
export * from './notebook.js';
|
|
19
|
+
export * from './kernel.js';
|
|
20
|
+
export * from './execution.js';
|
|
21
|
+
export * from './files.js';
|
|
22
|
+
/**
|
|
23
|
+
* All tools combined in a single array
|
|
24
|
+
*/
|
|
25
|
+
export const allTools = [
|
|
26
|
+
...notebookTools,
|
|
27
|
+
...kernelTools,
|
|
28
|
+
...executionTools,
|
|
29
|
+
...fileTools,
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Map of tool name to tool object for quick lookup
|
|
33
|
+
*/
|
|
34
|
+
export const toolsByName = new Map(allTools.map(tool => [tool.definition.name, tool]));
|
|
35
|
+
/**
|
|
36
|
+
* Get all tool definitions (MCP-compatible format)
|
|
37
|
+
*/
|
|
38
|
+
export function getToolDefinitions() {
|
|
39
|
+
return allTools.map(tool => tool.definition);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Execute a tool by name with given parameters
|
|
43
|
+
*
|
|
44
|
+
* @param name - Tool name
|
|
45
|
+
* @param params - Tool parameters
|
|
46
|
+
* @param client - NebulaClient instance
|
|
47
|
+
* @returns Tool result
|
|
48
|
+
*/
|
|
49
|
+
export async function executeToolByName(name, params, client) {
|
|
50
|
+
const tool = toolsByName.get(name);
|
|
51
|
+
if (!tool) {
|
|
52
|
+
return { success: false, error: `Unknown tool: ${name}` };
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
return await tool.execute(params, client);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
59
|
+
return { success: false, error: `Tool execution failed: ${message}` };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Tools that operate on notebooks and should track user changes
|
|
63
|
+
const NOTEBOOK_TOOLS = new Set([
|
|
64
|
+
'read_notebook', 'read_cell', 'read_output',
|
|
65
|
+
'insert_cell', 'update_cell', 'delete_cell', 'delete_cells',
|
|
66
|
+
'move_cell', 'duplicate_cell', 'insert_cells',
|
|
67
|
+
'create_notebook', 'search_cells', 'update_metadata',
|
|
68
|
+
'clear_notebook', 'clear_outputs', 'execute_cell',
|
|
69
|
+
'start_agent_session', 'end_agent_session',
|
|
70
|
+
]);
|
|
71
|
+
/**
|
|
72
|
+
* Execute a tool and format result for MCP display
|
|
73
|
+
*
|
|
74
|
+
* Automatically includes user changes since the last tool call for notebook operations.
|
|
75
|
+
*
|
|
76
|
+
* @param name - Tool name
|
|
77
|
+
* @param params - Tool parameters
|
|
78
|
+
* @param client - NebulaClient instance
|
|
79
|
+
* @returns MCP-formatted content
|
|
80
|
+
*/
|
|
81
|
+
export async function executeToolForMCP(name, params, client) {
|
|
82
|
+
const tool = toolsByName.get(name);
|
|
83
|
+
if (!tool) {
|
|
84
|
+
return {
|
|
85
|
+
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
|
|
86
|
+
isError: true,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
// Extract notebook path for user change tracking
|
|
90
|
+
const notebookPath = params.path || undefined;
|
|
91
|
+
const isNotebookTool = NOTEBOOK_TOOLS.has(name) && Boolean(notebookPath);
|
|
92
|
+
const hasActiveSession = isNotebookTool ? client.hasActiveAgentSession(notebookPath) : false;
|
|
93
|
+
// Query updates BEFORE executing the tool (to capture what happened since last call)
|
|
94
|
+
let updatesSince = [];
|
|
95
|
+
const shouldCheckUpdates = isNotebookTool && (name === 'start_agent_session' || !hasActiveSession);
|
|
96
|
+
if (shouldCheckUpdates) {
|
|
97
|
+
try {
|
|
98
|
+
const updatesResult = await client.getUpdatesSinceOp(notebookPath);
|
|
99
|
+
if (updatesResult.success && updatesResult.data?.updates.length) {
|
|
100
|
+
updatesSince = updatesResult.data.updates;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
// Silently ignore errors in update tracking
|
|
105
|
+
console.error('[executeToolForMCP] Error getting updates:', e);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Validate required parameters before execution
|
|
109
|
+
const schema = tool.definition.inputSchema;
|
|
110
|
+
if (schema.required) {
|
|
111
|
+
const missing = schema.required.filter(key => params[key] === undefined || params[key] === null);
|
|
112
|
+
if (missing.length > 0) {
|
|
113
|
+
return {
|
|
114
|
+
content: [{ type: 'text', text: `Error: Missing required parameter(s): ${missing.join(', ')}` }],
|
|
115
|
+
isError: true,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Warn about unexpected parameters (likely typos like "source" instead of "content")
|
|
120
|
+
const knownParams = new Set(Object.keys(schema.properties || {}));
|
|
121
|
+
const unknownParams = Object.keys(params).filter(key => !knownParams.has(key));
|
|
122
|
+
if (unknownParams.length > 0) {
|
|
123
|
+
return {
|
|
124
|
+
content: [{ type: 'text', text: `Error: Unknown parameter(s): ${unknownParams.join(', ')}. Valid parameters: ${[...knownParams].join(', ')}` }],
|
|
125
|
+
isError: true,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
// Clear any stale backend info before executing the tool
|
|
130
|
+
client.consumeLastBackend();
|
|
131
|
+
client.consumeAutoStartWarning();
|
|
132
|
+
const result = await tool.execute(params, client);
|
|
133
|
+
const backend = client.consumeLastBackend();
|
|
134
|
+
const autoStartWarning = client.consumeAutoStartWarning();
|
|
135
|
+
// Record the tool call timestamp for future change tracking
|
|
136
|
+
if (isNotebookTool) {
|
|
137
|
+
client.recordToolCallTimestamp(notebookPath);
|
|
138
|
+
}
|
|
139
|
+
// Build content array
|
|
140
|
+
let content;
|
|
141
|
+
// Use custom formatter if available, otherwise default JSON
|
|
142
|
+
if (tool.formatForMCP) {
|
|
143
|
+
content = await tool.formatForMCP(result);
|
|
144
|
+
}
|
|
145
|
+
else if (!result.success) {
|
|
146
|
+
content = [{ type: 'text', text: `Error: ${result.error}` }];
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
content = [{ type: 'text', text: JSON.stringify(result.data, null, 2) }];
|
|
150
|
+
}
|
|
151
|
+
// Add backend info
|
|
152
|
+
if (autoStartWarning) {
|
|
153
|
+
content.push({ type: 'text', text: `Warning: ${autoStartWarning}` });
|
|
154
|
+
}
|
|
155
|
+
if (backend) {
|
|
156
|
+
content.push({ type: 'text', text: `Backend: ${backend}` });
|
|
157
|
+
}
|
|
158
|
+
// Add updates if any (silent if none)
|
|
159
|
+
if (updatesSince.length > 0) {
|
|
160
|
+
const changesSummary = updatesSince.map(c => ` • ${c.description} (${new Date(c.timestamp).toLocaleTimeString()})`).join('\n');
|
|
161
|
+
content.push({
|
|
162
|
+
type: 'text',
|
|
163
|
+
text: `\n📝 Updates since last tool call:\n${changesSummary}`,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
content,
|
|
168
|
+
isError: !result.success,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
client.consumeLastBackend();
|
|
173
|
+
client.consumeAutoStartWarning();
|
|
174
|
+
// Still record timestamp even on error
|
|
175
|
+
if (isNotebookTool) {
|
|
176
|
+
client.recordToolCallTimestamp(notebookPath);
|
|
177
|
+
}
|
|
178
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
179
|
+
return {
|
|
180
|
+
content: [{ type: 'text', text: `Tool execution failed: ${message}` }],
|
|
181
|
+
isError: true,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Get tool by name
|
|
187
|
+
*/
|
|
188
|
+
export function getTool(name) {
|
|
189
|
+
return toolsByName.get(name);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Check if a tool exists
|
|
193
|
+
*/
|
|
194
|
+
export function hasTool(name) {
|
|
195
|
+
return toolsByName.has(name);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Tool categories for organized access
|
|
199
|
+
*/
|
|
200
|
+
export const toolCategories = {
|
|
201
|
+
notebook: notebookTools,
|
|
202
|
+
kernel: kernelTools,
|
|
203
|
+
execution: executionTools,
|
|
204
|
+
files: fileTools,
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* Get tool names by category
|
|
208
|
+
*/
|
|
209
|
+
export function getToolNamesByCategory() {
|
|
210
|
+
return {
|
|
211
|
+
notebook: notebookTools.map(t => t.definition.name),
|
|
212
|
+
kernel: kernelTools.map(t => t.definition.name),
|
|
213
|
+
execution: executionTools.map(t => t.definition.name),
|
|
214
|
+
files: fileTools.map(t => t.definition.name),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kernel Tools
|
|
3
|
+
*
|
|
4
|
+
* Tools for managing Jupyter kernel sessions.
|
|
5
|
+
*/
|
|
6
|
+
import type { Tool } from './types.js';
|
|
7
|
+
export interface ListKernelsParams {
|
|
8
|
+
}
|
|
9
|
+
export interface KernelInfo {
|
|
10
|
+
name: string;
|
|
11
|
+
displayName: string;
|
|
12
|
+
language: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ListKernelsResult {
|
|
15
|
+
kernels: KernelInfo[];
|
|
16
|
+
}
|
|
17
|
+
export declare const listKernelsTool: Tool<ListKernelsParams, ListKernelsResult>;
|
|
18
|
+
export interface KernelStartParams {
|
|
19
|
+
kernel_name?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface KernelStartResult {
|
|
22
|
+
sessionId: string;
|
|
23
|
+
kernelName: string;
|
|
24
|
+
}
|
|
25
|
+
export declare const kernelStartTool: Tool<KernelStartParams, KernelStartResult>;
|
|
26
|
+
export interface KernelStopParams {
|
|
27
|
+
}
|
|
28
|
+
export declare const kernelStopTool: Tool<KernelStopParams, void>;
|
|
29
|
+
export interface KernelRestartParams {
|
|
30
|
+
}
|
|
31
|
+
export declare const kernelRestartTool: Tool<KernelRestartParams, void>;
|
|
32
|
+
export interface KernelInterruptParams {
|
|
33
|
+
}
|
|
34
|
+
export declare const kernelInterruptTool: Tool<KernelInterruptParams, void>;
|
|
35
|
+
export declare const kernelTools: (Tool<ListKernelsParams, ListKernelsResult> | Tool<KernelStartParams, KernelStartResult> | Tool<KernelStopParams, void>)[];
|
|
36
|
+
//# sourceMappingURL=kernel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../src/tools/kernel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAA0B,MAAM,YAAY,CAAC;AAc/D,MAAM,WAAW,iBAAiB;CAEjC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,eAAO,MAAM,eAAe,EAAE,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CA+BtE,CAAC;AAMF,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,eAAe,EAAE,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAsCtE,CAAC;AAMF,MAAM,WAAW,gBAAgB;CAChC;AAED,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CA6BvD,CAAC;AAMF,MAAM,WAAW,mBAAmB;CACnC;AAED,eAAO,MAAM,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAuC7D,CAAC;AAMF,MAAM,WAAW,qBAAqB;CACrC;AAED,eAAO,MAAM,mBAAmB,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CA6BjE,CAAC;AAMF,eAAO,MAAM,WAAW,4HAMvB,CAAC"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kernel Tools
|
|
3
|
+
*
|
|
4
|
+
* Tools for managing Jupyter kernel sessions.
|
|
5
|
+
*/
|
|
6
|
+
async function resolveKernelSessionId(client, notebookPath) {
|
|
7
|
+
return client.resolveKernelSessionIdForNotebook(notebookPath, { createIfMissing: false });
|
|
8
|
+
}
|
|
9
|
+
export const listKernelsTool = {
|
|
10
|
+
definition: {
|
|
11
|
+
name: 'list_kernels',
|
|
12
|
+
description: 'List available kernel specifications with display names (includes version info)',
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
properties: {},
|
|
16
|
+
required: [],
|
|
17
|
+
},
|
|
18
|
+
annotations: { readOnlyHint: true },
|
|
19
|
+
},
|
|
20
|
+
async execute(_params, client) {
|
|
21
|
+
const result = await client.listKernels();
|
|
22
|
+
if (!result.success) {
|
|
23
|
+
return { success: false, error: result.error };
|
|
24
|
+
}
|
|
25
|
+
return { success: true, data: { kernels: result.data || [] } };
|
|
26
|
+
},
|
|
27
|
+
formatForMCP(result) {
|
|
28
|
+
if (!result.success) {
|
|
29
|
+
return [{ type: 'text', text: `Error: ${result.error}` }];
|
|
30
|
+
}
|
|
31
|
+
const { kernels } = result.data;
|
|
32
|
+
if (kernels.length === 0) {
|
|
33
|
+
return [{ type: 'text', text: 'No kernels available' }];
|
|
34
|
+
}
|
|
35
|
+
const lines = kernels.map(k => ` - ${k.name}: ${k.displayName} [${k.language}]`);
|
|
36
|
+
return [{ type: 'text', text: `Available kernels:\n${lines.join('\n')}` }];
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
export const kernelStartTool = {
|
|
40
|
+
definition: {
|
|
41
|
+
name: 'kernel_start',
|
|
42
|
+
description: 'Start a new kernel session for the active notebook (requires start_agent_session)',
|
|
43
|
+
inputSchema: {
|
|
44
|
+
type: 'object',
|
|
45
|
+
properties: {
|
|
46
|
+
kernel_name: { type: 'string', description: 'Kernel name (e.g., python3). Default: python3.' },
|
|
47
|
+
},
|
|
48
|
+
required: [],
|
|
49
|
+
},
|
|
50
|
+
annotations: { destructiveHint: false },
|
|
51
|
+
},
|
|
52
|
+
async execute(params, client) {
|
|
53
|
+
const notebookPath = client.getActiveNotebookPath();
|
|
54
|
+
if (!notebookPath) {
|
|
55
|
+
return { success: false, error: 'No active agent session. Call start_agent_session first.' };
|
|
56
|
+
}
|
|
57
|
+
const kernelName = params.kernel_name || 'python3';
|
|
58
|
+
const result = await client.getOrCreateKernelForFile(notebookPath, kernelName);
|
|
59
|
+
if (!result.success)
|
|
60
|
+
return { success: false, error: result.error };
|
|
61
|
+
return {
|
|
62
|
+
success: true,
|
|
63
|
+
data: {
|
|
64
|
+
sessionId: result.data.sessionId,
|
|
65
|
+
kernelName: result.data.kernelName || kernelName,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
},
|
|
69
|
+
formatForMCP(result) {
|
|
70
|
+
if (!result.success) {
|
|
71
|
+
return [{ type: 'text', text: `Error: ${result.error}` }];
|
|
72
|
+
}
|
|
73
|
+
const { sessionId, kernelName } = result.data;
|
|
74
|
+
return [{ type: 'text', text: `Kernel started: ${sessionId} (${kernelName})` }];
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
export const kernelStopTool = {
|
|
78
|
+
definition: {
|
|
79
|
+
name: 'kernel_stop',
|
|
80
|
+
description: 'Stop and shutdown the active notebook kernel (requires start_agent_session)',
|
|
81
|
+
inputSchema: {
|
|
82
|
+
type: 'object',
|
|
83
|
+
properties: {},
|
|
84
|
+
required: [],
|
|
85
|
+
},
|
|
86
|
+
annotations: { destructiveHint: true },
|
|
87
|
+
},
|
|
88
|
+
async execute(params, client) {
|
|
89
|
+
const notebookPath = client.getActiveNotebookPath();
|
|
90
|
+
if (!notebookPath) {
|
|
91
|
+
return { success: false, error: 'No active agent session. Call start_agent_session first.' };
|
|
92
|
+
}
|
|
93
|
+
const session = await resolveKernelSessionId(client, notebookPath);
|
|
94
|
+
if (!session.success)
|
|
95
|
+
return { success: false, error: session.error };
|
|
96
|
+
const result = await client.shutdownKernel(session.data.sessionId);
|
|
97
|
+
return result.success ? { success: true } : { success: false, error: result.error };
|
|
98
|
+
},
|
|
99
|
+
formatForMCP(result) {
|
|
100
|
+
if (!result.success) {
|
|
101
|
+
return [{ type: 'text', text: `Error: ${result.error}` }];
|
|
102
|
+
}
|
|
103
|
+
return [{ type: 'text', text: 'Kernel stopped' }];
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
export const kernelRestartTool = {
|
|
107
|
+
definition: {
|
|
108
|
+
name: 'kernel_restart',
|
|
109
|
+
description: 'Restart the active notebook kernel (clears all variables, requires start_agent_session)',
|
|
110
|
+
inputSchema: {
|
|
111
|
+
type: 'object',
|
|
112
|
+
properties: {},
|
|
113
|
+
required: [],
|
|
114
|
+
},
|
|
115
|
+
annotations: { destructiveHint: true },
|
|
116
|
+
},
|
|
117
|
+
async execute(params, client) {
|
|
118
|
+
const notebookPath = client.getActiveNotebookPath();
|
|
119
|
+
if (!notebookPath) {
|
|
120
|
+
return { success: false, error: 'No active agent session. Call start_agent_session first.' };
|
|
121
|
+
}
|
|
122
|
+
// Prefer a robust restart over the direct restart endpoint, which can be flaky
|
|
123
|
+
// depending on backend implementation. Shutdown (best effort), then start a new
|
|
124
|
+
// session for this file.
|
|
125
|
+
const existing = await resolveKernelSessionId(client, notebookPath);
|
|
126
|
+
if (existing.success) {
|
|
127
|
+
const stopped = await client.shutdownKernel(existing.data.sessionId);
|
|
128
|
+
// Ignore not-found errors: the session may have already been cleaned up.
|
|
129
|
+
if (!stopped.success && !stopped.error?.includes('not found')) {
|
|
130
|
+
return { success: false, error: stopped.error };
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const started = await client.getOrCreateKernelForFile(notebookPath, 'python3');
|
|
134
|
+
return started.success ? { success: true } : { success: false, error: started.error };
|
|
135
|
+
},
|
|
136
|
+
formatForMCP(result) {
|
|
137
|
+
if (!result.success) {
|
|
138
|
+
return [{ type: 'text', text: `Error: ${result.error}` }];
|
|
139
|
+
}
|
|
140
|
+
return [{ type: 'text', text: 'Kernel restarted' }];
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
export const kernelInterruptTool = {
|
|
144
|
+
definition: {
|
|
145
|
+
name: 'kernel_interrupt',
|
|
146
|
+
description: 'Interrupt execution in the active notebook kernel (requires start_agent_session)',
|
|
147
|
+
inputSchema: {
|
|
148
|
+
type: 'object',
|
|
149
|
+
properties: {},
|
|
150
|
+
required: [],
|
|
151
|
+
},
|
|
152
|
+
annotations: { destructiveHint: false },
|
|
153
|
+
},
|
|
154
|
+
async execute(params, client) {
|
|
155
|
+
const notebookPath = client.getActiveNotebookPath();
|
|
156
|
+
if (!notebookPath) {
|
|
157
|
+
return { success: false, error: 'No active agent session. Call start_agent_session first.' };
|
|
158
|
+
}
|
|
159
|
+
const session = await resolveKernelSessionId(client, notebookPath);
|
|
160
|
+
if (!session.success)
|
|
161
|
+
return { success: false, error: session.error };
|
|
162
|
+
const result = await client.interruptKernel(session.data.sessionId);
|
|
163
|
+
return result.success ? { success: true } : { success: false, error: result.error };
|
|
164
|
+
},
|
|
165
|
+
formatForMCP(result) {
|
|
166
|
+
if (!result.success) {
|
|
167
|
+
return [{ type: 'text', text: `Error: ${result.error}` }];
|
|
168
|
+
}
|
|
169
|
+
return [{ type: 'text', text: 'Kernel interrupted' }];
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
// =============================================================================
|
|
173
|
+
// Export all kernel tools
|
|
174
|
+
// =============================================================================
|
|
175
|
+
export const kernelTools = [
|
|
176
|
+
listKernelsTool,
|
|
177
|
+
kernelStartTool,
|
|
178
|
+
kernelStopTool,
|
|
179
|
+
kernelRestartTool,
|
|
180
|
+
kernelInterruptTool,
|
|
181
|
+
];
|
|
182
|
+
//# sourceMappingURL=kernel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel.js","sourceRoot":"","sources":["../../src/tools/kernel.ts"],"names":[],"mappings":"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"}
|