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.
Files changed (72) hide show
  1. package/README.md +314 -0
  2. package/bin/nebula-mcp.js +10 -0
  3. package/dist/circuit-breaker.d.ts +157 -0
  4. package/dist/circuit-breaker.d.ts.map +1 -0
  5. package/dist/circuit-breaker.js +237 -0
  6. package/dist/circuit-breaker.js.map +1 -0
  7. package/dist/errors.d.ts +72 -0
  8. package/dist/errors.d.ts.map +1 -0
  9. package/dist/errors.js +314 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/index.d.ts +13 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +41 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/mcp/index.d.ts +8 -0
  16. package/dist/mcp/index.d.ts.map +1 -0
  17. package/dist/mcp/index.js +13 -0
  18. package/dist/mcp/index.js.map +1 -0
  19. package/dist/mcp/server.d.ts +31 -0
  20. package/dist/mcp/server.d.ts.map +1 -0
  21. package/dist/mcp/server.js +237 -0
  22. package/dist/mcp/server.js.map +1 -0
  23. package/dist/notebook/client.d.ts +643 -0
  24. package/dist/notebook/client.d.ts.map +1 -0
  25. package/dist/notebook/client.js +1720 -0
  26. package/dist/notebook/client.js.map +1 -0
  27. package/dist/notebook/index.d.ts +6 -0
  28. package/dist/notebook/index.d.ts.map +1 -0
  29. package/dist/notebook/index.js +6 -0
  30. package/dist/notebook/index.js.map +1 -0
  31. package/dist/notebook/tools.d.ts +244 -0
  32. package/dist/notebook/tools.d.ts.map +1 -0
  33. package/dist/notebook/tools.js +279 -0
  34. package/dist/notebook/tools.js.map +1 -0
  35. package/dist/tools/execution.d.ts +38 -0
  36. package/dist/tools/execution.d.ts.map +1 -0
  37. package/dist/tools/execution.js +116 -0
  38. package/dist/tools/execution.js.map +1 -0
  39. package/dist/tools/files.d.ts +70 -0
  40. package/dist/tools/files.d.ts.map +1 -0
  41. package/dist/tools/files.js +286 -0
  42. package/dist/tools/files.js.map +1 -0
  43. package/dist/tools/index.d.ts +74 -0
  44. package/dist/tools/index.d.ts.map +1 -0
  45. package/dist/tools/index.js +217 -0
  46. package/dist/tools/index.js.map +1 -0
  47. package/dist/tools/kernel.d.ts +36 -0
  48. package/dist/tools/kernel.d.ts.map +1 -0
  49. package/dist/tools/kernel.js +182 -0
  50. package/dist/tools/kernel.js.map +1 -0
  51. package/dist/tools/notebook.d.ts +252 -0
  52. package/dist/tools/notebook.d.ts.map +1 -0
  53. package/dist/tools/notebook.js +1089 -0
  54. package/dist/tools/notebook.js.map +1 -0
  55. package/dist/tools/types.d.ts +78 -0
  56. package/dist/tools/types.d.ts.map +1 -0
  57. package/dist/tools/types.js +8 -0
  58. package/dist/tools/types.js.map +1 -0
  59. package/dist/types.d.ts +473 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +5 -0
  62. package/dist/types.js.map +1 -0
  63. package/dist/utils/imageResize.d.ts +24 -0
  64. package/dist/utils/imageResize.d.ts.map +1 -0
  65. package/dist/utils/imageResize.js +67 -0
  66. package/dist/utils/imageResize.js.map +1 -0
  67. package/dist/utils/polling.d.ts +40 -0
  68. package/dist/utils/polling.d.ts.map +1 -0
  69. package/dist/utils/polling.js +49 -0
  70. package/dist/utils/polling.js.map +1 -0
  71. package/package.json +61 -0
  72. 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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"}