Support

How can we help?

Send us a message and we'll get back to you shortly.

We typically respond within 24 hours

Product

How to Run Your LMS From Claude and ChatGPT: A Step-by-Step Guide

Amir Tadrisi
Amir Tadrisi
AI for Education Specialist
10 min read
How to Run Your LMS From Claude and ChatGPT: A Step-by-Step Guide

Last month I wrote about why we built an MCP server into Cubite: the argument, the honest competitive map, the security model. This post is the other half: the actual walkthrough. Every screenshot below is from our production environment at cubite.io, taken today, and every command is copy-pasteable.

By the end you will have Claude or ChatGPT connected to your learning site and able to do real work: create a course, publish a post, enroll a cohort, and answer questions like "which of my courses has the worst completion rate?" from live data.

60+
tools in the server
3
assistants supported
1
URL for every site
~5 min
to connect

What the assistant can do

It only ever sees the tools your connection is allowed to use.

Courses & content

Build courses from a document, write lessons and units, add graded quizzes, and upload SCORM or xAPI.

Learners & cohorts

Invite and enroll individuals or a whole cohort, manage groups, and hand back sign-in links.

Analytics & reports

Site overview, per-course engagement, and per-learner progress, all answered in chat.

SEO & Search Console

Search performance, top queries and pages, and ranked SEO opportunities for connected sites.

What you need

There is exactly one server URL, for every site:

You never tell the assistant which site is yours in a prompt. You pick the site (or several of your own sites) once, on the sign-in screen, and the connection is bound to that set from then on. There is no parameter an assistant can pass to reach a different site.

Step 1: Connect Claude (web or desktop)

  1. In Claude, open Settings, then Connectors (Anthropic currently files it under Customize), then Add custom connector.
  2. Paste https://cubite.io/api/mcp/mcp and continue.
  3. Claude opens a Cubite sign-in page in your browser. Sign in, pick which site to connect (or tick several of your own, with a search box to find them fast), and review the permission checkboxes.

This is the consent screen you will see. Each permission is its own checkbox, ticked to start. Untick anything you do not want to grant; the connection gets only what stays ticked, on exactly the sites you selected. The screen also names the exact destination the authorization is sent to, because app names are self-reported and unverified; glance at it before you approve:

  1. Approve. Back in Claude, the Cubite tools appear in your chat. That is the whole setup: no key was copied, nothing was pasted into a settings file.

Try it immediately (this works even under the default read-only grant):

Give me a health check of my courses: enrollments, completion rates, and where learners stall.

Step 2: Connect Claude Code (terminal)

If you live in the terminal, one command:

Then run /mcp inside Claude Code and pick cubite to complete the same browser sign-in. From then on, your terminal sessions can operate the site:

> create a draft blog post announcing our new food safety course, link the course, and keep it hidden so I can review it

Prefer a key over OAuth (for CI, servers, or a shared machine)? Create a scoped API key in Admin, then your site, then Integrations, and add it as a header instead:

Step 3: Connect ChatGPT

  1. In ChatGPT, enable developer mode (in Settings; OpenAI has filed it under connectors and under security at different times, so look around).
  2. Add a connector and paste https://cubite.io/api/mcp/mcp as the server address.
  3. Sign in when prompted, pick your site, approve the permissions. Same consent screen as Claude, same rules.

Two ChatGPT-specific notes worth knowing:

Step 4: Do real work

The server exposes 60+ tools, and the assistant only sees the ones your connection is allowed to use. Some real prompts we use, verbatim:

Build a course from a document.

Here is our onboarding SOP. Turn it into a course called "New Staff Onboarding": H2s become sections, H3s become units, and add a short graded quiz at the end of each section. Keep it out of the catalog until I review it.

The assistant chains course_create, course_set_content, and the question tools, then hides the course from the public catalog. H2/H3 mapping is a server convention, so structure survives.

Enroll a cohort.

Enroll these 12 people in Food Safety Level 2 and give me their sign-in links: [paste list]

One bulk-enroll call. New learners are created on your site and come back with a magic sign-in link you can drop into an email. Existing learners are just enrolled, with one deliberate exception on the links: if an account signs in with a password, or also exists on another Cubite site, no sign-in link is minted for it (a link like that would be an account-takeover vector), and that learner keeps signing in the way they already do.

Publish content.

Write a 900-word post about our new HACCP course for food-truck operators, use our usual tone, link the course, and publish it.

Upload a SCORM or xAPI package.

Here is the URL of our Storyline export: https://... Upload it and add it as the final unit of the Compliance course.

Step 5: Ask for analytics

This shipped today and it changes how the connection feels: the assistant can now read your numbers, not just your content. Three report tools back it:

  • Site overview: members by role, enrollments (total, last 30 days, active learners), completions and completion rate, certificates issued, quiz attempts with average score and pass rate.
  • Per-course engagement: one row per course with enrollments, completions, completion rate, average progress, certificates, and quiz stats.
  • Per-learner progress: each member with their enrollment count, completed courses, average progress, certificates, and last activity.
  • Search Console (for sites with Google Search Console connected). Ask for search performance (clicks, impressions, average position and their trend), your top queries and pages, and ranked SEO opportunities. Requires the sensitive "View Google Search Console" permission, so it is an explicit opt-in, never in the default read-only grant.

So you can ask:

Give me a health check of my site: how are enrollments trending, which courses complete well, and which have a quiz pass rate under 70%?

or

Who enrolled in the last month but has not started anything? Draft a nudge email for them.

Here is the overview tool answering for one of my own sites, verbatim from production while writing this post (a site where I park course experiments, so the completion numbers are honestly unflattering):

And the per-course report on the same site, top row:

An assistant reading that will tell me the same thing I can see myself: learners get halfway through the flagship course and stall, and nobody has enrolled in 30 days. That is exactly the kind of thing you want surfaced in the same chat where you can then say "draft a re-engagement email".

Step 6: Know your permissions, and how to cut it off

Everything runs on scoped permissions:

  • The OAuth consent screen shows exactly what is requested; untick freely.
  • A client that asks for nothing specific gets read-only defaults: site settings, pages, courses, and aggregate analytics. It can look, not change.
  • Write permissions are explicit. So is reading learner data.
  • Access tokens last one hour and refresh automatically; replaying a stolen refresh token revokes the whole connection.

And when you want it gone: Admin, then your site, then Integrations shows every connected assistant with its permissions, who authorized it, and when it was last used. Disconnect kills the credential immediately, no matter what the assistant's own settings say.

Troubleshooting

SymptomWhat is happening, and the fix
A 401 mid-session"API key expired" means the one-hour access token lapsed and your client did not refresh it. Reconnect once; a client that implements OAuth refresh properly stays quiet after that. "Missing API key" is different: no credential was sent at all, so for header-based setups re-check the Authorization: Bearer ck_... header.
The assistant says it has no Cubite toolsthe tool list is filtered to the permissions the connection actually holds, so a narrow grant sees a short list. Check the connection's permissions in Admin, then Integrations. A key with no permissions at all is refused outright, with an error that says exactly that.
A tool call fails with "missing required scope"the connection was approved without that permission. Reconnect and tick it, or create an API key that has it.
ChatGPT does not show the connectordeveloper mode is not enabled, or your workspace admin has not allowed it (Business and Enterprise gate it).
Geminithe consumer Gemini app has no custom-connector UI. Gemini CLI works with an API key; use httpUrl (not url) in its settings.

What is next

The server, the OAuth flow, and everything in this post is live today. Next on the list: publishing to the official MCP registry and the assistant directories so connecting is one click from inside Claude and ChatGPT, with no URL to paste at all.

Connect your site in about five minutes

No Cubite site yet? Create one, connect your assistant, and build your first course by describing it. Questions? Email hello@cubite.io.