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

# install the Django app into the openedx image via Tutor's standard list
# (a PyPI name, a pinned version, a git URL, or a mounted local path all work)
tutor config save --append OPENEDX_EXTRA_PIP_REQUIREMENTS=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)

The Django app itself is installed via Tutor's standard OPENEDX_EXTRA_PIP_REQUIREMENTS list (tutor config save --append OPENEDX_EXTRA_PIP_REQUIREMENTS=openedx-mcp), not a plugin-specific config.

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.6.tar.gz (24.8 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.6-py3-none-any.whl (31.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tutor_contrib_openedxmcp-0.1.6.tar.gz
  • Upload date:
  • Size: 24.8 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.6.tar.gz
Algorithm Hash digest
SHA256 fa313953e2f4c41c992cb0cb472d951f3f1437870b331721c86cb20a922e68d9
MD5 9c46716b2b4093376733b8b22f345a9f
BLAKE2b-256 5ead596d7a5ede1dfd6f6e2740e4b1cf5ab54ee53223654c77de79effa58642a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tutor_contrib_openedxmcp-0.1.6.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.6-py3-none-any.whl.

File metadata

File hashes

Hashes for tutor_contrib_openedxmcp-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 308daa79fee742d302607673c2d93fa2bb9297eaaacf8997924e0265fa852fc8
MD5 b81e5b871f82caaa735c30e916656093
BLAKE2b-256 81335994567bf4457b9704bffdd852c3a0114332176bb062b046bec49c2d12ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for tutor_contrib_openedxmcp-0.1.6-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

0.1.7

2 files

This release

0.1.6 This release

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