Skip to main content
Glama

imscc-mcp

Repo: https://github.com/InquiryInstitute/imscc_mcp

MCP server that builds Canvas Common Cartridge (.imscc) packages using Instructure’s Ruby gem canvas_cc. Cartridges are Canvas-profile CC files; many LMSes (including Populi) can import valid Common Cartridge 1.x zip/imscc.

Populi: “webcontent … skipped”

Wiki/lesson pages from canvas_cc are type="webcontent" in imsmanifest.xml. Populi often skips them (you may see two errors for two pages). Assignments typically use associatedcontent/imscc_xmlv1p1/learning-application-resource and import more reliably. When authoring from imscc_template, run assemble-spec.mjs --populi to omit wiki pages and wiki module items; see docs/POPULI.md there.

Prerequisites

  • Node.js ≥ 18

  • Ruby + Bundler

  • From this repo root: bundle install (installs gems into vendor/bundle per .bundle/config)

Related MCP server: canvas-mcp

Setup

cd ~/GitHub/imscc_mcp
bundle install
npm install
npm run build

Tests

bundle install
npm install
npm test

Runs integration checks on ruby/build_cartridge.rb: successful builds produce a ZIP with imsmanifest.xml; invalid specs are rejected.

Run

node dist/index.js

Cursor / MCP client

Point command at node and args at the absolute path to dist/index.js after npm run build. No env vars are required.

Tools

Tool

Purpose

imscc_build_cartridge

Build .imscc from structured input (course, pages, modules, assignments, …).

imscc_example_spec

Minimal JSON example for imscc_build_cartridge.

imscc_check_environment

Check ruby, bundle, and canvas_cc from this repo.

imscc_canvas_cc_reference

Links to canvas_cc, Populi CC import, 1EdTech.

Spec notes

  • output_directory: absolute path; created if missing.

  • course.title: required.

  • Assignments — Supported: groups, points, submission_types (e.g. online_text_entry, online_upload), due dates, HTML body. Link a rubric with rubric_identifier (must match a rubrics[].identifier), plus optional rubric_use_for_grading / rubric_hide_score_total.

  • Rubricsrubrics[] with identifier, external_identifier (defaults to identifier), title, optional points_possible, and criteria[] each with id, description, points, and ratings[] (id, description, points, criterion_id matching the criterion id).

  • Slides / decks — There is no separate “slides” type. Package files (e.g. .pptx, .pdf) under files[] with identifier, file_path (path inside the course files tree), and file_location (absolute path on the machine that runs the build). Optionally add a module item with content_type Attachment and identifierref set to the file’s identifier (see canvas_cc module item types).

  • Module items — e.g. WikiPage + identifierref matching a page identifier, or ExternalUrl + url.

  • Assignments → groupsassignment_group_identifier_ref must match an assignment group identifier.

Importer support (Canvas vs Populi vs others) varies; test imports on your LMS.

For types not yet mapped in ruby/build_cartridge.rb (quizzes, question banks, full LTI, etc.), extend the script using the canvas_cc README.

License

MIT

Available Tools

4 tools
imscc_build_cartridgeA

Build a Canvas Common Cartridge (.imscc) using the Ruby canvas_cc gem. Requires Ruby+Bundler and bundle install in the imscc-mcp repo. Output is a Canvas-flavored CC file (often importable into Canvas, Populi, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
filesNoidentifier, file_path, file_location (local path to copy)
pagesNoWiki pages: identifier, page_name, body, workflow_state?
courseYesCourse metadata passed to canvas_cc
foldersNo
rubricsNoCanvas rubrics: identifier, external_identifier?, title, criteria[].id, criteria[].ratings[]; link from assignments via rubric_identifier
assignmentsNoassignment_group_identifier_ref, optional rubric_identifier + rubric_use_for_grading; submission_types per canvas_cc
discussionsNo
canvas_modulesNoModules; module_items use content_type WikiPage|ExternalUrl|…
output_directoryYesAbsolute directory where the .imscc file will be written (created if needed)
assignment_groupsNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses prerequisites and output format, but lacks details on side effects, error handling, or behavior with missing parameters. It adds some value beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, each delivering essential information: purpose, prerequisites, and output. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (10 parameters, nested objects, no output schema), the description is incomplete. It does not mention return value, error conditions, or how the parameters are used to generate the cartridge.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not address any parameters despite 70% schema description coverage. It adds no meaning beyond the schema, which already has terse descriptions for most parameters. The tool has 10 parameters with nested objects, so more guidance is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool builds a Canvas Common Cartridge (.imscc) using the Ruby canvas_cc gem. It specifies the output type and distinguishes itself from sibling tools (reference, check, example) which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (to create an .imscc file) and mentions prerequisites (Ruby+Bundler and bundle install). It does not explicitly discuss alternatives or exclusions, but the context of sibling tools makes the usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

imscc_canvas_cc_referenceB

Pointers to upstream canvas_cc documentation and the IMS CC / Canvas relationship.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full disclosure burden. It does not state that the tool is read-only, non-destructive, or any other behavioral traits beyond pointing to documentation. This leaves the agent uncertain about side effects or safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that efficiently conveys the tool's purpose with no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, no output schema, and a straightforward purpose as a reference, the description is complete enough for an agent to understand its role without additional detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema is fully covered (100%), so the baseline is 4. The description adds no param info, but none is needed since there are no parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides pointers to upstream documentation and explains the IMS CC/Canvas relationship, which distinguishes it from sibling action-oriented tools like imscc_build_cartridge. However, it lacks a specific action verb like 'list' or 'get', reducing clarity slightly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. The sibling tools are listed but no comparison or context is provided for selecting this reference tool over them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

imscc_check_environmentA

Verify Ruby, Bundler, and canvas_cc are available (bundle exec) from the imscc-mcp installation directory.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must fully disclose behavioral traits. It states the tool verifies availability but does not mention whether it modifies state, output format, side effects, or required permissions. This leaves agents uncertain about the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, precise sentence with no waste. It is well-structured and front-loads the action and target.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, no output schema, and no annotations, the description is minimal. It adequately states the check but lacks details on output format or behavior, leaving gaps for an agent to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so no parameter explanation is needed. Baseline is 4, and the description adds no further parameter information, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool verifies availability of Ruby, Bundler, and canvas_cc from a specific directory. It uses a specific verb ('Verify') and resource ('availability'), distinguishing it from sibling tools like imscc_build_cartridge.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when checking environment dependencies but does not explicitly state when to use it vs alternatives, nor does it mention prerequisites or conditions to avoid.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

imscc_example_specA

Returns a minimal JSON example you can adapt for imscc_build_cartridge.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description accurately indicates a read-only, side-effect-free operation by stating 'returns an example'. It does not disclose more details, but the nature of returning static data is inherently transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence that front-loads the action and purpose with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, no output schema, and a simple task, the description fully explains what the tool does and how to use it in context of sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is 100%. Per guidelines, baseline is 4. The description does not add parameter info, but none is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a JSON example and explicitly links it to imscc_build_cartridge, distinguishing it from sibling tools like imscc_build_cartridge (which likely creates) and imscc_check_environment (which checks environment).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage before imscc_build_cartridge to get a template, but does not explicitly state when to avoid or provide alternative tools. It gives good context but lacks explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv0.1.0
    • First observedimscc_build_cartridge
    • First observedimscc_canvas_cc_reference
    • First observedimscc_check_environment
    • First observedimscc_example_spec

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: building the cartridge, providing documentation, checking environment prerequisites, and supplying an example spec. No overlap exists.

Naming Consistency4/5

All tools share the 'imscc_' prefix, but the naming pattern is not fully consistent: 'build_cartridge' and 'check_environment' are verb_noun, while 'canvas_cc_reference' and 'example_spec' are noun phrases. However, the names are still readable and clearly indicate tool function.

Tool Count5/5

With 4 tools, the server is well-scoped for its purpose of building IMSCC files. Each tool serves a necessary step in the workflow, and there is no bloat or shortage.

Completeness4/5

The toolset covers the core workflow: environment check, reference, example, and build. Minor gaps exist, such as a tool to validate or inspect a built cartridge, but the surface is adequate for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

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/CastaliaInstitute/imscc_mcp'

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