mcp-inspect 1.0.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/LICENSE +21 -0
- package/README.md +107 -0
- package/dist/src/App.d.ts +7 -0
- package/dist/src/App.d.ts.map +1 -0
- package/dist/src/App.js +591 -0
- package/dist/src/App.js.map +1 -0
- package/dist/src/components/DetailsModal.d.ts +11 -0
- package/dist/src/components/DetailsModal.d.ts.map +1 -0
- package/dist/src/components/DetailsModal.js +50 -0
- package/dist/src/components/DetailsModal.js.map +1 -0
- package/dist/src/components/HistoryTab.d.ts +13 -0
- package/dist/src/components/HistoryTab.d.ts.map +1 -0
- package/dist/src/components/HistoryTab.js +122 -0
- package/dist/src/components/HistoryTab.js.map +1 -0
- package/dist/src/components/InfoTab.d.ts +13 -0
- package/dist/src/components/InfoTab.d.ts.map +1 -0
- package/dist/src/components/InfoTab.js +28 -0
- package/dist/src/components/InfoTab.js.map +1 -0
- package/dist/src/components/NotificationsTab.d.ts +13 -0
- package/dist/src/components/NotificationsTab.d.ts.map +1 -0
- package/dist/src/components/NotificationsTab.js +37 -0
- package/dist/src/components/NotificationsTab.js.map +1 -0
- package/dist/src/components/PromptsTab.d.ts +13 -0
- package/dist/src/components/PromptsTab.d.ts.map +1 -0
- package/dist/src/components/PromptsTab.js +60 -0
- package/dist/src/components/PromptsTab.js.map +1 -0
- package/dist/src/components/ResourcesTab.d.ts +13 -0
- package/dist/src/components/ResourcesTab.d.ts.map +1 -0
- package/dist/src/components/ResourcesTab.js +60 -0
- package/dist/src/components/ResourcesTab.js.map +1 -0
- package/dist/src/components/Tabs.d.ts +24 -0
- package/dist/src/components/Tabs.d.ts.map +1 -0
- package/dist/src/components/Tabs.js +22 -0
- package/dist/src/components/Tabs.js.map +1 -0
- package/dist/src/components/ToolTestModal.d.ts +11 -0
- package/dist/src/components/ToolTestModal.d.ts.map +1 -0
- package/dist/src/components/ToolTestModal.js +112 -0
- package/dist/src/components/ToolTestModal.js.map +1 -0
- package/dist/src/components/ToolsTab.d.ts +14 -0
- package/dist/src/components/ToolsTab.d.ts.map +1 -0
- package/dist/src/components/ToolsTab.js +76 -0
- package/dist/src/components/ToolsTab.js.map +1 -0
- package/dist/src/hooks/useMCPClient.d.ts +41 -0
- package/dist/src/hooks/useMCPClient.d.ts.map +1 -0
- package/dist/src/hooks/useMCPClient.js +179 -0
- package/dist/src/hooks/useMCPClient.js.map +1 -0
- package/dist/src/hooks/useMessageTracking.d.ts +9 -0
- package/dist/src/hooks/useMessageTracking.d.ts.map +1 -0
- package/dist/src/hooks/useMessageTracking.js +124 -0
- package/dist/src/hooks/useMessageTracking.js.map +1 -0
- package/dist/src/types/focus.d.ts +2 -0
- package/dist/src/types/focus.d.ts.map +1 -0
- package/dist/src/types/focus.js +2 -0
- package/dist/src/types/focus.js.map +1 -0
- package/dist/src/types/messages.d.ts +14 -0
- package/dist/src/types/messages.d.ts.map +1 -0
- package/dist/src/types/messages.js +2 -0
- package/dist/src/types/messages.js.map +1 -0
- package/dist/src/types.d.ts +48 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/schemaToForm.d.ts +9 -0
- package/dist/src/utils/schemaToForm.d.ts.map +1 -0
- package/dist/src/utils/schemaToForm.js +107 -0
- package/dist/src/utils/schemaToForm.js.map +1 -0
- package/dist/tui.d.ts +3 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +43 -0
- package/dist/tui.js.map +1 -0
- package/package.json +58 -0
- package/screenshots/mcp-inspector.png +0 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MessageHistory, JSONRPCRequest, JSONRPCNotification, JSONRPCResultResponse, JSONRPCErrorResponse } from '../types/messages.js';
|
|
2
|
+
export declare function useMessageTracking(): {
|
|
3
|
+
history: MessageHistory;
|
|
4
|
+
trackRequest: (serverName: string, message: JSONRPCRequest) => string;
|
|
5
|
+
trackResponse: (serverName: string, message: JSONRPCResultResponse | JSONRPCErrorResponse) => void;
|
|
6
|
+
trackNotification: (serverName: string, message: JSONRPCNotification) => void;
|
|
7
|
+
clearHistory: (serverName?: string) => void;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=useMessageTracking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMessageTracking.d.ts","sourceRoot":"","sources":["../../../src/hooks/useMessageTracking.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AAE9B,wBAAgB,kBAAkB;;+BAIc,MAAM,WAAW,cAAc;gCAuB9B,MAAM,WAAW,qBAAqB,GAAG,oBAAoB;oCA8EzD,MAAM,WAAW,mBAAmB;gCAcxC,MAAM;EAoBtD"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { useState, useCallback, useRef } from 'react';
|
|
2
|
+
export function useMessageTracking() {
|
|
3
|
+
const [history, setHistory] = useState({});
|
|
4
|
+
const pendingRequestsRef = useRef(new Map());
|
|
5
|
+
const trackRequest = useCallback((serverName, message) => {
|
|
6
|
+
const entry = {
|
|
7
|
+
id: `${serverName}-${Date.now()}-${Math.random()}`,
|
|
8
|
+
timestamp: new Date(),
|
|
9
|
+
direction: 'request',
|
|
10
|
+
message,
|
|
11
|
+
};
|
|
12
|
+
if ('id' in message && message.id !== null && message.id !== undefined) {
|
|
13
|
+
pendingRequestsRef.current.set(message.id, {
|
|
14
|
+
timestamp: entry.timestamp,
|
|
15
|
+
serverName,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
setHistory((prev) => ({
|
|
19
|
+
...prev,
|
|
20
|
+
[serverName]: [...(prev[serverName] || []), entry],
|
|
21
|
+
}));
|
|
22
|
+
return entry.id;
|
|
23
|
+
}, []);
|
|
24
|
+
const trackResponse = useCallback((serverName, message) => {
|
|
25
|
+
if (!('id' in message) || message.id === undefined) {
|
|
26
|
+
// Response without an ID (shouldn't happen, but handle it)
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const entryId = message.id;
|
|
30
|
+
const pending = pendingRequestsRef.current.get(entryId);
|
|
31
|
+
if (pending && pending.serverName === serverName) {
|
|
32
|
+
pendingRequestsRef.current.delete(entryId);
|
|
33
|
+
const duration = Date.now() - pending.timestamp.getTime();
|
|
34
|
+
setHistory((prev) => {
|
|
35
|
+
const serverHistory = prev[serverName] || [];
|
|
36
|
+
// Find the matching request by message ID
|
|
37
|
+
const requestIndex = serverHistory.findIndex((e) => e.direction === 'request' && 'id' in e.message && e.message.id === entryId);
|
|
38
|
+
if (requestIndex !== -1) {
|
|
39
|
+
// Update the request entry with the response
|
|
40
|
+
const updatedHistory = [...serverHistory];
|
|
41
|
+
updatedHistory[requestIndex] = {
|
|
42
|
+
...updatedHistory[requestIndex],
|
|
43
|
+
response: message,
|
|
44
|
+
duration,
|
|
45
|
+
};
|
|
46
|
+
return { ...prev, [serverName]: updatedHistory };
|
|
47
|
+
}
|
|
48
|
+
// If no matching request found, create a new entry
|
|
49
|
+
const newEntry = {
|
|
50
|
+
id: `${serverName}-${Date.now()}-${Math.random()}`,
|
|
51
|
+
timestamp: new Date(),
|
|
52
|
+
direction: 'response',
|
|
53
|
+
message,
|
|
54
|
+
duration: 0,
|
|
55
|
+
};
|
|
56
|
+
return {
|
|
57
|
+
...prev,
|
|
58
|
+
[serverName]: [...serverHistory, newEntry],
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// Response without a matching request (might be from a different server or orphaned)
|
|
64
|
+
setHistory((prev) => {
|
|
65
|
+
const serverHistory = prev[serverName] || [];
|
|
66
|
+
// Check if there's a matching request in the history
|
|
67
|
+
const requestIndex = serverHistory.findIndex((e) => e.direction === 'request' && 'id' in e.message && e.message.id === entryId);
|
|
68
|
+
if (requestIndex !== -1) {
|
|
69
|
+
// Update the request entry with the response
|
|
70
|
+
const updatedHistory = [...serverHistory];
|
|
71
|
+
updatedHistory[requestIndex] = {
|
|
72
|
+
...updatedHistory[requestIndex],
|
|
73
|
+
response: message,
|
|
74
|
+
};
|
|
75
|
+
return { ...prev, [serverName]: updatedHistory };
|
|
76
|
+
}
|
|
77
|
+
// Create a new entry for orphaned response
|
|
78
|
+
const newEntry = {
|
|
79
|
+
id: `${serverName}-${Date.now()}-${Math.random()}`,
|
|
80
|
+
timestamp: new Date(),
|
|
81
|
+
direction: 'response',
|
|
82
|
+
message,
|
|
83
|
+
};
|
|
84
|
+
return {
|
|
85
|
+
...prev,
|
|
86
|
+
[serverName]: [...serverHistory, newEntry],
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}, []);
|
|
91
|
+
const trackNotification = useCallback((serverName, message) => {
|
|
92
|
+
const entry = {
|
|
93
|
+
id: `${serverName}-${Date.now()}-${Math.random()}`,
|
|
94
|
+
timestamp: new Date(),
|
|
95
|
+
direction: 'notification',
|
|
96
|
+
message,
|
|
97
|
+
};
|
|
98
|
+
setHistory((prev) => ({
|
|
99
|
+
...prev,
|
|
100
|
+
[serverName]: [...(prev[serverName] || []), entry],
|
|
101
|
+
}));
|
|
102
|
+
}, []);
|
|
103
|
+
const clearHistory = useCallback((serverName) => {
|
|
104
|
+
if (serverName) {
|
|
105
|
+
setHistory((prev) => {
|
|
106
|
+
const updated = { ...prev };
|
|
107
|
+
delete updated[serverName];
|
|
108
|
+
return updated;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
setHistory({});
|
|
113
|
+
pendingRequestsRef.current.clear();
|
|
114
|
+
}
|
|
115
|
+
}, []);
|
|
116
|
+
return {
|
|
117
|
+
history,
|
|
118
|
+
trackRequest,
|
|
119
|
+
trackResponse,
|
|
120
|
+
trackNotification,
|
|
121
|
+
clearHistory,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=useMessageTracking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMessageTracking.js","sourceRoot":"","sources":["../../../src/hooks/useMessageTracking.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus.d.ts","sourceRoot":"","sources":["../../../src/types/focus.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,MAAM,GAEN,gBAAgB,GAEhB,mBAAmB,GAEnB,cAAc,GACd,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus.js","sourceRoot":"","sources":["../../../src/types/focus.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { JSONRPCRequest, JSONRPCNotification, JSONRPCResultResponse, JSONRPCErrorResponse, JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
export type { JSONRPCRequest, JSONRPCNotification, JSONRPCResultResponse, JSONRPCErrorResponse, JSONRPCMessage };
|
|
3
|
+
export interface MessageEntry {
|
|
4
|
+
id: string;
|
|
5
|
+
timestamp: Date;
|
|
6
|
+
direction: 'request' | 'response' | 'notification';
|
|
7
|
+
message: JSONRPCRequest | JSONRPCNotification | JSONRPCResultResponse | JSONRPCErrorResponse;
|
|
8
|
+
response?: JSONRPCResultResponse | JSONRPCErrorResponse;
|
|
9
|
+
duration?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface MessageHistory {
|
|
12
|
+
[serverName: string]: MessageEntry[];
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/types/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACf,MAAM,oCAAoC,CAAC;AAE5C,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACf,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,cAAc,CAAC;IACnD,OAAO,EAAE,cAAc,GAAG,mBAAmB,GAAG,qBAAqB,GAAG,oBAAoB,CAAC;IAC7F,QAAQ,CAAC,EAAE,qBAAqB,GAAG,oBAAoB,CAAC;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;CACtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/types/messages.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export interface StdioServerConfig {
|
|
2
|
+
type?: 'stdio';
|
|
3
|
+
command: string;
|
|
4
|
+
args?: string[];
|
|
5
|
+
env?: Record<string, string>;
|
|
6
|
+
cwd?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface SseServerConfig {
|
|
9
|
+
type: 'sse';
|
|
10
|
+
url: string;
|
|
11
|
+
headers?: Record<string, string>;
|
|
12
|
+
eventSourceInit?: Record<string, unknown>;
|
|
13
|
+
requestInit?: Record<string, unknown>;
|
|
14
|
+
}
|
|
15
|
+
export interface StreamableHttpServerConfig {
|
|
16
|
+
type: 'streamableHttp';
|
|
17
|
+
url: string;
|
|
18
|
+
headers?: Record<string, string>;
|
|
19
|
+
requestInit?: Record<string, unknown>;
|
|
20
|
+
}
|
|
21
|
+
export type MCPServerConfig = StdioServerConfig | SseServerConfig | StreamableHttpServerConfig;
|
|
22
|
+
export interface MCPConfig {
|
|
23
|
+
mcpServers: Record<string, MCPServerConfig>;
|
|
24
|
+
}
|
|
25
|
+
export type ConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'error';
|
|
26
|
+
export interface StderrLogEntry {
|
|
27
|
+
timestamp: Date;
|
|
28
|
+
message: string;
|
|
29
|
+
}
|
|
30
|
+
export interface ServerState {
|
|
31
|
+
status: ConnectionStatus;
|
|
32
|
+
error: string | null;
|
|
33
|
+
capabilities: {
|
|
34
|
+
resources?: boolean;
|
|
35
|
+
prompts?: boolean;
|
|
36
|
+
tools?: boolean;
|
|
37
|
+
};
|
|
38
|
+
serverInfo?: {
|
|
39
|
+
name?: string;
|
|
40
|
+
version?: string;
|
|
41
|
+
};
|
|
42
|
+
instructions?: string;
|
|
43
|
+
resources: any[];
|
|
44
|
+
prompts: any[];
|
|
45
|
+
tools: any[];
|
|
46
|
+
stderrLogs: StderrLogEntry[];
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAGD,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,gBAAgB,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,eAAe,GAAG,0BAA0B,CAAC;AAE/F,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7C;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAErF,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE;QACZ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,GAAG,EAAE,CAAC;IACjB,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,KAAK,EAAE,GAAG,EAAE,CAAC;IACb,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts JSON Schema to ink-form format
|
|
3
|
+
*/
|
|
4
|
+
import type { FormStructure } from 'ink-form';
|
|
5
|
+
/**
|
|
6
|
+
* Converts a JSON Schema to ink-form structure
|
|
7
|
+
*/
|
|
8
|
+
export declare function schemaToForm(schema: any, toolName: string): FormStructure;
|
|
9
|
+
//# sourceMappingURL=schemaToForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaToForm.d.ts","sourceRoot":"","sources":["../../../src/utils/schemaToForm.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAA0B,MAAM,UAAU,CAAC;AAEtE;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CA0GzE"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts JSON Schema to ink-form format
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Converts a JSON Schema to ink-form structure
|
|
6
|
+
*/
|
|
7
|
+
export function schemaToForm(schema, toolName) {
|
|
8
|
+
const fields = [];
|
|
9
|
+
if (!schema || !schema.properties) {
|
|
10
|
+
return {
|
|
11
|
+
title: `Test Tool: ${toolName}`,
|
|
12
|
+
sections: [{ title: 'Parameters', fields: [] }],
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const properties = schema.properties || {};
|
|
16
|
+
const required = schema.required || [];
|
|
17
|
+
for (const [key, prop] of Object.entries(properties)) {
|
|
18
|
+
const property = prop;
|
|
19
|
+
const baseField = {
|
|
20
|
+
name: key,
|
|
21
|
+
label: property.title || key,
|
|
22
|
+
required: required.includes(key),
|
|
23
|
+
};
|
|
24
|
+
let field;
|
|
25
|
+
// Handle enum -> select
|
|
26
|
+
if (property.enum) {
|
|
27
|
+
if (property.type === 'array' && property.items?.enum) {
|
|
28
|
+
// For array of enums, we'll use select but handle it differently
|
|
29
|
+
// Note: ink-form doesn't have multiselect, so we'll use select
|
|
30
|
+
field = {
|
|
31
|
+
type: 'select',
|
|
32
|
+
...baseField,
|
|
33
|
+
options: property.items.enum.map((val) => ({
|
|
34
|
+
label: String(val),
|
|
35
|
+
value: String(val),
|
|
36
|
+
})),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// Single select
|
|
41
|
+
field = {
|
|
42
|
+
type: 'select',
|
|
43
|
+
...baseField,
|
|
44
|
+
options: property.enum.map((val) => ({
|
|
45
|
+
label: String(val),
|
|
46
|
+
value: String(val),
|
|
47
|
+
})),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Map JSON Schema types to ink-form types
|
|
53
|
+
switch (property.type) {
|
|
54
|
+
case 'string':
|
|
55
|
+
field = {
|
|
56
|
+
type: 'string',
|
|
57
|
+
...baseField,
|
|
58
|
+
};
|
|
59
|
+
break;
|
|
60
|
+
case 'integer':
|
|
61
|
+
field = {
|
|
62
|
+
type: 'integer',
|
|
63
|
+
...baseField,
|
|
64
|
+
...(property.minimum !== undefined && { min: property.minimum }),
|
|
65
|
+
...(property.maximum !== undefined && { max: property.maximum }),
|
|
66
|
+
};
|
|
67
|
+
break;
|
|
68
|
+
case 'number':
|
|
69
|
+
field = {
|
|
70
|
+
type: 'float',
|
|
71
|
+
...baseField,
|
|
72
|
+
...(property.minimum !== undefined && { min: property.minimum }),
|
|
73
|
+
...(property.maximum !== undefined && { max: property.maximum }),
|
|
74
|
+
};
|
|
75
|
+
break;
|
|
76
|
+
case 'boolean':
|
|
77
|
+
field = {
|
|
78
|
+
type: 'boolean',
|
|
79
|
+
...baseField,
|
|
80
|
+
};
|
|
81
|
+
break;
|
|
82
|
+
default:
|
|
83
|
+
// Default to string for unknown types
|
|
84
|
+
field = {
|
|
85
|
+
type: 'string',
|
|
86
|
+
...baseField,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Set initial value from default
|
|
91
|
+
if (property.default !== undefined) {
|
|
92
|
+
field.initialValue = property.default;
|
|
93
|
+
}
|
|
94
|
+
fields.push(field);
|
|
95
|
+
}
|
|
96
|
+
const sections = [
|
|
97
|
+
{
|
|
98
|
+
title: 'Parameters',
|
|
99
|
+
fields,
|
|
100
|
+
},
|
|
101
|
+
];
|
|
102
|
+
return {
|
|
103
|
+
title: `Test Tool: ${toolName}`,
|
|
104
|
+
sections,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=schemaToForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaToForm.js","sourceRoot":"","sources":["../../../src/utils/schemaToForm.ts"],"names":[],"mappings":"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"}
|
package/dist/tui.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../tui.tsx"],"names":[],"mappings":""}
|
package/dist/tui.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { render } from 'ink';
|
|
4
|
+
import App from './src/App.js';
|
|
5
|
+
const args = process.argv.slice(2);
|
|
6
|
+
const configFile = args[0];
|
|
7
|
+
if (!configFile) {
|
|
8
|
+
console.error('Usage: mcp-inspect <config-file.json>');
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
// Switch to alternate screen (like vim, top, etc.)
|
|
12
|
+
// This preserves the terminal history and switches back automatically on exit
|
|
13
|
+
process.stdout.write('\x1b[?1049h'); // Switch to alternate screen
|
|
14
|
+
const instance = render(_jsx(App, { configFile: configFile }));
|
|
15
|
+
// Set up cleanup on exit function
|
|
16
|
+
const exitWithCleanup = (code = 0) => {
|
|
17
|
+
try {
|
|
18
|
+
instance.unmount();
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
// Ignore errors on unmount
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
instance.cleanup();
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
// Ignore errors on cleanup
|
|
28
|
+
}
|
|
29
|
+
// Switch back from alternate screen
|
|
30
|
+
process.stdout.write('\x1b[?1049l'); // Switch back from alternate screen
|
|
31
|
+
process.stdout.write('', () => { }); // Force flush
|
|
32
|
+
process.exit(code);
|
|
33
|
+
};
|
|
34
|
+
// Update App with exit callback
|
|
35
|
+
instance.rerender(_jsx(App, { configFile: configFile, onExit: exitWithCleanup }));
|
|
36
|
+
// Handle various exit signals (for Ctrl+C, etc.)
|
|
37
|
+
process.on('SIGINT', () => {
|
|
38
|
+
exitWithCleanup(0);
|
|
39
|
+
});
|
|
40
|
+
process.on('SIGTERM', () => {
|
|
41
|
+
exitWithCleanup(0);
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=tui.js.map
|
package/dist/tui.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../tui.tsx"],"names":[],"mappings":";;AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,GAAG,MAAM,cAAc,CAAC;AAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAE3B,IAAI,CAAC,UAAU,EAAE,CAAC;IAChB,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,mDAAmD;AACnD,8EAA8E;AAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,6BAA6B;AAElE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAC,GAAG,IAAC,UAAU,EAAE,UAAU,GAAI,CAAC,CAAC;AAEzD,kCAAkC;AAClC,MAAM,eAAe,GAAG,CAAC,OAAe,CAAC,EAAE,EAAE;IAC3C,IAAI,CAAC;QACH,QAAQ,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2BAA2B;IAC7B,CAAC;IACD,IAAI,CAAC;QACH,QAAQ,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2BAA2B;IAC7B,CAAC;IAED,oCAAoC;IACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,oCAAoC;IACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,cAAc;IAElD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC,CAAC;AAEF,gCAAgC;AAChC,QAAQ,CAAC,QAAQ,CAAC,KAAC,GAAG,IAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,GAAI,CAAC,CAAC;AAE5E,iDAAiD;AACjD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,eAAe,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,eAAe,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mcp-inspect",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A terminal UI (TUI) inspector for Model Context Protocol (MCP) servers",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/tui.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"mcp-inspect": "./dist/tui.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/",
|
|
12
|
+
"LICENSE",
|
|
13
|
+
"README.md",
|
|
14
|
+
"screenshots/"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"start": "tsx tui.tsx",
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"dev": "tsx tui.tsx",
|
|
20
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
21
|
+
"everything-sse": "./scripts/run-everything-sse.sh",
|
|
22
|
+
"prepublishOnly": "npm run build"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"mcp",
|
|
26
|
+
"model-context-protocol",
|
|
27
|
+
"inspector",
|
|
28
|
+
"tui",
|
|
29
|
+
"terminal-ui",
|
|
30
|
+
"cli",
|
|
31
|
+
"mcp-server",
|
|
32
|
+
"debug",
|
|
33
|
+
"development-tools"
|
|
34
|
+
],
|
|
35
|
+
"author": "TeamSpark, LLC",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/TeamSparkAI/mcp-inspect.git"
|
|
40
|
+
},
|
|
41
|
+
"bugs": {
|
|
42
|
+
"url": "https://github.com/TeamSparkAI/mcp-inspect/issues"
|
|
43
|
+
},
|
|
44
|
+
"homepage": "https://github.com/TeamSparkAI/mcp-inspect#readme",
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
47
|
+
"ink": "^6.6.0",
|
|
48
|
+
"ink-form": "^2.0.1",
|
|
49
|
+
"ink-scroll-view": "^0.3.5",
|
|
50
|
+
"react": "^19.2.3"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/node": "^25.0.3",
|
|
54
|
+
"@types/react": "^19.2.7",
|
|
55
|
+
"tsx": "^4.21.0",
|
|
56
|
+
"typescript": "^5.9.3"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
Binary file
|