← Journal

offSchool engineering · November 8, 2026

Simulations Inside Claude and ChatGPT: offSchool's MCP

offSchool runs a remote MCP server, so Claude and ChatGPT can teach from its SSC notes, ask its practice questions one at a time and open a working simulation right in the chat. Here is how it is built.

By Shihab Shahriar Antor · Updated 2026-11-08

Why put a learning app inside someone else's chat

Students in Bangladesh already ask general assistants their homework questions. The answers are often fine, but they are not in the textbook's terms, they skip the board's way of setting out an answer, and they cannot show the idea moving. offSchool has the parts those answers lack: notes for all 683 topics of five SSC subjects written against the 2026 NCTB textbooks, more than 2,000 practice questions with worked solutions, and 252 simulations. The Model Context Protocol lets any compatible assistant use them, so the student keeps the app they already have open.

The setup a student sees is on offschool.site/mcp: add a custom connector, paste the address, press Connect, sign in to offSchool and allow access. Claude, ChatGPT, Claude Code and Codex all work.

The tools the server exposes
  • search_syllabusRead only

    Finds the syllabus topic a question belongs to, so the answer starts from the right chapter.

  • get_topicRead only

    Returns a topic's reading note in the textbook's Bangla or English terms.

  • get_chapterRead only

    Lists a chapter's topics and the simulations that go with them.

  • find_simulationsRead only

    Lists the simulations that fit an idea.

  • show_simulationRead only

    Opens a simulation inside the chat where the app supports MCP Apps, and links it everywhere else.

  • get_formula_sheetRead only

    Returns a subject's formulas, chapter by chapter.

  • get_practice_questionsRead only

    Fetches board-style questions to ask one at a time.

  • check_answerWrites

    Marks the student's choice and returns the worked solution; it records the attempt in the student's progress.

  • my_progressRead only

    With the student's permission, shows weak topics and reviews that are due.

  • searchDeep research

    The search half of the pair deep-research clients use to cite pages.

  • fetchDeep research

    Returns a page found by search, with its offschool.site link.

Every tool reads or writes offSchool's own data only. Each one declares that in its annotations, and none of them can delete anything.

Teaching rules travel with the server

Tools alone would let an assistant use offSchool badly: dump the answer, skip the simulation, read out the solution before the student tries. So the server sends instructions with its handshake, and every client that connects receives them. In short: find the syllabus topic first and teach from its note, so terms and depth match the board exam; when an idea is easier to see than to read, show the simulation, ask the student to predict, and only then explain; ask practice questions one at a time and never reveal the answer before the student has answered; and share the offSchool link when the full page would help.

This is the same order the app itself teaches in, problem, prediction, simulation, then the formula. Putting it in the server, not in a prompt the student would have to paste, is what keeps that order intact in someone else's interface.

A real simulation inside the chat

show_simulation is an MCP App. Its result points to a resource, ui://offschool/sim.html, served with the text/html;profile=mcp-app type from the MCP Apps extension. A host that supports it renders that page in a sandboxed frame inside the conversation. Hosts that do not simply get the link.

The page is not a video or a screenshot. It is the same simulation player offschool.site uses, built into one self-contained HTML file and embedded in the Go binary. In the chat it shows the scene, and the student can change the values and run it. Opened full screen, it becomes the lesson: predict first, then reveal.

Two details shape how it behaves:

  • The model gets a summary; the widget gets the simulation. The full simulation specification travels in the result's _meta, which the widget reads and the model never sees. The model receives a short text description instead. That keeps a large specification out of the conversation and stops the model guessing at numbers it was never meant to read.
  • The widget reports back. As the student changes values, the widget tells the model what is on screen, so "why did it stop sooner?" gets an answer about the run the student just watched. An "Ask about this" button sends that question for them.

The page's content security policy allows one outside origin, Google Fonts, for the Bangla type. The whole file is about 1.9 MB, because it carries the simulation engine and the maths renderer with it.

What happens when a student connects
  1. 01

    The client registers itself

    The authorization server supports dynamic client registration and client ID metadata documents, so Claude, ChatGPT and other clients can connect without a manual setup. Fetching a client's metadata goes through a guard against server-side request forgery.

  2. 02

    The student signs in and decides

    offSchool's consent page lists what the app is asking for. There are three scopes: reading learning content, reading progress, and recording practice answers.

  3. 03

    Guardian consent is checked twice

    Most offSchool students are minors, so an account needs a guardian's consent before it can be connected. That is checked on the consent page and again on every single tool call.

  4. 04

    Tokens are short-lived and stored hashed

    Access uses opaque tokens with PKCE (S256). Refresh tokens rotate on each use, and reusing an old one revokes the whole grant.

  5. 05

    The student can disconnect

    Me, then Connected AI apps, removes access at once.

What the assistant never sees

A connected app works with a pseudonymous account. It never receives the student's name, email address, phone number or their conversations with offSchool's own mentor. It sees the syllabus, notes, questions and, if the student allows it, which topics are weak and which reviews are due. offSchool keeps a log of tool calls for 180 days, as its privacy policy sets out.

Each assistant also has its own age rule. Claude, for example, is for people 18 and over. offSchool's how-to page says so in Bangla and asks younger students to use it with a guardian.

How it is built

The server is part of offSchool's Go API, written with the official Go SDK for MCP (v1.7) and run without session state, so any instance can answer any request. It reads the same content the website and the mentor are built from, so a correction to a note reaches the chat as well. The simulation widget is a small Vite build of the shared simulation package. The design follows the MCP server the lab built earlier for LetX, its LaTeX editor, adapted for a younger audience: the consent check, the narrower scopes and the pseudonymous account are the parts that changed.

What we learned

Write tool descriptions for the model, not for the developer, and say when not to use a tool. Keep large payloads in _meta for the interface and give the model a sentence. Test with real clients early, because each host decides differently how far it trusts a widget. And treat the server's instructions as part of the product: they are the only place where the teaching order can be enforced once the student is in someone else's app.

Questions

Can offSchool be used inside Claude or ChatGPT?
Yes. Add a custom connector with the address https://api.offschool.site/mcp, sign in to offSchool and allow access. The assistant can then teach from offSchool's SSC notes, open simulations, ask practice questions and check answers. Step-by-step setup is on offschool.site/mcp.
What is an MCP App?
An MCP App is an interactive page that an MCP server offers alongside a tool result. A host that supports the MCP Apps extension renders it in a sandboxed frame inside the chat. offSchool uses one to run its real simulations in the conversation.
Does the AI app see the student's personal details?
No. A connected app never receives the student's name, email, phone number or mentor conversations. With the student's permission it can see progress, such as weak topics and reviews that are due.
Which apps can connect to offSchool?
Claude, ChatGPT, Claude Code and Codex, and any other client that supports remote MCP servers with OAuth. Simulations open inside the chat in Claude and ChatGPT; other clients get a link to the simulation on offschool.site.
Is the offSchool MCP server free?
Connecting is free, and the notes, simulations and practice it serves are free for everyone on offSchool. The connection uses the student's own offSchool account.