Skip to main content
Glama

πŸ—½ Oath β€” the citizenship interview coach for Alexa+

Track: Alexa+ (self-hosted MCP server, spec 2025-11-25, Streamable HTTP) Β· Mini-challenge: Open Source Build, Ship, Shape: Amazon Developer Hackathon 2026

The US naturalization civics test is an oral exam: a USCIS officer asks questions aloud, you answer aloud, and the test stops early the moment you pass β€” or fail. Since October 20, 2025, two different versions of that exam are running at the same time, and which one you get depends on the date you filed your N-400. Flashcard apps are silent, single-version, and can't tell you if you're ready. A voice agent can literally rehearse the real thing β€” that's Oath.

Oath is a self-hosted MCP server that gives Alexa+ (or any MCP client) everything it needs to be a patient, honest examiner: both official USCIS question banks, deterministic answer checking against the officially published acceptable answers, spaced repetition, mock interviews with the real stopping rules, and a readiness score computed by simulating your actual upcoming exam 10,000 times.

Why this matters

  • The N-400 filing fee is a real bet (~$710–760) and you get one re-examination before denial.

  • The 2008 test (filed before Oct 20, 2025): officer asks up to 10 of 100 questions, 6 correct passes, test stops at 6 correct or 5 wrong.

  • The 2025 test (filed on/after): up to 20 of 128 questions, 12 to pass, ends at 12 correct or 9 wrong β€” early stop in both directions (Federal Register 2025-18050).

  • Applicants 65+ with 20+ years as permanent residents get a designated 20-question subset (10 asked, 6 to pass) β€” Oath detects and handles this automatically.

  • Some answers change with elections ("Who is the President?"). Oath never scores those β€” it maintains a watchlist with USCIS's own verify-before-your-interview guidance.

Tell Oath one fact β€” your filing date β€” and every drill, mock, and readiness estimate is configured to the exam you will actually sit.

Related MCP server: InterviewDojo

What's real vs simulated (honest up front)

  • βœ… Real: the MCP server (spec 2025-11-25, Streamable HTTP, stateful sessions, 8 tools, resources, MCP Apps view), both official question banks transcribed and machine-verified from USCIS PDFs, all exam mechanics, the deterministic matcher (87-case eval, 0 false-accepts), the web client's MCP traffic (official SDK client β€” watch it live in the "MCP wire" panel).

  • 🟑 Simulated: the Alexa+ surface. No hackathon participant can connect to real Alexa+ (the add-on tools are partner-preview only β€” confirmed in the official hackathon FAQ, which endorses exactly this demo format: "a web page that acts as an actual MCP client … satisfies the requirement"). Voice in/out uses Chrome's Web Speech API and is labeled as a simulation in the UI.

  • ❌ No LLM anywhere in scoring or routing. Where the stakes are a federal exam, grading is deterministic against official answers β€” and the whole server works identically with Claude, MCP Inspector, or Alexa+ the day it opens to developers.

Quick start (judges: ~60 seconds)

git clone https://github.com/nityanand123gupta/oath-alexa-civics-coach.git
cd oath-alexa-civics-coach
npm install
npm run build
npm start          # β†’ http://localhost:3000  (Chrome recommended for voice)

No environment variables. No API keys. No accounts. Everything runs locally.

Try saying (or clicking): "Practice five questions" β†’ answer out loud β†’ "Am I ready?" β†’ "Give me a mock interview."

Prove the MCP server independently

# official inspector CLI against the running server
npx @modelcontextprotocol/inspector --cli http://localhost:3000/mcp --transport http --method tools/list
npx @modelcontextprotocol/inspector --cli http://localhost:3000/mcp --transport http \
  --method tools/call --tool-name start_practice --tool-arg mode=mock_interview

# or the one-command scripted journey (second terminal, server running)
node scripts/e2e-demo.mjs

Full captured transcripts: docs/compliance-evidence.md.

Use it from any MCP client

Oath is assistant-agnostic. For example, from Claude Code:

claude mcp add --transport http oath http://localhost:3000/mcp

…then ask Claude to quiz you. Remote exposure for a real device someday: cloudflared tunnel --url http://localhost:3000.

The 8 tools

Tool

What it does

update_profile / get_profile

Filing date β†’ test version (2008/2025); interview date; 65/20 detection from DOB + green-card date; explanation language (en/es/hi)

start_practice

practice = spaced-repetition drill (due β†’ new β†’ weakest); mock_interview = authentic simulation with the real thresholds and early stopping

answer_question

Deterministic verdict vs official acceptable answers; multi-answer questions ("Name three…") require distinct matches; practice teaches immediately, mock behaves like the officer (no mid-exam reveals; full debrief at the end)

get_readiness

Seeded Monte Carlo of your exam (10k runs): pass probability, expected correct, category mastery, weakest questions, coverage β€” ships an MCP Apps dashboard view

get_study_plan

Due reviews now, new-questions-per-day pacing to your interview date

explain_question

All official answers + localized explanation; refuses during a live mock (exam integrity)

dynamic_watchlist

Every election/state-dependent question + USCIS's verify-current-answers link

Architecture

Browser (Chrome) β€” "simulated Alexa+" client (React/Vite)
  Web Speech STT/TTS β†’ deterministic intent router β†’ REAL MCP client (official SDK)
  cards UI + live MCP-wire panel + MCP Apps host (AppBridge + sandboxed iframe)
        β”‚  Streamable HTTP Β· MCP 2025-11-25 Β· Mcp-Session-Id
Node 24 + Express β€” self-hosted MCP server (@modelcontextprotocol/sdk 1.32)
  8 zod-validated tools Β· stateful sessions Β· ui:// MCP Apps resource Β· JSON store
        β”‚  pure function calls
@oath/civics-kit β€” dependency-free TS engine (also a standalone OSS package)
  official banks (100 + 128 Qs) Β· matcher Β· SM-2 Β· exam state machines Β· Monte Carlo

More: docs/architecture.md Β· docs/product-brief.md

Engineering receipts

  • 53 automated tests (npx vitest run): exam-rule boundary cases (pass-at-6/12, fail-at-5/9, 65/20), matcher adversarial cases, Monte Carlo seed determinism, full MCP integration via the official SDK client, two-session isolation, MCP Apps resource + metadata, mid-mock explain refusal.

  • 87-case labeled matcher eval (npm run eval): 100% accuracy, 0 false-accepts including opposite-meaning attacks ("to spread communism" vs "to stop the spread of communism"). Two held-out labels were revised when we adopted the strict-coach policy (stricter than the officer, never looser) β€” the eval is a regression suite encoding that policy.

  • Data provenance: both banks machine-verified against the official USCIS PDFs (answer-count asserted per question, senior/dynamic flags cross-checked against USCIS's 65/20 documents and the Federal Register) β€” see docs/data-provenance/.

  • MCP Apps (SEP-1865): the server ships its own readiness dashboard as a ui:// resource via the official @modelcontextprotocol/ext-apps package; the web client hosts it through the real app bridge, with automatic fallback to native cards.

Open Source mini-challenge

The exam engine is extracted as a standalone MIT package created during the hackathon window: civics-test-kit β€” official banks + matcher + SRS + exam mechanics + readiness simulation, dependency-free, reusable by any citizenship-prep tool.

Known limitations

Voice needs Chrome + internet (text input always works) Β· single learner profile per server Β· en/es/hi explanation templates only Β· browser-side MCP Apps bridge is verified manually, not in CI Β· covers the civics portion, not the English reading/writing tests.

Disclaimers

Not affiliated with Amazon or USCIS. Study aid, not legal advice. Civics questions and answers are US-government works (public domain), transcribed verbatim from uscis.gov; dynamic answers must be verified at uscis.gov/citizenship/testupdates.

License

MIT

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables Alexa+ to run spoken mock technical interviews by parsing a candidate's resume and target job description, generating tailored questions, and scoring each answer against Bar Raiser rubrics via Amazon Bedrock. It also produces a session report with score breakdowns, weak topics, and a concrete practice plan.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables a voice assistant to quiz users on flashcards, grade answers, score spoken teach-back explanations, and schedule reviews with SM-2 while returning speech-ready responses.
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables a voice assistant to run course-grounded review sessions: it queues due concepts, generates questions and grades free-form spoken answers with Amazon Nova, explains misses with citations from course notes, and persists per-concept SM-2 schedules and history in DynamoDB across sessions. It also serves progress and session-summary cards as MCP Apps UI resources, falling back to text for hosts without the extension.
    MIT