import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import {
CallToolRequestSchema,
ListToolsRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
import express from "express";
/* =========================
MCP Server
========================= */
const server = new Server(
{ name: "jaso-mcp", version: "0.1.0" },
{ capabilities: { tools: {} } }
);
/* =========================
Tools
========================= */
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [
{
name: "analyze_question",
description: "자소서 문항 분석",
inputSchema: {
type: "object",
properties: { question: { type: "string" } },
required: ["question"],
},
},
],
}));
server.setRequestHandler(CallToolRequestSchema, async (req) => {
return {
content: [
{
type: "text",
text: "✅ MCP Tool 정상 동작",
},
],
};
});
/* =========================
HTTP + SSE (Play MCP FINAL)
========================= */
const app = express();
const port = process.env.PORT || 3333;
/**
* ✅ SSE endpoint (Play MCP가 여기에 연결)
*/
app.get("/sse", async (req, res) => {
console.log("✅ SSE client connected");
const transport = new SSEServerTransport("/messages", res);
await server.connect(transport);
});
/**
* ✅ MCP message endpoint (Play MCP가 여기에 POST)
*/
app.post("/messages", (req, res) => {
// MCP SDK가 내부적으로 처리
res.sendStatus(204);
});
app.listen(port, () => {
console.log(`✅ MCP SSE server running`);
});