Ensure your tool registration includes a deep linking content selection URL and declares support for the LtiDeepLinkingRequest message type; the platform uses this URL when an instructor initiates content selection.
Receive and validate the LtiDeepLinkingRequest JWT using the same OIDC launch flow as a standard LTI 1.3 resource link launch; confirm the message_type claim is LtiDeepLinkingRequest and extract the deep_linking_settings claim for deep_link_return_url and accepted_types.
Present a content selection interface to the user filtered by the accepted_types array (e.g., ltiResourceLink, link, html, image, file); only offer item types the platform declared it accepts.
Construct a Deep Linking Response JWT signed with your tool's private key; include the claim https://purl.imsglobal.org/spec/lti-dl/claim/content_items as a JSON array of selected content item objects, and set the deployment_id and the data value from deep_linking_settings.
Auto-submit an HTML form via POST to the deep_link_return_url with a single field JWT containing the signed response JWT; this returns the selected items to the LMS in the user's browser session.
In the LMS, verify that the returned content items appear as expected links or assignments; test with at least one ltiResourceLink item type that the platform can subsequently launch.
Known gotchas
The deep_link_return_url is provided per-session in the deep_linking_settings claim and must not be stored as a fixed endpoint — it can vary per launch and platform context.
The content_items array in the response JWT must be present even when empty (use []) if the user cancels selection; omitting the claim entirely causes some platforms to error rather than treat the response as a cancellation.
Sign the response JWT with your tool's private key, not the platform's — the platform verifies the response signature using your registered public JWK, so signing with the wrong key silently produces an unverifiable token.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp