Skip to content

Commit 50f86eb

Browse files
committed
fix types, eliminate client/server
1 parent df8051b commit 50f86eb

File tree

3 files changed

+16
-43
lines changed

3 files changed

+16
-43
lines changed

client/src/App.tsx

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import {
77
ReadResourceResultSchema,
88
CallToolResultSchema,
99
ListPromptsResultSchema,
10+
Tool,
11+
ClientRequest,
1012
} from "mcp-typescript/types.js";
1113
import { useState } from "react";
1214
import {
@@ -28,8 +30,9 @@ import RequestsTab from "./components/RequestsTabs";
2830
import ResourcesTab, { Resource } from "./components/ResourcesTab";
2931
import NotificationsTab from "./components/NotificationsTab";
3032
import PromptsTab, { Prompt } from "./components/PromptsTab";
31-
import ToolsTab, { Tool as ToolType } from "./components/ToolsTab";
33+
import ToolsTab from "./components/ToolsTab";
3234
import History from "./components/History";
35+
import { AnyZodObject } from "node_modules/zod/lib";
3336

3437
const App = () => {
3538
const [connectionStatus, setConnectionStatus] = useState<
@@ -39,7 +42,7 @@ const App = () => {
3942
const [resourceContent, setResourceContent] = useState<string>("");
4043
const [prompts, setPrompts] = useState<Prompt[]>([]);
4144
const [promptContent, setPromptContent] = useState<string>("");
42-
const [tools, setTools] = useState<ToolType[]>([]);
45+
const [tools, setTools] = useState<Tool[]>([]);
4346
const [toolResult, setToolResult] = useState<string>("");
4447
const [error, setError] = useState<string | null>(null);
4548
const [command, setCommand] = useState<string>(
@@ -57,7 +60,7 @@ const App = () => {
5760
null,
5861
);
5962
const [selectedPrompt, setSelectedPrompt] = useState<Prompt | null>(null);
60-
const [selectedTool, setSelectedTool] = useState<ToolType | null>(null);
63+
const [selectedTool, setSelectedTool] = useState<Tool | null>(null);
6164

6265
const pushHistory = (request: object, response: object) => {
6366
setRequestHistory((prev) => [
@@ -66,10 +69,10 @@ const App = () => {
6669
]);
6770
};
6871

69-
const makeRequest = async (
70-
request: Parameters<Client["request"]>[0],
71-
schema: Parameters<Client["request"]>[1],
72-
): Promise<ReturnType<Client["request"]>> => {
72+
const makeRequest = async <T extends AnyZodObject>(
73+
request: ClientRequest,
74+
schema: T,
75+
) => {
7376
if (!mcpClient) {
7477
throw new Error("MCP client not connected");
7578
}
@@ -114,9 +117,7 @@ const App = () => {
114117
},
115118
ListPromptsResultSchema,
116119
);
117-
if (response.prompts) {
118-
setPrompts(response.prompts);
119-
}
120+
setPrompts(response.prompts);
120121
};
121122

122123
const getPrompt = async (name: string, args: Record<string, string> = {}) => {
@@ -137,9 +138,7 @@ const App = () => {
137138
},
138139
ListToolsResultSchema,
139140
);
140-
if (response.tools) {
141-
setTools(response.tools);
142-
}
141+
setTools(response.tools);
143142
};
144143

145144
const callTool = async (name: string, params: Record<string, unknown>) => {

client/src/components/ToolsTab.tsx

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,11 @@ import { Button } from "@/components/ui/button";
33
import { Input } from "@/components/ui/input";
44
import { Send, AlertCircle } from "lucide-react";
55
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
6+
import { Tool } from "mcp-typescript/types.js";
67
import { useState } from "react";
78
import { Label } from "@/components/ui/label";
89
import ListPane from "./ListPane";
910

10-
export type Tool = {
11-
name: string;
12-
description?: string | undefined;
13-
inputSchema: {
14-
type: string;
15-
properties?: Record<string, { type: string; description: string }>;
16-
};
17-
};
18-
1911
const ToolsTab = ({
2012
tools,
2113
listTools,

server/src/index.ts

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,40 @@
11
import cors from "cors";
22

3-
import { Server } from "mcp-typescript/server/index.js";
43
import { SSEServerTransport } from "mcp-typescript/server/sse.js";
54
import express from "express";
6-
import { Client } from "mcp-typescript/client/index.js";
75
import { StdioClientTransport } from "mcp-typescript/client/stdio.js";
86
import mcpProxy from "./mcpProxy.js";
97

108
const app = express();
119
app.use(cors());
1210

13-
let servers: Server[] = [];
11+
let transports: SSEServerTransport[] = [];
1412

1513
app.get("/sse", async (req, res) => {
1614
console.log("New SSE connection");
1715
const command = decodeURIComponent(req.query.command as string);
1816
const args = decodeURIComponent(req.query.args as string).split(",");
19-
const mcpClient = new Client({ name: "MyApp", version: "1.0.0" });
2017
const backingServerTransport = new StdioClientTransport();
2118
await backingServerTransport.spawn({ command, args });
22-
await mcpClient.connect(backingServerTransport);
2319

2420
const webAppTransport = new SSEServerTransport("/message");
25-
const server = new Server({
26-
name: "mcp-server-inspector",
27-
version: "0.0.1",
28-
});
29-
servers.push(server);
30-
31-
server.onclose = async () => {
32-
console.log("SSE connection closed");
33-
servers = servers.filter((s) => s !== server);
34-
await mcpClient.close();
35-
};
21+
transports.push(webAppTransport);
3622

3723
await webAppTransport.connectSSE(req, res);
38-
await server.connect(webAppTransport);
3924

4025
mcpProxy({
4126
transportToClient: webAppTransport,
4227
transportToServer: backingServerTransport,
4328
onerror: (error) => {
4429
console.error(error);
45-
server.close();
4630
},
4731
});
4832
});
4933

5034
app.post("/message", async (req, res) => {
5135
console.log("Received message");
5236

53-
const transport = servers
54-
.map((s) => s.transport as SSEServerTransport)
55-
.find((t) => true);
37+
const transport = transports.find((t) => true);
5638
if (!transport) {
5739
res.status(404).send("Session not found");
5840
return;

0 commit comments

Comments
 (0)