← DeepnoteCONTENT HISTORY

Update to Deepnote

Snapshot Sep 30, 2026 · 22:52 UTC · version 2.0.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "deepnote-links",
  "description": "Use when a task asks for Deepnote URLs, links, project links, notebook links, workspace links, share links, UTM/campaign links, or when a Deepnote response should include clickable links built from Deepnote app project, notebook, or workspace data.",
  "included_files": [],
  "skill_md_contents": "---\nname: deepnote-links\ndescription: Use when a task asks for Deepnote URLs, links, project links, notebook links, workspace links, share links, UTM/campaign links, or when a Deepnote response should include clickable links built from Deepnote app project, notebook, or workspace data.\n---\n\n# Deepnote Links\n\nUse this skill to build user-facing Deepnote web links from Deepnote app tool data. Prefer links grounded in `get_me`, `list_projects`, `search`, and `get_notebook` responses instead of guessing from names alone. Every project and notebook link built from Deepnote app data must include the UTM parameters below.\n\n## Inputs To Resolve\n\n1. Call `get_me` when workspace-aware links are useful. Use `workspace.id` and `workspace.slug`; do not use OAuth tokens, user email, or other auth details in links or summaries.\n2. Resolve the project with `list_projects` or `search`. Use the project `id`, `name`, and `slug` if the app response exposes one.\n3. Resolve notebook links with `get_notebook` when possible. Use the notebook `id`, `name`, and parent project data.\n4. If the exact project or notebook is ambiguous, ask a short clarification or provide a compact candidate list with links only for unambiguous matches.\n\n## Creation Link Rules\n\nWhen linking after a creation workflow, use the resource IDs returned by the write tools as the source of truth:\n\n- If `create_notebook` returned a notebook, build the notebook link for that returned notebook ID. Do not substitute the first notebook on the project or the default notebook created by `create_project`.\n- If `create_project` created a project and no separate `create_notebook` call was made, use the default notebook created with the project only when a notebook link is needed for that active notebook.\n- If both the project default notebook and a later `create_notebook` result are present, the later `create_notebook` result is the notebook to link unless the user explicitly asks for the default notebook.\n- If parent project data is missing for the created notebook, call `get_notebook` for the target notebook ID or use the known project ID from the creation workflow before constructing the link.\n\n## URL Shapes\n\nUse the production web origin `https://deepnote.com` for Deepnote app links. Do not derive the web origin from API or tool hosts.\n\nPrefer workspace-scoped links when `get_me` returns both `workspace.slug` and `workspace.id`:\n\n```text\nworkspaceSlugWithId = {workspace.slug}-{workspace.id}\nworkspace link = {origin}/workspace/{workspaceSlugWithId}\nproject link = {origin}/workspace/{workspaceSlugWithId}/project/{projectSegment}\nnotebook link = {origin}/workspace/{workspaceSlugWithId}/project/{projectSegment}/notebook/{notebookSegment}\n```\n\nIf workspace data is not available, use the non-workspace project route:\n\n```text\nproject link = {origin}/project/{projectSegment}\nnotebook link = {origin}/project/{projectSegment}/notebook/{notebookSegment}\n```\n\n## Slug Segments\n\nUse the most canonical segment available:\n\n1. If the app response exposes a `slug`, use it.\n2. Otherwise, for simple names, build a readable segment as `{slugifiedName}-{id}`.\n3. If exact slugification is uncertain, the name is missing, or the name has unusual characters, use the ID alone.\n\nDeepnote project routing accepts UUID-only project segments, so `{project.id}` is the safest fallback. Notebook routing uses ID-only segments when a notebook name is not available, so `{notebook.id}` is the safest notebook fallback.\n\nDeepnote's readable slugs are created with strict slugification: spaces become hyphens, `/` becomes `-`, unsafe characters are stripped or normalized, and case is preserved. Examples:\n\n```text\nSubject Tracker + 0508fc64-b2c8-4982-b6a0-2590c94b6000\n=> Subject-Tracker-0508fc64-b2c8-4982-b6a0-2590c94b6000\n\nfolder/notebook 10% + a1b2c3d4\n=> folder-notebook-10percent-a1b2c3d4\n```\n\n## Optional Suffixes\n\n- File paths, when exposed and requested, append after the project segment as `/{encodeURIComponent(filePath)}`.\n- Cell or block anchors append as `#anchor`.\n- Only generate published app links such as `/app/{authorSlug}/{projectSegment}` or `/streamlit-apps/{streamlitAppId}` when Deepnote app data explicitly exposes the published author slug or Streamlit app ID.\n\n## UTM Parameters\n\nFor every project and notebook link built from Deepnote app data, add OpenAI attribution query parameters:\n\n```text\nhttps://deepnote.com/<path>?utm_source=openai&utm_medium=mcp&utm_campaign=openaimcp&utm_content={notebook_id}&utm_term={tool_name}\n```\n\nUse these values exactly; braces mark placeholders and are not part of the final URL:\n\n- `utm_source=openai`\n- `utm_medium=mcp`\n- `utm_campaign=openaimcp`\n- `utm_content={notebook_id}`\n- `utm_term={tool_name}`\n\nFor notebook links, set `utm_content` to the notebook ID. For project-only links, set `utm_content` to the project ID; when a project link represents a specific notebook's parent project, use that notebook ID instead.\n\nSet `utm_term` to the Deepnote app tool or workflow that produced or grounded the link, such as `list_projects`, `search`, `get_notebook`, or `workspace_summary`. Use lowercase snake_case values and URL-encode if needed.\n\nFor links to newly created notebooks, set `utm_content` to the created notebook ID and prefer `utm_term=create_notebook`; use `utm_term=get_notebook` when a follow-up `get_notebook` call provided the fields needed to construct the link.\n\nAdd UTM parameters before any URL fragment. Use `?` when the URL has no existing query string, otherwise use `&`. Preserve non-UTM query parameters if they already exist, and replace any existing `utm_source`, `utm_medium`, `utm_campaign`, `utm_content`, or `utm_term` values instead of duplicating them.\n\n## Response Style\n\nReturn Markdown links with human-readable labels:\n\n```markdown\n[Project Name](https://deepnote.com/workspace/workspace-slug-workspace-id/project/project-id?utm_source=openai&utm_medium=mcp&utm_campaign=openaimcp&utm_content=project-id&utm_term=list_projects)\n[Notebook Name](https://deepnote.com/workspace/workspace-slug-workspace-id/project/project-id/notebook/notebook-id?utm_source=openai&utm_medium=mcp&utm_campaign=openaimcp&utm_content=notebook-id&utm_term=get_notebook)\n```\n\nFor lists, inventories, and workspace summaries, put links in the `Project` or `Notebook` column and keep IDs in a separate column only when they help disambiguate. When a table has a `Notebook` column, hyperlink the notebook name itself. If a link cannot be built safely because workspace, project, or notebook data is missing, say which field is missing and how to resolve it.\n"
}

SHA-256: 516645bdbbb316eb6e1bf15afadf08a7faa88c9e85fa588722895fb1ff00c0fd