Canvas for AI agents

Canvas is a learning management system for online courses, assignments, and grading, used by schools and universities to run virtual classrooms. Connect it once through Arc0, and your agent, or Claude, ChatGPT and Cursor, can use it through one MCP endpoint, limited to what each user approved.

EducationOAuth 2.0MCP + RESTinstructure.com
AUDIT LOG · CANVASPOLICY: acme-support
09:41:07 · claude · u_8f2read
canvas.list_files
List Files✓ allowed · 212ms
09:41:08 · claude · u_8f2read
canvas.get_file
Get file✓ allowed · 164ms
09:41:09 · claude · u_8f2write
canvas.create_quiz
Create Quiz✓ approved · approved by user
09:41:12 · claude · u_8f2destructive
canvas.delete_file
Delete file✕ blocked · policy: deny
EVERY CANVAS CALL, ON THE RECORD
01 · USE CASES

What agents do in Canvas.

01

Create a new assignment

Create a new assignment in a course, with its due date and grading rules attached.

02

Check a student's enrollment

Look up a student's enrollment status in a course before making a grading decision.

03

Confirm before removing an enrollment

Confirm before concluding or deleting a student's enrollment, since their grade history goes with it.

02 · ACTIONS

574 Canvas actions, graded by risk.

Every Canvas action is tagged read, write or destructive, so one policy covers the whole app and new actions inherit the right default.

read

317

Look things up. Allowed by default.

  • canvas.get_file
    Get file
  • canvas.get_node
    Get node by ID
  • canvas.get_group
    Get a group
  • canvas.get_course
    Get course
  • canvas.get_folder
    Get folder
  • canvas.get_rubric
    Get rubric
  • canvas.list_files
    List Files
  • canvas.list_polls
    List polls for current user
  • canvas.list_roles
    List Roles
  • canvas.get_bookmark
    Get Bookmark
  • canvas.list_courses
    List courses
  • canvas.list_folders
    List folders
  • canvas.list_modules
    List Modules
  • canvas.get_all_users
    Get all users
  • canvas.get_user_file
    Get user file
  • canvas.list_licenses
    List Licenses
+ 301 MORE

write

203

Create and change things. Allow, or ask the user first.

  • canvas.create_quiz
    Create Quiz
  • canvas.update_file
    Update file
  • canvas.create_files
    Create Files
  • canvas.create_group
    Create a group
  • canvas.create_course
    Create a course
  • canvas.create_folder
    Create folder
  • canvas.create_module
    Create Module
  • canvas.create_rubric
    Create Rubric
  • canvas.update_course
    Update course
  • canvas.update_folder
    Update Folder
  • canvas.create_bookmark
    Create Bookmark
  • canvas.update_an_entry
    Update an entry
  • canvas.update_bookmark
    Update Bookmark
  • canvas.create_group_set
    Create a group set
  • canvas.create_assignment
    Create an assignment
  • canvas.create_enrollment
    Create enrollment
+ 187 MORE

destructive

54

Delete, cancel or archive. Ask first, or deny outright.

  • canvas.delete_file
    Delete file
  • canvas.delete_poll
    Delete poll
  • canvas.delete_quiz
    Delete quiz
  • canvas.delete_group
    Delete a group
  • canvas.delete_folder
    Delete a folder
  • canvas.delete_an_entry
    Delete a discussion entry
  • canvas.delete_bookmark
    Delete bookmark
  • canvas.delete_a_message
    Delete messages from conversation
  • canvas.delete_an_entry2
    Delete a group discussion entry
  • canvas.delete_assignment
    Delete an assignment
  • canvas.delete_custom_data
    Delete custom data
  • canvas.delete_poll_choice
    Delete a poll choice
  • canvas.delete_access_token
    Delete an access token
  • canvas.delete_planner_note
    Delete a planner note
  • canvas.delete_poll_session
    Delete a poll session
  • canvas.delete_blackout_date
    Delete blackout date
+ 38 MORE
03 · HOW IT WORKS

Canvas in three steps.

  1. 01Your users connect CanvasThey sign in to Canvas on Arc0 Connect, under your brand, and approve the access you ask for.
  2. 02You set the rulesReads run, writes like “create Quiz” can wait for the user, and “delete file” can be denied outright.
  3. 03Any agent can actYour agent calls Canvas through the Arc0 SDK or MCP, and so can Claude, ChatGPT and Cursor. Every call lands on the audit log.
POLICY.TS
await arc0.policies.set('canvas', {
  read: 'allow',
  write: 'ask',        // create_quiz
  destructive: 'deny',  // delete_file
})

# Claude Code: the same connection, one URL
$ claude mcp add --transport http arc0 \
    https://mcp.arc0.ai/u/u_8f2
04 · AUTH AND DATA

How Canvas connects.

Users sign in to Canvas on Arc0 Connect and approve the scopes you request. Build with Arc0’s Canvas OAuth app, or bring your own so the Canvas consent screen names you. Tokens refresh automatically, and you can export them whenever you want.

The same Canvas connection serves your agent over MCP and your own backend over REST and the proxy, so a user connects once. How Arc0 handles credentials →

AUTH
API key · OAuth 2.0
CREDENTIALS
Per-tenant encrypted vault
MODEL SEES
Results only, never credentials
AUDIT LOG
Every call, on every plan
05 · WORKS WITH

Use Canvas from any agent.

Claude
ChatGPT
Cursor
Codex
VS Code
OpenAI Agents SDK
Claude Agent SDK
Vercel AI SDK
Mastra
LangGraph
07 · FAQ

Canvas and Arc0, answered.

Q01

Can I use Canvas with Claude, ChatGPT or Cursor?

Yes. Connect Canvas to Arc0 once, then add your Arc0 MCP URL to Claude, ChatGPT, Cursor, Claude Code or any other remote-MCP client. Each assistant only gets the Canvas actions you allow.

Q02

How do users connect Canvas?

Users sign in to Canvas on Arc0 Connect and approve the scopes you request. Build with Arc0’s Canvas OAuth app, or bring your own so the Canvas consent screen names you. Tokens refresh automatically, and you can export them whenever you want.

Q03

Which Canvas actions can my agent take?

574 in total: 317 read, 203 write and 54 destructive, such as “create Quiz”. Your policies decide which of them each agent may call.

Q04

Can I stop my agent from deleting things in Canvas?

Yes. Actions like “delete file” are graded destructive. Set destructive actions to deny, or to ask so the user approves each one, and blocked calls still show up on the audit log.

Q05

Can my own backend call Canvas too?

Yes. The same Canvas connection is available over REST and through the Arc0 proxy, so your product and your agent share one connection per user.

Get started

Plug Canvas into your agent.

Your users connect Canvas once, under your brand. Your agent gets 574 actions behind your policies, with every call on the record.

Free to build · MCP + REST · Audit log on every plan