get_planning_event
Retrieve a specific planning event record by providing its ID. Access detailed event data from the Eduframe system.
Instructions
Get an planning event record
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID of the planning event to retrieve |
Implementation Reference
- src/tools/planning_events.ts:40-48 (handler)Handler function for get_planning_event tool - performs GET request to /planning/events/{id} and formats the response
async ({ id }) => { try { const record = await apiGet<EduframeRecord>(`/planning/events/${id}`); void logResponse("get_planning_event", { id }, record); return formatShow(record, "planning event"); } catch (error) { return formatError(error); } }, - src/tools/planning_events.ts:36-38 (schema)Input schema for get_planning_event - requires a positive integer 'id' parameter
description: "Get an planning event record", annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true }, inputSchema: { id: z.number().int().positive().describe("ID of the planning event to retrieve") }, - src/tools/planning_events.ts:33-49 (registration)Registration of get_planning_event tool on the MCP server with description, annotations, input schema, and handler
server.registerTool( "get_planning_event", { description: "Get an planning event record", annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true }, inputSchema: { id: z.number().int().positive().describe("ID of the planning event to retrieve") }, }, async ({ id }) => { try { const record = await apiGet<EduframeRecord>(`/planning/events/${id}`); void logResponse("get_planning_event", { id }, record); return formatShow(record, "planning event"); } catch (error) { return formatError(error); } }, ); - src/tools/planning_events.ts:7-67 (registration)Registration function that registers all planning event tools including get_planning_event
export function registerPlanningEventTools(server: McpServer): void { server.registerTool( "get_planning_events", { description: "Get all planning event records", annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true }, inputSchema: { 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)"), }, }, async ({ cursor, per_page }) => { try { const result = await apiList<EduframeRecord>("/planning/events", { cursor, per_page }); void logResponse("get_planning_events", { cursor, per_page }, result); const toolResult = formatList(result.records, "planning events"); if (result.nextCursor) { toolResult.content.push({ type: "text", text: `\nNext page cursor: ${result.nextCursor}` }); } return toolResult; } catch (error) { return formatError(error); } }, ); server.registerTool( "get_planning_event", { description: "Get an planning event record", annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true }, inputSchema: { id: z.number().int().positive().describe("ID of the planning event to retrieve") }, }, async ({ id }) => { try { const record = await apiGet<EduframeRecord>(`/planning/events/${id}`); void logResponse("get_planning_event", { id }, record); return formatShow(record, "planning event"); } catch (error) { return formatError(error); } }, ); server.registerTool( "delete_planning_event", { description: "Delete a planning event.", annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true }, inputSchema: { id: z.number().int().positive().describe("ID of the planning event to delete") }, }, async ({ id }) => { try { const record = await apiDelete<EduframeRecord>(`/planning/events/${id}`); void logResponse("delete_planning_event", { id }, record); return formatDelete(record, "planning event"); } catch (error) { return formatError(error); } }, ); - src/api.ts:145-155 (helper)Helper function apiGet that performs the actual GET request to the Eduframe API - used by the handler
export async function apiGet<T>(path: string, query?: Record<string, QueryValue>): Promise<T> { const { token } = getConfig(); const url = buildUrl(path, query); const response = await fetch(url.toString(), { method: "GET", headers: buildHeaders(token), }); return handleResponse<T>(response); }