get_meetings_by_planned_course_id
Retrieve all meeting records for a specific planned course by providing its ID.
Instructions
Get all meeting records of a planned course
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| planned_course_id | Yes | ID of the parent resource | |
| cursor | No | Cursor for fetching the next page of results | |
| per_page | No | Number of results per page (default: 25) | |
| sort | No | Sort the results. Can change order by using `<sort_by>:<direction>` where `<direction>` is either `asc` or `desc` |
Implementation Reference
- src/tools/meetings.ts:25-41 (handler)The handler function for get_meetings_by_planned_course_id. It calls apiList with the path `/planned_courses/${planned_course_id}/meetings`, passing cursor, per_page, and sort params, then formats and returns the list result.
async ({ planned_course_id, cursor, per_page, sort }) => { try { const result = await apiList<EduframeRecord>(`/planned_courses/${planned_course_id}/meetings`, { cursor, per_page, sort, }); void logResponse("get_meetings_by_planned_course_id", { planned_course_id, cursor, per_page, sort }, result); const toolResult = formatList(result.records, "meetings"); if (result.nextCursor) { toolResult.content.push({ type: "text", text: `\nNext page cursor: ${result.nextCursor}` }); } return toolResult; } catch (error) { return formatError(error); } }, - src/tools/meetings.ts:13-23 (schema)Input schema for the get_meetings_by_planned_course_id tool. Defines planned_course_id (required number), cursor (optional string), per_page (optional number), and sort (optional array of enum values).
inputSchema: { planned_course_id: z.number().int().positive().describe("ID of the parent resource"), cursor: z.string().optional().describe("Cursor for fetching the next page of results"), per_page: z.number().int().positive().optional().describe("Number of results per page (default: 25)"), sort: z .array(z.enum(["start_date_time:asc", "start_date_time:desc", "name:asc", "name:desc"])) .optional() .describe( "Sort the results. Can change order by using `<sort_by>:<direction>` where `<direction>` is either `asc` or `desc`", ), }, - src/tools/meetings.ts:8-42 (registration)Registration of the 'get_meetings_by_planned_course_id' tool via server.registerTool(), with description and annotations.
server.registerTool( "get_meetings_by_planned_course_id", { description: "Get all meeting records of a planned course", annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true }, inputSchema: { planned_course_id: z.number().int().positive().describe("ID of the parent resource"), cursor: z.string().optional().describe("Cursor for fetching the next page of results"), per_page: z.number().int().positive().optional().describe("Number of results per page (default: 25)"), sort: z .array(z.enum(["start_date_time:asc", "start_date_time:desc", "name:asc", "name:desc"])) .optional() .describe( "Sort the results. Can change order by using `<sort_by>:<direction>` where `<direction>` is either `asc` or `desc`", ), }, }, async ({ planned_course_id, cursor, per_page, sort }) => { try { const result = await apiList<EduframeRecord>(`/planned_courses/${planned_course_id}/meetings`, { cursor, per_page, sort, }); void logResponse("get_meetings_by_planned_course_id", { planned_course_id, cursor, per_page, sort }, result); const toolResult = formatList(result.records, "meetings"); if (result.nextCursor) { toolResult.content.push({ type: "text", text: `\nNext page cursor: ${result.nextCursor}` }); } return toolResult; } catch (error) { return formatError(error); } }, ); - src/api.ts:122-137 (helper)The apiList helper function used by the handler to perform the GET request to the Eduframe API with cursor-based pagination support.
export async function apiList<T>(path: string, query?: Record<string, QueryValue>): Promise<ListResult<T>> { const { token } = getConfig(); const url = buildUrl(path, query); const response = await fetch(url.toString(), { method: "GET", headers: buildHeaders(token), }); await checkResponse(response); const records = (await response.json()) as T[]; const nextCursor = parseNextCursor(response.headers.get("Link")); return { records, nextCursor }; }