Receive the Deep Linking request message JWT from the platform; extract the deep_linking_settings claim including the accept_types array to confirm which content item types the platform accepts
Build the content items array; for an ltiResourceLink item include url, title, and optional custom and lineItem properties; for a file item include url, title, mediaType, and optionally expiresAt
Construct the LtiDeepLinkingResponse JWT signed with the tool's private key; include the content_items claim as a JSON array and set the deployment_id and message_type to LtiDeepLinkingResponse
Auto-POST the signed JWT to the platform's deep_link_return_url extracted from the request message; the response must use an HTML form auto-submit
Validate the round-trip by checking that the platform correctly renders the returned content items in the course; for ltiResourceLink items verify the platform can subsequently launch them as standard LTI 1.3 resource links
Known gotchas
Platforms declare accepted content item types in accept_types; returning an item type not listed (e.g., a file when only ltiResourceLink is accepted) causes the platform to silently discard the item without an error message to the tool
The deep_link_return_url is a one-time URL on many platforms; posting to it more than once or posting with an invalid JWT signature results in the entire response being rejected with no partial acceptance
Including a lineItem property on an ltiResourceLink item tells the platform to create a gradebook column; doing so for content-only links creates spurious gradebook entries that confuse instructors
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