Send us a message and we'll get back to you shortly.
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.
It only ever sees the tools your connection is allowed to use.
Build courses from a document, write lessons and units, add graded quizzes, and upload SCORM or xAPI.
Invite and enroll individuals or a whole cohort, manage groups, and hand back sign-in links.
Site overview, per-course engagement, and per-learner progress, all answered in chat.
Search performance, top queries and pages, and ranked SEO opportunities for connected sites.
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.
https://cubite.io/api/mcp/mcp and continue.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:
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.
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:
https://cubite.io/api/mcp/mcp as the server address.Two ChatGPT-specific notes worth knowing:
search and fetch. Cubite ships both. That means Deep Research and company knowledge can search your site's courses, pages, blog posts, and learning paths and cite them by URL, even though those modes never touch the write tools.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.
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:
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.
reports:read permission that never returns a learner's name or email, and it is part of the default read-only grant. The per-learner report requires the members permission (members:read), the same one that already means "may read who my learners are". An assistant you connected read-only can tell you your completion rate; it cannot tell you your learners' emails unless you granted that explicitly.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".
Everything runs on scoped permissions:
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.
| Symptom | What 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 tools | the 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 connector | developer mode is not enabled, or your workspace admin has not allowed it (Business and Enterprise gate it). |
| Gemini | the consumer Gemini app has no custom-connector UI. Gemini CLI works with an API key; use httpUrl (not url) in its settings. |
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.
Looking to learn more about Product and AI, LMS, MCP? These related articles explore complementary topics, techniques, and strategies.
Most AI course generators hand you a draft you still have to host and track somewhere else. Cubite LMS generates the course inside the platform that delivers it, tracks completion with native SCORM and xAPI, and pairs it with an AI tutor trained on the same material.
Compare Moodle hosting options — MoodleCloud, managed, self-hosted, and cloud — with real pricing, installation methods, and a decision framework.