Georgia Homeroom
org.georgiahomeroom/georgia-homeroomgeorgiahomeroom.orgstreamable-httpv0.1.0Scanned
Georgia K-12 standards, Milestones blueprints, and achievement levels for educators. Independent.
11 tools: 2 change things and 9 only read.
- Reads private data · 0
- Reads text others write · 1
- Can send data out · 0
- 1 finding
Anlyon alternative
2 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
11 tools
Changes things 2Claude Code: ask
get_vertical_progressionCompare one strand year over year — the vertical articulation view for pacing, remediation, and differentiation.1 finding
Why it is in this group
- The name "get_vertical_progression" says "get": a word for reading.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "get_vertical_progression" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "get_vertical_progression" says "get": a word for reading.
Description, as the server wrote it Compare one strand year over year — the vertical articulation view for pacing, remediation, and differentiation. Pass a `code` (e.g. '5.NR.1') to infer subject+strand and line the standard up against the same code signature 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 + gmas/ald flags). Returns `{found: false}` when the strand can't be resolved.
Annotations the server declares
- title: Trace a Strand Across Grades
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
standards_for_claimEvery standard tied to one GMAS blueprint claim: the reverse of the per-standard coverage view.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Every standard tied to one GMAS blueprint claim: the reverse of the per-standard coverage view. Pass an `assessment_id` (from list_assessments) and a `claim_code` (the category/domain heading, e.g. 'Numerical Reasoning', or for ELA '<strand>.<domain>' like 'Texts.Interpreting Texts'); optionally narrow to one `target_text`. Matching is case-insensitive and whitespace-trimmed. 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 blueprint claim/target, never of one standard, and the blueprint often draws ONE merged points cell across several targets. Rows sharing a merged cell repeat that single value and share a `points_group` id; each such row 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 genuinely separate pools. So do NOT sum `approx_points` down the rows: use the precomputed `claim_total_points` (one value per pool, already correct), bounded by `assessment_total_points` / `design_total_points`. Grade 5 math Numerical Reasoning is the worked example: 5 rows reading 14/14/14/10/10 sum to 62 per row, 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. When no claim matches, `standards` is empty and `available_claims` lists the valid `claim_code` / `claim_name` pairs for that assessment; an unknown `assessment_id` instead returns `error` plus the `assessments` catalog.
Annotations the server declares
- title: Standards for a Blueprint Claim
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 9Show 9 read-only tools
browse_standardsWalk the Georgia standards hierarchy one level at a time.Reads text others writeNo findings
Why it is in this group
- The name "browse_standards" says "browse": a word for reading.
What it can reach
- untrusted-inputThe name "browse_standards" says "browse": it reads web pages, which anyone can write.
Description, as the server wrote it Walk the Georgia standards hierarchy one level at a time. With no arguments returns the four subject roots. Pass `subject` (optionally with `grade`) to get that subject's entry rows (Courses), or pass a row's `parent` id from a previous call to drill in. `grade` only applies alongside `subject` (or a `subject:<subj>` parent); it is ignored when drilling into a UUID parent, and passing it alone is an error. Math Courses expose a synthesized Strand layer. Each returned row has an `id` (pass back as `parent`), `code`, `title`, `cf_item_type`, `kind`, `has_children`, `child_count`, and `gmas` / `ald` coverage flags. Parent id forms: a CFItem UUID, `subject:<subj>`, or `synth:math_strand:<course_uuid>:<strand_code>`.
Annotations the server declares
- title: Browse Standards
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
describe_vocabularySelf-describe the filter vocabulary the other tools accept, so queries don't silently miss on a typo.No findings
Why it is in this group
- The name "describe_vocabulary" says "describe": a word for reading.
Description, as the server wrote it Self-describe the filter vocabulary the other tools accept, so queries don't silently miss on a typo. Returns valid `subjects` (id + label), `grades` (value + label), `hs_courses` (canonical name + subject — the exact strings the `course` filter accepts), `strands` keyed by subject (code + name — either form works as `strand_code`), the four `ald_levels`, and the `assessments` catalog. Call this first when unsure of the exact filter strings.
Annotations the server declares
- title: Describe Filter Vocabulary
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_assessment_blueprintFull GMAS blueprint for one assessment: the assessment-first view for pacing and coverage planning.No findings
Why it is in this group
- The name "get_assessment_blueprint" says "get": a word for reading.
Description, as the server wrote it Full GMAS blueprint for one assessment: the assessment-first view for pacing and coverage planning. Resolve by `assessment_id` (e.g. 'gmas_g05_math'), by `course` for an EOC (e.g. 'biology', 'algebra i', 'us history'), or by `grade` + `subject` for an EOG (e.g. grade='5', subject='math'). Returns `title`, `total_points`, `dok_distribution` (Depth-of-Knowledge split), `design` (item-type table), `claim_summary` (per-claim point totals), and `claims[]`: each claim/target with its `approx_points` and the `standards[]` it covers (code + statement + sub_codes + qualifier). READING THE POINTS. Do NOT sum `approx_points` down `claims[]`: the blueprint often draws ONE merged points cell across several target rows, and each of those rows repeats the single 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` is the design-table total and is null for the ELA blueprints (their PDFs have no Total row), so bound any check with `total_claim_points` there. Returns `{found: false}` with the assessment catalog when no single assessment matches.
Annotations the server declares
- title: Get Test Blueprint
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_standard_detailsFull detail for ONE standard or container, addressed by its human code (e.g.No findings
Why it is in this group
- The name "get_standard_details" says "get": a word for reading.
Description, as the server wrote it Full detail for ONE standard or container, addressed by its human code (e.g. '5.NR.3.3', 'S8P1') OR a CFItem UUID returned by browse_standards: the bridge between lightweight browsing and code lookup. Returns `found`, plus `id`, `code` (null for containers), `statement`, `subject`, `grades`, `strand_code` / `strand_name`, `hs_course`, `cf_item_type`, `kind`, `path` (curriculum breadcrumb), `notes`, `parent` (id/code/title/type), `children` (sub-standards as browse rows with gmas/ald flags), `alds` (per-standard mastery prose; sub-codes inherit the parent's), `assessment_coverage` (claim/target/points/qualifier), and `assessment_metadata` keyed by assessment_id; see the server instructions for how to read points and ALD levels. Container rows (Domain/Cluster/Course) are addressable only by UUID, have a null `code`, and carry no ALD/coverage. An unknown id returns `{found: false}`.
Annotations the server declares
- title: Get Standard Details
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_subject_grade_treeReturn the COMPLETE standards hierarchy for one subject + grade in a single call, as a nested tree.No findings
Why it is in this group
- The name "get_subject_grade_tree" says "get": a word for reading.
Description, as the server wrote it Return the COMPLETE standards hierarchy for one subject + grade in a single call, as a nested tree. Use this instead of repeated browse_standards calls whenever you need every standard for a grade (e.g. 'list all the 4th grade ELA standards'): it collapses the level-by-level walk into one response and is guaranteed complete. Each node has `id`, `code`, `title`, `cf_item_type`, `kind`, `strand_code`, `gmas`/`ald` coverage flags, and a nested `children` list. Lean by design: it carries NO ALD or assessment prose, so drill into the codes you care about afterward with get_standard_details or lookup_standards_by_code. Deprecated rows and empty containers are pruned. `subject` is required ('ela', 'math', 'science', 'social_studies'); `grade` ('K' or '01'..'12') is strongly recommended — omitting it returns the whole subject across all grades, which is large. Returns `tree` (root nodes), `node_count`, and `standard_count` (nodes that carry a code).
Annotations the server declares
- title: Get All Standards for a Grade
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_assessmentsList every GMAS assessment: 14 End-of-Grade tests (ELA and math for each of grades 3-8; science and social studies have grade-8 EOGs only) plus 4 End-of-Course tests (Algebra I, Bi…No findings
Why it is in this group
- The name "list_assessments" says "list": a word for reading.
Description, as the server wrote it List every GMAS assessment: 14 End-of-Grade tests (ELA and math for each of grades 3-8; science and social studies have grade-8 EOGs only) plus 4 End-of-Course tests (Algebra I, Biology, Literature II, US History). Returns `assessments[]` with `assessment_id`, `subject`, `grade` (null for EOC), `hs_course` (null for EOG), and a human `title`. Call this to discover the valid (grade, subject) / course targets for get_assessment_blueprint.
Annotations the server declares
- title: List Georgia Milestones Tests
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
lookup_standards_by_codeLook up Georgia standards by their human-readable codes (e.g.No findings
Why it is in this group
- The name "lookup_standards_by_code" says "lookup": a word for reading.
Description, as the server wrote it Look up Georgia standards by their human-readable codes (e.g. ['5.NR.1', '3.T.C.1', 'S8P1', 'SS8H1.a']). Returns matching standards (each with `code`, `statement`, optional `notes` and `path`), plus per-code `alds`, `assessment_coverage` (claim/target/approx_points/qualifier), and `assessment_metadata` keyed by assessment_id; see the server instructions for how to read points, qualifiers, and ALD levels. A sub-code (e.g. '5.NR.3.3') with no enrichment of its own inherits its parent standard's, surfaced under the same key. Legacy codes are handled: a pasted MGSE/ELAGSE/CCGPS code is auto-normalized to its current GSE form when the mapping is unambiguous (including renamed-and-renumbered Common Core math strands like `NF` fractions to the current `5.NR.3` cluster), reported in `normalized_codes`; codes that still don't resolve appear in `unknown_codes` with best-effort `suggestions`.
Annotations the server declares
- title: Look Up Standards by Code
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
search_mastery_descriptorsSearch the GMAS achievement-level descriptor corpus directly (per-standard mastery prose at four levels: Beginning, Developing, Proficient, Distinguished).No findings
Why it is in this group
- The name "search_mastery_descriptors" says "search": a word for reading.
Description, as the server wrote it Search the GMAS achievement-level descriptor corpus directly (per-standard mastery prose at four levels: Beginning, Developing, Proficient, Distinguished). Use this when the question is about what mastery looks like at a specific level (e.g. 'what does a proficient 3rd grader do with fractions?') rather than about the standards themselves: bm25 ranks against descriptor text, not standard statements. Optional `level` filters to one mastery level; `subjects` / `grade` / `grade_set` apply the same scoping as search_standards. `limit` caps the hits (default 20, max 50). Returns `hits[]` with `item_code`, `level`, `descriptor_text`, `subject`, `grades`, `statement` (the owning standard's prose), and bm25 `rank`. See the server instructions for how to read ALD levels.
Annotations the server declares
- title: Search Achievement Level Descriptors
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
search_standardsSearch Georgia Standards of Excellence by topic, with optional filters.No findings
Why it is in this group
- The name "search_standards" says "search": a word for reading.
Description, as the server wrote it Search Georgia Standards of Excellence by topic, with optional filters. Returns matching standards as structured JSON `items` (each: `code`, `subject`, `grades`, `strand_code`, `strand_name`, `hs_course`, `statement`, plus optional `notes` and `path`). With enrichment on, each item also carries `alds` (per-level mastery prose), `assessment_coverage` (GMAS claim/target/approx_points/sub_codes/qualifier), and `assessment_metadata` keyed by assessment_id (DOK distribution, design table); see the server instructions for how to read points, qualifiers, and ALD levels. Filters: `strand_code` accepts a strand name ('Numerical Reasoning') or code ('NR'); if `dropped_strand` is set in the response it didn't match, and results span the whole subject. `grade` scopes to one grade; `grade_set` (e.g. ['03','04','05']) scopes to several at once (don't pass both). For HS courses use `course` (e.g. 'algebra ii', 'us history'). `limit` caps rows (default 40 when narrowed by grade/grade_set/course, 20 for a broad gradeless search; max 100); `truncated` flags when more may exist. `include_enrichment` defaults to auto: per-standard alds/coverage/metadata are attached only when the result set is small (<= 8 standards), so a broad grade/subject sweep stays lean and compact; pass include_enrichment=true to force full enrichment on a large set, or false for lean. For a few specific standards, lookup_standards_by_code and get_standard_details always include enrichment. Note: if the query text itself contains a standard code (e.g. 'what is 5.NR.1?'), retrieval becomes a direct code lookup and the other filters are ignored; prefer lookup_standards_by_code when you already have codes. Subjects: 'ela', 'math', 'science', 'social_studies'. Grade: 'K' or '01'..'12'.
Annotations the server declares
- title: Search Standards
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data or outbound.
- Reads private data0
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write1
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out0
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
The server marks "get_vertical_progression" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "get_vertical_progression" says "get": a word for reading.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 0.1.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http georgia-homeroom https://mcp.georgiahomeroom.org/mcpclaude mcp add --transport http georgia-homeroom https://mcp.georgiahomeroom.org/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__georgia-homeroom__search_standards",
"mcp__georgia-homeroom__lookup_standards_by_code",
"mcp__georgia-homeroom__search_mastery_descriptors",
"mcp__georgia-homeroom__list_assessments",
"mcp__georgia-homeroom__get_assessment_blueprint",
"mcp__georgia-homeroom__browse_standards",
"mcp__georgia-homeroom__get_subject_grade_tree",
"mcp__georgia-homeroom__get_standard_details",
"mcp__georgia-homeroom__describe_vocabulary"
],
"ask": [
"mcp__georgia-homeroom__standards_for_claim",
"mcp__georgia-homeroom__get_vertical_progression"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as georgia-homeroom. Review it before you use it.
Capability tags behind 1 rule
- mcp__georgia-homeroom__browse_standards untrusted-input
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/org.georgiahomeroom/georgia-homeroom/verify?hash=17f3e44537764318c006d1247825d985b1dfa641a9eb521a015a9ea31c0c657a" | jq -e '.changed == false'Pinned hash 17f3e4453776, from Oct 26, 2026, 14:18 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/org.georgiahomeroom/georgia-homeroom/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/org.georgiahomeroom/georgia-homeroom)Source: MCP Registry. Synced Oct 26, 2026, 14:18 UTC.