{"_id":"@currikon/mcp","_rev":"9-99b8a538e5863adf2fd2b750b5527baf","name":"@currikon/mcp","dist-tags":{"latest":"0.2.6"},"versions":{"0.1.0":{"name":"@currikon/mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","curriculum","education","currikon"],"author":{"name":"CuRRIKON-OS Contributors"},"license":"MIT","_id":"@currikon/mcp@0.1.0","maintainers":[{"name":"madaka","email":"max@mu.app"}],"bin":{"currikon-mcp":"dist/server.js"},"dist":{"shasum":"3577ed08964cf3ac658fdc32be659150add4b615","tarball":"https://registry.npmjs.org/@currikon/mcp/-/mcp-0.1.0.tgz","fileCount":15,"integrity":"sha512-HcfMK3AJXXLLxvnYt/cvugRpL+9okUrvsEpFFtyBg0bDXlPHnWQtMoGIms7NVWj2/GVUqhWfbiZuhOaNSk6nEg==","signatures":[{"sig":"MEUCIDL3oqYdjHGbH6/dE3fttSD7bhooXQAk0Ns0pXP3SiREAiEA0AYTRPVtETmPszP/fU1Qt+a/6DRT5n20gykOkCrv0D0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25815},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/index.js"},"scripts":{"dev":"tsx src/server.ts","build":"tsc -p tsconfig.json","start":"node dist/server.js","prepack":"npm run build"},"_npmUser":{"name":"madaka","email":"max@mu.app"},"_npmVersion":"10.9.2","description":"Model Context Protocol server for the Currikon curriculum API","directories":{},"_nodeVersion":"23.11.0","dependencies":{"zod":"^3.24.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.3","@types/node":"^22.12.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.0_1779954393854_0.49182110542841695","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@currikon/mcp","version":"0.1.2","keywords":["mcp","model-context-protocol","curriculum","education","currikon"],"author":{"name":"CuRRIKON-OS Contributors"},"license":"MIT","_id":"@currikon/mcp@0.1.2","maintainers":[{"name":"madaka","email":"max@mu.app"}],"bin":{"currikon-mcp":"dist/server.js"},"dist":{"shasum":"b2919a84ea541c596e3f2795af3b4adbfaf43842","tarball":"https://registry.npmjs.org/@currikon/mcp/-/mcp-0.1.2.tgz","fileCount":15,"integrity":"sha512-Dvi5gM75dTCdfGX+sClAO/SvkpgkXDEPGWM1+wnxvwIUNuBsSpTALknQYl7pni55xoJuYXflYZ+rLMftzmh0Nw==","signatures":[{"sig":"MEQCIGQXR8VGEExICMK9wkamKVIOTcER2RM3kIMzHhDk7aEuAiBP56eEjE7xLKnxiCwkXRig1FEVXYM3XJ6zHKQseGQCew==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27203},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/index.js"},"scripts":{"dev":"tsx src/server.ts","build":"tsc -p tsconfig.json","start":"node dist/server.js","prepack":"npm run build"},"_npmUser":{"name":"madaka","email":"max@mu.app"},"_npmVersion":"10.9.2","description":"Model Context Protocol server for the Currikon curriculum API","directories":{},"_nodeVersion":"23.11.0","dependencies":{"zod":"^3.24.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.3","@types/node":"^22.12.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.2_1780417498142_0.5958227577432338","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@currikon/mcp","version":"0.2.0","keywords":["mcp","model-context-protocol","curriculum","education","currikon"],"author":{"name":"CuRRIKON-OS Contributors"},"license":"MIT","_id":"@currikon/mcp@0.2.0","maintainers":[{"name":"madaka","email":"max@mu.app"}],"bin":{"currikon-mcp":"dist/server.js"},"dist":{"shasum":"c1b4fe51655a4f7c59123614107ba682f7ada09c","tarball":"https://registry.npmjs.org/@currikon/mcp/-/mcp-0.2.0.tgz","fileCount":21,"integrity":"sha512-1Xolzz7p+58fAVOMs/UJ6Xp7XIBct9G+c5IlBbmkQ/LhBlwgZlMowG1Va0zMBcMhy+ZyJKxLJXlR3m+mQ2BE+A==","signatures":[{"sig":"MEUCIQDkSIhzsyrpmJT2tyq+o6HJp/f00mOL9zaxmVwJTIBpCQIgSZAg+gcDfA0ynVlH07mO36UkTy7rRvt32GrOnAK3n60=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41140},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/index.js"},"gitHead":"491bdc46d411a059ef0c7dcee30cc28b26667ce2","scripts":{"dev":"tsx src/server.ts","build":"tsc -p tsconfig.json","start":"node dist/server.js","prepack":"npm run build"},"_npmUser":{"name":"madaka","email":"max@mu.app"},"_npmVersion":"11.17.0","description":"Model Context Protocol server for the Currikon curriculum API","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.3","@types/node":"^22.12.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.2.0_1788813412439_0.20993892520041024","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@currikon/mcp","version":"0.2.1","keywords":["mcp","model-context-protocol","curriculum","education","currikon"],"author":{"name":"CuRRIKON-OS Contributors"},"license":"MIT","_id":"@currikon/mcp@0.2.1","maintainers":[{"name":"madaka","email":"max@mu.app"}],"bin":{"currikon-mcp":"dist/server.js"},"dist":{"shasum":"bc5026b65cc6dac080a3ae6080632fbcf43791c8","tarball":"https://registry.npmjs.org/@currikon/mcp/-/mcp-0.2.1.tgz","fileCount":21,"integrity":"sha512-FrUidhSshh/rEASeClGqUePCmvGjGrgAJy+s3COLG1kMlQuX9zMXp+1ry7mc7Yo5XfbCWCRbLy2ARBxYDiZ7PA==","signatures":[{"sig":"MEQCIQDxwW2qGx7ZmWy7lp63Nr7/vOLOjuEpE1cSVtMxmZoviwIfN0KD8Z0mKsyopJlko3prwjBBiWDDVIEzmWnZ1+fPlg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45197},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/index.js"},"gitHead":"80f8999b8cbd3c83422948a6533420af8cf771c3","scripts":{"dev":"tsx src/server.ts","build":"tsc -p tsconfig.json","start":"node dist/server.js","prepack":"npm run build"},"_npmUser":{"name":"madaka","email":"max@mu.app"},"_npmVersion":"11.17.0","description":"Model Context Protocol server for the Currikon curriculum API","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.3","@types/node":"^22.12.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.2.1_1788878231096_0.02512360923649526","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@currikon/mcp","version":"0.2.2","keywords":["mcp","model-context-protocol","curriculum","education","currikon"],"author":{"name":"CuRRIKON-OS Contributors"},"license":"MIT","_id":"@currikon/mcp@0.2.2","maintainers":[{"name":"madaka","email":"max@mu.app"}],"bin":{"currikon-mcp":"dist/server.js"},"dist":{"shasum":"50178ddf13f9ccbd7922907a37c9133d08135111","tarball":"https://registry.npmjs.org/@currikon/mcp/-/mcp-0.2.2.tgz","fileCount":21,"integrity":"sha512-dUx1Q8QumXu3c1zF1sLlfYCylDrUE86xmPPqIQyv52GcCM7I70BhccRPUxDdFxkcE3onkq9AaC541T5PQ4ItEA==","signatures":[{"sig":"MEUCIQDEeFDwRSbZmwj8HbBPxMxdSqflefTmT2IP7oeVSdemYgIgWAhpJ82DEzm9ESksBwdyORAgdOD6uIr1LWh+Ss4chZ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52966},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/index.js"},"gitHead":"9bb983f5a318cdaf6347db23f528a1e2c3d2e94f","scripts":{"dev":"tsx src/server.ts","build":"tsc -p tsconfig.json","start":"node dist/server.js","prepack":"npm run build"},"_npmUser":{"name":"madaka","email":"max@mu.app"},"_npmVersion":"11.17.0","description":"Model Context Protocol server for the Currikon curriculum API","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.3","@types/node":"^22.12.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.2.2_1788879788952_0.12405047873694053","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@currikon/mcp","version":"0.2.3","keywords":["mcp","model-context-protocol","curriculum","education","currikon"],"author":{"name":"CuRRIKON-OS Contributors"},"license":"MIT","_id":"@currikon/mcp@0.2.3","maintainers":[{"name":"madaka","email":"max@mu.app"}],"bin":{"currikon-mcp":"dist/server.js"},"dist":{"shasum":"ad930fb3b614c006a6aa4aad4ea45b4e8679d196","tarball":"https://registry.npmjs.org/@currikon/mcp/-/mcp-0.2.3.tgz","fileCount":21,"integrity":"sha512-ynldTaUY4jmcagKtZn+4tJ0Lo8Ysw2MGj7UzIoHgbOPYaZfiV5C51FkfS55l6EmsrO0vbepcmM2S9dsvMeWE9A==","signatures":[{"sig":"MEQCIHKV1F00UdbpZ7VMisagDB7XdRSyOsvlzr1Si5u8hvS8AiAWKBTlOloIuRH4dHUCgnXRXYojOnV2BsdY7MTDF3d8nA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69076},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/index.js"},"gitHead":"de247fc2214a86c58e914046fbfc6a6458ee5f3d","scripts":{"dev":"tsx src/server.ts","build":"tsc -p tsconfig.json","start":"node dist/server.js","prepack":"npm run build"},"_npmUser":{"name":"madaka","email":"max@mu.app"},"_npmVersion":"11.17.0","description":"Model Context Protocol server for the Currikon curriculum API","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.3","@types/node":"^22.12.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.2.3_1788940879022_0.07672462895763532","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@currikon/mcp","version":"0.2.4","keywords":["mcp","model-context-protocol","curriculum","education","currikon"],"author":{"name":"CuRRIKON-OS Contributors"},"license":"MIT","_id":"@currikon/mcp@0.2.4","maintainers":[{"name":"madaka","email":"max@mu.app"}],"bin":{"currikon-mcp":"dist/server.js"},"dist":{"shasum":"3dfed269488052852d3f3102658612fd815befe9","tarball":"https://registry.npmjs.org/@currikon/mcp/-/mcp-0.2.4.tgz","fileCount":21,"integrity":"sha512-fcSDhhDYAXX8P6VsJe+gk+pEUiNw6OEEJT6LkoyKe2FSptsFOPu52sSFKCyyahP6tmYXmnkCAgyHkGWxoHLvww==","signatures":[{"sig":"MEYCIQDkNf5AcuUJZo/TKme6tMhp6PPTOkcaKzEp+PZr9IHUAwIhAMleaLiNE7OHovZjz2PSLdbw3zfvM3CQ5mR/no98yGF0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208980},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/index.js"},"gitHead":"2b2a6a1081a65c6d7465cf246e659f0b3cbf25ec","scripts":{"dev":"tsx src/server.ts","build":"tsc -p tsconfig.json","start":"node dist/server.js","prepack":"npm run build"},"_npmUser":{"name":"madaka","email":"max@mu.app"},"_npmVersion":"11.17.0","description":"Model Context Protocol server for the Currikon curriculum API","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.3","@types/node":"^22.12.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.2.4_1789154651265_0.2613723545242681","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@currikon/mcp","version":"0.2.5","keywords":["mcp","model-context-protocol","curriculum","education","currikon"],"author":{"name":"CuRRIKON-OS Contributors"},"license":"MIT","_id":"@currikon/mcp@0.2.5","maintainers":[{"name":"madaka","email":"max@mu.app"}],"bin":{"currikon-mcp":"dist/server.js"},"dist":{"shasum":"d26c7dcbc505b1ffedfc33bddeb0d4237525ee2a","tarball":"https://registry.npmjs.org/@currikon/mcp/-/mcp-0.2.5.tgz","fileCount":21,"integrity":"sha512-trig+cgJNq3mjHbP4SPmfGSF6xFAezeIyEHOTHEZRj9K3nT2M50f1JrlnKN7XafQA0aVl8FO6j7clR+7ScjUTA==","signatures":[{"sig":"MEYCIQDTDpKZlwMLs4Km5UbQIeNFQHZIelnnzVj6DgAbR74OngIhAM2xAtXFWAZPba6wDhZPruevl8rpataxwmD7qTyTDraz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242756},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/index.js"},"scripts":{"dev":"tsx src/server.ts","build":"tsc -p tsconfig.json","start":"node dist/server.js","prepack":"npm run build"},"_npmUser":{"name":"madaka","email":"max@mu.app"},"_npmVersion":"11.17.0","description":"Model Context Protocol server for the Currikon curriculum API","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^3.24.1","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.3","@types/node":"^22.12.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.2.5_1789568256564_0.42683956811273593","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@currikon/mcp","version":"0.2.6","description":"Model Context Protocol server for the Currikon curriculum API","type":"module","bin":{"currikon-mcp":"dist/server.js"},"exports":{".":"./dist/index.js"},"scripts":{"build":"tsc -p tsconfig.json","dev":"tsx src/server.ts","start":"node dist/server.js","prepack":"npm run build"},"keywords":["mcp","model-context-protocol","curriculum","education","currikon"],"author":{"name":"CuRRIKON-OS Contributors"},"license":"MIT","engines":{"node":">=22"},"publishConfig":{"access":"public"},"dependencies":{"@modelcontextprotocol/sdk":"^1.27.1","zod":"^3.24.1"},"devDependencies":{"@types/node":"^22.12.0","tsx":"^4.19.0","typescript":"^5.7.3"},"gitHead":"522cb34ffaa4179c8ffce5283888696588bd3bc8","_id":"@currikon/mcp@0.2.6","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-CBK0kwYT1S6NgLzMwjkJjTg7W88+dTZ8ZrbYbozf9LwjhbqWk8vWCjdJ/hncDkxJtW4AiilBqVpfTZwquNLdnQ==","shasum":"bbfbc541a22112e736d005af331d56f80422344b","tarball":"https://registry.npmjs.org/@currikon/mcp/-/mcp-0.2.6.tgz","fileCount":21,"unpackedSize":246700,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCpU9xW5q3yansN2Iu0Ap+BiiM7Elp7CIT2ULq73b7XcAIhALNMnVZZPL3S36+e8Q8Jy+HvBFe9M9fN7V9nfRAPbakz"}]},"_npmUser":{"name":"madaka","email":"max@mu.app"},"directories":{},"maintainers":[{"name":"madaka","email":"max@mu.app"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.2.6_1789645465844_0.17230345602895047"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-28T07:46:33.633Z","modified":"2026-09-17T11:44:26.227Z","0.1.0":"2026-05-28T07:46:33.972Z","0.1.2":"2026-06-02T16:24:58.286Z","0.2.0":"2026-09-07T20:36:52.616Z","0.2.1":"2026-09-08T14:37:11.219Z","0.2.2":"2026-09-08T15:03:09.091Z","0.2.3":"2026-09-09T08:01:19.188Z","0.2.4":"2026-09-11T19:24:11.404Z","0.2.5":"2026-09-16T14:17:36.702Z","0.2.6":"2026-09-17T11:44:25.975Z"},"author":{"name":"CuRRIKON-OS Contributors"},"license":"MIT","keywords":["mcp","model-context-protocol","curriculum","education","currikon"],"description":"Model Context Protocol server for the Currikon curriculum API","maintainers":[{"name":"madaka","email":"max@mu.app"}],"readme":"# @currikon/mcp\n\nModel Context Protocol server for the Currikon curriculum API.\n\nThe package is API-backed and does not bundle the curriculum dataset. It connects\nto `https://api.currikon.org` by default and uses your Currikon API key for\nauthenticated requests.\n\n## Install\n\n**Connector (recommended for Claude.ai and Claude Code)** — the API serves an\nOAuth-protected remote MCP endpoint at `/mcp`; no install, no API key.\n\nClaude.ai: Customize → Connectors → Add custom connector →\n`https://api.currikon.org/mcp` → Sign in.\n\nClaude Code:\n\n```bash\nclaude mcp add --transport http currikon https://api.currikon.org/mcp\n```\n\nSign-in is via WorkOS AuthKit; the same ten tools below are exposed.\n\n**This package (servers, CI, scripts)** — for anything that isn't Claude.ai\nor Claude Code, or that needs an API key rather than an interactive OAuth\nsign-in.\n\nClaude Code:\n\n```bash\nclaude mcp add -s user -e CURRIKON_API_KEY=ck_live_... currikon -- npx -y @currikon/mcp\n```\n\nClaude Desktop / Cursor:\n\n```json\n{\n  \"mcpServers\": {\n    \"currikon\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@currikon/mcp\"],\n      \"env\": {\n        \"CURRIKON_API_KEY\": \"ck_live_...\"\n      }\n    }\n  }\n}\n```\n\nUse staging:\n\n```json\n{\n  \"env\": {\n    \"CURRIKON_API_KEY\": \"ck_live_...\",\n    \"CURRIKON_API_BASE_URL\": \"https://staging-api.currikon.org\"\n  }\n}\n```\n\n## Tools\n\n- `get_status` — dataset counts, jurisdictions, subjects\n- `search_competencies` — explore: full-text search with facet counts (jurisdiction, school type, grade band, subject), matched terms and folded school-type variants; base-form words, all-words hits first; `grade`/`schoolType` filters; `format: concise|detailed`\n- `search_topics` — explore the content vocabulary: full-text search over topics (Themen/Inhalte) such as `Plasmolyse` or `Zahlenraum bis 100`, each hit carrying the competency codes it teaches. Complements `search_competencies`: 22 % of topic names share no word with any competency sentence of the same slice. Topics exist for 10 of 21 jurisdictions (three quarters Bayern) — elsewhere an empty result is a data gap, not a finding. No facets; filter by `jurisdiction` and `subject`\n- `get_competency` — fetch one competency by stable code\n- `list_competencies` — filter by jurisdiction, subject, school type, grade; the complete band (limit 100) is the reliable path for one-Land lesson planning\n- `get_progression` — prerequisites and successors for a competency\n- `find_equivalents` — cross-jurisdiction equivalents\n- `list_frameworks` — curriculum frameworks; one per source document, so a school type can list several (Sek I vs. gymnasiale Oberstufe)\n- `align_competencies` — align free text to matching competencies\n- `align_batch` — many texts × one Land → candidates per cell with a coverage report (2 credits per cell; call with `dryRun: true` first, it is free). Prefer `grade` over `schoolType`; jurisdiction aliases like `NRW` are accepted. Text-identical hits from other school types of the same Land are folded into the best match as `variants` (the limit counts distinct texts), and coverage reports `sharedTextWith` per framework so an agent can tell wortgleiche plans (NRW Sek I) from genuinely different ones. One Land/school type/subject can carry more than one framework (NRW Gymnasium Deutsch has a Sek-I and a gymnasiale-Oberstufe Kernlehrplan): each coverage framework may carry a `stage` (`sek1` | `gost` | `wp`), and every `sharedTextWith` entry names its counterpart by `frameworkId`.\n\n## Changelog\n\n### 0.2.6\n\n- **Ganze Sätze statt Fragmente.** Kompetenzen tragen jetzt ein optionales Feld `sentence`:\n  der wörtliche Vorspann des Lehrplans („Die Schülerinnen und Schüler können …\") plus der\n  verbatim Quelltext, mit Punkt. `text` bleibt die unveränderte Quellzeile. Alle Textzeilen\n  der Werkzeuge (`search_competencies`, `get_competency`, `get_progression`,\n  `find_equivalents`, `align_competencies`, `align_batch`) zeigen `sentence`, wenn es da ist,\n  sonst `text`; `structuredContent` trägt `text` verbatim und zusätzlich `sentence`.\n  Der Stamm ist nie erfunden: er wird als Zeile im eingefrorenen Quell-PDF nachgewiesen und\n  nur dann vererbt, wenn der Satz grammatisch trägt (Server-PR #778, #779).\n  **Abdeckung:** erster Schnitt Mecklenburg-Vorpommern (2.535 Sätze) und Bremen (5.439);\n  weitere Länder folgen je Land. Ein Record ohne Stamm hat kein `sentence`.\n  **Reihenfolge:** Server ist ausgeliefert, dann dieses Paket — ein 0.2.5-Client gegen den\n  neuen Server läuft weiter, zeigt aber Fragmente.\n\n### 0.2.5\n\n- **`search_topics`** — die Themen (Inhalte) der Lehrpläne sind jetzt auch über MCP\n  erreichbar, nicht nur über `/v1/topics` und `/v1/search?type=topic`. Ein Treffer nennt\n  Name, Einordnung und die Kompetenzcodes, die das Thema unterrichtet.\n  Warum ein eigenes Werkzeug statt eines Schalters an `search_competencies`: 22 % der\n  Themennamen teilen kein Inhaltswort mit den Kompetenzsätzen desselben Schnitts\n  (gemessen über alle 46.280 Themen, 2026-09-16) — „Plasmolyse\" findet die Kompetenzsuche\n  nie. Themen tragen außerdem keine Facetten und keine Varianten.\n  **Abdeckung:** 10 von 21 Jurisdiktionen, drei Viertel davon Bayern. Das Werkzeug sagt es\n  in seiner Beschreibung und bei jeder Fehlanzeige, damit eine Datenlücke nicht als Befund\n  gelesen wird.\n  **Kosten:** 2 Credits wie `search_competencies` — dieselbe Route, dieselbe Abrechnung,\n  dieselbe Länderberechtigung.\n  **Reihenfolge:** wie üblich erst den Server ausliefern, dann veröffentlichen. Ein\n  kaputtes Fenster gäbe es hier zwar in keiner Richtung — `type=topic` beantwortet die\n  Route seit Langem, und das Ausgabeschema schließt kein Objekt —, aber die Regel bleibt.\n\n- **`query` verlangt jetzt zwei Zeichen**, in `search_topics` wie in\n  `search_competencies`. `/v1/search` verlangt sie seit jeher (`q` min. 2); die Werkzeuge\n  nahmen ein Zeichen an und ließen den Aufruf erst serverseitig mit 400 scheitern. Jetzt\n  sagt es das Werkzeug selbst, bevor ein Credit fließt.\n\n### 0.2.4\n\n- **Release order for this version is inverted: publish 0.2.4 to npm FIRST,\n  then deploy the server.** The usual rule is deploy-then-publish, but here the\n  server adds a field (`frameworkId`) to an object that the already-published\n  0.2.3 declares as a closed schema, and the client validates `structuredContent`\n  against that schema with Ajv — so every 0.2.3 install hard-fails `align_batch`\n  from the moment the new server answers. 0.2.4 works against both the old and\n  the new server, so shipping it first leaves no broken window.\n- **`sharedTextWith` entries carry a `frameworkId`.** A jurisdiction/school\n  type/subject triple can have more than one framework (NRW Gymnasium Deutsch:\n  Sek I 2019 and gymnasiale Oberstufe 2022), so naming the counterpart by school\n  type alone was ambiguous. **This release is required against the current\n  `api.currikon.org`:** 0.2.3 derives a closed output schema and hard-fails\n  `align_batch` on the new field.\n- **Coverage frameworks may carry a `stage`** (`sek1` | `gost` | `wp`), rendered\n  in the framework listings. It is descriptive title material, not a filter — not\n  every framework whose source names a stage carries one.\n- **No object in the `align_batch` and `search_competencies` output schemas is\n  closed any more**, the envelopes included. A new field on the server can no\n  longer break an already-published client.\n\n## Local Development\n\n```bash\nnpm install\nnpm --prefix packages/mcp run build\nCURRIKON_API_KEY=ck_live_... npm --prefix packages/mcp run dev\n```\n","readmeFilename":"README.md"}