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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tutor_contrib_openedxmcp-0.1.7.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tutor_contrib_openedxmcp-0.1.7-py3-none-any.whl (31.1 kB view details)

Uploaded Python 3

File details

Details for the file tutor_contrib_openedxmcp-0.1.7.tar.gz.

File metadata

  • Download URL: tutor_contrib_openedxmcp-0.1.7.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for tutor_contrib_openedxmcp-0.1.7.tar.gz
Algorithm Hash digest
SHA256 3ace16b8ccfb489c433209c72227c197269b275b94a3108a5207ae84921417b3
MD5 e76b6e5f86ed298f36e95069b7b37ae1
BLAKE2b-256 b25c6e5da016315b7ba0110bdb2d10f328eabfaf48552669e7dd50021aef8da8

See more details on using hashes here.

Provenance

The following attestation bundles were made for tutor_contrib_openedxmcp-0.1.7.tar.gz:

Publisher: publish.yml on blend-ed/tutor-contrib-openedxmcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tutor_contrib_openedxmcp-0.1.7-py3-none-any.whl.

File metadata

File hashes

Hashes for tutor_contrib_openedxmcp-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 37d2d31760aa55c83d4c869e03a25585e5e8c8456c508aca7268b0ad4c35980b
MD5 c351db340d540e1320dc18fa34c87cc1
BLAKE2b-256 261d93eb0ecacb0479a249079dd073e46ccc36be207e73a12f647df631f2c74f

See more details on using hashes here.

Provenance

The following attestation bundles were made for tutor_contrib_openedxmcp-0.1.7-py3-none-any.whl:

Publisher: publish.yml on blend-ed/tutor-contrib-openedxmcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.7 This release

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 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