Skip to main content
Glama

Codex Canvas MCP

Ein portabler lokaler MCP-Server, der kompatiblen Clients das Lesen von Canvas und – erst nach mehreren unabhängigen Sicherheitsprüfungen – das Erstellen gängiger Kursinhalte ermöglicht.

Sicherheitsmodell

  • Canvas-Lesezugriffe sind nach der lokalen Einrichtung der Anmeldedaten standardmäßig verfügbar.

  • Schreiben ist standardmäßig deaktiviert.

  • Jeder Inhalts-Schreibvorgang erfordert eine aktivierte lokale Richtlinie, eine exakte Übereinstimmung mit der Whitelist pro Kurs, exakten Bestätigungstext und die Genehmigung im MCP-Client.

  • Der Bild-Upload fügt ein Payload-Gate hinzu: Nur ein lokal gehöriges PNG, JPEG oder WebP in einem konfigurierten vertrauenswürdigen Ordner, nicht größer als 10 MiB, kann gesendet werden.

  • Es gibt kein generisches Canvas-Schreibwerkzeug.

  • Anmeldedaten bleiben in 1Password und optional in der macOS-Schlüsselbund. Sie gehören nicht in dieses Repository oder die Client-Konfiguration.

Jedes Inhaltswerkzeug ist als verändernd und destruktiv markiert, damit kompatible Clients eine Genehmigung verlangen können. Der lokale Server lehnt einen Aufruf auch ab, es sei denn, seine exakte Bestätigung stimmt mit der angeforderten Aktion überein, zum Beispiel APPROVE CANVAS MODULE WRITE course <course_id>.

Die Rubrik-Erstellung akzeptiert eine Canvas-Aufgaben-URL mit gleicher Herkunft, eine URL für ein Modul-Element einer Aufgabe oder eine Kurs-URL mit einem assignment_id-Abfrageparameter. Abfragezeichenfolgen und Fragmente werden ignoriert, nachdem Kurs und Aufgabe aufgelöst wurden. Die URL umgeht niemals die Kursrichtlinie: Ihre Kurs-ID muss weiterhin explizit auf der Whitelist stehen, und die Rubrik-Erstellung erfordert APPROVE CANVAS RUBRIC WRITE course <course_id>. Das Werkzeug weigert sich, eine vorhandene Aufgaben-Rubrik zu ersetzen, verlangt Beschreibungen für jedes Kriterium und jede Bewertung und verlangt, dass die Bewertungsrubrik-Punkte mit den Aufgabenpunkten übereinstimmen.

Related MCP server: CoursePack Local MCP Server

Was enthalten ist

Tool

Fähigkeit

Standard

canvas_get_current_user

Lies das authentifizierte Profil

Verfügbar

canvas_list_modules

Lies Module und Elemente für einen Kurs

Verfügbar

canvas_read_api

GET einen normalisierten Canvas-API-v1-Pfad

Verfügbar

canvas_get_write_policy

Lokalen Richtlinienstatus prüfen

Verfügbar

canvas_upload_image

Ein verifiziertes Bild aus dem konfigurierten vertrauenswürdigen Ordner hochladen

Blockiert

canvas_write_page

Eine Seite erstellen oder aktualisieren

Blockiert

canvas_create_module

Ein Modul erstellen

Blockiert

canvas_create_module_item

Ein Inhaltselement in einem Modul platzieren

Blockiert

canvas_create_assignment

Eine Aufgabe erstellen

Blockiert

canvas_create_assignment_rubric

Eine Aufgaben-Rubrik aus einer Canvas-URL erstellen und anhängen

Blockiert

canvas_create_discussion

Eine Diskussion erstellen

Blockiert

canvas_create_classic_quiz

Ein Classic Quiz erstellen

Blockiert

canvas_create_classic_quiz_question

Eine Frage zu einem Classic Quiz hinzufügen

Blockiert

canvas_delete_page

Eine Seite löschen

Blockiert

canvas_delete_assignment

Eine Aufgabe löschen

Blockiert

canvas_delete_discussion

Eine Diskussion löschen

Blockiert

canvas_delete_classic_quiz

Ein Classic Quiz löschen

Blockiert

canvas_delete_module

Ein Modul und seine Elementplatzierungen löschen

Blockiert

Ein neues Mac einrichten

Voraussetzungen: Python 3.11 oder neuer, die 1Password-CLI, ein 1Password-Dienstkonto, das nur das vorgesehene Canvas-Anmeldedatenelement lesen kann, und ein Canvas-API-Token mit den geringsten für Ihre Arbeit praktikablen Berechtigungen.

  1. Klonen und in eine isolierte Umgebung installieren:

git clone https://github.com/mrchris-ai/codex_canvas_mcp.git
cd codex_canvas_mcp
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .
  1. Erstellen Sie ein 1Password-Element, dessen verborgenes Feld das Canvas-API-Token enthält. Geben Sie dem Dienstkonto nur Lesezugriff auf den enthaltenden Tresor/das enthaltende Element. Notieren Sie den Tresornamen, den Elementnamen oder die Element-ID und die Bezeichnung des verborgenen Feldes; geben Sie deren Werte nicht in dieses Repository.

  2. Wählen Sie eine Zustellmethode für das Dienstkonto-Token:

    • Für eine kurzlebige Shell-Sitzung stellen Sie OP_SERVICE_ACCOUNT_TOKEN über Ihren lokalen Geheimnis-Launcher für den MCP-Serverprozess bereit.

    • Speichern Sie dieses Token unter macOS in der Schlüsselbund und konfigurieren Sie nicht-geheime Suchbezeichnungen. Beispielbefehl (er fragt sicher ab; geben Sie das Token nicht in die Befehlszeile ein):

security add-generic-password -U -s "your-service-label" -a "your-account-label" -w
  1. Konfigurieren Sie den Serverprozess mit diesen nicht-geheimen Werten:

    Variable

    Zweck

    CANVAS_BASE_URL

    Canvas-HTTPS-Ursprung, z. B. https://school.instructure.com

    CANVAS_OP_VAULT

    1Password-Tresorname oder -ID

    CANVAS_OP_ITEM

    Name oder ID des Canvas-Anmeldedatenelements

    CANVAS_OP_FIELD

    Bezeichnung des verborgenen Token-Feldes; Standard ist credential

    CANVAS_KEYCHAIN_SERVICE

    macOS-Schlüsselbund-Dienstbezeichnung, wenn OP_SERVICE_ACCOUNT_TOKEN nicht verwendet wird

    CANVAS_KEYCHAIN_ACCOUNT

    macOS-Schlüsselbund-Kontobezeichnung, wenn OP_SERVICE_ACCOUNT_TOKEN nicht verwendet wird

    CANVAS_IMAGE_UPLOAD_ROOT

    Absoluter Pfad zu dem einzigen lokalen Ordner, aus dem Bild-Upload erlaubt ist

  2. Testen Sie nur die Protokoll- und Sicherheitsgates, ohne Canvas zu kontaktieren oder Anmeldedaten zu lesen:

python -m unittest discover -s tests -v
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | python -m canvas_mcp
  1. Fügen Sie den stdio-Server zu Codex hinzu. Die Form auf Projektebene ist:

[mcp_servers.canvas]
command = "/absolute/path/to/codex_canvas_mcp/.venv/bin/python"
args = ["-m", "canvas_mcp"]

[mcp_servers.canvas.env]
CANVAS_BASE_URL = "https://school.instructure.com"
CANVAS_OP_VAULT = "your-vault"
CANVAS_OP_ITEM = "your-item"
CANVAS_OP_FIELD = "credential"
CANVAS_KEYCHAIN_SERVICE = "your-service-label"
CANVAS_KEYCHAIN_ACCOUNT = "your-account-label"
CANVAS_IMAGE_UPLOAD_ROOT = "/absolute/path/to/reviewed/canvas-images"

Fügen Sie dies in die .codex/config.toml des vertrauenswürdigen Projekts oder in Ihre persönliche Codex-Konfiguration ein. Fügen Sie keine geheimen Werte hinzu. Starten Sie neu oder öffnen Sie eine neue Aufgabe, nachdem Sie die MCP-Konfiguration geändert haben, und überprüfen Sie dann die aufgelisteten Werkzeuge, bevor Sie Canvas-Daten anfordern.

ChatGPT-Kompatibilität

Dieses Repository implementiert einen lokalen stdio-MCP-Server für Codex und andere Clients, die lokales stdio-MCP unterstützen. Aktuelle benutzerdefinierte ChatGPT-Apps verbinden sich nicht direkt mit einem lokalen stdio-Server. Die aktuelle Anleitung von OpenAI besteht darin, ein privates lokales MCP über den Secure MCP Tunnel bereitzustellen (oder einen geprüften entfernten MCP-Endpunkt bereitzustellen), abhängig von der Verfügbarkeit des Plans und des Workspace-Administrators. Setzen Sie diesen Prozess nicht direkt dem öffentlichen Internet aus.

Siehe Entwicklermodus und MCP-Apps in ChatGPT, bevor Sie die ChatGPT-Einrichtung versuchen; Verfügbarkeit und Genehmigungsverhalten können sich ändern.

Aktivieren von Inhaltserstellungswerkzeugen

Halten Sie das Schreiben deaktiviert, es sei denn, eine bestimmte Aufgabe erfordert es.

  1. Kopieren Sie config/write-policy.example.json an einen Ort außerhalb des Repositorys.

  2. Fügen Sie nur die genauen Canvas-Kurs-IDs hinzu, die für die Inhaltserstellung genehmigt sind.

  3. Setzen Sie enabled auf true und schränken Sie die Datei ein:

chmod 600 /absolute/private/path/write-policy.json
  1. Fügen Sie CANVAS_WRITE_POLICY=/absolute/private/path/write-policy.json zur MCP-Serverumgebung hinzu.

  2. Starten Sie den Client neu und rufen Sie canvas_get_write_policy auf, um die wirksame Richtlinie zu überprüfen.

  3. Überprüfen Sie bei jedem Inhalts-Schreibvorgang das genaue Ziel und die Nutzlast. Geben Sie den aktionsspezifischen Bestätigungssatz an und genehmigen Sie die verändernde Aktion im Client.

  4. Deaktivieren Sie die Richtlinie erneut, wenn die Aufgabe abgeschlossen ist.

Wenn die Variable fehlt, die Datei fehlt, die Berechtigungen breiter als 0600 sind, das Schreiben deaktiviert ist oder der Kurs nicht auf der Whitelist steht, verweigert der Server den Schreibvorgang.

Aktivieren des Bild-Uploads

Der Bild-Upload verwendet dieselbe lokale Schreibrichtlinie und exakte Kurs-Whitelist sowie CANVAS_IMAGE_UPLOAD_ROOT. Das Werkzeug lehnt relative Pfade, symbolische Links, Dateien außerhalb dieses Stammverzeichnisses, Dateien, die nicht dem aktuellen Benutzer gehören, nicht unterstützte Bildtypen, Dateien, deren binäre Signatur nicht mit der Erweiterung übereinstimmt, und Dateien größer als 10 MiB ab. Die exakte Bestätigung lautet APPROVE CANVAS IMAGE UPLOAD course <course_id>.

Canvas verwendet einen dokumentierten dreistufigen Upload-Austausch: Initialisieren Sie die Kursdatei über die authentifizierte API, senden Sie das Bild ohne das Canvas-Zugriffstoken an die von Canvas zurückgegebene HTTPS-Speicher-URL und authentifizieren Sie den zurückgegebenen Canvas-Abschlussort mit gleicher Herkunft. Das Werkzeug liest dann /api/v1/courses/<course_id>/files/<file_id> und prüft MIME-Typ und Größe, bevor es einen persistenten Kursvorschau-Pfad zurückgibt. Es gibt niemals Speichersignaturen oder die Datei-Download-Verifizierer-URL zurück.

Aktuelle Erstellungsgrenze

Dieses Projekt ist die maßgebliche Quelle für das gemeinsame lokale Canvas-MCP, das von unterstützten Chats auf diesem Mac verwendet wird. Es kann Seiten, Module und Modulelemente, Aufgaben und Aufgaben-Rubriken, Diskussionen und Classic Quizzes mit Fragen nach den üblichen Richtlinien- und Genehmigungsgates erstellen. Es bietet auch ressourcenspezifische Löschwerkzeuge für Seiten, Aufgaben, Diskussionen, Classic Quizzes und Module; das Löschen eines Moduls entfernt seine Elementplatzierungen, aber nicht die zugrunde liegenden Kursinhalte. Seine einzige lokale Dateifähigkeit ist der oben beschriebene, durch Payload-Gate geschützte Bild-Uploader. Generischer Datei-Upload, New Quizzes und Konto-/Kursverwaltung bleiben nicht unterstützt.

Siehe docs/2026-08-06-content-authoring-extension.md für die Implementierung und den End-to-End-Validierungsbericht. Siehe docs/2026-08-16-image-upload-extension.md für das Bedrohungsmodell und den Validierungsbericht zum Bild-Upload.

Entwicklung

python -m pip install -e .
python -m unittest discover -s tests -v
python -m compileall -q src tests

Tests mocken Netzwerk- und Anmeldedatengrenzen. Siehe AGENTS.md für Invarianten, die Mitwirkende bewahren müssen, und ROADMAP.md für absichtlich aufgeschobene administrative Funktionen.

F
license - not found
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • MCP server for the Inistate platform: module discovery, entry management, and activity submission.

  • A MCP server built for developers enabling Git based project management with project and personal…

  • An MCP server for deep research or task groups

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mrchris-ai/codex_canvas_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server