tutor-contrib-openedxmcp
Tutor plugin that stands up the Open edX Admin MCP for staff/superusers:
- Installs the
openedx-mcpDjango app into the LMS/CMS image (the REST facade at/api/mcp/and/api/mcp/cms/). - Runs a standalone
openedxmcpcontainer — a FastMCP streamable-http server that proxies to that facade, fronted by Caddy atmcp.<LMS_HOST>.
The MCP server holds no secrets: each request carries its own MCP key, forwarded
to the facade as X-MCP-Key. Authorization is enforced by the facade
(is_staff/is_superuser, live). No Hasura, no external stack. Ulmo.
Architecture
Claude / MCP client ──(Bearer key)──▶ openedxmcp container (FastMCP proxy)
│ X-MCP-Key
┌───────────┴───────────┐
LMS /api/mcp/ CMS /api/mcp/cms/
(people, enroll, (course authoring,
analytics, certs, modulestore)
reports, retire)
Install
pip install tutor-contrib-openedxmcp
tutor plugins enable openedxmcp
# The openedx-mcp Django app auto-installs into the openedx image (Dockerfile
# patch) — no extra step. To PIN a version/source, append to Tutor's list, e.g.
# tutor config save --append OPENEDX_EXTRA_PIP_REQUIREMENTS=openedx-mcp==0.1.4
tutor images build openedx openedxmcp # rebuild LMS/CMS w/ the app; build MCP server
tutor local launch # or: tutor k8s launch
tutor local do init # migrations -> MCPKey tables
Then mint a key in Django admin (Open edX Admin MCP → MCP keys) and connect a
client to https://mcp.<LMS_HOST>/mcp. The key-creation banner prints ready-to-
paste connect steps. Full connect/security/tool docs live in the
openedx-mcp README.
Config
| Key | Default | Meaning |
|---|---|---|
OPENEDXMCP_IMAGE |
openedxmcp:latest |
MCP server image tag |
OPENEDXMCP_ENDPOINT |
mcp.{{ LMS_HOST }} |
public MCP host |
OPENEDXMCP_PORT |
8080 |
server port |
OPENEDXMCP_LMS_BASE_URL |
http://lms:8000 |
in-cluster LMS upstream |
OPENEDXMCP_CMS_BASE_URL |
http://cms:8000 |
in-cluster CMS upstream |
OPENEDXMCP_PUBLIC_URL |
https://{{ ENDPOINT }}/mcp |
shown in the Django key page (injected into LMS/CMS as OPENEDX_MCP_PUBLIC_URL) |
The Django app auto-installs via a Dockerfile patch
(openedx-dockerfile-post-python-requirements). To pin a version/source, append
to Tutor's standard OPENEDX_EXTRA_PIP_REQUIREMENTS list.
What ships
- Docker image build context (
templates/openedxmcp/build/…) — the FastMCP proxy. - Patches:
caddyfile(route/mcp*), docker-compose services (+ healthcheck), k8s deployment/service (+ readiness/liveness on/health),openedx-common-settings(injectsOPENEDX_MCP_PUBLIC_URL),openedx-dockerfile-post-python-requirements(pip-installs the app).
The MCP server exposes an unauthenticated /health for probes.
Develop
pip install ruff build
ruff check tutoropenedxmcp
python -m build . # CI asserts the wheel ships templates/
See CHANGELOG.md · CONTRIBUTING.md.
Metadata
Release files for tutor-contrib-openedxmcp 0.1.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tutor_contrib_openedxmcp-0.1.7.tar.gz | 24.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tutor_contrib_openedxmcp-0.1.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 56.0 kB
Release files / tutor_contrib_openedxmcp-0.1.7.tar.gz
| Download URL | tutor_contrib_openedxmcp-0.1.7.tar.gz |
|---|---|
| Size | 24.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3ace16b8ccfb489c433209c72227c197269b275b94a3108a5207ae84921417b3
|
|
BLAKE2b-256 checksum How to use checksums |
b25c6e5da016315b7ba0110bdb2d10f328eabfaf48552669e7dd50021aef8da8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 25, 2026.
Transparency logRelease files / tutor_contrib_openedxmcp-0.1.7-py3-none-any.whl
| Download URL | tutor_contrib_openedxmcp-0.1.7-py3-none-any.whl |
|---|---|
| Size | 31.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
37d2d31760aa55c83d4c869e03a25585e5e8c8456c508aca7268b0ad4c35980b
|
|
BLAKE2b-256 checksum How to use checksums |
261d93eb0ecacb0479a249079dd073e46ccc36be207e73a12f647df631f2c74f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 25, 2026.
Transparency log