@supernal/interface 1.0.1 → 1.0.3
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/LICENSE +1 -1
- package/README.md +1 -1
- package/dist/cjs/src/background/location/LocationContext.js +159 -0
- package/dist/cjs/src/background/location/LocationContext.js.map +1 -0
- package/dist/cjs/src/background/navigation/NavigationGraph.js +40 -10
- package/dist/cjs/src/background/navigation/NavigationGraph.js.map +1 -1
- package/dist/cjs/src/background/registry/ToolRegistry.js +56 -0
- package/dist/cjs/src/background/registry/ToolRegistry.js.map +1 -1
- package/dist/cjs/src/decorators/Component.js +30 -19
- package/dist/cjs/src/decorators/Component.js.map +1 -1
- package/dist/cjs/src/decorators/LocationScope.js +65 -0
- package/dist/cjs/src/decorators/LocationScope.js.map +1 -0
- package/dist/cjs/src/decorators/Tool.js +14 -1
- package/dist/cjs/src/decorators/Tool.js.map +1 -1
- package/dist/cjs/src/decorators/index.js +1 -1
- package/dist/cjs/src/index.js +9 -2
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/mcp/index.js +16 -0
- package/dist/cjs/src/mcp/index.js.map +1 -0
- package/dist/cjs/src/mcp/server.js +281 -0
- package/dist/cjs/src/mcp/server.js.map +1 -0
- package/dist/cjs/src/mcp/transport.js +131 -0
- package/dist/cjs/src/mcp/transport.js.map +1 -0
- package/dist/cjs/src/mcp/types.js +23 -0
- package/dist/cjs/src/mcp/types.js.map +1 -0
- package/dist/cjs/src/mcp-cli.js +55 -0
- package/dist/cjs/src/mcp-cli.js.map +1 -0
- package/dist/cjs/src/mcp-server.js +17 -0
- package/dist/cjs/src/mcp-server.js.map +1 -0
- package/dist/cjs/src/react/useNavigationHandler.js +53 -12
- package/dist/cjs/src/react/useNavigationHandler.js.map +1 -1
- package/dist/cjs/src/state/StateSync.js +130 -0
- package/dist/cjs/src/state/StateSync.js.map +1 -0
- package/dist/cjs/src/tools/SystemTools.js +1 -1
- package/dist/cjs/src/tools/SystemTools.js.map +1 -1
- package/dist/cjs/src/ui/react/chat/ChatBubble.js +1 -1
- package/dist/cjs/src/ui/react/chat/ChatBubble.js.map +1 -1
- package/dist/esm/src/background/location/LocationContext.d.ts +118 -0
- package/dist/esm/src/background/location/LocationContext.d.ts.map +1 -0
- package/dist/esm/src/background/location/LocationContext.js +155 -0
- package/dist/esm/src/background/location/LocationContext.js.map +1 -0
- package/dist/esm/src/background/navigation/NavigationGraph.d.ts +8 -0
- package/dist/esm/src/background/navigation/NavigationGraph.d.ts.map +1 -1
- package/dist/esm/src/background/navigation/NavigationGraph.js +40 -10
- package/dist/esm/src/background/navigation/NavigationGraph.js.map +1 -1
- package/dist/esm/src/background/registry/ToolRegistry.d.ts +31 -0
- package/dist/esm/src/background/registry/ToolRegistry.d.ts.map +1 -1
- package/dist/esm/src/background/registry/ToolRegistry.js +56 -0
- package/dist/esm/src/background/registry/ToolRegistry.js.map +1 -1
- package/dist/esm/src/decorators/Component.d.ts.map +1 -1
- package/dist/esm/src/decorators/Component.js +30 -19
- package/dist/esm/src/decorators/Component.js.map +1 -1
- package/dist/esm/src/decorators/LocationScope.d.ts +49 -0
- package/dist/esm/src/decorators/LocationScope.d.ts.map +1 -0
- package/dist/esm/src/decorators/LocationScope.js +60 -0
- package/dist/esm/src/decorators/LocationScope.js.map +1 -0
- package/dist/esm/src/decorators/Tool.d.ts +3 -1
- package/dist/esm/src/decorators/Tool.d.ts.map +1 -1
- package/dist/esm/src/decorators/Tool.js +14 -1
- package/dist/esm/src/decorators/Tool.js.map +1 -1
- package/dist/esm/src/decorators/index.d.ts +1 -1
- package/dist/esm/src/decorators/index.js +1 -1
- package/dist/esm/src/index.d.ts +3 -1
- package/dist/esm/src/index.d.ts.map +1 -1
- package/dist/esm/src/index.js +3 -1
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/mcp/index.d.ts +10 -0
- package/dist/esm/src/mcp/index.d.ts.map +1 -0
- package/dist/esm/src/mcp/index.js +9 -0
- package/dist/esm/src/mcp/index.js.map +1 -0
- package/dist/esm/src/mcp/server.d.ts +84 -0
- package/dist/esm/src/mcp/server.d.ts.map +1 -0
- package/dist/esm/src/mcp/server.js +276 -0
- package/dist/esm/src/mcp/server.js.map +1 -0
- package/dist/esm/src/mcp/transport.d.ts +53 -0
- package/dist/esm/src/mcp/transport.d.ts.map +1 -0
- package/dist/esm/src/mcp/transport.js +126 -0
- package/dist/esm/src/mcp/transport.js.map +1 -0
- package/dist/esm/src/mcp/types.d.ts +175 -0
- package/dist/esm/src/mcp/types.d.ts.map +1 -0
- package/dist/esm/src/mcp/types.js +20 -0
- package/dist/esm/src/mcp/types.js.map +1 -0
- package/dist/esm/src/mcp-cli.d.ts +25 -0
- package/dist/esm/src/mcp-cli.d.ts.map +1 -0
- package/dist/esm/src/mcp-cli.js +53 -0
- package/dist/esm/src/mcp-cli.js.map +1 -0
- package/dist/esm/src/mcp-server.d.ts +10 -0
- package/dist/esm/src/mcp-server.d.ts.map +1 -0
- package/dist/esm/src/mcp-server.js +10 -0
- package/dist/esm/src/mcp-server.js.map +1 -0
- package/dist/esm/src/react/useNavigationHandler.d.ts +29 -11
- package/dist/esm/src/react/useNavigationHandler.d.ts.map +1 -1
- package/dist/esm/src/react/useNavigationHandler.js +53 -12
- package/dist/esm/src/react/useNavigationHandler.js.map +1 -1
- package/dist/esm/src/state/StateSync.d.ts +57 -0
- package/dist/esm/src/state/StateSync.d.ts.map +1 -0
- package/dist/esm/src/state/StateSync.js +123 -0
- package/dist/esm/src/state/StateSync.js.map +1 -0
- package/dist/esm/src/tools/SystemTools.js +1 -1
- package/dist/esm/src/tools/SystemTools.js.map +1 -1
- package/dist/esm/src/ui/react/chat/ChatBubble.js +1 -1
- package/dist/esm/src/ui/react/chat/ChatBubble.js.map +1 -1
- package/package.json +9 -17
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supernal MCP Server
|
|
3
|
+
*
|
|
4
|
+
* MCP (Model Context Protocol) server that exposes Supernal Interface tools
|
|
5
|
+
* to external AI agents like Claude Desktop, Cursor, and custom MCP clients.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createSupernalMCPServer } from '@supernal/interface';
|
|
10
|
+
*
|
|
11
|
+
* const server = createSupernalMCPServer({
|
|
12
|
+
* name: 'my-app-tools',
|
|
13
|
+
* version: '1.0.0'
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* await server.start();
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
import { ToolRegistry } from '../background/registry/ToolRegistry.js';
|
|
20
|
+
import { ToolExecutor } from '../ai/ToolExecutor.js';
|
|
21
|
+
import { MCPErrorCode } from './types.js';
|
|
22
|
+
/**
|
|
23
|
+
* Default server configuration
|
|
24
|
+
*/
|
|
25
|
+
const DEFAULT_CONFIG = {
|
|
26
|
+
name: 'supernal-interface',
|
|
27
|
+
version: '1.0.0',
|
|
28
|
+
description: 'MCP server for Supernal Interface tools',
|
|
29
|
+
capabilities: {
|
|
30
|
+
tools: {},
|
|
31
|
+
resources: {},
|
|
32
|
+
prompts: {}
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Supernal MCP Server implementation
|
|
37
|
+
*/
|
|
38
|
+
export class SupernalMCPServer {
|
|
39
|
+
constructor(config = {}) {
|
|
40
|
+
this.running = false;
|
|
41
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
42
|
+
this.executor = new ToolExecutor();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Start the MCP server with given transport
|
|
46
|
+
*/
|
|
47
|
+
async start(transport) {
|
|
48
|
+
if (this.running) {
|
|
49
|
+
throw new Error('Server is already running');
|
|
50
|
+
}
|
|
51
|
+
this.transport = transport;
|
|
52
|
+
this.running = true;
|
|
53
|
+
console.error(`[MCP Server] Starting: ${this.config.name} v${this.config.version}`);
|
|
54
|
+
// Message processing loop
|
|
55
|
+
while (this.running) {
|
|
56
|
+
try {
|
|
57
|
+
const request = await this.transport.receive();
|
|
58
|
+
const response = await this.handle(request);
|
|
59
|
+
// Only send response if not null (notifications return null)
|
|
60
|
+
if (response !== null) {
|
|
61
|
+
await this.transport.send(response);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (!this.running)
|
|
66
|
+
break; // Transport closed
|
|
67
|
+
console.error('[MCP Server] Error processing message:', error);
|
|
68
|
+
// Send error response
|
|
69
|
+
if (this.transport) {
|
|
70
|
+
await this.transport.send({
|
|
71
|
+
jsonrpc: '2.0',
|
|
72
|
+
error: {
|
|
73
|
+
code: MCPErrorCode.INTERNAL_ERROR,
|
|
74
|
+
message: error instanceof Error ? error.message : 'Internal server error',
|
|
75
|
+
data: error
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Stop the MCP server
|
|
84
|
+
*/
|
|
85
|
+
async stop() {
|
|
86
|
+
this.running = false;
|
|
87
|
+
if (this.transport) {
|
|
88
|
+
await this.transport.close();
|
|
89
|
+
this.transport = undefined;
|
|
90
|
+
}
|
|
91
|
+
console.error('[MCP Server] Stopped');
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Handle incoming MCP request
|
|
95
|
+
*/
|
|
96
|
+
async handle(request) {
|
|
97
|
+
const { method, params, id } = request;
|
|
98
|
+
try {
|
|
99
|
+
// Handle notifications (no response needed)
|
|
100
|
+
if (method.startsWith('notifications/')) {
|
|
101
|
+
console.error(`[MCP Server] Received notification: ${method}`);
|
|
102
|
+
return null; // No response for notifications
|
|
103
|
+
}
|
|
104
|
+
switch (method) {
|
|
105
|
+
case 'tools/list':
|
|
106
|
+
return this.handleToolsList(id);
|
|
107
|
+
case 'tools/call':
|
|
108
|
+
return await this.handleToolCall(id, params);
|
|
109
|
+
case 'initialize':
|
|
110
|
+
return this.handleInitialize(id);
|
|
111
|
+
default:
|
|
112
|
+
return this.errorResponse(id, MCPErrorCode.METHOD_NOT_FOUND, `Method not found: ${method}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
return this.errorResponse(id, MCPErrorCode.INTERNAL_ERROR, error instanceof Error ? error.message : 'Internal error', error);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Handle tools/list request
|
|
121
|
+
*
|
|
122
|
+
* Returns location-filtered tools based on LocationContext.getCurrent()
|
|
123
|
+
* Uses @LocationScope decorators to determine tool availability
|
|
124
|
+
*/
|
|
125
|
+
handleToolsList(id) {
|
|
126
|
+
const toolsByContainer = ToolRegistry.getToolsGroupedByContainerForLocation();
|
|
127
|
+
const mcpTools = [];
|
|
128
|
+
for (const [container, containerTools] of Object.entries(toolsByContainer)) {
|
|
129
|
+
for (const tool of containerTools) {
|
|
130
|
+
mcpTools.push(this.convertToMCPTool(container, tool));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const response = {
|
|
134
|
+
tools: mcpTools
|
|
135
|
+
};
|
|
136
|
+
return {
|
|
137
|
+
jsonrpc: '2.0',
|
|
138
|
+
id,
|
|
139
|
+
result: response
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Handle tools/call request
|
|
144
|
+
*/
|
|
145
|
+
async handleToolCall(id, params) {
|
|
146
|
+
const { name, arguments: args } = params;
|
|
147
|
+
if (!name) {
|
|
148
|
+
return this.errorResponse(id, MCPErrorCode.INVALID_PARAMS, 'Missing tool name');
|
|
149
|
+
}
|
|
150
|
+
// Parse tool name (format: container.toolName)
|
|
151
|
+
const [container, toolName] = name.split('.');
|
|
152
|
+
if (!container || !toolName) {
|
|
153
|
+
return this.errorResponse(id, MCPErrorCode.INVALID_PARAMS, `Invalid tool name format: ${name}. Expected: container.toolName`);
|
|
154
|
+
}
|
|
155
|
+
// Find tool by containerId and tool name
|
|
156
|
+
// The tool may be registered with its class name, but exposed with containerId
|
|
157
|
+
// Handle undefined containerId (treat as matching the container name used in MCP)
|
|
158
|
+
const tool = Array.from(ToolRegistry.getAllTools().values()).find(t => {
|
|
159
|
+
const toolContainer = t.containerId || 'global'; // undefined becomes 'global'
|
|
160
|
+
return toolContainer === container && t.name === toolName;
|
|
161
|
+
});
|
|
162
|
+
if (!tool) {
|
|
163
|
+
return this.errorResponse(id, MCPErrorCode.TOOL_NOT_FOUND, `Tool not found: ${name}`);
|
|
164
|
+
}
|
|
165
|
+
// Execute tool
|
|
166
|
+
try {
|
|
167
|
+
// Convert args object to array format expected by ToolExecutor
|
|
168
|
+
const argsArray = Object.values(args || {});
|
|
169
|
+
const result = await this.executor.execute(tool, argsArray);
|
|
170
|
+
if (!result.success) {
|
|
171
|
+
return this.errorResponse(id, MCPErrorCode.TOOL_EXECUTION_FAILED, result.message || 'Tool execution failed', { error: result.error, timing: result.timing });
|
|
172
|
+
}
|
|
173
|
+
// Format success response
|
|
174
|
+
const response = {
|
|
175
|
+
content: [
|
|
176
|
+
{
|
|
177
|
+
type: 'text',
|
|
178
|
+
text: JSON.stringify({
|
|
179
|
+
success: true,
|
|
180
|
+
result: result.data,
|
|
181
|
+
timing: result.timing,
|
|
182
|
+
message: result.message
|
|
183
|
+
}, null, 2)
|
|
184
|
+
}
|
|
185
|
+
]
|
|
186
|
+
};
|
|
187
|
+
return {
|
|
188
|
+
jsonrpc: '2.0',
|
|
189
|
+
id,
|
|
190
|
+
result: response
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
return this.errorResponse(id, MCPErrorCode.TOOL_EXECUTION_FAILED, error instanceof Error ? error.message : 'Tool execution failed', error);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Handle initialize request
|
|
199
|
+
*/
|
|
200
|
+
handleInitialize(id) {
|
|
201
|
+
return {
|
|
202
|
+
jsonrpc: '2.0',
|
|
203
|
+
id,
|
|
204
|
+
result: {
|
|
205
|
+
protocolVersion: '2024-11-05',
|
|
206
|
+
serverInfo: {
|
|
207
|
+
name: this.config.name,
|
|
208
|
+
version: this.config.version
|
|
209
|
+
},
|
|
210
|
+
capabilities: this.config.capabilities
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Convert Supernal tool to MCP tool format
|
|
216
|
+
*/
|
|
217
|
+
convertToMCPTool(container, tool) {
|
|
218
|
+
// tool.inputSchema is already a full schema object {type, properties, required}
|
|
219
|
+
// Use it directly, or create a default if missing
|
|
220
|
+
const inputSchema = tool.inputSchema || {
|
|
221
|
+
type: 'object',
|
|
222
|
+
properties: {},
|
|
223
|
+
required: []
|
|
224
|
+
};
|
|
225
|
+
return {
|
|
226
|
+
name: `${container}.${tool.name}`,
|
|
227
|
+
description: tool.description || `Tool: ${tool.name}`,
|
|
228
|
+
inputSchema,
|
|
229
|
+
annotations: {
|
|
230
|
+
container,
|
|
231
|
+
category: tool.category,
|
|
232
|
+
elementId: tool.elementId,
|
|
233
|
+
componentName: tool.componentName,
|
|
234
|
+
toolType: tool.toolType,
|
|
235
|
+
aiEnabled: tool.aiEnabled
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Create error response
|
|
241
|
+
*/
|
|
242
|
+
errorResponse(id, code, message, data) {
|
|
243
|
+
const error = {
|
|
244
|
+
code,
|
|
245
|
+
message,
|
|
246
|
+
data
|
|
247
|
+
};
|
|
248
|
+
return {
|
|
249
|
+
jsonrpc: '2.0',
|
|
250
|
+
id,
|
|
251
|
+
error
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Create and configure a Supernal MCP server
|
|
257
|
+
*
|
|
258
|
+
* @param config - Server configuration
|
|
259
|
+
* @returns Configured MCP server instance
|
|
260
|
+
*
|
|
261
|
+
* @example
|
|
262
|
+
* ```typescript
|
|
263
|
+
* const server = createSupernalMCPServer({
|
|
264
|
+
* name: 'my-app-tools',
|
|
265
|
+
* version: '1.0.0'
|
|
266
|
+
* });
|
|
267
|
+
*
|
|
268
|
+
* // Start with stdio transport
|
|
269
|
+
* const transport = new StdioTransport();
|
|
270
|
+
* await server.start(transport);
|
|
271
|
+
* ```
|
|
272
|
+
*/
|
|
273
|
+
export function createSupernalMCPServer(config) {
|
|
274
|
+
return new SupernalMCPServer(config);
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stdio Transport for MCP
|
|
3
|
+
*
|
|
4
|
+
* Implements MCP transport over stdin/stdout for integration with
|
|
5
|
+
* Claude Desktop, Cursor, and other MCP clients.
|
|
6
|
+
*/
|
|
7
|
+
import type { MCPTransport, MCPRequest, MCPResponse } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* Stdio transport implementation
|
|
10
|
+
*
|
|
11
|
+
* Reads JSON-RPC messages from stdin (one per line)
|
|
12
|
+
* Writes JSON-RPC responses to stdout (one per line)
|
|
13
|
+
*/
|
|
14
|
+
export declare class StdioTransport implements MCPTransport {
|
|
15
|
+
private readline?;
|
|
16
|
+
private messageQueue;
|
|
17
|
+
private waitingResolvers;
|
|
18
|
+
private closed;
|
|
19
|
+
constructor();
|
|
20
|
+
/**
|
|
21
|
+
* Setup readline interface for stdin
|
|
22
|
+
*/
|
|
23
|
+
private setupReadline;
|
|
24
|
+
/**
|
|
25
|
+
* Send message to client (write to stdout)
|
|
26
|
+
*/
|
|
27
|
+
send(message: MCPResponse): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Receive message from client (read from stdin)
|
|
30
|
+
*/
|
|
31
|
+
receive(): Promise<MCPRequest>;
|
|
32
|
+
/**
|
|
33
|
+
* Close transport
|
|
34
|
+
*/
|
|
35
|
+
close(): Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create stdio transport
|
|
39
|
+
*
|
|
40
|
+
* @returns Stdio transport instance
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* import { createSupernalMCPServer, createStdioTransport } from '@supernal/interface';
|
|
45
|
+
*
|
|
46
|
+
* const server = createSupernalMCPServer();
|
|
47
|
+
* const transport = createStdioTransport();
|
|
48
|
+
*
|
|
49
|
+
* await server.start(transport);
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare function createStdioTransport(): StdioTransport;
|
|
53
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../src/mcp/transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAErE;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,CAAoB;IACrC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,gBAAgB,CAA4C;IACpE,OAAO,CAAC,MAAM,CAAkB;;IAMhC;;OAEG;IACH,OAAO,CAAC,aAAa;IAuCrB;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;IAgBpC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB7B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stdio Transport for MCP
|
|
3
|
+
*
|
|
4
|
+
* Implements MCP transport over stdin/stdout for integration with
|
|
5
|
+
* Claude Desktop, Cursor, and other MCP clients.
|
|
6
|
+
*/
|
|
7
|
+
import { createInterface } from 'readline';
|
|
8
|
+
/**
|
|
9
|
+
* Stdio transport implementation
|
|
10
|
+
*
|
|
11
|
+
* Reads JSON-RPC messages from stdin (one per line)
|
|
12
|
+
* Writes JSON-RPC responses to stdout (one per line)
|
|
13
|
+
*/
|
|
14
|
+
export class StdioTransport {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.messageQueue = [];
|
|
17
|
+
this.waitingResolvers = [];
|
|
18
|
+
this.closed = false;
|
|
19
|
+
this.setupReadline();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Setup readline interface for stdin
|
|
23
|
+
*/
|
|
24
|
+
setupReadline() {
|
|
25
|
+
this.readline = createInterface({
|
|
26
|
+
input: process.stdin,
|
|
27
|
+
output: process.stdout,
|
|
28
|
+
terminal: false
|
|
29
|
+
});
|
|
30
|
+
this.readline.on('line', (line) => {
|
|
31
|
+
try {
|
|
32
|
+
const message = JSON.parse(line);
|
|
33
|
+
// If someone is waiting for a message, give it to them immediately
|
|
34
|
+
if (this.waitingResolvers.length > 0) {
|
|
35
|
+
const resolve = this.waitingResolvers.shift();
|
|
36
|
+
resolve(message);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// Otherwise queue it
|
|
40
|
+
this.messageQueue.push(message);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.error('[Stdio Transport] Failed to parse message:', error);
|
|
45
|
+
console.error('[Stdio Transport] Line:', line);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
this.readline.on('close', () => {
|
|
49
|
+
this.closed = true;
|
|
50
|
+
// Reject all waiting resolvers
|
|
51
|
+
for (const resolve of this.waitingResolvers) {
|
|
52
|
+
resolve({
|
|
53
|
+
jsonrpc: '2.0',
|
|
54
|
+
method: '__transport_closed__'
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
this.waitingResolvers = [];
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Send message to client (write to stdout)
|
|
62
|
+
*/
|
|
63
|
+
async send(message) {
|
|
64
|
+
if (this.closed) {
|
|
65
|
+
throw new Error('Transport is closed');
|
|
66
|
+
}
|
|
67
|
+
const json = JSON.stringify(message);
|
|
68
|
+
process.stdout.write(json + '\n');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Receive message from client (read from stdin)
|
|
72
|
+
*/
|
|
73
|
+
async receive() {
|
|
74
|
+
if (this.closed) {
|
|
75
|
+
throw new Error('Transport is closed');
|
|
76
|
+
}
|
|
77
|
+
// If we have queued messages, return the first one
|
|
78
|
+
if (this.messageQueue.length > 0) {
|
|
79
|
+
return this.messageQueue.shift();
|
|
80
|
+
}
|
|
81
|
+
// Otherwise wait for the next message
|
|
82
|
+
return new Promise((resolve) => {
|
|
83
|
+
this.waitingResolvers.push(resolve);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Close transport
|
|
88
|
+
*/
|
|
89
|
+
async close() {
|
|
90
|
+
if (this.closed)
|
|
91
|
+
return;
|
|
92
|
+
this.closed = true;
|
|
93
|
+
if (this.readline) {
|
|
94
|
+
this.readline.close();
|
|
95
|
+
this.readline = undefined;
|
|
96
|
+
}
|
|
97
|
+
// Reject all waiting resolvers
|
|
98
|
+
for (const resolve of this.waitingResolvers) {
|
|
99
|
+
resolve({
|
|
100
|
+
jsonrpc: '2.0',
|
|
101
|
+
method: '__transport_closed__'
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
this.waitingResolvers = [];
|
|
105
|
+
this.messageQueue = [];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Create stdio transport
|
|
110
|
+
*
|
|
111
|
+
* @returns Stdio transport instance
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```typescript
|
|
115
|
+
* import { createSupernalMCPServer, createStdioTransport } from '@supernal/interface';
|
|
116
|
+
*
|
|
117
|
+
* const server = createSupernalMCPServer();
|
|
118
|
+
* const transport = createStdioTransport();
|
|
119
|
+
*
|
|
120
|
+
* await server.start(transport);
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
export function createStdioTransport() {
|
|
124
|
+
return new StdioTransport();
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/mcp/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Protocol Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for Model Context Protocol (MCP) integration.
|
|
5
|
+
* Based on @ai-sdk/mcp specification.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* MCP tool parameter schema
|
|
9
|
+
*/
|
|
10
|
+
export interface MCPToolParameter {
|
|
11
|
+
type: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
required?: boolean;
|
|
14
|
+
properties?: Record<string, MCPToolParameter>;
|
|
15
|
+
items?: MCPToolParameter;
|
|
16
|
+
enum?: string[];
|
|
17
|
+
default?: any;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* MCP tool definition
|
|
21
|
+
*/
|
|
22
|
+
export interface MCPTool {
|
|
23
|
+
/** Unique tool identifier (container.toolName format) */
|
|
24
|
+
name: string;
|
|
25
|
+
/** Human-readable description */
|
|
26
|
+
description: string;
|
|
27
|
+
/** JSON Schema for tool parameters */
|
|
28
|
+
inputSchema: {
|
|
29
|
+
type: 'object';
|
|
30
|
+
properties: Record<string, MCPToolParameter>;
|
|
31
|
+
required?: string[];
|
|
32
|
+
};
|
|
33
|
+
/** Optional annotations for additional metadata */
|
|
34
|
+
annotations?: {
|
|
35
|
+
container?: string;
|
|
36
|
+
category?: string;
|
|
37
|
+
elementId?: string;
|
|
38
|
+
componentName?: string;
|
|
39
|
+
[key: string]: any;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* MCP tools/list response
|
|
44
|
+
*/
|
|
45
|
+
export interface MCPToolsListResponse {
|
|
46
|
+
tools: MCPTool[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* MCP tools/call request
|
|
50
|
+
*/
|
|
51
|
+
export interface MCPToolCallRequest {
|
|
52
|
+
name: string;
|
|
53
|
+
arguments: Record<string, any>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* MCP content types
|
|
57
|
+
*/
|
|
58
|
+
export type MCPContentType = 'text' | 'image' | 'resource';
|
|
59
|
+
/**
|
|
60
|
+
* MCP text content
|
|
61
|
+
*/
|
|
62
|
+
export interface MCPTextContent {
|
|
63
|
+
type: 'text';
|
|
64
|
+
text: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* MCP image content
|
|
68
|
+
*/
|
|
69
|
+
export interface MCPImageContent {
|
|
70
|
+
type: 'image';
|
|
71
|
+
data: string;
|
|
72
|
+
mimeType: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* MCP resource content
|
|
76
|
+
*/
|
|
77
|
+
export interface MCPResourceContent {
|
|
78
|
+
type: 'resource';
|
|
79
|
+
resource: {
|
|
80
|
+
uri: string;
|
|
81
|
+
mimeType?: string;
|
|
82
|
+
text?: string;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Union of all MCP content types
|
|
87
|
+
*/
|
|
88
|
+
export type MCPContent = MCPTextContent | MCPImageContent | MCPResourceContent;
|
|
89
|
+
/**
|
|
90
|
+
* MCP tools/call response
|
|
91
|
+
*/
|
|
92
|
+
export interface MCPToolCallResponse {
|
|
93
|
+
content: MCPContent[];
|
|
94
|
+
isError?: boolean;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* MCP server configuration
|
|
98
|
+
*/
|
|
99
|
+
export interface MCPServerConfig {
|
|
100
|
+
/** Server name */
|
|
101
|
+
name: string;
|
|
102
|
+
/** Server version */
|
|
103
|
+
version: string;
|
|
104
|
+
/** Optional description */
|
|
105
|
+
description?: string;
|
|
106
|
+
/** Optional capabilities */
|
|
107
|
+
capabilities?: {
|
|
108
|
+
tools?: {};
|
|
109
|
+
resources?: {};
|
|
110
|
+
prompts?: {};
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* MCP error codes
|
|
115
|
+
*/
|
|
116
|
+
export declare enum MCPErrorCode {
|
|
117
|
+
PARSE_ERROR = -32700,
|
|
118
|
+
INVALID_REQUEST = -32600,
|
|
119
|
+
METHOD_NOT_FOUND = -32601,
|
|
120
|
+
INVALID_PARAMS = -32602,
|
|
121
|
+
INTERNAL_ERROR = -32603,
|
|
122
|
+
TOOL_NOT_FOUND = -1,
|
|
123
|
+
TOOL_EXECUTION_FAILED = -2
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* MCP error
|
|
127
|
+
*/
|
|
128
|
+
export interface MCPError {
|
|
129
|
+
code: MCPErrorCode;
|
|
130
|
+
message: string;
|
|
131
|
+
data?: any;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* MCP request
|
|
135
|
+
*/
|
|
136
|
+
export interface MCPRequest {
|
|
137
|
+
jsonrpc: '2.0';
|
|
138
|
+
id?: string | number;
|
|
139
|
+
method: string;
|
|
140
|
+
params?: any;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* MCP response
|
|
144
|
+
*/
|
|
145
|
+
export interface MCPResponse {
|
|
146
|
+
jsonrpc: '2.0';
|
|
147
|
+
id?: string | number;
|
|
148
|
+
result?: any;
|
|
149
|
+
error?: MCPError;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* MCP transport interface
|
|
153
|
+
*/
|
|
154
|
+
export interface MCPTransport {
|
|
155
|
+
/** Send message to client */
|
|
156
|
+
send(message: MCPResponse): Promise<void>;
|
|
157
|
+
/** Receive message from client */
|
|
158
|
+
receive(): Promise<MCPRequest>;
|
|
159
|
+
/** Close transport */
|
|
160
|
+
close(): Promise<void>;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* MCP server interface
|
|
164
|
+
*/
|
|
165
|
+
export interface MCPServer {
|
|
166
|
+
/** Server configuration */
|
|
167
|
+
config: MCPServerConfig;
|
|
168
|
+
/** Start server (transport provided externally) */
|
|
169
|
+
start(transport: MCPTransport): Promise<void>;
|
|
170
|
+
/** Stop server */
|
|
171
|
+
stop(): Promise<void>;
|
|
172
|
+
/** Handle incoming request */
|
|
173
|
+
handle(request: MCPRequest): Promise<MCPResponse | null>;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/mcp/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Protocol Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for Model Context Protocol (MCP) integration.
|
|
5
|
+
* Based on @ai-sdk/mcp specification.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* MCP error codes
|
|
9
|
+
*/
|
|
10
|
+
export var MCPErrorCode;
|
|
11
|
+
(function (MCPErrorCode) {
|
|
12
|
+
MCPErrorCode[MCPErrorCode["PARSE_ERROR"] = -32700] = "PARSE_ERROR";
|
|
13
|
+
MCPErrorCode[MCPErrorCode["INVALID_REQUEST"] = -32600] = "INVALID_REQUEST";
|
|
14
|
+
MCPErrorCode[MCPErrorCode["METHOD_NOT_FOUND"] = -32601] = "METHOD_NOT_FOUND";
|
|
15
|
+
MCPErrorCode[MCPErrorCode["INVALID_PARAMS"] = -32602] = "INVALID_PARAMS";
|
|
16
|
+
MCPErrorCode[MCPErrorCode["INTERNAL_ERROR"] = -32603] = "INTERNAL_ERROR";
|
|
17
|
+
MCPErrorCode[MCPErrorCode["TOOL_NOT_FOUND"] = -1] = "TOOL_NOT_FOUND";
|
|
18
|
+
MCPErrorCode[MCPErrorCode["TOOL_EXECUTION_FAILED"] = -2] = "TOOL_EXECUTION_FAILED";
|
|
19
|
+
})(MCPErrorCode || (MCPErrorCode = {}));
|
|
20
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6HH;;GAEG;AACH,MAAM,CAAN,IAAY,YAQX;AARD,WAAY,YAAY;IACtB,kEAAoB,CAAA;IACpB,0EAAwB,CAAA;IACxB,4EAAyB,CAAA;IACzB,wEAAuB,CAAA;IACvB,wEAAuB,CAAA;IACvB,oEAAmB,CAAA;IACnB,kFAA0B,CAAA;AAC5B,CAAC,EARW,YAAY,KAAZ,YAAY,QAQvB"}
|