{"_id":"@charlie.act7/canvas-mcp-server","_rev":"10-7e62c51bf84cb93e257ef0a3e4550458","name":"@charlie.act7/canvas-mcp-server","dist-tags":{"latest":"1.3.1"},"versions":{"1.1.0":{"name":"@charlie.act7/canvas-mcp-server","version":"1.1.0","keywords":["mcp","canvas","lms","ai","agent","server"],"author":{"name":"Charlie Cárdenas Toledo"},"license":"MIT","_id":"@charlie.act7/canvas-mcp-server@1.1.0","maintainers":[{"name":"charlie.act7","email":"charlie.act7@gmail.com"}],"bin":{"canvas-mcp":"dist/index.js"},"dist":{"shasum":"b589a990cec4368f823edc75b43eec40846ea0ff","tarball":"https://registry.npmjs.org/@charlie.act7/canvas-mcp-server/-/canvas-mcp-server-1.1.0.tgz","fileCount":26,"integrity":"sha512-Wk9zqXEBf1GElMRThxNJ6RK7guQcoUTPw7Y/zNTT9MKFOdGGdpykbZz/6zvsVYRR0Dr0kOoj/sCl29ZSzEctbQ==","signatures":[{"sig":"MEQCIBbbIw+L8j9sgwa6nkCLT+WLGTsK18R9b88ZLNEk9Pf/AiA+r2aP3qWf6GZinSlwrQ48wOFI88UA8vVEwxndzaTTHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208267},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"b49af34059dc602ac1a7035a837829035b2f7e51","scripts":{"dev":"tsc --watch","chat":"tsx src/ollama_bridge.ts","build":"tsc","start":"node dist/index.js","start:http":"node dist/index.js serve-http","prepublishOnly":"npm run build"},"_npmUser":{"name":"charlie.act7","email":"charlie.act7@gmail.com"},"_npmVersion":"11.11.0","description":"MCP Server for Canvas LMS - Use AI to interact with your courses, assignments, and grades.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.22.4","conf":"^12.0.0","axios":"^1.6.0","chalk":"^5.3.0","dotenv":"^16.3.1","fastify":"^5.6.1","inquirer":"^9.2.12","commander":"^11.1.0","form-data":"^4.0.5","@fastify/swagger":"^9.5.2","@fastify/swagger-ui":"^5.2.3","@modelcontextprotocol/sdk":"^1.25.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","nodemon":"^3.1.11","typescript":"^5.3.0","@types/node":"^20.10.0","@types/inquirer":"^9.0.7"},"_npmOperationalInternal":{"tmp":"tmp/canvas-mcp-server_1.1.0_1779407886358_0.5200483153664608","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@charlie.act7/canvas-mcp-server","version":"1.1.1","keywords":["mcp","canvas","lms","ai","agent","server"],"author":{"name":"Charlie Cárdenas Toledo"},"license":"MIT","_id":"@charlie.act7/canvas-mcp-server@1.1.1","maintainers":[{"name":"charlie.act7","email":"charlie.act7@gmail.com"}],"bin":{"canvas-mcp":"dist/index.js"},"dist":{"shasum":"312753e838fe5e275e76f028916e8640f4fd41e1","tarball":"https://registry.npmjs.org/@charlie.act7/canvas-mcp-server/-/canvas-mcp-server-1.1.1.tgz","fileCount":30,"integrity":"sha512-RtVjIXwBgqzo6iMqV5RMLapNrKAQfPZbfmxU5nF5U1Pc+fEGBaEFCVlM5eEjwqvun+CYUYc5JuRF/D0F7BFDOw==","signatures":[{"sig":"MEUCIDwXpgCfNH+dALeOTEvQnJPgeyjFofEbmX+wyotkco/5AiEAhOwzg2Cyqgy8PEG+Gm2iISrT2F+2pWOQ6QLPQYrBA+s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":221285},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"7d3662cd6ad0348ac66e37ac345f65a006d7cd1c","scripts":{"dev":"tsc --watch","chat":"tsx src/ollama_bridge.ts","build":"tsc","start":"node dist/index.js","start:http":"node dist/index.js serve-http","prepublishOnly":"npm run build"},"_npmUser":{"name":"charlie.act7","email":"charlie.act7@gmail.com"},"_npmVersion":"11.11.0","description":"MCP Server for Canvas LMS - Use AI to interact with your courses, assignments, and grades.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.22.4","conf":"^12.0.0","axios":"^1.6.0","chalk":"^5.3.0","dotenv":"^16.3.1","fastify":"^5.6.1","inquirer":"^9.2.12","commander":"^11.1.0","form-data":"^4.0.5","@fastify/swagger":"^9.5.2","@fastify/swagger-ui":"^5.2.3","@modelcontextprotocol/sdk":"^1.25.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","nodemon":"^3.1.11","typescript":"^5.3.0","@types/node":"^20.10.0","@types/inquirer":"^9.0.7"},"_npmOperationalInternal":{"tmp":"tmp/canvas-mcp-server_1.1.1_1779465296296_0.8718248116253311","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@charlie.act7/canvas-mcp-server","version":"1.1.2","keywords":["mcp","canvas","lms","ai","agent","server"],"author":{"name":"Charlie Cárdenas Toledo"},"license":"MIT","_id":"@charlie.act7/canvas-mcp-server@1.1.2","maintainers":[{"name":"charlie.act7","email":"charlie.act7@gmail.com"}],"bin":{"canvas-mcp":"dist/index.js"},"dist":{"shasum":"d3554339b0b71d233b41d72e0c48d212e7cf9c63","tarball":"https://registry.npmjs.org/@charlie.act7/canvas-mcp-server/-/canvas-mcp-server-1.1.2.tgz","fileCount":30,"integrity":"sha512-JsLx/DXYg369i39B3mjlxfhoeJ5MOdIUIpf5Ad1WCcQMQPqJqcrmI71BbnVUEEOEVSYwUf00QVpUzAAcain09A==","signatures":[{"sig":"MEUCIQCCuEVM338cAVRAKtfMNdrFBCEVZn7uLXYCwXjwdiZt/AIgGwnurNWocG9OGKw4A5aeNq6e1lM+HQcCwadT8jcKZBs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":221297},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"06e96e1abf7e6759c88663a43dba7e083a151df5","scripts":{"dev":"tsc --watch","chat":"tsx src/ollama_bridge.ts","build":"tsc","start":"node dist/index.js","start:http":"node dist/index.js serve-http","prepublishOnly":"npm run build"},"_npmUser":{"name":"charlie.act7","email":"charlie.act7@gmail.com"},"_npmVersion":"11.11.0","description":"MCP Server for Canvas LMS - Use AI to interact with your courses, assignments, and grades.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.22.4","conf":"^12.0.0","axios":"^1.6.0","chalk":"^5.3.0","dotenv":"^16.3.1","fastify":"^5.6.1","inquirer":"^9.2.12","commander":"^11.1.0","form-data":"^4.0.5","@fastify/swagger":"^9.5.2","@fastify/swagger-ui":"^5.2.3","@modelcontextprotocol/sdk":"^1.25.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","nodemon":"^3.1.11","typescript":"^5.3.0","@types/node":"^20.10.0","@types/inquirer":"^9.0.7"},"_npmOperationalInternal":{"tmp":"tmp/canvas-mcp-server_1.1.2_1779465340107_0.5743332904141301","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@charlie.act7/canvas-mcp-server","version":"1.1.3","keywords":["mcp","canvas","lms","ai","agent","server"],"author":{"name":"Charlie Cárdenas Toledo"},"license":"MIT","_id":"@charlie.act7/canvas-mcp-server@1.1.3","maintainers":[{"name":"charlie.act7","email":"charlie.act7@gmail.com"}],"bin":{"canvas-mcp":"dist/index.js"},"dist":{"shasum":"9953a921483f8a80ef04500d9d2294173c1b2517","tarball":"https://registry.npmjs.org/@charlie.act7/canvas-mcp-server/-/canvas-mcp-server-1.1.3.tgz","fileCount":30,"integrity":"sha512-GZ6xY4D+oVb6nm5yDzpYiwRAxT7vzuk2EOHfc7tdteW2WR76I2aZeZ2MGTXqIEsua9SXZhwxExIM167LjKOHjg==","signatures":[{"sig":"MEUCIH9ufqIfnezUwtIKHblVDh1+/6xNRDl5SL1nnQg/xGctAiEAqrpTpstA+C5I77MxR4EP+izzxWdCOYUwRgHftyDehkU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":221297},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"d3f7c2e0788c9a575eef22a369a37c7741a2ded0","scripts":{"dev":"tsc --watch","chat":"tsx src/ollama_bridge.ts","build":"tsc","start":"node dist/index.js","start:http":"node dist/index.js serve-http","prepublishOnly":"npm run build"},"_npmUser":{"name":"charlie.act7","email":"charlie.act7@gmail.com"},"_npmVersion":"11.11.0","description":"MCP Server for Canvas LMS - Use AI to interact with your courses, assignments, and grades.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.22.4","conf":"^12.0.0","axios":"^1.6.0","chalk":"^5.3.0","dotenv":"^16.3.1","fastify":"^5.6.1","inquirer":"^9.2.12","commander":"^11.1.0","form-data":"^4.0.5","@fastify/swagger":"^9.5.2","@fastify/swagger-ui":"^5.2.3","@modelcontextprotocol/sdk":"^1.25.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","nodemon":"^3.1.11","typescript":"^5.3.0","@types/node":"^20.10.0","@types/inquirer":"^9.0.7"},"_npmOperationalInternal":{"tmp":"tmp/canvas-mcp-server_1.1.3_1779465389533_0.6222429575707882","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"@charlie.act7/canvas-mcp-server","version":"1.1.8","keywords":["mcp","canvas","lms","ai","agent","server"],"author":{"name":"Charlie Cárdenas Toledo"},"license":"MIT","_id":"@charlie.act7/canvas-mcp-server@1.1.8","maintainers":[{"name":"charlie.act7","email":"charlie.act7@gmail.com"}],"bin":{"canvas-mcp":"dist/index.js"},"dist":{"shasum":"c68432688a9d94e4b72626c045964c04a92988e3","tarball":"https://registry.npmjs.org/@charlie.act7/canvas-mcp-server/-/canvas-mcp-server-1.1.8.tgz","fileCount":30,"integrity":"sha512-Ja/rLJrGnq5xcn8YqnSB6LFnLKWM3hkan1shYlkPRicaT70Tcnvuv0uJVTrVFBfxIT8BBMR9cXfqU8cIStjbjA==","signatures":[{"sig":"MEQCIBnHOhQd0LCTeyYb8uyauzGNgWR5N6m78Ye69SB444PjAiAaIBT2i/ok5gKCB1sKyUnGDvK7wqh7oQ+YJbKYDhFI2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223839},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"a202641369cb8ef55b60a4a8ff6c231804df84b4","scripts":{"dev":"tsc --watch","chat":"tsx src/ollama_bridge.ts","build":"tsc","start":"node dist/index.js","start:http":"node dist/index.js serve-http","prepublishOnly":"npm run build"},"_npmUser":{"name":"charlie.act7","email":"charlie.act7@gmail.com"},"_npmVersion":"11.11.0","description":"MCP Server for Canvas LMS - Use AI to interact with your courses, assignments, and grades.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.22.4","conf":"^12.0.0","axios":"^1.6.0","chalk":"^5.3.0","dotenv":"^16.3.1","fastify":"^5.6.1","inquirer":"^9.2.12","commander":"^11.1.0","form-data":"^4.0.5","@fastify/swagger":"^9.5.2","@fastify/swagger-ui":"^5.2.3","@modelcontextprotocol/sdk":"^1.25.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","nodemon":"^3.1.11","typescript":"^5.3.0","@types/node":"^20.10.0","@types/inquirer":"^9.0.7"},"_npmOperationalInternal":{"tmp":"tmp/canvas-mcp-server_1.1.8_1779468096185_0.11886293399192582","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@charlie.act7/canvas-mcp-server","version":"1.2.0","keywords":["mcp","canvas","lms","ai","agent","server"],"author":{"name":"Charlie Cárdenas Toledo"},"license":"MIT","_id":"@charlie.act7/canvas-mcp-server@1.2.0","maintainers":[{"name":"charlie.act7","email":"charlie.act7@gmail.com"}],"bin":{"canvas-mcp":"dist/index.js"},"dist":{"shasum":"65c0247210b7f7d87ef9054b7d2fd31b015b722a","tarball":"https://registry.npmjs.org/@charlie.act7/canvas-mcp-server/-/canvas-mcp-server-1.2.0.tgz","fileCount":37,"integrity":"sha512-cRYIMlBhtdjzIxkINbyV2uoQwkj5i1PzNGBVlMIGPjKqwQyFn06zVmfBM8BbwPgh/RhC1IqsZrLfN+SM2ChZHw==","signatures":[{"sig":"MEUCIFctQYReDlkUK6fN3bMgwiJm8JXyhMgoPkp7zkMiAdVSAiEA1Tc8M1mvlD8ndTZYM2EgvKIBWdL4X4cxwPX+smn05TI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":333679},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"5d6f4e0bcf0abb85d81ac212b306afb48fa4fbc3","scripts":{"dev":"tsc --watch","chat":"tsx src/ollama_bridge.ts","build":"tsc","start":"node dist/index.js","start:http":"node dist/index.js serve-http","prepublishOnly":"npm run build"},"_npmUser":{"name":"charlie.act7","email":"charlie.act7@gmail.com"},"_npmVersion":"10.8.2","description":"MCP Server for Canvas LMS - Use AI to interact with your courses, assignments, and grades.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.22.4","conf":"^12.0.0","axios":"^1.6.0","chalk":"^5.3.0","dotenv":"^16.3.1","ollama":"^0.6.3","fastify":"^5.6.1","inquirer":"^9.2.12","commander":"^11.1.0","form-data":"^4.0.5","@google/genai":"^2.8.0","@fastify/swagger":"^9.5.2","@fastify/swagger-ui":"^5.2.3","@modelcontextprotocol/sdk":"^1.25.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","nodemon":"^3.1.11","typescript":"^5.3.0","@types/node":"^20.10.0","@types/inquirer":"^9.0.7"},"_npmOperationalInternal":{"tmp":"tmp/canvas-mcp-server_1.2.0_1781811045471_0.06632080209059166","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@charlie.act7/canvas-mcp-server","version":"1.2.1","keywords":["mcp","canvas","lms","ai","agent","server"],"author":{"name":"Charlie Cárdenas Toledo"},"license":"MIT","_id":"@charlie.act7/canvas-mcp-server@1.2.1","maintainers":[{"name":"charlie.act7","email":"charlie.act7@gmail.com"}],"homepage":"https://github.com/CharlieCardenasToledo/mcp-canvas-server#readme","bugs":{"url":"https://github.com/CharlieCardenasToledo/mcp-canvas-server/issues"},"bin":{"canvas-mcp":"dist/index.js"},"dist":{"shasum":"ea1b5eca060dc9e8b051c651bae1fb4ebf9359d1","tarball":"https://registry.npmjs.org/@charlie.act7/canvas-mcp-server/-/canvas-mcp-server-1.2.1.tgz","fileCount":36,"integrity":"sha512-CMFZys9UcY1tDzLfCanBh9zT7gcWyQaEurGFLJ9h7Amd3klXx4sx7RaNONLHxCRLsWq+O3THTiCU8NHiUd7Ipw==","signatures":[{"sig":"MEQCIEBpfYlI9kTT4X16CR0knADqqoKXOb0EvGFOJh4EsRPxAiBaFbNg7YSN1fmlZ13Xg/YvsP2RROTUAY/dP6v3PNWR3g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":353685},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"d95ad7a318f6c57d30597fdae61dec0fc309723c","scripts":{"dev":"tsc --watch","chat":"tsx src/ollama_bridge.ts","build":"tsc","start":"node dist/index.js","start:http":"node dist/index.js serve-http","prepublishOnly":"npm run build"},"_npmUser":{"name":"charlie.act7","email":"charlie.act7@gmail.com"},"repository":{"url":"git+https://github.com/CharlieCardenasToledo/mcp-canvas-server.git","type":"git"},"_npmVersion":"11.13.0","description":"MCP Server for Canvas LMS - Use AI to interact with your courses, assignments, and grades.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^3.22.4","conf":"^12.0.0","axios":"^1.6.0","chalk":"^5.3.0","dotenv":"^16.3.1","ollama":"^0.6.3","fastify":"^5.6.1","inquirer":"^9.2.12","commander":"^11.1.0","form-data":"^4.0.5","@google/genai":"^2.8.0","@fastify/swagger":"^9.5.2","@fastify/swagger-ui":"^5.2.3","@modelcontextprotocol/sdk":"^1.25.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","nodemon":"^3.1.11","typescript":"^5.3.0","@types/node":"^20.10.0","@types/inquirer":"^9.0.7"},"_npmOperationalInternal":{"tmp":"tmp/canvas-mcp-server_1.2.1_1784069114538_0.2757253973767524","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@charlie.act7/canvas-mcp-server","version":"1.2.2","keywords":["mcp","canvas","lms","ai","agent","server"],"author":{"name":"Charlie Cárdenas Toledo"},"license":"MIT","_id":"@charlie.act7/canvas-mcp-server@1.2.2","maintainers":[{"name":"charlie.act7","email":"charlie.act7@gmail.com"}],"homepage":"https://github.com/CharlieCardenasToledo/mcp-canvas-server#readme","bugs":{"url":"https://github.com/CharlieCardenasToledo/mcp-canvas-server/issues"},"bin":{"canvas-mcp":"dist/index.js"},"dist":{"shasum":"9c2235341c4ee316ff3268a97065cd6653cee3c0","tarball":"https://registry.npmjs.org/@charlie.act7/canvas-mcp-server/-/canvas-mcp-server-1.2.2.tgz","fileCount":37,"integrity":"sha512-6+E079FKrr7XB54qlwCeXVlPf7dK0Q5ZNaxGXztAHsxvDeLtGebmxRDt/NsrhzHwfPFqKzLINaRelS5gZwKhiQ==","signatures":[{"sig":"MEYCIQCFFESnjDYgVDEkWbgX+tR6nNXCt/YmfCSpzfG+/uSe+AIhAIcz+NITyIgIKAbRjIa0KJvL3TsXtqDDhj54u5AzPmXu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":371613},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"2e6b7aac5e6fd63e6a689eec618fbd7460cbbde3","scripts":{"dev":"tsc --watch","chat":"tsx src/ollama_bridge.ts","build":"tsc","start":"node dist/index.js","start:http":"node dist/index.js serve-http","prepublishOnly":"npm run build"},"_npmUser":{"name":"charlie.act7","email":"charlie.act7@gmail.com"},"repository":{"url":"git+https://github.com/CharlieCardenasToledo/mcp-canvas-server.git","type":"git"},"_npmVersion":"11.16.0","description":"MCP Server for Canvas LMS - Use AI to interact with your courses, assignments, and grades.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.22.4","conf":"^12.0.0","axios":"^1.6.0","chalk":"^5.3.0","dotenv":"^16.3.1","ollama":"^0.6.3","fastify":"^5.6.1","inquirer":"^9.2.12","commander":"^11.1.0","form-data":"^4.0.5","@google/genai":"^2.8.0","@fastify/swagger":"^9.5.2","@fastify/swagger-ui":"^5.2.3","@modelcontextprotocol/sdk":"^1.25.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","nodemon":"^3.1.11","typescript":"^5.3.0","@types/node":"^20.10.0","@types/inquirer":"^9.0.7"},"_npmOperationalInternal":{"tmp":"tmp/canvas-mcp-server_1.2.2_1785068930537_0.4733200443835248","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@charlie.act7/canvas-mcp-server","version":"1.2.3","keywords":["mcp","canvas","lms","ai","agent","server"],"author":{"name":"Charlie Cárdenas Toledo"},"license":"MIT","_id":"@charlie.act7/canvas-mcp-server@1.2.3","maintainers":[{"name":"charlie.act7","email":"charlie.act7@gmail.com"}],"homepage":"https://github.com/CharlieCardenasToledo/mcp-canvas-server#readme","bugs":{"url":"https://github.com/CharlieCardenasToledo/mcp-canvas-server/issues"},"bin":{"canvas-mcp":"dist/index.js"},"dist":{"shasum":"cfb5c98accdc4a292847e178e83c967570bec254","tarball":"https://registry.npmjs.org/@charlie.act7/canvas-mcp-server/-/canvas-mcp-server-1.2.3.tgz","fileCount":37,"integrity":"sha512-6LOy8AJ2yvmgd6dHywF9iwasQ8rEAEPSCeLlXDB946rABReNw5dHKdJ5wSxFYtdBYVjUtMrl6pTmWLTtl6ywuw==","signatures":[{"sig":"MEYCIQCX1WIzZ4GmH2PIN1QBR98Cx97r22rFsEJ3QHLTGTaAwwIhAJRZmIbYTkNMDYPrjOkivUQ368Vj9sGTUwfD2qPdUryZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":380034},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"371ebeb9eace00ac1f263b5d5dff067dd09e34bd","scripts":{"dev":"tsc --watch","chat":"tsx src/ollama_bridge.ts","build":"tsc","start":"node dist/index.js","start:http":"node dist/index.js serve-http","prepublishOnly":"npm run build"},"_npmUser":{"name":"charlie.act7","email":"charlie.act7@gmail.com"},"repository":{"url":"git+https://github.com/CharlieCardenasToledo/mcp-canvas-server.git","type":"git"},"_npmVersion":"11.16.0","description":"MCP Server for Canvas LMS - Use AI to interact with your courses, assignments, and grades.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.22.4","conf":"^12.0.0","axios":"^1.6.0","chalk":"^5.3.0","dotenv":"^16.3.1","ollama":"^0.6.3","fastify":"^5.6.1","inquirer":"^9.2.12","commander":"^11.1.0","form-data":"^4.0.5","@google/genai":"^2.8.0","@fastify/swagger":"^9.5.2","@fastify/swagger-ui":"^5.2.3","@modelcontextprotocol/sdk":"^1.25.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","nodemon":"^3.1.11","typescript":"^5.3.0","@types/node":"^20.10.0","@types/inquirer":"^9.0.7"},"_npmOperationalInternal":{"tmp":"tmp/canvas-mcp-server_1.2.3_1785069458457_0.14138499312102493","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@charlie.act7/canvas-mcp-server","repository":{"type":"git","url":"git+https://github.com/CharlieCardenasToledo/mcp-canvas-server.git"},"homepage":"https://github.com/CharlieCardenasToledo/mcp-canvas-server#readme","bugs":{"url":"https://github.com/CharlieCardenasToledo/mcp-canvas-server/issues"},"publishConfig":{"access":"public"},"version":"1.3.1","description":"A secure Model Context Protocol server for Canvas LMS courses, assignments, grading, and communication.","main":"dist/index.js","bin":{"canvas-mcp":"dist/index.js"},"type":"module","scripts":{"clean":"node scripts/clean.mjs","build":"npm run clean && tsc","typecheck":"tsc --noEmit -p tsconfig.tests.json","start":"node dist/index.js","start:http":"node dist/index.js serve-http","start:rest":"node dist/index.js serve-rest","dev":"tsc --watch","chat":"tsx src/ollama_bridge.ts","lint":"eslint src tests scripts eslint.config.js","format":"prettier --write \"{src,tests,scripts}/**/*.{ts,mjs}\" \"*.{json,md,yml,yaml}\" \".github/**/*.{yml,yaml,md}\"","format:check":"prettier --check \"{src,tests,scripts}/**/*.{ts,mjs}\" \"*.{json,md,yml,yaml}\" \".github/**/*.{yml,yaml,md}\"","test":"tsx --test tests/**/*.test.ts","check":"npm run format:check && npm run lint && npm run typecheck && npm test && npm run build","package:smoke":"node scripts/package-smoke.mjs","release:check":"node scripts/release-check.mjs","prepublishOnly":"npm run check"},"keywords":["mcp","canvas","lms","ai","agent","server"],"author":{"name":"Charlie Cárdenas Toledo"},"license":"MIT","dependencies":{"@fastify/swagger":"^9.5.2","@fastify/swagger-ui":"^6.1.1","@google/genai":"^2.8.0","@modelcontextprotocol/sdk":"^1.30.0","axios":"^1.19.0","chalk":"^5.3.0","commander":"^11.1.0","conf":"^12.0.0","dotenv":"^16.3.1","fastify":"^5.11.0","form-data":"^4.0.5","inquirer":"^9.2.12","ollama":"^0.6.3","zod":"^3.22.4"},"devDependencies":{"@eslint/js":"^9.39.2","@types/inquirer":"^9.0.7","@types/node":"^24.10.0","eslint":"^9.39.2","nodemon":"^3.1.11","prettier":"^3.6.2","tsx":"^4.21.0","typescript":"^5.9.3","typescript-eslint":"^8.48.1"},"engines":{"node":">=22.14.0"},"mcpName":"io.github.charliecardenastoledo/canvas-lms","_id":"@charlie.act7/canvas-mcp-server@1.3.1","gitHead":"23434080154c6234e53bf119603e96c990d7caa3","_nodeVersion":"24.18.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-ARDq/b2iPR0ygixL6mH/Ak1GiBCetpH9/KWS70XueWdp2qAlGOqpaCThJzAj9xJQyUuIvBh2ibl8fMwMgJNd3g==","shasum":"2acf8ecc84117530216a438f658b331ee9e5a19a","tarball":"https://registry.npmjs.org/@charlie.act7/canvas-mcp-server/-/canvas-mcp-server-1.3.1.tgz","fileCount":41,"unpackedSize":433070,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charlie.act7%2fcanvas-mcp-server@1.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDuw0PEzbefyMEpOWyLzNdDE75p1nZFtg/neIQ48W+/vwIgSr1lJonjRTb1Zfk6YPsnDkqHC+egTbpdnw8Cf9n7DPY="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7153b8d3-4e6e-4168-a9ec-9d113f598636"}},"directories":{},"maintainers":[{"name":"charlie.act7","email":"charlie.act7@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/canvas-mcp-server_1.3.1_1785607238271_0.8333994719506137"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-21T23:58:06.260Z","modified":"2026-08-01T18:00:50.247Z","1.1.0":"2026-05-21T23:58:06.525Z","1.1.1":"2026-05-22T15:54:56.430Z","1.1.2":"2026-05-22T15:55:40.253Z","1.1.3":"2026-05-22T15:56:29.673Z","1.1.8":"2026-05-22T16:41:36.305Z","1.2.0":"2026-06-18T19:30:45.592Z","1.2.1":"2026-07-14T22:45:14.698Z","1.2.2":"2026-07-26T12:28:50.671Z","1.2.3":"2026-07-26T12:37:38.599Z","1.3.1":"2026-08-01T18:00:38.416Z"},"bugs":{"url":"https://github.com/CharlieCardenasToledo/mcp-canvas-server/issues"},"author":{"name":"Charlie Cárdenas Toledo"},"license":"MIT","homepage":"https://github.com/CharlieCardenasToledo/mcp-canvas-server#readme","keywords":["mcp","canvas","lms","ai","agent","server"],"repository":{"type":"git","url":"git+https://github.com/CharlieCardenasToledo/mcp-canvas-server.git"},"description":"A secure Model Context Protocol server for Canvas LMS courses, assignments, grading, and communication.","maintainers":[{"name":"charlie.act7","email":"charlie.act7@gmail.com"}],"readme":"# Canvas LMS MCP Server\n\n[![npm](https://img.shields.io/npm/v/@charlie.act7/canvas-mcp-server.svg)](https://www.npmjs.com/package/@charlie.act7/canvas-mcp-server)\n[![npm downloads](https://img.shields.io/npm/dm/@charlie.act7/canvas-mcp-server.svg)](https://www.npmjs.com/package/@charlie.act7/canvas-mcp-server)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue.svg)](https://www.typescriptlang.org/)\n[![MCP](https://img.shields.io/badge/MCP-stdio%20%7C%20HTTP-green.svg)](https://modelcontextprotocol.io/)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)\n\nModel Context Protocol (MCP) server for **Canvas LMS**. It acts as a bridge that allows AI assistants (Claude Code, Claude Desktop, Cursor, Windsurf, Cline, Roo Code, GitHub Copilot, Continue, Zed, Codex CLI, n8n, OpenAI Custom GPTs, and generic MCP clients) to query, grade, audit, and manage Canvas courses, assignments, rubrics, submissions, quizzes, conversations, and analytics using natural language. Two transports are supported: `stdio` (default) and Streamable-HTTP with interactive Swagger API documentation.\n\n> **Versión en Español:** [README.es.md](README.es.md) | **LLM Integration Guide:** [llms-install.md](llms-install.md)\n\n---\n\n- [Requirements & Platform Support](#requirements--platform-support)\n- [How It Works](#how-it-works)\n- [Install](#install)\n- [Connect to Claude Code](#connect-to-claude-code)\n- [Connect to Other Clients](#connect-to-other-clients)\n    - [Claude Desktop](#claude-desktop)\n    - [Cursor](#cursor)\n    - [Windsurf (Codeium)](#windsurf-codeium)\n    - [Cline & Roo Code](#cline--roo-code)\n    - [GitHub Copilot](#github-copilot)\n    - [Continue.dev](#continuedev)\n    - [Zed Editor](#zed-editor)\n    - [Codex CLI](#codex-cli)\n    - [Generic MCP Client (stdio)](#generic-mcp-client-stdio)\n    - [HTTP Server & OpenAI Custom GPTs](#http-server--openai-custom-gpts)\n- [Authentication & Credentials](#authentication--credentials)\n- [Transports](#transports)\n- [Use Cases & Prompts](#use-cases--prompts)\n- [Tools](#tools)\n- [Resources](#resources)\n- [Configuration Reference](#configuration-reference)\n- [Development](#development)\n- [Documentation](#documentation)\n- [License](#license)\n\n---\n\n## Requirements & Platform Support\n\n- **Node.js** ≥ 18.0.0 (Node.js ≥ 20.x recommended).\n- **Canvas LMS Access**: An active account on your institution's Canvas LMS (e.g. `myschool.instructure.com`).\n- **Canvas API Access Token**: Generated via your Canvas Account Settings page.\n- **Linux / macOS / Windows / WSL2**.\n\n---\n\n## How It Works\n\nWhen you interact with the server, communication flows as follows:\n\n```mermaid\ngraph LR\n    User([User]) -->|Natural Language Instruction| AI[\"AI Assistant (e.g., Claude)\"]\n    AI -->|MCP Request| MCP[\"Canvas MCP Server\"]\n    MCP -->|REST API - HTTPS| Canvas[\"Canvas LMS\"]\n    Canvas -->|Response| MCP\n    MCP -->|Processed Data| AI\n    AI -->|Friendly Answer| User\n```\n\n1. **You ask the AI** (e.g., _\"Create an assignment due next Friday\"_).\n2. **The AI detects your intent** and communicates with the **Canvas MCP Server**, sending the required parameters.\n3. **The server makes a secure call** to the official Canvas LMS API over HTTPS.\n4. **Canvas LMS processes the action** and returns the response payload.\n5. **The AI confirms the success of the action** back to you in plain, natural language.\n\n---\n\n## Install\n\n### Published package\n\n```bash\nnpx @charlie.act7/canvas-mcp-server@latest\n```\n\nThis is the recommended path for end users. `npx` keeps the binary cached and self-updates on `@latest`.\n\n### Interactive CLI Setup\n\nConfigure your Canvas credentials interactively before running:\n\n```bash\nnpx @charlie.act7/canvas-mcp-server config\n```\n\n### From source\n\n```bash\ngit clone https://github.com/CharlieCardenasToledo/mcp-canvas-server.git\ncd mcp-canvas-server\nnpm install\nnpm run build\nnode dist/index.js\n```\n\n---\n\n## Connect to Claude Code\n\nCLI form:\n\n```bash\nclaude mcp add canvas \\\n  --env CANVAS_API_TOKEN=YOUR_ACCESS_TOKEN_HERE \\\n  --env CANVAS_API_DOMAIN=myschool.instructure.com \\\n  -- npx -y @charlie.act7/canvas-mcp-server@latest\n```\n\nOr from a local build:\n\n```bash\nclaude mcp add canvas \\\n  --env CANVAS_API_TOKEN=YOUR_ACCESS_TOKEN_HERE \\\n  --env CANVAS_API_DOMAIN=myschool.instructure.com \\\n  -- node /absolute/path/to/mcp-canvas-server/dist/index.js\n```\n\nManual form — drop into `~/.claude.json`:\n\n```json\n{\n    \"mcpServers\": {\n        \"canvas\": {\n            \"command\": \"npx\",\n            \"args\": [\"-y\", \"@charlie.act7/canvas-mcp-server@latest\"],\n            \"env\": {\n                \"CANVAS_API_TOKEN\": \"YOUR_ACCESS_TOKEN_HERE\",\n                \"CANVAS_API_DOMAIN\": \"myschool.instructure.com\"\n            }\n        }\n    }\n}\n```\n\n---\n\n## Connect to Other Clients\n\nFor step-by-step setup guides for all AI clients (Windsurf, Cline, Roo Code, Copilot, Continue, Zed, LibreChat, Custom GPTs), see [`llms-install.md`](llms-install.md).\n\n### Claude Desktop\n\nEdit your Claude Desktop configuration file:\n\n- **Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`\n- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n\n```json\n{\n    \"mcpServers\": {\n        \"canvas\": {\n            \"command\": \"npx\",\n            \"args\": [\"-y\", \"@charlie.act7/canvas-mcp-server@latest\"],\n            \"env\": {\n                \"CANVAS_API_TOKEN\": \"YOUR_ACCESS_TOKEN_HERE\",\n                \"CANVAS_API_DOMAIN\": \"myschool.instructure.com\"\n            }\n        }\n    }\n}\n```\n\n### Cursor — `~/.cursor/mcp.json`\n\n```json\n{\n    \"mcpServers\": {\n        \"canvas\": {\n            \"command\": \"npx\",\n            \"args\": [\"-y\", \"@charlie.act7/canvas-mcp-server@latest\"],\n            \"env\": {\n                \"CANVAS_API_TOKEN\": \"YOUR_ACCESS_TOKEN_HERE\",\n                \"CANVAS_API_DOMAIN\": \"myschool.instructure.com\"\n            }\n        }\n    }\n}\n```\n\n### Codex CLI\n\n```bash\ncodex mcp add canvas \\\n  --env CANVAS_API_TOKEN=YOUR_ACCESS_TOKEN_HERE \\\n  --env CANVAS_API_DOMAIN=myschool.instructure.com \\\n  npx -y @charlie.act7/canvas-mcp-server@latest\n```\n\n### Generic MCP client (stdio)\n\nAny client that can spawn an MCP server over stdio can use `npx -y @charlie.act7/canvas-mcp-server@latest`. The server speaks MCP 2025 (`tools`, `resources`, `prompts`).\n\n### HTTP Server & OpenAI Custom GPTs\n\nRun the server in HTTP mode with Fastify and interactive Swagger documentation:\n\n```bash\nnpx @charlie.act7/canvas-mcp-server serve-http --port 3000 --host 0.0.0.0\n# or from source:\nnpm run start:http\n```\n\nVisit `http://localhost:3000` to inspect interactive Swagger / OpenAPI definitions or hook into OpenAI Custom GPT Actions.\n\n---\n\n## Authentication & Credentials\n\n### Step 1: Obtain Canvas Credentials\n\n1. Log in to your **Canvas LMS** account.\n2. Go to **Account** > **Settings** in the sidebar navigation.\n3. Scroll to **Approved Integrations** and click **+ New Access Token**.\n4. Enter a purpose (e.g. \"Claude Canvas MCP\") and click **Generate Token**.\n5. Copy the generated token immediately and store it securely (it will not be shown again).\n\n> [!IMPORTANT]\n> Note down your **Canvas Domain**. This is the web address of your institution's Canvas platform, for example: `myschool.instructure.com`.\n\n### Token Auto-Renewal\n\nIf your institution enforces token expiration, the server checks the active token's expiry before each request and automatically regenerates and persists it once it is within 24 hours of expiring.\n\nToggles & Tuning:\n\n- `CANVAS_TOKEN_AUTO_RENEW=false` — Disable automatic token regeneration.\n- `CANVAS_TOKEN_RENEW_THRESHOLD_HOURS=48` — Change the renewal threshold window (default: `24` hours).\n\n---\n\n## Transports\n\nThe server supports two transport modes:\n\n### stdio (default)\n\n```bash\nnpx @charlie.act7/canvas-mcp-server@latest\n```\n\nUsed by desktop applications and CLI tools (Claude Desktop, Claude Code, Cursor, Codex).\n\n### HTTP Server / Fastify REST API\n\n```bash\nnpx @charlie.act7/canvas-mcp-server serve-http --port 3000 --host 0.0.0.0\n```\n\nOptionally pass `--port <port>` (default `3000`) and `--host <host>` (default `0.0.0.0` or `127.0.0.1`).\n\n---\n\n## Use Cases & Prompts\n\n> [!TIP]\n> **Token Saving & Efficiency:** Whenever possible, specify the Canvas ID or the direct Canvas URL (e.g., `https://[your_institution].instructure.com/courses/[course_id]/assignments/[assignment_id]`) in your prompts. This prevents the AI from scanning all your courses/resources, leading to faster responses and substantial token savings.\n\n### Course Auditing & Querying\n\n- _\"What active courses do I have this semester? Check if there are multiple active sections/parallels.\"_\n- _\"Show me all ungraded submissions for 'Essay 1: Introduction to Sociology' in Sociology 101.\"_\n- _\"Who is in Student Group A for the Chemistry class?\"_\n- _\"Does the assignment 'Project Proposal' have an active rubric associated? If so, retrieve its criteria.\"_\n- _\"Search for everything related to 'photosynthesis' across my Biology course — assignments, pages, and discussions.\"_\n\n### Creating & Organizing Course Content\n\n- _\"Create a new module named 'Week 1: Foundations' in my course.\"_\n- _\"Add a SubHeader 'REQUIRED READINGS' inside the 'Week 1' module, and link the syllabus page to it.\"_\n- _\"In my Business course, create an assignment called 'Case Study 1: Market Analysis'. Add an instructions table with columns for Criteria, Requirements, and Points.\"_\n- _\"Create a threaded discussion topic in my course titled 'Weekly Reflection' and pin it to the top.\"_\n\n### Grading & Absence Management\n\n- _\"For assignment 'Case Study 1', find all students who haven't submitted their work. Assign them a grade of 0 and add the comment: 'Activity not submitted.'\"_\n- _\"Grade John's submission for 'Essay 1' with a 90 based on the rubric, and add feedback.\"_\n\n### Student Engagement & Analytics\n\n- _\"Show me the activity analytics for my Calculus course — how active have students been this week?\"_\n- _\"Which students haven't been active in course 12345 in the last few days?\"_\n\n### Messaging & Communication\n\n- _\"Send a private message to student [ID] reminding them their 'Project Proposal' is due tomorrow.\"_\n- _\"How many unread messages do I have in my Canvas inbox?\"_\n\n---\n\n## Tools\n\nThe Canvas MCP Server exposes **117 tools** organized into 21 functional categories:\n\n| Category              | Tools                                                                                                                                                                                                                                  | Description                                       |\n| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |\n| **Courses**           | `list_courses` · `create_course` · `update_course` · `get_syllabus`                                                                                                                                                                    | Manage and configure courses                      |\n| **Modules**           | `list_modules` · `create_module` · `update_module` · `delete_module` · `create_module_item` · `update_module_item` · `delete_module_item`                                                                                              | Full CRUD for modules and their items             |\n| **Pages**             | `list_pages` · `get_page_content` · `create_page` · `update_page` · `delete_page`                                                                                                                                                      | Wiki page publishing & editing                    |\n| **Files & Folders**   | `list_files` · `upload_file` · `update_file` · `delete_file` · `list_folders` · `create_folder` · `update_folder` · `delete_folder`                                                                                                    | File management with folder support               |\n| **Assignments**       | `get_assignments` · `get_assignment` · `create_assignment` · `update_assignment` · `delete_assignment` · `update_assignment_dates` · `bulk_update_due_dates` · `list_assignment_groups`                                                | Full assignment lifecycle                         |\n| **Submissions**       | `get_submissions` · `get_submission` · `get_submission_comments` · `delete_submission_comment` · `submit_assignment`                                                                                                                   | View and manage student submissions               |\n| **Grading**           | `grade_submission` · `grade_multiple_submissions` · `audit_course`                                                                                                                                                                     | Grade individually or in bulk                     |\n| **Rubrics**           | `list_rubrics` · `get_rubric` · `create_rubric` · `update_rubric` · `create_rubric_association`                                                                                                                                        | Build and attach grading rubrics                  |\n| **Classic Quizzes**   | `list_quizzes` · `get_quiz` · `create_quiz` · `update_quiz` · `update_quiz_dates` · `list_quiz_questions` · `get_quiz_question` · `create_quiz_question` · `update_quiz_question` · `delete_quiz_question` · `create_quiz_group`       | Classic Canvas quiz engine                        |\n| **New Quizzes (LTI)** | `create_new_quiz` · `update_new_quiz` · `delete_new_quiz` · `list_new_quiz_items` · `get_new_quiz_item` · `create_new_quiz_item` · `update_new_quiz_item` · `delete_new_quiz_item`                                                     | Modern LTI quiz engine (`/api/quiz/v1`)           |\n| **Students**          | `list_students` · `list_students_with_grades` · `get_student_grades` · `get_student_assignments` · `list_assignment_due_dates`                                                                                                         | Roster and progress tracking                      |\n| **Enrollments**       | `list_course_enrollments` · `enroll_user` · `remove_enrollment` · `get_user` · `get_profile` · `search_users`                                                                                                                          | Manage who is in your course                      |\n| **Groups**            | `list_group_categories` · `create_group_category` · `list_groups_in_category` · `create_group` · `assign_unassigned_members` · `add_group_member`                                                                                      | Student group management                          |\n| **Discussions**       | `list_discussions` · `get_discussion_entries` · `create_discussion` · `delete_discussion` · `post_discussion_reply`                                                                                                                    | Discussion boards                                 |\n| **Announcements**     | `list_announcements` · `post_announcement` · `update_announcement`                                                                                                                                                                     | Course announcements                              |\n| **Conversations**     | `list_conversations` · `get_conversation` · `get_conversation_unread_count` · `send_conversation` · `reply_to_conversation`                                                                                                            | Private inbox messaging                           |\n| **Calendar**          | `list_appointment_groups` · `get_appointment_group` · `create_appointment_group` · `update_appointment_group` · `delete_appointment_group` · `list_appointment_group_users` · `list_appointment_group_groups` · `get_next_appointment` | Scheduling and appointments                       |\n| **Analytics**         | `get_course_analytics` · `get_student_analytics` · `get_course_activity_stream` · `search_course_content`                                                                                                                              | Engagement data and content search                |\n| **Peer Reviews**      | `list_peer_reviews` · `get_submission_peer_reviews` · `create_peer_review` · `delete_peer_review`                                                                                                                                      | Configure and manage peer assessments             |\n| **Access Tokens**     | `list_access_tokens` · `get_access_token` · `create_access_token` · `update_access_token` · `regenerate_access_token` · `delete_access_token`                                                                                          | Manage Canvas API tokens with auto-renewal        |\n| **Health & Config**   | `health_check` · `set_canvas_config`                                                                                                                                                                                                   | Connection checks & runtime configuration updates |\n\n---\n\n## Resources\n\nSupported native MCP resources:\n\n| Resource URI                         | Description                         |\n| ------------------------------------ | ----------------------------------- |\n| `canvas://courses/{id}/readme`       | Formatted Markdown course summary   |\n| `canvas://courses/{id}/pages/{slug}` | Direct HTML content of Canvas pages |\n\n---\n\n## Configuration Reference\n\nAll configuration parameters can be passed as environment variables or stored via CLI configuration (`npx @charlie.act7/canvas-mcp-server config`).\n\n| Env Var                              | Default                  | Purpose                                                               |\n| ------------------------------------ | ------------------------ | --------------------------------------------------------------------- |\n| `CANVAS_API_TOKEN`                   | _(unset)_                | Canvas LMS API access token.                                          |\n| `CANVAS_API_DOMAIN`                  | _(unset)_                | Domain of your Canvas LMS instance (e.g. `myschool.instructure.com`). |\n| `CANVAS_TOKEN_AUTO_RENEW`            | `true`                   | Automatically regenerate expiring access tokens before expiration.    |\n| `CANVAS_TOKEN_RENEW_THRESHOLD_HOURS` | `24`                     | Threshold in hours before token expiry to trigger auto-renewal.       |\n| `PORT` / `HTTP_PORT`                 | `3000`                   | HTTP port when running `serve-http`.                                  |\n| `HTTP_HOST`                          | `0.0.0.0`                | Host interface binding for HTTP server mode.                          |\n| `GEMINI_API_KEY`                     | _(unset)_                | (Optional) Gemini API key for local LLM bridge / script utilities.    |\n| `OLLAMA_HOST`                        | `http://localhost:11434` | (Optional) Local Ollama host address for local model bridge.          |\n\n---\n\n## Development\n\n```bash\nnpm run build      # Compile TypeScript source code (tsc)\nnpm run dev        # Watch mode compilation (tsc --watch)\nnpm start          # Run MCP server in stdio mode\nnpm run start:http # Run HTTP server with Swagger UI at http://localhost:3000\nnpm run chat       # Launch interactive Ollama bridge test CLI\n```\n\n### Source Layout\n\n- `src/index.ts` — CLI entry point (Commander), stdio MCP server bootstrap\n- `src/http-server.ts` — Fastify HTTP server, Swagger / OpenAPI route definitions\n- `src/common/` — `canvas-client.ts` (API client & token auto-renewal), `config.ts` (`conf` manager), `types.ts`\n- `src/tools/` — 117+ tool implementations divided by functional module\n- `src/resources/` — MCP resource providers (`canvas://`)\n- `src/prompts/` — MCP prompt templates\n\n---\n\n## Documentation\n\n- [`README.es.md`](./README.es.md) — Versión en Español del README.\n- [`llms-install.md`](./llms-install.md) — Master AI Client & Editor Integration Guide.\n\n---\n\n## License\n\nThis project is licensed under the **MIT License**. Created by [Charlie Cárdenas Toledo](https://github.com/CharlieCardenasToledo).\n","readmeFilename":"README.md"}