<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>MirrorMingo Developers Blog</title>
        <link>https://developers.mirrormingo.com/blog</link>
        <description>MirrorMingo Developers Blog</description>
        <lastBuildDate>Fri, 26 Jun 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Build an AI exam tutor in 10 minutes with MirrorMingo + MCP]]></title>
            <link>https://developers.mirrormingo.com/blog/2026-06-build-an-ai-exam-tutor-with-mcp</link>
            <guid>https://developers.mirrormingo.com/blog/2026-06-build-an-ai-exam-tutor-with-mcp</guid>
            <pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Connect Claude (or any MCP-capable agent) to MirrorMingo's verified exam content and build a study tutor that quizzes students on real past papers — without writing integration code.
]]></description>
            <content:encoded><![CDATA[<p>In our <a class="" href="https://developers.mirrormingo.com/blog/2026-06-introducing-the-mirrormingo-exam-api">launch post</a> we
opened up verified African exam content via a REST API and six SDKs. This post
is about the other way in: the <strong>Model Context Protocol (MCP) server</strong>, which
lets an AI agent use MirrorMingo as a native tool.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-mcp-matters-for-edtech">Why MCP matters for edtech<a href="https://developers.mirrormingo.com/blog/2026-06-build-an-ai-exam-tutor-with-mcp#why-mcp-matters-for-edtech" class="hash-link" aria-label="Direct link to Why MCP matters for edtech" title="Direct link to Why MCP matters for edtech" translate="no">​</a></h2>
<p>A lot of new study software isn't a traditional app at all — it's an agent. A
chat tutor, an IDE-style "explain this" assistant, a WhatsApp study buddy.
Those agents are only as good as the tools they can reach.</p>
<p>The problem with most AI tutors is the same one we've always had: when an LLM
<em>invents</em> exam questions, students practise on material that won't appear and
sometimes isn't even correct. MCP fixes the plumbing; MirrorMingo fixes the
content. Together, the agent stops guessing and starts pulling <strong>real past
papers</strong>, then marks the student against the verified answer key.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-mcp-briefly">What is MCP, briefly<a href="https://developers.mirrormingo.com/blog/2026-06-build-an-ai-exam-tutor-with-mcp#what-is-mcp-briefly" class="hash-link" aria-label="Direct link to What is MCP, briefly" title="Direct link to What is MCP, briefly" translate="no">​</a></h2>
<p>The <a href="https://modelcontextprotocol.io/" target="_blank" rel="noopener noreferrer" class="">Model Context Protocol</a> is an open
standard for connecting AI assistants to tools and data. A "server" exposes
tools; a "client" (Claude Desktop, Cursor, Claude Code, …) lets the model call
them. MirrorMingo ships an MCP server, so any of those clients can use our exam
tools with zero glue code.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="setup">Setup<a href="https://developers.mirrormingo.com/blog/2026-06-build-an-ai-exam-tutor-with-mcp#setup" class="hash-link" aria-label="Direct link to Setup" title="Direct link to Setup" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">pip </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> mirrormingo</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">MIRRORMINGO_API_KEY</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">mirrormingo_xxx   </span><span class="token comment" style="color:#999988;font-style:italic"># from Account → Developer</span><br></div></code></pre></div></div>
<p>Add it to Claude Desktop's <code>claude_desktop_config.json</code>:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"mcpServers"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"mirrormingo"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"command"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"mirrormingo-mcp"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"env"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"MIRRORMINGO_API_KEY"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"mirrormingo_xxx"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Restart Claude Desktop. That's the whole integration.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="use-it">Use it<a href="https://developers.mirrormingo.com/blog/2026-06-build-an-ai-exam-tutor-with-mcp#use-it" class="hash-link" aria-label="Direct link to Use it" title="Direct link to Use it" translate="no">​</a></h2>
<blockquote>
<p><strong>You:</strong> Use MirrorMingo to give me 5 real JAMB Physics questions, one at a
time. Mark each answer and explain what I get wrong.</p>
</blockquote>
<p>Behind the scenes the agent calls <code>list_mock_papers</code> to find a Physics paper,
<code>open_mock_paper</code> to pull real questions, and <code>submit_mock_attempt</code> to score
your answers — all against verified content, none of it invented.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-tools">The tools<a href="https://developers.mirrormingo.com/blog/2026-06-build-an-ai-exam-tutor-with-mcp#the-tools" class="hash-link" aria-label="Direct link to The tools" title="Direct link to The tools" translate="no">​</a></h2>
<table><thead><tr><th>Tool</th><th>What the agent does with it</th></tr></thead><tbody><tr><td><code>list_exams</code></td><td>Discover supported exams</td></tr><tr><td><code>get_exam_overview</code></td><td>Understand structure and scoring</td></tr><tr><td><code>list_mock_papers</code></td><td>Find a real past paper</td></tr><tr><td><code>open_mock_paper</code></td><td>Start a timed attempt</td></tr><tr><td><code>submit_mock_attempt</code></td><td>Score answers with explanations</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="safe-by-design">Safe by design<a href="https://developers.mirrormingo.com/blog/2026-06-build-an-ai-exam-tutor-with-mcp#safe-by-design" class="hash-link" aria-label="Direct link to Safe by design" title="Direct link to Safe by design" translate="no">​</a></h2>
<p>The MCP server is a thin layer over the <strong>same public API</strong> as our SDKs. It uses
your API key, so it inherits the same authentication and rate limits — an agent
can never reach beyond what your key allows. And because it's the same contract,
your MCP tutor and your REST-based app stay perfectly in sync.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sdk-or-mcp--which">SDK or MCP — which?<a href="https://developers.mirrormingo.com/blog/2026-06-build-an-ai-exam-tutor-with-mcp#sdk-or-mcp--which" class="hash-link" aria-label="Direct link to SDK or MCP — which?" title="Direct link to SDK or MCP — which?" translate="no">​</a></h2>
<p>Both, usually. Use the <strong>SDKs</strong> for deterministic app logic (a timed exam UI, a
nightly sync job). Use the <strong>MCP server</strong> when an LLM should decide <em>when</em> to
fetch questions and <em>how</em> to coach. Same content underneath.</p>
<p><a href="https://developers.mirrormingo.com/quickstart" target="_blank" rel="noopener noreferrer" class="">Get an API key →</a></p>]]></content:encoded>
            <category>mcp</category>
            <category>ai-agents</category>
            <category>tutorial</category>
            <category>claude</category>
            <category>edtech</category>
        </item>
        <item>
            <title><![CDATA[Introducing the MirrorMingo Exam API]]></title>
            <link>https://developers.mirrormingo.com/blog/2026-06-introducing-the-mirrormingo-exam-api</link>
            <guid>https://developers.mirrormingo.com/blog/2026-06-introducing-the-mirrormingo-exam-api</guid>
            <pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Verified African exam content — JAMB, WAEC, NECO, IELTS, SAT and more — now available to every developer through a clean REST API, six SDKs, and an MCP server.
]]></description>
            <content:encoded><![CDATA[<p>Today we're opening up the engine behind MirrorMingo. The <strong>Exam API</strong> gives any
developer programmatic access to the thing that's hardest to build in African
edtech: a library of <strong>real, verified past-question papers</strong> and a timed
mock-exam engine — JAMB, WAEC, NECO, IELTS, SAT and more.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-we-built-it">Why we built it<a href="https://developers.mirrormingo.com/blog/2026-06-introducing-the-mirrormingo-exam-api#why-we-built-it" class="hash-link" aria-label="Direct link to Why we built it" title="Direct link to Why we built it" translate="no">​</a></h2>
<p>Every team building a study app in Nigeria — and across Africa — hits the same
wall. The questions.</p>
<p>Authentic past papers are scattered across PDFs, photocopies
and link-rot. Re-keying them is slow and error-prone, and the tempting shortcut —
asking an LLM to "generate JAMB questions" — produces plausible nonsense that
quietly teaches students the wrong things.</p>
<p>We spent years assembling and verifying this content against official exam-board
sources. Our one rule has never changed: <strong>we never fabricate a question.</strong> Now
you can build on that same foundation instead of rebuilding it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-you-get">What you get<a href="https://developers.mirrormingo.com/blog/2026-06-introducing-the-mirrormingo-exam-api#what-you-get" class="hash-link" aria-label="Direct link to What you get" title="Direct link to What you get" translate="no">​</a></h2>
<ul>
<li class=""><strong>An exam registry</strong> — supported exams with official section specs, timing,
question types and scoring rubrics.</li>
<li class=""><strong>Verified past papers</strong> — grouped by year, each with a stable <code>paper_id</code>.</li>
<li class=""><strong>A mock-exam engine</strong> — open a paper into a timed attempt, page through
questions, submit answers, get scored feedback.</li>
<li class=""><strong>Verified source links</strong> — official exam-board and past-question references.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="hello-world">Hello, world<a href="https://developers.mirrormingo.com/blog/2026-06-introducing-the-mirrormingo-exam-api#hello-world" class="hash-link" aria-label="Direct link to Hello, world" title="Direct link to Hello, world" translate="no">​</a></h2>
<div class="language-ts codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ts codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> MirrorMingo </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"@mirrormingo/sdk"</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> mm </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">MirrorMingo</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> apiKey</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> process</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">env</span><span class="token punctuation" style="color:#393A34">.</span><span class="token constant" style="color:#36acaa">MIRRORMINGO_API_KEY</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> catalog </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> mm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">mockExams</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">listPapers</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"jamb"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> attempt </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> mm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">mockExams</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">open</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"jamb"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  paperId</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> catalog</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">years</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">papers</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">paper_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  questionLimit</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> mm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">mockExams</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">submit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"jamb"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  attemptId</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> attempt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">attempt_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  answers</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token string-property property" style="color:#36acaa">"1"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"C"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string-property property" style="color:#36acaa">"2"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"A"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string-property property" style="color:#36acaa">"3"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"D"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">result</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">feedback</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="six-sdks-one-source-of-truth">Six SDKs, one source of truth<a href="https://developers.mirrormingo.com/blog/2026-06-introducing-the-mirrormingo-exam-api#six-sdks-one-source-of-truth" class="hash-link" aria-label="Direct link to Six SDKs, one source of truth" title="Direct link to Six SDKs, one source of truth" translate="no">​</a></h2>
<p>We ship official SDKs for <strong>TypeScript/Node, Python, Java, PHP, Go and Dart</strong>.
All six are generated from a single OpenAPI spec, so they never drift from the
API. The TypeScript SDK is hand-crafted for the DX we wanted across our own apps.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="built-for-the-agent-era-too">Built for the agent era too<a href="https://developers.mirrormingo.com/blog/2026-06-introducing-the-mirrormingo-exam-api#built-for-the-agent-era-too" class="hash-link" aria-label="Direct link to Built for the agent era too" title="Direct link to Built for the agent era too" translate="no">​</a></h2>
<p>Because so much new learning software is being built <em>by AI agents</em>, we also
ship a <strong>Model Context Protocol (MCP) server</strong>. Point Claude Desktop, Cursor or
your own agent at it and it can pull real JAMB questions and mark answers — no
glue code. More on that in the next post.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="pricing--access">Pricing &amp; access<a href="https://developers.mirrormingo.com/blog/2026-06-introducing-the-mirrormingo-exam-api#pricing--access" class="hash-link" aria-label="Direct link to Pricing &amp; access" title="Direct link to Pricing &amp; access" translate="no">​</a></h2>
<p>Start free in the <strong>sandbox</strong> with non-billable test keys. Production keys are
metered per request with a generous free tier. Create your first key at
<strong>Account → Developer</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">Get started<a href="https://developers.mirrormingo.com/blog/2026-06-introducing-the-mirrormingo-exam-api#get-started" class="hash-link" aria-label="Direct link to Get started" title="Direct link to Get started" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://developers.mirrormingo.com/quickstart" target="_blank" rel="noopener noreferrer" class="">Quickstart</a></li>
<li class=""><a href="https://developers.mirrormingo.com/integration-guide" target="_blank" rel="noopener noreferrer" class="">Integration guide</a></li>
<li class=""><a href="https://developers.mirrormingo.com/reference" target="_blank" rel="noopener noreferrer" class="">API reference</a></li>
</ul>
<p>We can't wait to see what you build. Tell us at <a href="mailto:developers@mirrormingo.com" target="_blank" rel="noopener noreferrer" class="">developers@mirrormingo.com</a>.</p>]]></content:encoded>
            <category>launch</category>
            <category>api</category>
            <category>developers</category>
            <category>edtech</category>
            <category>africa</category>
        </item>
    </channel>
</rss>