remove json middleware from everything streamable http server
This commit is contained in:
parent
7e602b0976
commit
e70bcd317b
1 changed files with 5 additions and 7 deletions
|
|
@ -1,5 +1,4 @@
|
||||||
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
||||||
import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
||||||
import { InMemoryEventStore } from '@modelcontextprotocol/sdk/examples/shared/inMemoryEventStore.js';
|
import { InMemoryEventStore } from '@modelcontextprotocol/sdk/examples/shared/inMemoryEventStore.js';
|
||||||
import express, { Request, Response } from "express";
|
import express, { Request, Response } from "express";
|
||||||
import { createServer } from "./everything.js";
|
import { createServer } from "./everything.js";
|
||||||
|
|
@ -7,14 +6,12 @@ import { randomUUID } from 'node:crypto';
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
app.use(express.json());
|
|
||||||
|
|
||||||
const { server, cleanup } = createServer();
|
const { server, cleanup } = createServer();
|
||||||
|
|
||||||
const transports: { [sessionId: string]: StreamableHTTPServerTransport } = {};
|
const transports: { [sessionId: string]: StreamableHTTPServerTransport } = {};
|
||||||
|
|
||||||
app.post('/mcp', async (req: Request, res: Response) => {
|
app.post('/mcp', async (req: Request, res: Response) => {
|
||||||
console.log('Received MCP request:', req.body);
|
console.log('Received MCP POST request');
|
||||||
try {
|
try {
|
||||||
// Check for existing session ID
|
// Check for existing session ID
|
||||||
const sessionId = req.headers['mcp-session-id'] as string | undefined;
|
const sessionId = req.headers['mcp-session-id'] as string | undefined;
|
||||||
|
|
@ -23,7 +20,7 @@ app.post('/mcp', async (req: Request, res: Response) => {
|
||||||
if (sessionId && transports[sessionId]) {
|
if (sessionId && transports[sessionId]) {
|
||||||
// Reuse existing transport
|
// Reuse existing transport
|
||||||
transport = transports[sessionId];
|
transport = transports[sessionId];
|
||||||
} else if (!sessionId && isInitializeRequest(req.body)) {
|
} else if (!sessionId) {
|
||||||
// New initialization request
|
// New initialization request
|
||||||
const eventStore = new InMemoryEventStore();
|
const eventStore = new InMemoryEventStore();
|
||||||
transport = new StreamableHTTPServerTransport({
|
transport = new StreamableHTTPServerTransport({
|
||||||
|
|
@ -50,7 +47,7 @@ app.post('/mcp', async (req: Request, res: Response) => {
|
||||||
// so responses can flow back through the same transport
|
// so responses can flow back through the same transport
|
||||||
await server.connect(transport);
|
await server.connect(transport);
|
||||||
|
|
||||||
await transport.handleRequest(req, res, req.body);
|
await transport.handleRequest(req, res);
|
||||||
return; // Already handled
|
return; // Already handled
|
||||||
} else {
|
} else {
|
||||||
// Invalid request - no session ID or not initialization request
|
// Invalid request - no session ID or not initialization request
|
||||||
|
|
@ -67,7 +64,7 @@ app.post('/mcp', async (req: Request, res: Response) => {
|
||||||
|
|
||||||
// Handle the request with existing transport - no need to reconnect
|
// Handle the request with existing transport - no need to reconnect
|
||||||
// The existing transport is already connected to the server
|
// The existing transport is already connected to the server
|
||||||
await transport.handleRequest(req, res, req.body);
|
await transport.handleRequest(req, res);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error handling MCP request:', error);
|
console.error('Error handling MCP request:', error);
|
||||||
if (!res.headersSent) {
|
if (!res.headersSent) {
|
||||||
|
|
@ -86,6 +83,7 @@ app.post('/mcp', async (req: Request, res: Response) => {
|
||||||
|
|
||||||
// Handle GET requests for SSE streams (using built-in support from StreamableHTTP)
|
// Handle GET requests for SSE streams (using built-in support from StreamableHTTP)
|
||||||
app.get('/mcp', async (req: Request, res: Response) => {
|
app.get('/mcp', async (req: Request, res: Response) => {
|
||||||
|
console.log('Received MCP GET request');
|
||||||
const sessionId = req.headers['mcp-session-id'] as string | undefined;
|
const sessionId = req.headers['mcp-session-id'] as string | undefined;
|
||||||
if (!sessionId || !transports[sessionId]) {
|
if (!sessionId || !transports[sessionId]) {
|
||||||
res.status(400).json({
|
res.status(400).json({
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue