Georgia Homeroom
Georgia K-12 standards, Milestones blueprints, and achievement levels for educators. Independent.
Should I use this
Quality & Safety
Findings (1)
- LOWin browse_standards
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"georgia-homeroom": {
"url": "https://mcp.georgiahomeroom.org/mcp"
}
}
}Remote endpoints
https://mcp.georgiahomeroom.org/mcpstreamable-httpWhat it can do
Tool inventory
Tools (11)
🟢search_standards(query, grade, grade_set, subjects, strand_code, ...)
Search the Georgia Standards of Excellence by topic, with optional filters. Returns matching standards as `items` (each: `code`, `subject`, `grades`, `strand_code`, `strand_name`, `hs_course`, `statement`, plus optional `notes` and `path`). When enrichment is on, the response also carries `alds` (achievement-level descriptions per standard), `assessment_coverage` (Milestones claim, target, approx_points, sub_codes, qualifier), and `assessment_metadata` keyed by assessment_id (Depth of Knowledge split, item-type design); the server instructions explain how to read points, qualifiers, and levels. If `dropped_strand` is set, the strand filter matched nothing and the results span the whole subject. `truncated` means more matches may exist than `limit` allowed. Enrichment is automatic for small result sets (8 standards or fewer) and off for larger ones unless `include_enrichment` is true. If the query itself contains a standard code (e.g. 'what is 5.NR.1?'), the search becomes a direct code lookup and the other filters are ignored; lookup_standards_by_code is the direct route for known codes. Limitation: matches the words of the standards, in English.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "Topic words to search for, e.g. 'adding fractions with unlike denominators'.",
"maxLength": 500,
"title": "Query",
"type": "string"
},
"grade": {
"anyOf": [
{
"enum": [
"K",
"KG",
"01",
"02",
"03",
"04",
"05",
"06",
"07",
"08",
"09",
"10",
"11",
"12",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "One grade: 'K' (or 'KG') or '01' through '12'. '1' through '9' also work. Do not combine with grade_set.",
"title": "Grade"
},
"grade_set": {
"anyOf": [
{
"items": {
"enum": [
"K",
"KG",
"01",
"02",
"03",
"04",
"05",
"06",
"07",
"08",
"09",
"10",
"11",
"12",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
],
"type": "string"
},
"maxItems": 13,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Several grades at once, e.g. ['03', '04', '05']. Do not combine with grade.",
"title": "Grade Set"
},
"subjects": {
"anyOf": [
{
"items": {
"enum": [
"ela",
"math",
"science",
"social_studies"
],
"type": "string"
},
"maxItems": 4,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Limit to these subjects.",
"title": "Subjects"
},
"strand_code": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional strand, by code ('NR') or name ('Numerical Reasoning'). describe_vocabulary lists the strands for each subject.",
"title": "Strand Code"
},
"course": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional high-school course, e.g. 'algebra i', 'biology', 'us history' (describe_vocabulary lists them).",
"title": "Course"
},
"limit": {
"anyOf": [
{
"maximum": 100,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Most rows to return, 1 to 100. Default: 40 when narrowed by grade, grade_set, or course; 20 otherwise.",
"title": "Limit"
},
"include_enrichment": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "true attaches achievement levels and Milestones coverage to every result; false never does; omit for automatic.",
"title": "Include Enrichment"
}
},
"required": [
"query"
],
"title": "search_standardsArguments"
}Output Schema
{
"type": "object",
"additionalProperties": true,
"title": "search_standardsDictOutput"
}🟢lookup_standards_by_code(codes)
Look up Georgia standards by their codes (e.g. ['5.NR.1', '3.T.C.1', 'S8P1', 'SS8H1.a']). Returns the matching standards (each with `code`, `statement`, optional `notes` and `path`), plus per-code `alds` (achievement-level descriptions), `assessment_coverage` (Milestones claim, target, approx_points, qualifier), and `assessment_metadata` keyed by assessment_id; the server instructions explain how to read points, qualifiers, and levels. A sub-code (e.g. '5.NR.3.3') with no descriptors of its own shows its parent standard's. Older codes from earlier materials (MGSE, ELAGSE, CCGPS) are translated to the current code when the mapping is unambiguous, including renamed math strands (fractions moved from `NF` to the current `5.NR.3` cluster), and reported in `normalized_codes`. Codes that still don't match appear in `unknown_codes` with likely `suggestions`.
Input Schema
{
"type": "object",
"properties": {
"codes": {
"description": "One or more standard codes, e.g. ['5.NR.1', 'S8P1'].",
"items": {
"maxLength": 40,
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"title": "Codes",
"type": "array"
}
},
"required": [
"codes"
],
"title": "lookup_standards_by_codeArguments"
}Output Schema
{
"type": "object",
"additionalProperties": true,
"title": "lookup_standards_by_codeDictOutput"
}🟢search_mastery_descriptors(query, level, subjects, grade, grade_set, ...)
Search the Georgia Milestones achievement-level descriptors: the official descriptions of what a student can do at each of four levels (Beginning, Developing, Proficient, Distinguished) for a standard. Use it for 'what does mastery look like' questions (e.g. 'what does a proficient 3rd grader do with fractions?'); it matches the descriptor text, not the standards' own wording. Returns `hits` with `item_code`, `level`, `descriptor_text`, `subject`, `grades`, and `statement` (the standard the descriptor belongs to), best match first. Limitation: descriptors exist only for the subjects and grades the Milestones tests cover, so many standards have none.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "Words to search for in the descriptor text, e.g. 'fractions'.",
"maxLength": 500,
"title": "Query",
"type": "string"
},
"level": {
"anyOf": [
{
"enum": [
"Beginning",
"Developing",
"Proficient",
"Distinguished"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Only this achievement level.",
"title": "Level"
},
"subjects": {
"anyOf": [
{
"items": {
"enum": [
"ela",
"math",
"science",
"social_studies"
],
"type": "string"
},
"maxItems": 4,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Limit to these subjects.",
"title": "Subjects"
},
"grade": {
"anyOf": [
{
"enum": [
"K",
"KG",
"01",
"02",
"03",
"04",
"05",
"06",
"07",
"08",
"09",
"10",
"11",
"12",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "One grade: 'K' (or 'KG') or '01' through '12'. '1' through '9' also work.",
"title": "Grade"
},
"grade_set": {
"anyOf": [
{
"items": {
"enum": [
"K",
"KG",
"01",
"02",
"03",
"04",
"05",
"06",
"07",
"08",
"09",
"10",
"11",
"12",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
],
"type": "string"
},
"maxItems": 13,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Several grades at once, e.g. ['03', '04'].",
"title": "Grade Set"
},
"limit": {
"default": 20,
"description": "Most hits to return, 1 to 50.",
"maximum": 50,
"minimum": 1,
"title": "Limit",
"type": "integer"
}
},
"required": [
"query"
],
"title": "search_mastery_descriptorsArguments"
}Output Schema
{
"type": "object",
"additionalProperties": true,
"title": "search_mastery_descriptorsDictOutput"
}🟢list_assessments
List every Georgia Milestones test with a blueprint: 14 End-of-Grade tests (ELA and math for each of grades 3-8; science and social studies in grade 8 only) and 4 End-of-Course tests (Algebra I, Biology, Literature II, US History). Returns `assessments` with `assessment_id`, `subject`, `grade` (null for End-of-Course), `hs_course` (null for End-of-Grade), and a readable `title`. Use the ids with get_assessment_blueprint and standards_for_claim.
Input Schema
{
"type": "object",
"properties": {},
"title": "list_assessmentsArguments"
}Output Schema
{
"type": "object",
"additionalProperties": true,
"title": "list_assessmentsDictOutput"
}🟢get_assessment_blueprint(assessment_id, grade, subject, course)
The full blueprint for one Georgia Milestones test, for pacing and coverage planning. Identify the test by `assessment_id` (e.g. 'gmas_g05_math'), by `course` for an End-of-Course test (e.g. 'biology', 'algebra i', 'us history'), or by `grade` + `subject` for an End-of-Grade test (e.g. grade='5', subject='math'). Returns `title`, `total_points`, `dok_distribution` (Depth of Knowledge split), `design` (item-type table), `claim_summary` (points per claim), and `claims`: each claim and target with its `approx_points` and the `standards` it covers. READING THE POINTS. Do not add up `approx_points` down `claims`: the blueprint often draws one merged points cell across several target rows, and each of those rows repeats the pooled value (the naive sum reads 98-114 on the 60-point ELA tests and 82 on the 58-point grade 5 math test). Pooled rows share a `points_group` id and are flagged `points_shared: true`, with co-covered codes in `points_shared_with` and a ready-to-quote `approx_points_note`. The correct numbers are precomputed: `claim_summary` (one total per claim) and `total_claim_points` (the whole test). `total_points` comes from the design table and is null for the ELA blueprints (their PDFs have no Total row), so use `total_claim_points` there. If no single test matches, the result is an error that lists the available tests.
Input Schema
{
"type": "object",
"properties": {
"assessment_id": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Test id from list_assessments, e.g. 'gmas_g05_math'.",
"title": "Assessment Id"
},
"grade": {
"anyOf": [
{
"enum": [
"K",
"KG",
"01",
"02",
"03",
"04",
"05",
"06",
"07",
"08",
"09",
"10",
"11",
"12",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Grade of an End-of-Grade test (3 through 8). Use with subject.",
"title": "Grade"
},
"subject": {
"anyOf": [
{
"enum": [
"ela",
"math",
"science",
"social_studies"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Subject of an End-of-Grade test. Use with grade.",
"title": "Subject"
},
"course": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "End-of-Course test course: 'algebra i', 'biology', 'literature ii', or 'us history'.",
"title": "Course"
}
},
"title": "get_assessment_blueprintArguments"
}Output Schema
{
"type": "object",
"additionalProperties": true,
"title": "get_assessment_blueprintDictOutput"
}🟢standards_for_claim(assessment_id, claim_code, target_text)
List every standard a Georgia Milestones test assesses under one blueprint claim (a reporting category such as 'Numerical Reasoning'), with point weights. This is the reverse of the per-standard coverage view. Pass an `assessment_id` (from list_assessments) and a `claim_code` (the category heading, e.g. 'Numerical Reasoning', or for ELA '<strand>.<domain>' like 'Texts.Interpreting Texts'); optionally narrow to one `target_text`. Matching ignores case and surrounding spaces. Returns `standards` with `code`, `statement`, `claim_name`, `target_text`, `approx_points`, `sub_codes`, and `qualifier`. READING THE POINTS. `approx_points` is the weight of a claim or target, never of one standard, and a blueprint often draws one merged points cell across several targets. Rows sharing a merged cell repeat that value and share a `points_group` id; each is flagged `points_shared: true`, names its co-covered codes in `points_shared_with`, and carries a ready-to-quote `approx_points_note`. Rows with different `points_group` ids are separate pools. So do not add up `approx_points` down the rows: use the precomputed `claim_total_points`, bounded by `assessment_total_points` / `design_total_points`. Worked example: grade 5 math Numerical Reasoning has 5 rows reading 14/14/14/10/10 (62 if summed), but 5.NR.1+5.NR.4 share one 14-point pool and 5.NR.2+5.NR.5 share one 10-point pool, so the claim is 38 points on a 58-point test. An unknown claim or assessment_id is an error that lists the valid values.
Input Schema
{
"type": "object",
"properties": {
"assessment_id": {
"description": "Test id from list_assessments, e.g. 'gmas_g05_math'.",
"maxLength": 100,
"title": "Assessment Id",
"type": "string"
},
"claim_code": {
"description": "Claim (reporting category) heading, e.g. 'Numerical Reasoning'.",
"maxLength": 200,
"title": "Claim Code",
"type": "string"
},
"target_text": {
"anyOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional target within the claim, as written in the blueprint.",
"title": "Target Text"
}
},
"required": [
"assessment_id",
"claim_code"
],
"title": "standards_for_claimArguments"
}Output Schema
{
"type": "object",
"additionalProperties": true,
"title": "standards_for_claimDictOutput"
}🟢browse_standards(parent, subject, grade)
Walk the Georgia standards hierarchy one level at a time. With no arguments, returns the four subjects. Pass `subject` (optionally with `grade`) for that subject's courses, or pass a row's `id` back as `parent` to open it. `grade` works only with `subject` (or a `subject:<subj>` parent) and is ignored when opening any other row. Math courses have a strand layer between course and standard. Each row has an `id` (pass it back as `parent`), `code`, `title`, `cf_item_type` (the row's level in the state's data: Course, Domain, Content Standard, and so on), `kind`, `has_children`, `child_count`, and `gmas` / `ald` flags (whether the Milestones blueprints or the achievement-level descriptors cover it).
Input Schema
{
"type": "object",
"properties": {
"parent": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A row `id` from an earlier call: a row identifier, 'subject:<subject>', or 'synth:math_strand:<course id>:<strand code>'.",
"title": "Parent"
},
"subject": {
"anyOf": [
{
"enum": [
"ela",
"math",
"science",
"social_studies"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Subject: 'ela', 'math', 'science', or 'social_studies'.",
"title": "Subject"
},
"grade": {
"anyOf": [
{
"enum": [
"K",
"KG",
"01",
"02",
"03",
"04",
"05",
"06",
"07",
"08",
"09",
"10",
"11",
"12",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "One grade: 'K' (or 'KG') or '01' through '12'. '1' through '9' also work. Requires subject.",
"title": "Grade"
}
},
"title": "browse_standardsArguments"
}Output Schema
{
"type": "object",
"additionalProperties": true,
"title": "browse_standardsDictOutput"
}🟢get_subject_grade_tree(subject, grade, course, strand_code)
Return every standard for one subject and grade in a single call, as a nested tree: the one-call alternative to repeated browse_standards calls (e.g. 'list all the 4th grade ELA standards'). `subject` and `grade` are required. Each node has `id`, `code`, `title`, `cf_item_type`, `kind`, `strand_code`, `gmas` / `ald` coverage flags, and nested `children`. It carries no achievement-level or test text; follow up on specific codes with get_standard_details or lookup_standards_by_code. Retired rows and empty containers are left out. High school (grades 9-12) is organized by course, with up to 18 courses per grade. Without `course`, a high-school grade returns `courses` (each course's `id`, `code`, `title`, and `standard_count`) instead of the full tree; call again with `course` set to a title, code, or id from that list (or a name like 'algebra i') for that course's standards. `strand_code` narrows any tree to one strand. Returns `tree`, `node_count`, and `standard_count` (nodes that carry a code).
Input Schema
{
"type": "object",
"properties": {
"subject": {
"description": "Subject: 'ela', 'math', 'science', or 'social_studies'.",
"enum": [
"ela",
"math",
"science",
"social_studies"
],
"title": "Subject",
"type": "string"
},
"grade": {
"description": "One grade: 'K' (or 'KG') or '01' through '12'. '1' through '9' also work.",
"enum": [
"K",
"KG",
"01",
"02",
"03",
"04",
"05",
"06",
"07",
"08",
"09",
"10",
"11",
"12",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
],
"title": "Grade",
"type": "string"
},
"course": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "High-school course: a title, code, or id from the `courses` list, or a name like 'algebra i' or 'biology'.",
"title": "Course"
},
"strand_code": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional strand, by code ('NR') or name ('Numerical Reasoning'). describe_vocabulary lists the strands for each subject.",
"title": "Strand Code"
}
},
"required": [
"subject",
"grade"
],
"title": "get_subject_grade_treeArguments"
}Output Schema
{
"type": "object",
"additionalProperties": true,
"title": "get_subject_grade_treeDictOutput"
}🟢get_vertical_progression(subject, strand_code, code)
Compare one strand year over year, for pacing, remediation, and differentiation. Pass a `code` (e.g. '5.NR.1') to line that standard up against the same code at every grade ('3.NR.1', '4.NR.1', ...), or pass `subject` + `strand_code` (name or code) for the whole strand. Returns `grades`, each with `grade`, `grade_label`, and `standards` (code, statement, and gmas/ald flags). If the strand can't be identified, the result is an error.
Input Schema
{
"type": "object",
"properties": {
"subject": {
"anyOf": [
{
"enum": [
"ela",
"math",
"science",
"social_studies"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Subject: 'ela', 'math', 'science', or 'social_studies'. Use with strand_code.",
"title": "Subject"
},
"strand_code": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Strand code ('NR') or name ('Numerical Reasoning'). Use with subject.",
"title": "Strand Code"
},
"code": {
"anyOf": [
{
"maxLength": 40,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "A standard code to trace, e.g. '5.NR.1'.",
"title": "Code"
}
},
"title": "get_vertical_progressionArguments"
}Output Schema
{
"type": "object",
"additionalProperties": true,
"title": "get_vertical_progressionDictOutput"
}🟢get_standard_details(id)
Full detail for one standard or container, addressed by its code (e.g. '5.NR.3.3', 'S8P1') or by an `id` returned by browse_standards or get_subject_grade_tree. Returns `found`, `id`, `code` (null for containers), `statement`, `subject`, `grades`, `strand_code` / `strand_name`, `hs_course`, `cf_item_type`, `kind`, `path` (where it sits in the curriculum), `notes`, `parent`, `children` (with gmas/ald flags), `alds` (achievement-level descriptions; sub-codes show their parent's), `assessment_coverage` (Milestones claim, target, points, qualifier), and `assessment_metadata` keyed by assessment_id; the server instructions explain how to read points and levels. Containers (domains, clusters, courses) are reachable only by `id` and carry no descriptors or coverage. An unknown code or id is an error; for older MGSE/ELAGSE codes use lookup_standards_by_code, which translates them.
Input Schema
{
"type": "object",
"properties": {
"id": {
"description": "A standard code such as '5.NR.3.3', or a row `id` from browse_standards or get_subject_grade_tree.",
"maxLength": 200,
"title": "Id",
"type": "string"
}
},
"required": [
"id"
],
"title": "get_standard_detailsArguments"
}Output Schema
{
"type": "object",
"additionalProperties": true,
"title": "get_standard_detailsDictOutput"
}🟢describe_vocabulary
List the exact values the other tools' filters accept, so a search doesn't come back empty because of a typo. Returns `subjects` (id and label), `grades` (value and label), `hs_courses` (the course names the `course` filter accepts, with their subject), `strands` by subject (code and name; either works as `strand_code`), the four `ald_levels` (achievement levels), and the `assessments` catalog of Milestones tests.
Input Schema
{
"type": "object",
"properties": {},
"title": "describe_vocabularyArguments"
}Output Schema
{
"type": "object",
"additionalProperties": true,
"title": "describe_vocabularyDictOutput"
}Community
Evidence