Skip to main content
This page covers the tools that handle course navigation structure: wiki pages, left-sidebar tabs, and modules. These tools bridge the gap between a course URL and its underlying content — use them to enumerate what exists, then retrieve specifics.
canvas_get_page is for wiki pages only. It does not support assignment submission preview routes, discussion URLs, or other Canvas resource types. For any Canvas URL that is not a wiki page, use resolve_canvas_url to route it to the correct tool automatically. Use list_course_tabs to enumerate left-sidebar navigation entries such as Home, Syllabus, People, and external tool links.

list_course_pages

Lists wiki pages in a course. Returns metadata for each page — title, slug URL, published state, and timestamps — but not the full page body. To read body content, call canvas_get_page with the page’s url slug.

Parameters

course_id
string
required
The Canvas course ID.
Substring filter matched against page titles. Case-insensitive.
published_only
boolean
When true, only published pages are returned. When false, only unpublished pages are returned. Omit to return all pages regardless of published state.
limit
integer
default:"100"
Maximum number of pages to return. Accepted range: 1–300.

Return value

course_id
string
The course ID as provided.
count
integer
Number of pages returned.
pages
array

Examples

# List all pages in course 12345
canvas tool run list_course_pages --args '{"course_id": "12345"}'

# Search for pages about the syllabus
canvas tool run list_course_pages --args '{"course_id": "12345", "search": "syllabus"}'

# List only published pages
canvas tool run list_course_pages --args '{"course_id": "12345", "published_only": true}'

canvas_get_page

Fetches the full content of a single Canvas wiki page, including its HTML body. Accepts either a URL slug (e.g. "week-3-notes") or a numeric page ID. When a full Canvas URL is passed, the tool parses it and extracts the slug automatically — but only if the URL points to a pages route.
canvas_get_page only works for canvas wiki page URLs (those containing /pages/ in the path). Passing an assignment, discussion, file, or submission URL returns an error with suggested_tool: "resolve_canvas_url". Use resolve_canvas_url for all other Canvas URL types.

Parameters

course_id
string
required
The Canvas course ID.
url_or_id
string
required
The page URL slug, numeric page ID, or full Canvas wiki page URL. Obtain the slug from the url field returned by list_course_pages.
force_as_id
boolean
default:"false"
When true, url_or_id is always interpreted as a numeric ID even if it looks like a slug. Use this when you have a numeric ID that matches a valid slug pattern.

Return value

course_id
string
The course ID as provided.
requested
object
Echo of the url_or_id and force_as_id values as received.
page
object

Examples

# Fetch a page by URL slug
canvas tool run canvas_get_page --args '{"course_id": "12345", "url_or_id": "week-3-notes"}'

# Fetch by numeric page ID
canvas tool run canvas_get_page --args '{"course_id": "12345", "url_or_id": "999", "force_as_id": true}'

# Fetch using a full Canvas wiki page URL
canvas tool run canvas_get_page --args '{"course_id": "12345", "url_or_id": "https://school.instructure.com/courses/12345/pages/week-3-notes"}'

list_course_tabs

Lists the left-sidebar navigation tabs for a course. Tabs represent the primary navigation entries in Canvas: Home, Announcements, Assignments, Discussions, Pages, Files, Syllabus, Modules, People, and any external tool links (LTIs) installed in the course.
Use list_course_tabs when you need to discover what navigation entries exist for a course rather than what wiki pages exist. Tabs reflect the actual sidebar — including external tools and hidden entries — while list_course_pages only covers wiki page content.

Parameters

course_id
string
required
The Canvas course ID.
limit
integer
default:"100"
Maximum number of tabs to return. Accepted range: 1–300.

Return value

course_id
string
The course ID as provided.
count
integer
Number of tabs returned.
tabs
array

Examples

# List all navigation tabs for course 12345
canvas tool run list_course_tabs --args '{"course_id": "12345"}'

get_course_tab

Fetches a single navigation tab by its ID and optionally resolves the tab’s destination, returning the full content the tab points to. When include_target is true, the tool internally calls resolve_canvas_url on the tab URL and returns the result as the target field.

Parameters

course_id
string
required
The Canvas course ID.
tab_id
string
required
The tab identifier. Obtain this from list_course_tabs. Examples: "home", "syllabus", "context_external_tool_42".
include_target
boolean
default:"true"
When true (the default), the tool resolves the tab’s destination URL and appends the result as a target object. Set to false to skip resolution and return only tab metadata.

Return value

course_id
string
The course ID as provided.
tab_id
string
The tab ID as provided.
tab
object
The tab metadata object with the same fields as entries in list_course_tabs.
target
object
Present when include_target is true. Contains the resolved destination from resolve_canvas_url, including resource type, IDs, and fetched details when available. null when the tab URL could not be resolved.

Examples

# Fetch the Syllabus tab and resolve its content
canvas tool run get_course_tab --args '{"course_id": "12345", "tab_id": "syllabus"}'

# Fetch a tab without resolving its destination
canvas tool run get_course_tab --args '{"course_id": "12345", "tab_id": "syllabus", "include_target": false}'

# Fetch an external LTI tab
canvas tool run get_course_tab --args '{"course_id": "12345", "tab_id": "context_external_tool_42"}'

list_modules

Lists course modules. Modules are the primary organizational structure in many Canvas courses — they group pages, assignments, discussions, files, quizzes, and external URLs into ordered sequences. Optionally includes the items inside each module and their content details.

Parameters

course_id
string
required
The Canvas course ID.
search
string
Substring filter matched against module names. Case-insensitive.
include_items
boolean
default:"false"
When true, each module object includes an items array listing the content items inside it.
include_content_details
boolean
default:"false"
When true and include_items is also true, each item includes a content_details field with additional metadata such as due dates and point values. Has no effect when include_items is false.
limit
integer
default:"100"
Maximum number of modules to return. Accepted range: 1–300.
items_limit
integer
default:"100"
Maximum number of items to return per module when include_items is true. Accepted range: 1–300.

Return value

course_id
string
The course ID as provided.
count
integer
Number of modules returned.
modules
array

Examples

# List all modules in course 12345
canvas tool run list_modules --args '{"course_id": "12345"}'

# List modules with their items
canvas tool run list_modules --args '{"course_id": "12345", "include_items": true}'

# List modules with items and full content details (due dates, points)
canvas tool run list_modules --args '{"course_id": "12345", "include_items": true, "include_content_details": true}'

# Search for modules containing "midterm"
canvas tool run list_modules --args '{"course_id": "12345", "search": "midterm"}'

# Limit to 5 modules, 10 items each
canvas tool run list_modules --args '{"course_id": "12345", "include_items": true, "limit": 5, "items_limit": 10}'

Choosing the right navigation tool

The three navigation-related tools serve different purposes:

list_course_pages

Use when you need to find or list wiki pages by title. Returns page slugs and metadata but not body content.

list_course_tabs

Use when you need the left-sidebar navigation entries: Home, Syllabus, People, external tools (LTIs), and custom tabs.

list_modules

Use when you need the structured sequence of content — what items a module contains, in what order, and their completion state.

Routing Canvas URLs

When you have a Canvas URL but do not know what type of resource it points to, use resolve_canvas_url:
canvas tool run resolve_canvas_url --args '{"url": "https://school.instructure.com/courses/12345/assignments/67890"}'
The tool parses the URL, identifies the resource type, and fetches details using the appropriate tool automatically. Do not pass non-page URLs to canvas_get_page.

Build docs developers (and LLMs) love