Skip to main content

tutor-contrib-openedxmcp

PyPI CI License: AGPL-3.0

Tutor plugin that stands up the Open edX Admin MCP for staff/superusers:

  1. Installs the openedx-mcp Django app into the LMS/CMS image (the REST facade at /api/mcp/ and /api/mcp/cms/).
  2. Runs a standalone openedxmcp container — a FastMCP streamable-http server that proxies to that facade, fronted by Caddy at mcp.<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 (injects OPENEDX_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)

Source distribution for tutor-contrib-openedxmcp 0.1.7
File Size Uploaded
tutor_contrib_openedxmcp-0.1.7.tar.gz 24.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tutor-contrib-openedxmcp 0.1.7
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.1.7 This release

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page