Receive the LTI 1.3 Deep Linking launch JWT; verify it contains message_type = LtiDeepLinkingRequest and extract the deep_linking_settings claim including return_url and accept_types
Present a UI for the user to select or create a resource (LTI link, web link, file, or HTML fragment) based on the accept_types list
Build a content_items JSON array describing the selected resource(s) per the Deep Linking 2.0 content item schemas
Sign a new JWT with your tool's private key, setting message_type = LtiDeepLinkingResponse, content_items to your array, and the same deployment_id and nonce from the launch
POST the signed JWT as the JWT parameter in an HTML auto-submit form targeting the return_url received in step 1
The platform processes the response and embeds the returned item in the course content area; verify by relaunching the placed link
Known gotchas
The return_url is a one-time endpoint specific to the launch session — storing and reusing it across sessions will fail or be rejected by the platform
Content item type support varies by platform: Canvas supports LTI links and web links broadly, but some platforms reject file or html types even if listed in accept_types
The signed response JWT must be sent as a form POST, not a redirect or fetch — platforms reject Deep Linking responses delivered via XHR or redirect
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