39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
|
|
import { NextResponse } from "next/server";
|
|
|
|
import { auth } from "@/app/(auth)/auth";
|
|
import { createCanvasCapabilityMcpServer } from "@/lib/canvas/capabilities/mcp-server";
|
|
|
|
export const dynamic = "force-dynamic";
|
|
export const maxDuration = 600;
|
|
|
|
async function handleMcpRequest(
|
|
request: Request,
|
|
{ params }: { params: Promise<{ id: string }> }
|
|
) {
|
|
const session = await auth();
|
|
if (!session?.user?.id) {
|
|
return NextResponse.json(
|
|
{ error: "未登录,无法访问画布 MCP 服务" },
|
|
{ status: 401 }
|
|
);
|
|
}
|
|
|
|
const { id: projectId } = await params;
|
|
const transport = new WebStandardStreamableHTTPServerTransport({
|
|
enableJsonResponse: true,
|
|
});
|
|
const server = await createCanvasCapabilityMcpServer({
|
|
projectId,
|
|
requestHeaders: request.headers,
|
|
requestUrl: request.url,
|
|
userId: session.user.id,
|
|
});
|
|
await server.connect(transport);
|
|
return transport.handleRequest(request);
|
|
}
|
|
|
|
export const POST = handleMcpRequest;
|
|
export const GET = handleMcpRequest;
|
|
export const DELETE = handleMcpRequest;
|