From 948bf143127feecfc659110b21afd4c4fe670949 Mon Sep 17 00:00:00 2001 From: bipproduction Date: Sun, 26 Oct 2025 21:26:27 +0800 Subject: [PATCH] tambahan --- src/server/routes/mcp_route.ts | 168 ++++++++++++++++++--------------- x.sh | 16 +--- 2 files changed, 96 insertions(+), 88 deletions(-) diff --git a/src/server/routes/mcp_route.ts b/src/server/routes/mcp_route.ts index a0c9864..e84d271 100644 --- a/src/server/routes/mcp_route.ts +++ b/src/server/routes/mcp_route.ts @@ -1,88 +1,106 @@ import { Elysia, t } from "elysia"; export const MCPRoute = new Elysia({ - prefix: "/mcp-server", - tags: ["mcp-server"], + prefix: "/mcp-server", + tags: ["mcp-server"], }) - .post("/mcp", ({ body, set }) => { - const { id, method, params } = body as any; + .post("/mcp", ({ body, set }) => { + const { id, method, params } = body as any; - set.headers["Content-Type"] = "application/json; charset=utf-8"; - set.headers["Transfer-Encoding"] = "chunked"; - set.headers["Connection"] = "keep-alive"; + set.headers["Content-Type"] = "application/json; charset=utf-8"; + set.headers["Transfer-Encoding"] = "chunked"; + set.headers["Connection"] = "keep-alive"; - // ✅ Streaming Response - const stream = new ReadableStream({ - async start(controller) { - // tools/list - if (method === "tools/list") { - controller.enqueue( - JSON.stringify({ - jsonrpc: "2.0", - id, - result: [ - { - name: "sayHello", - description: "Greets user", - inputSchema: { - type: "object", - properties: { name: { type: "string" } }, - }, - }, - ], - }) + "\n" - ); - // ❌ Jangan tutup langsung, beri delay agar n8n sempat membaca - await Bun.sleep(200); - controller.close(); - return; - } + // ✅ Streaming Response + const stream = new ReadableStream({ + async start(controller) { + // tools/list + if (method === "tools/list") { + controller.enqueue( + JSON.stringify({ + jsonrpc: "2.0", + id, + result: [ + { + name: "sayHello", + description: "Greets user", + inputSchema: { + type: "object", + properties: { name: { type: "string" } }, + }, + }, + ], + }) + "\n" + ); + // ❌ Jangan tutup langsung, beri delay agar n8n sempat membaca + await Bun.sleep(200); + controller.close(); + return; + } - // tools/sayHello → streaming progress - if (method === "tools/sayHello") { - controller.enqueue( - JSON.stringify({ - jsonrpc: "2.0", - id, - result: { status: "Processing..." }, - }) + "\n" - ); - await Bun.sleep(500); + // tools/sayHello → streaming progress + if (method === "tools/sayHello") { + controller.enqueue( + JSON.stringify({ + jsonrpc: "2.0", + id, + result: { status: "Processing..." }, + }) + "\n" + ); + await Bun.sleep(500); - controller.enqueue( - JSON.stringify({ - jsonrpc: "2.0", - id, - result: { message: `Hello ${params?.name || "User"}` }, - }) + "\n" - ); - await Bun.sleep(200); + controller.enqueue( + JSON.stringify({ + jsonrpc: "2.0", + id, + result: { message: `Hello ${params?.name || "User"}` }, + }) + "\n" + ); + await Bun.sleep(200); - controller.close(); - return; - } + controller.close(); + return; + } - // Method tidak dikenal - controller.enqueue( - JSON.stringify({ - jsonrpc: "2.0", - id, - error: { code: -32601, message: `Method ${method} not found` }, - }) + "\n" - ); - await Bun.sleep(200); - controller.close(); - }, + if (method === "mcp/version") { + controller.enqueue( + JSON.stringify({ + jsonrpc: "2.0", + id, + result: { + protocol: "2024-11-05", // versi MCP baru + capabilities: { + "tools/list": true, + "tools/call": true, + }, + }, + }) + "\n" + ); + controller.close(); + return; + } + + // Method tidak dikenal + controller.enqueue( + JSON.stringify({ + jsonrpc: "2.0", + id, + error: { code: -32601, message: `Method ${method} not found` }, + }) + "\n" + ); + await Bun.sleep(200); + controller.close(); + }, + }); + + return new Response(stream); + }, { + body: t.Object({ + jsonrpc: t.Optional(t.String()), + method: t.String(), + params: t.Optional(t.Record(t.String(), t.Any())), + id: t.Optional(t.Union([t.String(), t.Number()])), + }), }); - return new Response(stream); - }, { - body: t.Object({ - jsonrpc: t.Optional(t.String()), - method: t.String(), - params: t.Optional(t.Record(t.String(), t.Any())), - id: t.Optional(t.Union([t.String(), t.Number()])), - }), - }); - export default MCPRoute; diff --git a/x.sh b/x.sh index 726a661..18159a0 100644 --- a/x.sh +++ b/x.sh @@ -1,13 +1,3 @@ -TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJob3N0Iiwic3ViIjoiY21neXI4MjR3MDAwMHBkemhwdjIxZGFzZCIsInBheWxvYWQiOiJ7XCJuYW1lXCI6XCJwZXJjb2JhYW5cIixcImRlc2NyaXB0aW9uXCI6XCJ1bnR1ayBwZXJjb2JhYW5cIixcImV4cGlyZWRBdFwiOlwiMjAzMS0xMC0yMFwifSIsImV4cCI6MTk1MDIyMDgwMCwiaWF0IjoxNzYwOTQyNTcwfQ.X4Y4MJ4aIohT65oJjHCaf2d6e8afnroXu3Hz-jH0WGM -curl https://cld-dkr-prod-jenna-mcp.wibudev.com/mcp-server/mcp \ - --request POST \ - --header 'Content-Type: application/json' \ - --header 'Authorization: Bearer $TOKEN' \ - --data '{ - "jsonrpc": "", - "method": "", - "params": { - "^(.*)$": null - }, - "id": "" -}' \ No newline at end of file +curl -N -X POST https://cld-dkr-prod-jenna-mcp.wibudev.com/mcp-server/mcp \ + -H "Content-Type: application/json" \ + -d '{"id":1,"method":"tools/list"}'