{"_id":"@canvas-toolchain/curriculum-intelligence","_rev":"3-8d2762dacbfe6b71bb97357e3012e65d","name":"@canvas-toolchain/curriculum-intelligence","dist-tags":{"latest":"2.3.0"},"versions":{"2.2.0":{"name":"@canvas-toolchain/curriculum-intelligence","version":"2.2.0","license":"MIT","_id":"@canvas-toolchain/curriculum-intelligence@2.2.0","maintainers":[{"name":"rifter13","email":"krank13@hotmail.com"}],"homepage":"https://github.com/Ryfter/canvas-toolchain#readme","bugs":{"url":"https://github.com/Ryfter/canvas-toolchain/issues"},"bin":{"canvas-toolchain-curriculum-intelligence":"dist/index.js"},"dist":{"shasum":"dc795f97690fab7cde38960447472b0a6f8aa18a","tarball":"https://registry.npmjs.org/@canvas-toolchain/curriculum-intelligence/-/curriculum-intelligence-2.2.0.tgz","fileCount":223,"integrity":"sha512-3X9Gu4cM6Tpd/uJhLLlqOa12UHXai/KgnRFIm/sqKXC/o+QY8IpM8LoVZZ36HhW0F9lPoRiVpv/ySUNOxnh0uw==","signatures":[{"sig":"MEQCICTRjW46ABtGt9GcmnMSPRsgbd3S/80FpesrbrbjVEMtAiBNp6pg5Ti5aSRoqCwCPp4vj/c2SKktveFbLNunFqFwIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":424311},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"gitHead":"e36909b5f008546895553be90f711d3cca69571a","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"rifter13","email":"krank13@hotmail.com"},"repository":{"url":"git+https://github.com/Ryfter/canvas-toolchain.git","type":"git","directory":"packages/curriculum-intelligence"},"_npmVersion":"11.17.0","description":"Curriculum Intelligence — MCP server that reads past course archives and lecture transcripts, scores topic currency, and plans the next semester","directories":{},"_nodeVersion":"24.19.0","dependencies":{"yaml":"^2.9.0","fast-xml-parser":"^5.8.0","@anthropic-ai/sdk":"^0.36.0","@modelcontextprotocol/sdk":"^1.10.0","@canvas-toolchain/shared-llm":"2.2.0","@canvas-toolchain/shared-types":"2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^3.2.6","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curriculum-intelligence_2.2.0_1787331939821_0.4105764312551834","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@canvas-toolchain/curriculum-intelligence","version":"2.2.1","license":"MIT","_id":"@canvas-toolchain/curriculum-intelligence@2.2.1","maintainers":[{"name":"rifter13","email":"krank13@hotmail.com"}],"homepage":"https://github.com/Ryfter/canvas-toolchain#readme","bugs":{"url":"https://github.com/Ryfter/canvas-toolchain/issues"},"bin":{"canvas-toolchain-curriculum-intelligence":"dist/index.js"},"dist":{"shasum":"4c9ff35548769e5638d253397f9209b726aa91a6","tarball":"https://registry.npmjs.org/@canvas-toolchain/curriculum-intelligence/-/curriculum-intelligence-2.2.1.tgz","fileCount":223,"integrity":"sha512-9Ebfpyd6XBl6SitFXwiUHYYDElBHVfo5Y4bxI392WoXiRw8qi/Xd+e5htgZt7SA09+uGH5YmyxMfJGkTUeBjUg==","signatures":[{"sig":"MEUCIQCDVzRcnpv28SzEYv1TvJ57UT3r0Jh61rWNUdTVVmhSBgIgcBJFn/1CoV3xTO0GgmtCSwW4f6B8O36d0YiE5V81/Ug=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canvas-toolchain%2fcurriculum-intelligence@2.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":424311},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"gitHead":"a9d3f1e4548282b167e77f6868252828d804552a","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ce435dbe-5baa-45c8-80ab-a4e63323660c"}},"repository":{"url":"git+https://github.com/Ryfter/canvas-toolchain.git","type":"git","directory":"packages/curriculum-intelligence"},"_npmVersion":"11.17.0","description":"Curriculum Intelligence — MCP server that reads past course archives and lecture transcripts, scores topic currency, and plans the next semester","directories":{},"_nodeVersion":"24.19.0","dependencies":{"yaml":"^2.9.0","fast-xml-parser":"^5.8.0","@anthropic-ai/sdk":"^0.36.0","@modelcontextprotocol/sdk":"^1.10.0","@canvas-toolchain/shared-llm":"2.2.1","@canvas-toolchain/shared-types":"2.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^3.2.6","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/curriculum-intelligence_2.2.1_1787343198455_0.38173530475468187","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@canvas-toolchain/curriculum-intelligence","license":"MIT","version":"2.3.0","description":"Curriculum Intelligence — MCP server that reads past course archives and lecture transcripts, scores topic currency, and plans the next semester","type":"module","main":"dist/index.js","bin":{"canvas-toolchain-curriculum-intelligence":"dist/index.js"},"scripts":{"build":"tsc","dev":"tsx src/index.ts","test":"vitest run","test:watch":"vitest"},"dependencies":{"@anthropic-ai/sdk":"^0.36.0","@canvas-toolchain/shared-llm":"2.3.0","@canvas-toolchain/shared-types":"2.3.0","@modelcontextprotocol/sdk":"^1.10.0","fast-xml-parser":"^5.8.0","yaml":"^2.9.0"},"devDependencies":{"@types/node":"^20.0.0","tsx":"^4.0.0","typescript":"^5.0.0","vitest":"^3.2.6"},"engines":{"node":">=20"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/Ryfter/canvas-toolchain.git","directory":"packages/curriculum-intelligence"},"gitHead":"73e54643f8f13130c999a6ed415e10239e16a7d0","types":"./dist/index.d.ts","_id":"@canvas-toolchain/curriculum-intelligence@2.3.0","bugs":{"url":"https://github.com/Ryfter/canvas-toolchain/issues"},"homepage":"https://github.com/Ryfter/canvas-toolchain#readme","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-6u/r3R8NQ73BCONWpNpNqRA4JH6b4s4PBb1GD0cTndpXqmG+YGo57ikMutcb5Xp+ZsNInGT+GFz9rnS01RWUcA==","shasum":"4ae14e28450398a5c27801f0b5db9efd02d8a13d","tarball":"https://registry.npmjs.org/@canvas-toolchain/curriculum-intelligence/-/curriculum-intelligence-2.3.0.tgz","fileCount":223,"unpackedSize":424311,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@canvas-toolchain%2fcurriculum-intelligence@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD3ucMXaKsJBDz54B+6g6VNO7DvUCY8TXBNL9L0+U4CowIhAJx/F/13Z6PxaASgmP2IT1epnlEdXmKMPjZlZHX5dnSy"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ce435dbe-5baa-45c8-80ab-a4e63323660c"}},"directories":{},"maintainers":[{"name":"rifter13","email":"krank13@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/curriculum-intelligence_2.3.0_1788047032136_0.19149331968849137"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-21T17:05:39.523Z","modified":"2026-08-29T23:43:52.698Z","2.2.0":"2026-08-21T17:05:39.967Z","2.2.1":"2026-08-21T20:13:18.608Z","2.3.0":"2026-08-29T23:43:52.329Z"},"bugs":{"url":"https://github.com/Ryfter/canvas-toolchain/issues"},"license":"MIT","homepage":"https://github.com/Ryfter/canvas-toolchain#readme","repository":{"type":"git","url":"git+https://github.com/Ryfter/canvas-toolchain.git","directory":"packages/curriculum-intelligence"},"description":"Curriculum Intelligence — MCP server that reads past course archives and lecture transcripts, scores topic currency, and plans the next semester","maintainers":[{"name":"rifter13","email":"krank13@hotmail.com"}],"readme":"# Canvas Toolchain — Curriculum Intelligence\n\nMCP server that reads past course archives and lecture transcripts, scores topic currency, and plans the next semester.\n\nPart of a three-app toolchain built for fast-moving courses like ITM 370 (AI-Augmented Projects):\n\n```\nCanvas Downloader → Curriculum Intelligence → Canvas Design Studio\n```\n\n- **Canvas Downloader** — pulls raw data (Panopto transcripts, Canvas exports) onto disk\n- **Curriculum Intelligence** — this app — analyzes what was taught, what aged out, what's new\n- **Canvas Design Studio** — takes the updated plan and makes the course pages look polished\n\n## Status\n\n**v1.1.0 — complete.** All 27 MCP tools shipped. Current local verification: 141 tests passing and `npm run build` passing.\n\nSee [`docs/superpowers/specs/2026-05-17-curriculum-intelligence-design.md`](docs/superpowers/specs/2026-05-17-curriculum-intelligence-design.md) for the full design and [`DECISIONS.md`](DECISIONS.md) for implementation decisions.\n\n## Install\n\n```bash\nnpm install\nnpm run build\n```\n\n## Run\n\n```bash\nnpm run dev\n```\n\nSpeaks MCP over stdio. Wire into Claude Code or Claude Desktop the same way as Canvas Design Studio:\n\n```json\n{\n  \"mcpServers\": {\n    \"curriculum-intelligence\": {\n      \"command\": \"node\",\n      \"args\": [\"path/to/curriculum-intelligence/dist/index.js\"],\n      \"env\": { \"ANTHROPIC_API_KEY\": \"sk-ant-...\" }\n    }\n  }\n}\n```\n\n`ANTHROPIC_API_KEY` is only required for `scan_recent_developments`. All other tools run without it.\n\n## Config location\n\nApp state lives at `~/.curriculum-intelligence/` by default. Override with `CURRICULUM_INTELLIGENCE_HOME`.\n\n```\n~/.curriculum-intelligence/\n  config.json              # registered courses + app settings\n  courses/\n    <courseId>/\n      config.json          # semester history, feed list, options\n      ideas.md             # generated after v0.6 run\n      news-cache.json      # RSS feed cache\n      semesters/\n        <semesterId>/\n          topic-map.json\n          transcripts.json\n          week-map.json\n          quote-bank.json\n          off-syllabus.json\n          diff-vs-<other>.json\n```\n\n## MCP Tools\n\n### Setup & ingest\n\n| Tool | What it does |\n|------|-------------|\n| `setup_course` | Register a course — creates the folder tree and config |\n| `get_course_state` | List registered courses or inspect a single course |\n| `ingest_canvas_archive` | Walk a Canvas export folder, write `topic-map.json` |\n\n### Introspection\n\n| Tool | What it does |\n|------|-------------|\n| `list_assignments` | List assignments from the ingested topic map |\n| `list_pages` | List pages |\n| `list_modules` | List modules (pass `expandItems=true` for full item detail) |\n| `list_resources` | List external resource links referenced in course content |\n\n### Diff\n\n| Tool | What it does |\n|------|-------------|\n| `diff_semesters` | Side-by-side diff of two semesters — added, removed, reused, rewritten |\n\n### Transcripts\n\n| Tool | What it does |\n|------|-------------|\n| `ingest_transcripts` | Read `.vtt` / `.srt` / `.md` transcript files, tag `source=panopto\\|whisper` |\n| `map_transcripts_to_weeks` | Match each transcript to its course week by filename hints |\n| `extract_lecture_topics` | Return shaped lecture chunks ready for Claude to summarize |\n| `find_off_syllabus_topics` | Surface transcript tokens not present in syllabus pages for that week |\n| `build_quote_bank` | Extract notable lines matching deliberate-point trigger phrases |\n\n### Currency & signals\n\n| Tool | What it does |\n|------|-------------|\n| `fetch_news_feed` | Pull RSS/Atom feeds, filter by date, cache to `news-cache.json` |\n| `scan_recent_developments` | Ask Claude (Anthropic API) what's new in a topic area since a date |\n| `suggest_topics` | Merge feed items + scan developments into ranked topic candidates |\n| `score_topic_currency` | Classify a topic as `evergreen / current / dated` |\n| `recommend_for_topic` | Return `KEEP / UPDATE / DROP / ADD` verdict with rationale |\n\n### Output\n\n| Tool | What it does |\n|------|-------------|\n| `generate_ideas_file` | Write `ideas.md` listing deferred v1 scope and next prompts for Claude |\n\n## Tests\n\n```bash\nnpm test\n```\n\n83 tests across 15 test files. All fixture-based — no network calls in the test suite.\n\n## Typical workflow\n\n```\n1. setup_course          → register ITM370\n2. ingest_canvas_archive → parse Spring2025 export\n3. ingest_canvas_archive → parse Fall2024 export (for diff)\n4. diff_semesters        → what changed between semesters\n5. ingest_transcripts    → load .vtt files from Canvas Downloader\n6. map_transcripts_to_weeks\n7. find_off_syllabus_topics  → what did the lecture cover beyond the syllabus?\n8. build_quote_bank          → pull notable lines for course materials\n9. fetch_news_feed           → pull Simon Willison, AI news blogs\n10. scan_recent_developments → ask Claude what's new in \"Prompt engineering\"\n11. suggest_topics           → merge signals into ranked candidates\n12. score_topic_currency     → classify each topic\n13. recommend_for_topic      → get KEEP/UPDATE/DROP/ADD verdicts\n14. generate_ideas_file      → capture what to build next\n```\n\n## Planning and Export Tools\n\n- `generate_recommended_outline` — draft next-semester module sequence\n- `draft_assignment_brief` — redraft an assignment with updated context\n- `import_previous_shell`, `shift_dates`, `update_examples`, `export_course_folder` — shell update pipeline\n\n## Deferred\n\n- Second-brain `TopicSource` adapter\n- Cross-app model-routing UI in Command & Control\n\nSee `ideas.md` (generated after a run) and [`DECISIONS.md`](DECISIONS.md) for context.\n","readmeFilename":"README.md"}