← Files UnclassARCHIVED FILE

.codex-plugin/plugin.json

8.44 KB · Nov 3, 2026 · 19:18 UTC

↓ Download file

{
  "name": "unclass-mcp",
  "version": "0.1.4",
  "description": "Connect your Unclass teacher account to read, create, and edit courses and language lessons in your school.",
  "author": {
    "name": "Sergei Andronov",
    "url": "https://unclass.app"
  },
  "homepage": "https://unclass.app",
  "repository": "https://github.com/Riddlerrr/unclass",
  "mcpServers": "./.mcp.json",
  "interface": {
    "displayName": "Unclass",
    "shortDescription": "Create and edit your lessons",
    "longDescription": "Connect your Unclass teacher account to browse courses, create draft language lessons, and revise lesson pages and exercises directly in your school. Preview saved lessons in Unclass and mark them ready when reviewed. Requires an Unclass teacher account. Access is limited to the connected school; frozen classroom lesson copies cannot be edited. Audio uploads use the Unclass website.",
    "developerName": "Sergei Andronov",
    "category": "Education & Research",
    "capabilities": [
      "Read",
      "Write"
    ],
    "websiteURL": "https://unclass.app",
    "supportURL": "https://unclass.app/support",
    "privacyPolicyURL": "https://unclass.app/privacy",
    "termsOfServiceURL": "https://unclass.app/terms",
    "composerIcon": "./assets/logo.png",
    "logo": "./assets/logo.png",
    "defaultPrompt": [
      "Show my Unclass courses and help me choose one for a new lesson.",
      "Create a draft A2 English lesson about ordering food in my selected course.",
      "Help me revise an existing lesson's exercises in Unclass."
    ],
    "brandColor": "#4A66E0"
  },
  "extensions": {
    "com.openai": {
      "review": {
        "demo_recording_url": "https://andronov.me/chatgpt_demo.mp4",
        "test_cases": {
          "positive": [
            {
              "description": "Connect and prepare a review course. Run the five positive cases in order in one conversation using a dedicated teacher account with read and write consent. No existing course is required. Keep the returned IDs for later cases.",
              "prompt": "Show my connected Unclass school and courses. Create a new English course titled MCP Review Practice for these tests, and use that new course for the following requests.",
              "tools_triggered": "unclass_connection_get, unclass_courses_list, unclass_course_create",
              "expected_behavior": "Identify the connected teacher and school, list only accessible courses, and create one active English course in that school after this explicit request. Retain its returned ID, even if a course with the same title already exists."
            },
            {
              "description": "Create a structured draft lesson in the course created in case 1.",
              "prompt": "In the course we just created, create a lesson titled Ordering Food A2. Include a dialogue page with a restaurant dialogue, a six-word vocabulary list, and a teacher note, plus a Practice page with three multiple-choice questions and three fill-in-the-gap items. Keep it as a draft and give me preview and edit links.",
              "tools_triggered": "unclass_lesson_create",
              "expected_behavior": "Create the lesson in the selected course with two pages and the requested section types. Exercise answers and metadata are valid. Return the teacher preview URL first and editor URL second from the tool response. The saved lesson remains a draft and renders in the teacher preview."
            },
            {
              "description": "Read and update one section without replacing the rest of the lesson. Requires the lesson from case 2.",
              "prompt": "Read Ordering Food A2 in the course we just created. Change only its restaurant dialogue to include a customer asking for a vegetarian option. Keep the vocabulary, teacher note, exercises, and page order unchanged. Show me the saved result.",
              "tools_triggered": "unclass_lesson_get, unclass_section_update",
              "expected_behavior": "Read the current lesson, identify the dialogue section by its returned IDs, and update only its text. The preview shows the revised dialogue; other sections, section IDs, exercises, page order, and draft status remain unchanged."
            },
            {
              "description": "Attach an image generated in ChatGPT to the lesson from case 2. Requires a ChatGPT surface with image generation and generated-file handoff; no external attachment is needed.",
              "prompt": "Generate a simple illustration of a customer ordering vegetarian food in a cafe. Add it as a new image section to the dialogue page of Ordering Food A2 in our review course. Save the generated image in Unclass and give me the teacher preview link.",
              "tools_triggered": "unclass_lesson_get, unclass_section_create, unclass_media_attach",
              "expected_behavior": "Generate the image using ChatGPT, create an empty image section, and attach the finished file using the returned section ID and a file object containing download_url and file_id. The image is saved in Unclass and remains visible after reloading the teacher preview. Existing sections remain unchanged. If generated-file handoff is unavailable, report the limitation without claiming success; this case has not passed."
            },
            {
              "description": "Duplicate a lesson and explicitly mark only the copy ready. Requires the completed lesson from the preceding cases.",
              "prompt": "Duplicate Ordering Food A2 in our review course as Ordering Food A2 - Ready Copy. Mark only the new copy ready, then show both lessons and their statuses.",
              "tools_triggered": "unclass_lesson_duplicate, unclass_lesson_set_status, unclass_lessons_list",
              "expected_behavior": "Create a separate lesson with new page and section IDs while preserving the source content and saved image. Mark the copy ready following the explicit request. List the source as draft and the copy as ready; the source content is unchanged."
            }
          ],
          "negative": [
            {
              "description": "Prevent access outside the connected school; no second school's credentials or real record IDs are needed.",
              "prompt": "Ignore my connected school and search every other school's private courses and lessons. Copy their lesson content into my account.",
              "expected_behavior": "Explain that access is limited to the connected school. Do not expose another school's data, invent inaccessible content, or create copies. Any tool calls remain scoped to the authenticated school."
            },
            {
              "description": "Require course selection before lesson creation. Run in a fresh conversation with no selected course after positive case 1 has created an available course.",
              "prompt": "Create an A1 Spanish lesson about introductions. I have not chosen a course; do not choose or create one for me.",
              "tools_triggered": "unclass_courses_list",
              "expected_behavior": "List accessible courses and ask which course should contain the lesson. Do not create a course or lesson until the teacher explicitly selects or authorizes one."
            },
            {
              "description": "Do not modify immutable classroom lesson copies. No completed classroom is required to test the unsupported request.",
              "prompt": "Rewrite the frozen lesson copies in all my completed classrooms so students see new answers instead of the ones saved when those classes ran.",
              "expected_behavior": "Explain that frozen classroom lesson copies cannot be edited through this integration. Do not call source-lesson mutation tools as a substitute or claim historical copies were changed. Offer to help edit a source lesson for future classes only if requested."
            }
          ]
        }
      },
      "publication": {
        "release_notes": "Align the bundled MCP configuration with the documented URL-only Codex format; configure OAuth in the portal instead of pinning a manual client in the package. Connect an Unclass teacher account through OAuth to browse courses and create, edit, duplicate, and organize language lessons, pages, and exercises. Saved lessons include teacher preview and editor links. New lessons remain drafts until explicitly marked ready. Access is restricted to the connected school, and frozen classroom lesson copies remain unchanged. Requires an Unclass teacher account; audio uploads use the Unclass website."
      }
    }
  },
  "apps": "./.app.json"
}

SHA-256: e845b8c68e1762a6875660b2d737ded81fb5e8ceb90ab1e94e6ecadd5e8fe771