github_classroom_get_assignment_grades
Get grades for a GitHub Classroom assignment by providing the assignment ID.
Instructions
Get assignment grades
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| assignment_id | Yes | assignment_id |
Implementation Reference
- src/tools/classroom.ts:34-36 (handler)The handler function for github_classroom_get_assignment_grades that makes a GET request to the GitHub API endpoint /assignments/{assignment_id}/grades.
handler: async (args: Record<string, any>) => { return githubRequest("GET", `/assignments/${args.assignment_id}/grades`, undefined, undefined); }, - src/tools/classroom.ts:31-33 (schema)Input schema for the tool: requires a single 'assignment_id' string parameter.
inputSchema: z.object({ assignment_id: z.string().describe("assignment_id") }), - src/tools/classroom.ts:5-71 (registration)The tool is registered as part of the classroomTools array exported from src/tools/classroom.ts (line 5) and imported into the MCP server via src/tools/index.ts (line 9) and src/index.ts (line 12, 63, 110-129).
export const classroomTools = [ { name: "github_classroom_get_an_assignment", description: "Get an assignment", inputSchema: z.object({ assignment_id: z.string().describe("assignment_id") }), handler: async (args: Record<string, any>) => { return githubRequest("GET", `/assignments/${args.assignment_id}`, undefined, undefined); }, }, { name: "github_classroom_list_accepted_assignments_for_an_assignment", description: "List accepted assignments for an assignment", inputSchema: z.object({ assignment_id: z.string().describe("assignment_id"), page: z.number().optional().describe("The page number of the results to fetch. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\""), per_page: z.number().optional().describe("The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"") }), handler: async (args: Record<string, any>) => { return githubRequest("GET", `/assignments/${args.assignment_id}/accepted_assignments`, undefined, { page: args.page, per_page: args.per_page }); }, }, { name: "github_classroom_get_assignment_grades", description: "Get assignment grades", inputSchema: z.object({ assignment_id: z.string().describe("assignment_id") }), handler: async (args: Record<string, any>) => { return githubRequest("GET", `/assignments/${args.assignment_id}/grades`, undefined, undefined); }, }, { name: "github_classroom_list_classrooms", description: "List classrooms", inputSchema: z.object({ page: z.number().optional().describe("The page number of the results to fetch. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\""), per_page: z.number().optional().describe("The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"") }), handler: async (args: Record<string, any>) => { return githubRequest("GET", `/classrooms`, undefined, { page: args.page, per_page: args.per_page }); }, }, { name: "github_classroom_get_a_classroom", description: "Get a classroom", inputSchema: z.object({ classroom_id: z.string().describe("classroom_id") }), handler: async (args: Record<string, any>) => { return githubRequest("GET", `/classrooms/${args.classroom_id}`, undefined, undefined); }, }, { name: "github_classroom_list_assignments_for_a_classroom", description: "List assignments for a classroom", inputSchema: z.object({ classroom_id: z.string().describe("classroom_id"), page: z.number().optional().describe("The page number of the results to fetch. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\""), per_page: z.number().optional().describe("The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"") }), handler: async (args: Record<string, any>) => { return githubRequest("GET", `/classrooms/${args.classroom_id}/assignments`, undefined, { page: args.page, per_page: args.per_page }); }, }, ]; - src/client.ts:9-59 (helper)The githubRequest helper function used by the handler to make authenticated HTTP requests to the GitHub API.
export async function githubRequest<T>( method: string, path: string, body?: Record<string, unknown>, params?: Record<string, string | number | boolean | string[] | undefined> ): Promise<T> { const url = new URL(`${BASE_URL}${path}`); if (params) { for (const [key, value] of Object.entries(params)) { if (value === undefined || value === null || value === "") continue; if (Array.isArray(value)) { url.searchParams.set(key, value.join(",")); } else { url.searchParams.set(key, String(value)); } } } const headers: Record<string, string> = { Authorization: `Bearer ${getToken()}`, Accept: "application/vnd.github+json", "X-GitHub-Api-Version": "2022-11-28", "User-Agent": "github-mcp/1.0.0", }; if (body) { headers["Content-Type"] = "application/json"; } const res = await fetch(url.toString(), { method, headers, body: body ? JSON.stringify(body) : undefined, }); if (!res.ok) { const text = await res.text().catch(() => ""); let detail = text; try { const json = JSON.parse(text); detail = json.message || text; if (json.errors) detail += ` -- ${JSON.stringify(json.errors)}`; } catch {} throw new Error(`GitHub API error ${res.status}: ${detail}`); } if (res.status === 204) return {} as T; return res.json() as Promise<T>; }