Canvas LMS

Conecta ferramentas de IA aos painéis escolares do Canvas.

Documentação

Canvas API MCP Server

Conecte o Claude ao seu Canvas LMS. Faça perguntas naturais como "Quais tarefas tenho para entregar esta semana?" ou "Qual é a minha nota atual em Biologia?" e obtenha respostas reais diretamente da sua conta Canvas.

Funciona com Claude Desktop e Claude Code (a CLI).


Instalação Rápida

Requisitos: Node.js 18+, Git e um token de acesso pessoal do Canvas (como obter um)

git clone https://github.com/Kdude43ver/Canvas-API-MCP.git
cd Canvas-API-MCP
bash install.sh

O script de instalação irá:

  • Instalar dependências e compilar o projeto
  • Perguntar pela sua URL do Canvas e token da API
  • Adicionar o servidor ao Claude Code e/ou Claude Desktop automaticamente

Configuração Manual

1. Obtenha seu token da API do Canvas

  1. Faça login na sua instância do Canvas (ex.: https://yourschool.instructure.com)
  2. Clique na sua foto de perfil → AccountSettings
  3. Role até Approved Integrations
  4. Clique em + New Access Token
  5. Dê um nome (ex.: Claude MCP) e clique em Generate Token
  6. Copie o token agora — o Canvas nunca o exibirá novamente

2. Clone e compile

git clone https://github.com/Kdude43ver/Canvas-API-MCP.git
cd Canvas-API-MCP
npm install
npm run build

3. Crie seu arquivo .env

cp .env.example .env

Edite .env:

CANVAS_TOKEN=your_token_here
CANVAS_BASE_URL=https://yourschool.instructure.com

4. Adicione ao Claude Code

claude mcp add canvas \
  -e CANVAS_TOKEN=your_token_here \
  -e CANVAS_BASE_URL=https://yourschool.instructure.com \
  -- node /absolute/path/to/Canvas-API-MCP/dist/index.js

Substitua /absolute/path/to/Canvas-API-MCP pelo caminho real (execute pwd dentro do repositório para obtê-lo).

5. Adicione ao Claude Desktop

Edite ~/.config/claude/claude_desktop_config.json no Linux/Mac, ou %APPDATA%\Claude\claude_desktop_config.json no Windows. Crie o arquivo se ele não existir.

{
  "mcpServers": {
    "canvas": {
      "command": "node",
      "args": ["/absolute/path/to/Canvas-API-MCP/dist/index.js"],
      "env": {
        "CANVAS_TOKEN": "your_token_here",
        "CANVAS_BASE_URL": "https://yourschool.instructure.com"
      }
    }
  }
}

Reinicie o Claude Desktop após salvar. Você deve ver um ícone de martelo na interface de chat indicando que as ferramentas estão disponíveis.


Ferramentas Disponíveis

FerramentaO que faz
list_coursesLista todos os seus cursos ativos
get_courseDetalhes completos de um curso (incluindo ementa)
list_assignmentsTodas as tarefas de um curso com datas de entrega e valores de pontos
get_assignmentDetalhes completos da tarefa, incluindo descrição
list_upcoming_assignmentsTarefas com vencimento nos próximos N dias em todos os seus cursos
get_gradesSua nota atual e final de um curso
list_submissionsStatus de envio de cada tarefa em um curso
list_announcementsAnúncios recentes de um curso
list_discussionsTópicos de discussão de um curso
list_calendar_eventsPróximos eventos e datas de vencimento em um intervalo de datas
list_filesArquivos disponíveis em um curso com links de download

Exemplos de Prompts

Depois de instalado, tente perguntar ao Claude:

  • "Quais tarefas tenho para entregar nos próximos 3 dias?"
  • "Liste todos os meus cursos deste semestre."
  • "Qual é a minha nota atual em cada disciplina?"
  • "Há algum anúncio na minha turma de Ciência da Computação?"
  • "Mostre os tópicos de discussão do curso 12345."
  • "Quais arquivos estão disponíveis no meu curso de Biologia?"
  • "O que há na minha agenda esta semana?"

Verificando se Funciona (MCP Inspector)

Antes de adicionar ao Claude, você pode testar o servidor diretamente:

npx @modelcontextprotocol/inspector node dist/index.js

Defina CANVAS_TOKEN e CANVAS_BASE_URL na seção Environment Variables do inspector e chame list_courses para confirmar que você recebe dados reais de volta.


Solução de Problemas

"Nenhum curso encontrado" ou resultados vazios

  • Verifique novamente seu CANVAS_BASE_URL — deve ser a URL do Canvas da sua escola, não canvas.instructure.com
  • Certifique-se de que seu token foi copiado corretamente (sem espaços extras)
  • Tente gerar um novo token

O Claude Desktop não mostra as ferramentas do Canvas

  • Confirme que o caminho em claude_desktop_config.json é o caminho absoluto para dist/index.js
  • Certifique-se de que você executou npm run build e que dist/index.js existe
  • Reinicie o Claude Desktop completamente (saia pela bandeja do sistema, não apenas feche a janela)

O Claude Code não consegue encontrar o servidor

  • Execute claude mcp list para ver os servidores registrados
  • Execute claude mcp remove canvas e adicione novamente se algo parecer errado

Erros 403 do Canvas

  • Seu token pode ter expirado — gere um novo nas Configurações do Canvas
  • Algumas instâncias do Canvas restringem o acesso à API; entre em contato com o departamento de TI da sua escola

Segurança

  • Seu token do Canvas é armazenado apenas no seu arquivo local .env (que é ignorado pelo git) e/ou nos seus arquivos de configuração locais do Claude
  • O token dá acesso de leitura a tudo que sua conta Canvas pode ver — trate-o como uma senha
  • Para revogar o acesso: vá em Canvas → Account → Settings → Approved Integrations → exclua o token
  • Nunca compartilhe seu arquivo .env nem o envie para o controle de versão

Desenvolvimento

# Install deps
npm install

# Build (uses esbuild, outputs to dist/)
npm run build

# Run directly (requires .env file)
node dist/index.js

# Dev mode with ts-node
npm run dev

O código-fonte está organizado como:

src/
├── index.ts          # Entry point — loads env, starts server
├── server.ts         # McpServer setup, registers all tools
├── canvas-client.ts  # Axios wrapper: auth headers, pagination, rate-limit backoff
└── tools/
    ├── courses.ts        # list_courses, get_course
    ├── assignments.ts    # list_assignments, get_assignment, list_upcoming_assignments
    ├── grades.ts         # get_grades, list_submissions
    ├── announcements.ts  # list_announcements
    ├── discussions.ts    # list_discussions
    ├── calendar.ts       # list_calendar_events
    └── files.ts          # list_files