MCP TaskManager
by Rudra-ravi
Verified
import { TaskManagerServer } from "./index.js";
import {
CallToolRequestSchema,
ListToolsRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";
export interface Env {
TASKMANAGER_KV: KVNamespace;
}
async function handleRequest(request: Request, env: Env) {
const corsHeaders = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
"Access-Control-Allow-Headers": "Content-Type",
};
if (request.method === "OPTIONS") {
return new Response(null, {
headers: corsHeaders,
});
}
if (request.method === "POST") {
const url = new URL(request.url);
const body = await request.json();
const taskManager = new TaskManagerServer(env.TASKMANAGER_KV);
try {
if (url.pathname === "/list-tools") {
const parsed = ListToolsRequestSchema.safeParse(body);
if (!parsed.success) {
throw new Error(`Invalid parameters: ${parsed.error}`);
}
const tools = await taskManager.listTools();
return new Response(JSON.stringify({ tools }), {
headers: {
"Content-Type": "application/json",
...corsHeaders,
},
});
} else if (url.pathname === "/call-tool") {
const parsed = CallToolRequestSchema.safeParse(body);
if (!parsed.success) {
throw new Error(`Invalid parameters: ${parsed.error}`);
}
const result = await taskManager.callTool(
parsed.data.params.name,
parsed.data.params.arguments || {}
);
return new Response(JSON.stringify(result), {
headers: {
"Content-Type": "application/json",
...corsHeaders,
},
});
}
} catch (error) {
return new Response(
JSON.stringify({
error: error instanceof Error ? error.message : "Unknown error",
}),
{
status: 400,
headers: {
"Content-Type": "application/json",
...corsHeaders,
},
}
);
}
}
return new Response("Not found", { status: 404 });
}
export default {
async fetch(
request: Request,
env: Env,
ctx: ExecutionContext
): Promise<Response> {
return handleRequest(request, env);
},
};