Canvas LMS

Servidor MCP para acesso fácil a dados educacionais através da sua instância do Canvas LMS.

Documentação

Servidor Canvas LMS MCP

smithery badge Um servidor Canvas LMS MCP (Machine Conversation Protocol) mínimo para acesso fácil a dados educacionais por meio da sua instância Canvas LMS. Este servidor fornece uma ponte entre sistemas de IA (como Cursor) e o Canvas Learning Management System.

Recursos

  • Cursos: Listar cursos em que você está matriculado, obter detalhes do curso, ementa, módulos e itens de módulos
  • Tarefas: Listar e obter tarefas com status de envio opcional
  • Páginas: Obter páginas do curso por slug de URL
  • Envios: Listar seus próprios envios com notas e feedback
  • Anúncios: Listar anúncios em vários cursos
  • Discussões: Listar tópicos e visualizar threads completas de discussão
  • Calendário: Listar eventos do calendário com filtro por data
  • Planejador: Listar itens do planejador (tarefas, anúncios, etc.)
  • Matrículas: Obter dados de matrícula com notas
  • Questionários: Listar e obter questionários (apenas questionários clássicos)
  • Arquivos: Listar e obter arquivos
  • Navegação: Obter abas do curso, grupos de tarefas e cursos favoritos

Instalação

Instalando via Smithery

Para instalar o Canvas LMS Server para Claude Desktop automaticamente via Smithery:

npx -y @smithery/cli install @ahnopologetic/canvas-lms-mcp --client claude

Pré-requisitos

  • Python 3.13+
  • Token da API Canvas LMS
  • Gerenciador de pacotes uv (recomendado)

Métodos de Instalação

Opção 1: Instalar com uvx (Recomendado)

A maneira mais fácil de instalar e executar o canvas-lms-mcp é usando uvx:

uvx canvas-lms-mcp

Isso executará o servidor em um ambiente isolado sem instalá-lo permanentemente.

Para instalar a ferramenta permanentemente:

uv tool install canvas-lms-mcp

Opção 2: Instalar a partir do código-fonte

  1. Clone o repositório:

    git clone https://github.com/yourusername/canvas-lms-mcp.git
    cd canvas-lms-mcp
    
  2. Instale com uv:

    # Install uv if you don't have it yet
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
    # Create a virtual environment and install dependencies
    uv venv
    uv pip install -e .
    

    Alternativamente, use métodos tradicionais:

    python -m venv .venv
    source .venv/bin/activate  # On Windows: .venv\Scripts\activate
    pip install -e .
    

Configuração

Defina as seguintes variáveis de ambiente:

export CANVAS_API_TOKEN="your_canvas_api_token"
export CANVAS_BASE_URL="https://your-institution.instructure.com"  # Default: https://canvas.instructure.com

Você pode obter seu token da API Canvas nas configurações da sua conta Canvas.

Executando o Servidor

Inicie o servidor com uv:

uv run src/canvas_lms_mcp/main.py

Se instalado com a ferramenta uvx:

canvas-lms-mcp

Por padrão, o servidor executa em http://localhost:8000.. Você pode usar a interface FastMCP em http://localhost:8000/docs para interagir com a API.

Ferramentas Disponíveis

O servidor fornece 22 ferramentas para interagir com o Canvas LMS:

Cursos

list_courses

Listar cursos nos quais o usuário está ativamente matriculado.

Parâmetros:

  • page (opcional, padrão=1): Número da página (indexado a partir de 1)
  • items_per_page (opcional, padrão=10): Número de itens por página

get_course

Obter um único curso por ID.

Parâmetros:

  • course_id (obrigatório): ID do curso
  • include (opcional): Lista de dados adicionais a incluir

get_course_syllabus

Obter o corpo da ementa de um curso como HTML.

Parâmetros:

  • course_id (obrigatório): ID do curso

get_course_modules

Obter módulos de um curso.

Parâmetros:

  • course_id (obrigatório): ID do curso
  • include (opcional): Lista de dados adicionais a incluir
  • per_page (opcional, padrão=100): Número de itens por página

get_module_items

Obter itens de um módulo específico.

Parâmetros:

  • course_id (obrigatório): ID do curso
  • module_id (obrigatório): ID do módulo

Tarefas

list_assignments

Listar tarefas de um curso.

Parâmetros:

  • course_id (obrigatório): ID do curso
  • bucket (obrigatório): Filtrar por "past", "overdue", "undated", "ungraded", "unsubmitted", "upcoming" ou "future"
  • order_by (obrigatório): Ordenar por "due_at", "position" ou "name"
  • include (opcional): Lista de dados adicionais a incluir (ex.: ["submission"] para ver o status da nota)
  • page (opcional, padrão=1): Número da página (indexado a partir de 1)
  • items_per_page (opcional, padrão=10): Número de itens por página

get_assignment

Obter uma única tarefa por ID.

Parâmetros:

  • course_id (obrigatório): ID do curso
  • assignment_id (obrigatório): ID da tarefa

list_assignment_groups

Listar grupos de tarefas de um curso (mostra ponderação/categorias de notas).

Parâmetros:

  • course_id (obrigatório): ID do curso

Páginas

get_page

Obter uma única página pelo seu slug de URL.

Parâmetros:

  • course_id (obrigatório): ID do curso
  • page_slug (obrigatório): Slug de URL da página (ex.: "syllabus", "course-handbook")

Envios

list_submissions

Listar os envios do usuário atual para um curso, incluindo notas e feedback.

Parâmetros:

  • course_id (obrigatório): ID do curso
  • include (opcional): Lista de dados adicionais (ex.: ["assignment", "submission_comments"])
  • page (opcional, padrão=1): Número da página (indexado a partir de 1)
  • items_per_page (opcional, padrão=10): Número de itens por página

Anúncios

list_announcements

Listar anúncios de um ou mais cursos.

Parâmetros:

  • course_ids (obrigatório): Lista de IDs de cursos
  • page (opcional, padrão=1): Número da página (indexado a partir de 1)
  • items_per_page (opcional, padrão=10): Número de itens por página

Discussões

list_discussions

Listar tópicos de discussão de um curso.

Parâmetros:

  • course_id (obrigatório): ID do curso
  • page (opcional, padrão=1): Número da página (indexado a partir de 1)
  • items_per_page (opcional, padrão=10): Número de itens por página

get_discussion_view

Obter a visão completa de um tópico de discussão, incluindo todas as respostas.

Parâmetros:

  • course_id (obrigatório): ID do curso
  • discussion_id (obrigatório): ID do tópico de discussão

Calendário

list_calendar_events

Listar eventos do calendário para cursos.

Parâmetros:

  • context_codes (obrigatório): Lista de códigos de contexto (ex.: ["course_123"])
  • start_date (opcional): Data de início no formato ISO 8601
  • end_date (opcional): Data de término no formato ISO 8601
  • page (opcional, padrão=1): Número da página (indexado a partir de 1)
  • items_per_page (opcional, padrão=10): Número de itens por página

Itens do Planejador

list_planner_items

Listar itens do planejador para o usuário autenticado.

Parâmetros:

  • start_date (obrigatório): Data de início no formato ISO 8601
  • end_date (obrigatório): Data de término no formato ISO 8601
  • context_codes (opcional): Lista de códigos de contexto (ex.: ["course_123"])
  • page (opcional, padrão=1): Número da página (indexado a partir de 1)
  • items_per_page (opcional, padrão=10): Número de itens por página

Matrículas

get_enrollments

Obter as matrículas do usuário atual, incluindo notas.

Questionários

list_quizzes

Listar questionários de um curso. Observação: funciona apenas com Questionários Clássicos, não com Novos Questionários (quiz_lti).

Parâmetros:

  • course_id (obrigatório): ID do curso
  • include (opcional): Lista de dados adicionais a incluir
  • page (opcional, padrão=1): Número da página (indexado a partir de 1)
  • items_per_page (opcional, padrão=10): Número de itens por página

get_quiz

Obter um único questionário por ID.

Parâmetros:

  • course_id (obrigatório): ID do curso
  • quiz_id (obrigatório): ID do questionário

Arquivos

list_files

Listar arquivos de um curso ou pasta. Observação: pode retornar 403 para contas de estudantes dependendo das permissões da instituição.

Parâmetros:

  • course_id (opcional): ID do curso
  • folder_id (opcional): ID da pasta
  • include (opcional): Lista de dados adicionais a incluir
  • page (opcional, padrão=1): Número da página (indexado a partir de 1)
  • items_per_page (opcional, padrão=10): Número de itens por página

get_file

Obter um arquivo por ID. Funciona com IDs de arquivo conhecidos mesmo quando list_files está restrito.

Parâmetros:

  • course_id (obrigatório): ID do curso
  • file_id (obrigatório): ID do arquivo

Outros

get_tabs

Obter abas/itens de navegação disponíveis para um curso.

Parâmetros:

  • course_id (obrigatório): ID do curso

list_favorites

Listar os cursos favoritos do usuário atual.

Integração

Este servidor MCP funciona com qualquer cliente que suporte o Model Context Protocol, incluindo Claude Desktop, Claude Code, Cursor, Windsurf e outros.

A configuração do MCP é a mesma em todos os clientes — apenas o local do arquivo de configuração difere:

{
    "mcpServers": {
        "canvas": {
            "command": "uvx",
            "args": ["canvas-lms-mcp"],
            "env": {
                "CANVAS_API_TOKEN": "your_canvas_api_token",
                "CANVAS_BASE_URL": "https://your-institution.instructure.com"
            }
        }
    }
}

Substitua your_canvas_api_token pelo seu token da API Canvas (encontrado em Canvas → Conta → Configurações → Novo Token de Acesso) e your-institution.instructure.com pela URL do Canvas da sua instituição.

Claude Desktop

Adicione ao arquivo de configuração do Claude Desktop:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Reinicie o Claude Desktop após salvar.

Claude Code

Adicione ao .mcp.json do seu projeto ou ao ~/.claude/settings.json global:

{
    "mcpServers": {
        "canvas": {
            "command": "uvx",
            "args": ["canvas-lms-mcp"],
            "env": {
                "CANVAS_API_TOKEN": "your_canvas_api_token",
                "CANVAS_BASE_URL": "https://your-institution.instructure.com"
            }
        }
    }
}

Cursor

Adicione ao .cursor/mcp.json no diretório do seu projeto. Reinicie o Cursor após salvar.

Windsurf

Adicione ao ~/.codeium/windsurf/mcp_config.json. Reinicie o Windsurf após salvar.

Exemplos de Uso

Depois de conectado, você pode perguntar ao seu assistente de IA sobre seus dados do Canvas:

  • "Quais tarefas tenho para entregar na próxima semana?"
  • "Mostre-me a ementa do meu curso de Biologia"
  • "Quais anúncios foram publicados hoje?"
  • "Quais são minhas notas até agora?"
  • "O que está na minha agenda para amanhã?"
  • "Mostre-me as postagens de discussão da minha turma de Inglês"

Desenvolvimento

Para instruções detalhadas de desenvolvimento, consulte o arquivo DEVELOPMENT.md.

Licença

Este projeto está licenciado sob a Licença MIT — consulte o arquivo LICENSE para obter detalhes.