Canvas API MCP
Servidor MCP Canvas para Canvas LMS: 16 ferramentas estudantis selecionadas para tarefas, notas, prazos e arquivos, além de um gateway que alcança todos os 1.116 endpoints da API do Canvas.
Documentação
canvas-api-mcp
Nunca mais perca um prazo de trabalho.
Pergunte à sua IA o que está pendente e ela lê a resposta direto do Canvas:
prazos reais, status real de envio, sem copiar nada de um lado para o outro.
Um servidor MCP para Canvas LMS. 16 ferramentas selecionadas para o trabalho diário de estudantes, além de um gateway que alcança todos os endpoints que sua instância do Canvas expõe.
📖 Documentação: mcp.johannsenlum.com/canvas-lms · guia de instalação · referência de ferramentas · habilidades · conformidade
Software de uso pessoal. A Política de API do Canvas exige OAuth para aplicações usadas por múltiplas pessoas, e o OAuth do Canvas não pode ser implementado com segurança por software instalado localmente (sem PKCE, e
client_secretnão pode ser distribuído em um pacote). Use isto com seu próprio token na sua própria conta. Veja Conformidade.
O que você pode perguntar
Exemplos reais de prompts e qual ferramenta responde a eles.
Você: O que está para entregar esta semana? Claude: (chama
whats_due): Você tem 3 coisas para entregar: Problema 4 (qui, CS3230), uma resposta de discussão (sex, IS4302) e o relatório do Marco 2 (dom, EE2211).
Você: Como estou no meu curso de banco de dados e o que cai na ementa da semana 6? Claude: (chama
my_grades, depoisget_syllabus, depoiscourse_contentpara o módulo da semana 6): Você está com 87% no geral. A semana 6 cobre normalização e tem uma leitura mais um arquivo de laboratório para sexta-feira.
Você: Resuma os PDFs das notas da aula 8 e mostre minha submissão do ensaio para eu ver o feedback. Claude: (chama
list_files+read_filepara o PDF, depoismy_submissionpara o ensaio): ...
Você: Responda à discussão "Equipes do projeto" e diga que estou livre depois das 15h para a reunião do grupo. Claude: (chama
post_discussion_reply✏️): Publicado no tópico.
Você: O Canvas já me deu estatísticas de questionário detalhadas por questão, ao longo de todo o semestre? Claude: (chama
search_canvas_apipara encontrar o endpoint certo, depoiscanvas_requestpara chamá-lo): ...
O último exemplo é o propósito das ferramentas de gateway: se um endpoint existe na sua
instância do Canvas, search_canvas_api pode encontrá-lo e canvas_request pode chamá-lo,
mesmo que apenas 16 ferramentas sejam selecionadas manualmente.
Instalação
Pré-requisitos
-
Python 3.11+
-
Um token de acesso pessoal do Canvas. Sua instituição deve permitir que estudantes criem tokens: verifique Canvas → Conta → Configurações → Integrações aprovadas para o botão "+ Novo token de acesso". Guia completo com capturas de tela: mcp.johannsenlum.com/canvas-lms/install.
Observe que o token expira. Desde a atualização de segurança de outubro de 2025 da Instructure, contas com apenas papéis de estudante devem definir uma expiração de no máximo 120 dias, e muitas instituições impõem um limite menor (NUS permite 90). Anote a data: um token expirado faz todas as ferramentas retornarem
401de uma vez, o que parece uma instalação quebrada em vez de uma credencial simplesmente vencida.
Executando o servidor
canvas-api-mcp está publicado no PyPI. Execute com:
uvx canvas-api-mcp
Instalar a partir do código-fonte (contribuidores / versões não lançadas main). Não faz parte do
caminho de instalação normal acima, só é necessário se você quiser o código mais recente não lançado
em vez da versão publicada no PyPI:
uvx --from git+https://github.com/JohannsenLum/canvas-api-mcp canvas-api-mcp
Ou execute a partir de um clone local:
git clone https://github.com/JohannsenLum/canvas-api-mcp
cd canvas-api-mcp
uv sync
Instalação rápida (um clique)
Links de um clique existem apenas para Cursor, VS Code e LM Studio. Nenhum outro
cliente tem um formato de link de instalação documentado. Eles pré-preenchem a configuração abaixo, mas
ainda precisam de CANVAS_BASE_URL e CANVAS_TOKEN preenchidos depois.
Todos os clientes (configuração manual)
Seu token permanece na sua máquina, no seu próprio arquivo de configuração. Ele nunca é transmitido para nenhum lugar, exceto diretamente para sua instância do Canvas.
| Cliente | Link de um clique? |
|---|---|
| Claude Code | não |
| Claude Desktop | não |
| Cursor | sim, acima |
| VS Code | sim, acima |
| LM Studio | sim, acima |
| Zed | não |
| Windsurf | não (Windsurf só resolve servidores do próprio registro) |
Claude Code: ~/.claude.json
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
Claude Desktop: claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Não existe instalação de um clique para Claude Desktop (ele instala pacotes .mcpb, não
links de um clique). Copie este JSON via Configurações → Desenvolvedor → Editar Configuração:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
Cursor: ~/.cursor/mcp.json
Alternativa para o botão acima, ou se preferir colar diretamente:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
VS Code: .vscode/mcp.json
Alternativa para o botão acima, ou se preferir colar diretamente. Observe que o VS
Code usa uma chave servers, não mcpServers:
{
"servers": {
"canvas": {
"type": "stdio",
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
LM Studio: mcp.json (Programa → Instalar → Editar mcp.json)
Alternativa para o botão acima, ou se preferir colar diretamente:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
Zed: settings.json
Não existe link de um clique para Zed. Adicione isto em context_servers nas suas
configurações do Zed:
{
"context_servers": {
"canvas": {
"source": "custom",
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
Windsurf: ~/.codeium/windsurf/mcp_config.json
Não existe link de um clique para Windsurf. Ele só resolve servidores do próprio registro, então isso precisa ser colado manualmente via Configurações do Windsurf → Servidores MCP → Editar configuração bruta:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
Ferramentas
| Ferramenta | O que faz |
|---|---|
whoami | Identidade e seu papel em cada curso |
get_calendar_feed_url | Seu link de calendário privado .ics (somente quando você pedir) |
my_courses | Cursos ativos com código, período, papel |
whats_due | Tudo o que tem prazo, do mais próximo ao mais distante |
my_grades | Nota atual por curso |
list_assignments | Tarefas de um curso e estado de envio |
get_assignment | Uma tarefa por completo, com rubrica |
my_submission | Sua submissão, nota e feedback |
submit_assignment ✏️ | Enviar trabalho |
course_announcements | Anúncios recentes |
course_content | Módulos e seus conteúdos |
list_files | Arquivos em um curso |
read_file | Extrair texto de PDF/DOCX/PPTX/texto |
get_page | Página wiki do Canvas por slug |
get_syllabus | Programa de um curso |
read_discussion | Tópicos ou respostas de um tópico |
post_discussion_reply ✏️ | Publicar em uma discussão |
search_canvas_api | Encontrar qualquer endpoint por palavra-chave (gateway) |
canvas_request ✏️ | Executar qualquer endpoint (gateway) |
✏️ escreve no Canvas. São 3 ferramentas de escrita no total: submit_assignment,
post_discussion_reply e canvas_request quando chamadas com um método não-GET
(chamadas GET através de canvas_request são somente leitura).
search_canvas_api + canvas_request alcançam todos os ~1.116 endpoints que sua instância
expõe. O que eles podem fazer é decidido pelo Canvas com base nas permissões do seu token: um
token de professor desbloqueia endpoints educacionais sem nenhuma mudança neste servidor.
Prompts
week_ahead, study_pack, grade_check.
Recursos
canvas://me, canvas://courses, canvas://api/catalog.
Habilidades
Se o seu cliente suportar a convenção de habilidades:
npx skills add JohannsenLum/canvas-api-mcp
Outras instituições
Funciona com qualquer instância do Canvas: defina CANVAS_BASE_URL. O catálogo de ~1.116
endpoints está incluso no pacote em
canvas_api_mcp/data/catalog.json. Para combiná-lo com o conjunto exato de recursos da sua implantação,
regere-o:
python scripts/build_catalog.py https://canvas.yourschool.edu -o data/catalog.json
Conformidade
- Integridade acadêmica.
submit_assignmentpode enviar qualquer coisa, inclusive trabalho gerado por IA. Enviar trabalho que não é seu viola as regras de integridade acadêmica de praticamente todas as instituições, e a Política de API do Canvas proíbe explicitamente o uso que as viole. Isso é responsabilidade sua. - Limite de taxa. O cliente limita de acordo com a cota publicada do Canvas. Não o remova: sobrecarregar a API é proibido.
- Material de curso.
read_filebusca materiais para seu próprio estudo. Não os redistribua. - Seu token é equivalente a uma senha. Ele pode ler suas notas e enviar trabalhos como você. Defina uma expiração. Nunca o commite.
- Escopo de uso pessoal. A Fase 1 tem como alvo um único estudante usando o próprio token. Não há ferramentas educacionais selecionadas; o fluxo OAuth do Canvas não tem PKCE, então este servidor instalado localmente não pode implementar o OAuth multiusuário que a Política de API do Canvas exige para algo mais amplo. Não reempacote isto como um serviço multi-tenant.
Desenvolvimento
uv sync
uv run pytest -v
# Live tests against your real account (read-only)
CANVAS_LIVE_TESTS=1 uv run pytest tests/test_live.py -v
Variáveis de ambiente: CANVAS_BASE_URL, CANVAS_TOKEN, opcional
CANVAS_MAX_PAGES (padrão 10) e CANVAS_TIMEOUT (segundos, padrão 30).
Veja env.template.
Contribuindo
Issues e pull requests são bem-vindos: veja CONTRIBUTING.md para configuração, as regras arquiteturais que valem a pena conhecer antes de mudar qualquer coisa e o critério para adicionar uma nova ferramenta selecionada.
Encontrou um problema de segurança? Não abra um issue público. Veja SECURITY.md para relato privado, particularmente importante aqui, já que este projeto lida com tokens do Canvas equivalentes a senhas.
As mudanças são registradas em CHANGELOG.md.
Licença
MIT © 2026 Johannsen Lum.
Use, altere, redistribua, construa algo comercial em cima dele: a única condição é manter o aviso de direitos autorais e o texto da licença. Ele vem sem garantia de qualquer tipo.
Contribuições são aceitas sob a mesma licença.