import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import { canvasApiRequest } from "../api/canvas-client.js";
import { CanvasCourse } from "../types/canvas.js";
export function registerListCoursesTool(server: McpServer) {
server.tool(
"list_courses",
"Lists all courses you are enrolled in, with options to filter by active, completed, or all courses.",
{
state: z.enum(['active', 'completed', 'all']).default('active')
.describe("Filter courses by state: active, completed, or all"),
},
async ({ state }) => {
try {
const courses = await canvasApiRequest<CanvasCourse[]>(`/courses?enrollment_state=${state}&include[]=term`);
if (courses.length === 0) {
return {
content: [{
type: "text",
text: `No ${state} courses found.`
}]
};
}
const courseList = courses.map((course) => {
const termName = course.term ? `(${course.term.name})` : '';
return `- ID: ${course.id} | ${course.name} ${termName}`;
}).join('\n');
return {
content: [{
type: "text",
text: `Your ${state} courses:\n\n${courseList}`
}]
};
} catch (error) {
return {
content: [{
type: "text",
text: `Failed to fetch courses: ${(error as Error).message}`
}],
isError: true
};
}
}
);
}