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
# point at the Django app (PyPI, git URL, or a mounted local path)
tutor config save --set OPENEDXMCP_PIP_REQUIREMENT=openedx-mcp
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) |
OPENEDXMCP_PIP_REQUIREMENT |
openedx-mcp |
the Django app to install |
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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tutor_contrib_openedxmcp-0.1.5.tar.gz.
File metadata
- Download URL: tutor_contrib_openedxmcp-0.1.5.tar.gz
- Upload date:
- Size: 24.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3840028faa5c700fd76b9d696d8bc4df55997c66743c7008a9404afaec211d7e
|
|
| MD5 |
d6e24575216deec2350e0be1c220bc73
|
|
| BLAKE2b-256 |
5da8c718105e2093e5c2b5bb0044b189bf15e3037aee909c46f3947cf2a42fe0
|
Provenance
The following attestation bundles were made for tutor_contrib_openedxmcp-0.1.5.tar.gz:
Publisher:
publish.yml on blend-ed/tutor-contrib-openedxmcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tutor_contrib_openedxmcp-0.1.5.tar.gz -
Subject digest:
3840028faa5c700fd76b9d696d8bc4df55997c66743c7008a9404afaec211d7e - Sigstore transparency entry: 2242442937
- Sigstore integration time:
-
Permalink:
blend-ed/tutor-contrib-openedxmcp@c591bc2ae256c7f9d994e81615d748e1e95b3365 -
Branch / Tag:
refs/tags/v0.1.5 - Owner: https://github.com/blend-ed
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c591bc2ae256c7f9d994e81615d748e1e95b3365 -
Trigger Event:
push
-
Statement type:
File details
Details for the file tutor_contrib_openedxmcp-0.1.5-py3-none-any.whl.
File metadata
- Download URL: tutor_contrib_openedxmcp-0.1.5-py3-none-any.whl
- Upload date:
- Size: 30.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab9b1058dca2b4e7271ddb55d350637d4026cb107572efe85acd71dd2f758baf
|
|
| MD5 |
00d9e763120897dfb861efe2f33d60e7
|
|
| BLAKE2b-256 |
7b91afe1a529809ec7805ecb41ce8c05346ee23e41670a2717afa4f5b0e7640d
|
Provenance
The following attestation bundles were made for tutor_contrib_openedxmcp-0.1.5-py3-none-any.whl:
Publisher:
publish.yml on blend-ed/tutor-contrib-openedxmcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tutor_contrib_openedxmcp-0.1.5-py3-none-any.whl -
Subject digest:
ab9b1058dca2b4e7271ddb55d350637d4026cb107572efe85acd71dd2f758baf - Sigstore transparency entry: 2242443205
- Sigstore integration time:
-
Permalink:
blend-ed/tutor-contrib-openedxmcp@c591bc2ae256c7f9d994e81615d748e1e95b3365 -
Branch / Tag:
refs/tags/v0.1.5 - Owner: https://github.com/blend-ed
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c591bc2ae256c7f9d994e81615d748e1e95b3365 -
Trigger Event:
push
-
Statement type: