Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions docs-web/content/docs/developer-mcp-tools.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -67,17 +67,21 @@ Every tool requires `runtimeRoles: ["project_manager"]` and is enabled by defaul

### Sprint issue imports

`manage_sprints` action `import_issues` accepts `provider` values `github`, `gitlab`, `jira`, `notion`, `asana`, and `linear`.
`manage_sprints` action `import_issues` accepts `provider` values `github`, `gitlab`, `jira`, `notion`, `asana`, `linear`, `miro`, `lucid`, `figma`, and `mural`.

- GitHub and GitLab require saved effective `git.githubToken` / `git.gitlabToken` settings.
- Jira requires saved Jira host, email, API token, and usually a default project key.
- Notion requires `notion.apiToken`; optional `databaseId` narrows page/database imports.
- Asana requires `asana.apiToken` plus `workspaceId` for workspace search or `providerProjectId` for project task fallback.
- Linear requires `linear.apiToken`; optional `teamId`, `teamKey`, and `providerProjectId` narrow issue search.
- Miro requires `miro.apiToken`; `boardId` identifies the board and `itemTypes` can narrow readable item imports.
- Lucid requires `lucid.apiToken`; `documentId` identifies a Lucidchart/Lucidspark document and `search` can discover documents.
- Figma/FigJam requires `figma.apiToken` plus `fileKey` or explicit file keys in `externalIds`.
- Mural requires `mural.apiToken` plus `workspaceId` for listing or `muralId` / the shared `mural.boardId` setting for a specific mural. Mural API support is beta/limited.

Common import fields include `search`, `state`, `status`, `labels`, `assignee`, `issueKeys`, `issueNumbers`, `issueRefs`, `externalIds`, `includeConversation`, `limit`, `sprintId`, `attachToSprint`, and `planAfterImport`. Use `externalIds` for explicit Notion page/database ids, Asana task gids, and Linear issue ids or identifiers.
Common import fields include `search`, `state`, `status`, `labels`, `assignee`, `issueKeys`, `issueNumbers`, `issueRefs`, `externalIds`, `boardId`, `documentId`, `fileKey`, `workspaceId`, `muralId`, `itemTypes`, `includeConversation`, `limit`, `sprintId`, `attachToSprint`, and `planAfterImport`. Use `externalIds` for explicit Notion page/database ids, Asana task gids, Linear issue ids or identifiers, Miro item ids, Lucid document ids, Figma file keys, and Mural ids.

Notion, Asana, and Linear imports are read-only: Code UX searches, fetches prompt context, attaches linked-source records, and can plan from imported scope, but it does not close, complete, archive, or transition those provider items.
External imports are read-only: Code UX searches, fetches prompt context, attaches linked-source records, and can plan from imported scope, but it does not close, complete, archive, transition, write comments, or mutate provider items, boards, documents, files, or murals.

For the full per-action payloads and return shapes, see [Management actions](/docs/developer-management-actions).

Expand Down
12 changes: 3 additions & 9 deletions docs-web/content/docs/user-dashboard-sprints.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -83,19 +83,13 @@ You can also import linked sprint scope from configured external systems. GitHub

The Import menu also exposes **Notion**, **Asana**, and **Linear**. Each opens a provider-specific search modal, then imports selected results through the shared linked issue composer flow. Selected items appear as linked cards below the sprint prompt and are merged into the prompt markdown when the sprint is submitted.

Notion, Asana, and Linear imports are API-backed and read-only:
Notion, Asana, Linear, Miro, Lucid, Figma/FigJam, and Mural imports are API-backed and read-only. Notion uses `notion.apiToken` plus an optional `databaseId`, Asana uses `asana.apiToken` plus `workspaceId` or project fallback, Linear uses `linear.apiToken` plus optional `teamId`, `teamKey`, or project filters, Miro uses `miro.apiToken` plus `boardId`, Lucid uses `lucid.apiToken` plus `documentId` or document search, Figma/FigJam uses `figma.apiToken` plus `fileKey`, and Mural uses `mural.apiToken` plus `workspaceId` or `muralId`. These importers can search, fetch readable body/comment context where providers expose it, attach linked scope to a sprint, and plan from that imported scope; they do not archive pages, complete tasks, transition issues, close external items, write comments, or mutate boards, documents, files, or murals. Mural public API support is beta/limited, so imported Mural scope may contain only metadata and readable content available to the token.

- **Notion** requires `notion.apiToken`. `databaseId` is optional and narrows page/database search. Advanced filters can import exact page or database IDs.
- **Asana** requires `asana.apiToken` plus `workspaceId` or `projectId`. The modal supports text search, status, labels, assignee, exact task GIDs, result limit, and workspace/project overrides.
- **Linear** requires `linear.apiToken`. `teamId`, `teamKey`, and `projectId` are optional narrowing defaults. The modal supports text search, workflow state, status/state type, labels, assignee, exact issue IDs or identifiers, result limit, and team/project overrides.

These importers can search, fetch readable body/comment context, attach linked scope to a sprint, and plan from that imported scope. They do not archive Notion pages, complete Asana tasks, transition Linear issues, close external items, or create special imported task modes.

Each result card has an **Append conversation** toggle, and the footer can apply that setting to all selected results. When enabled, Asana task stories and Linear comments are included in the sprint prompt context. Missing settings and provider API errors are shown in the import modal error panel with the backend message so you can fix the integration configuration directly.
Notion, Asana, and Linear imports also keep the shared linked issue composer flow. Each result card has an **Append conversation** toggle, and the footer can apply that setting to all selected results. When enabled, Asana task stories and Linear comments are included in the sprint prompt context. Missing settings and provider API errors are shown in the import modal error panel with the backend message so you can fix the integration configuration directly.

The shared settings model also supports Notion, Asana, Linear, Miro, Lucid, Figma, and Mural connection blocks. These provider blocks store enablement, token/secret, base URL, workspace/team/project identifiers, database/board/document/file identifiers, and a default search limit. They are saved and resolved through the same system → project → sprint settings hierarchy as other sprint integrations.

Linked sprint records preserve numeric issue numbers for GitHub, GitLab, and Jira. Non-numeric external objects are stored with an `externalId`, `sourceKind`, and `sourceProvider`, so Notion pages/databases, Asana tasks, Linear issues, and future board/document/file/canvas importers can attach scope without inventing fake issue numbers.
Linked sprint records preserve numeric issue numbers for GitHub, GitLab, and Jira. Non-numeric external objects are stored with an `externalId`, `sourceKind`, and `sourceProvider`, so Notion pages/databases, Asana tasks, Linear issues, Miro boards/items, Lucid documents, Figma/FigJam files, and Mural canvases can attach scope without inventing fake issue numbers.

## Sprint settings overrides

Expand Down
25 changes: 21 additions & 4 deletions docs/dashboard/sprint-imports.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Sprint Imports

Sprint imports support production paths from the Sprints page and MCP: structured markdown bundles, GitHub/GitLab issue imports, Jira issue imports, and read-only linked-scope imports from Notion, Asana, and Linear.
Sprint imports support production paths from the Sprints page and MCP: structured markdown bundles, GitHub/GitLab issue imports, Jira issue imports, read-only linked-scope imports from Notion, Asana, and Linear, and read-only collaborative canvas imports from Miro, Lucid, Figma/FigJam, and Mural.

Internal MCP clients use the same importer services through `manage_sprints` action `import_issues`. For payload examples covering search-only imports, assigned-work searches, explicit Jira keys, explicit GitHub/GitLab issue numbers, explicit Notion/Asana/Linear external IDs, sprint attachment, and plan-after-import flows, see [MCP Tools and Contracts: `manage_sprints import_issues`](../mcp/tools-and-contracts.md#manage_sprints-import_issues).
Internal MCP clients use the same importer services through `manage_sprints` action `import_issues`. For payload examples covering search-only imports, assigned-work searches, explicit Jira keys, explicit GitHub/GitLab issue numbers, explicit external IDs, canvas identifiers, sprint attachment, and plan-after-import flows, see [MCP Tools and Contracts: `manage_sprints import_issues`](../mcp/tools-and-contracts.md#manage_sprints-import_issues).

## Markdown Import

Expand Down Expand Up @@ -74,15 +74,23 @@ Issue import uses the saved integration tokens:
- Notion: system/project effective `notion.apiToken`; `databaseId` can narrow search or explicitly import a database.
- Asana: system/project effective `asana.apiToken`; workspace search uses `workspaceId`, while project fallback uses `projectId`.
- Linear: system/project effective `linear.apiToken`; `teamId`, `teamKey`, and `projectId` can narrow issue search.
- Miro: system/project effective `miro.apiToken`; `boardId` identifies the board used for readable board items, and `itemTypes` can narrow returned board item types.
- Lucid: system/project effective `lucid.apiToken`; `documentId` identifies a Lucidchart or Lucidspark document for readable contents, while `search` can discover documents.
- Figma/FigJam: system/project effective `figma.apiToken`; `fileKey` is required because the Figma API does not expose a general file search endpoint for this importer.
- Mural: system/project effective `mural.apiToken`; `workspaceId` lists workspace murals, while `muralId` or the shared `mural.boardId` setting fetches a specific mural.

When the GitHub token is empty, GitHub issue search, issue context loading, and auto-close fail with a token-required error. Code UX does not fall back to local `gh` or `glab` CLI authentication for dashboard or MCP importer workflows; Docker auth-copy mount settings help worker containers, but issue search, explicit import, linked sprint attachment, planning imports, and close operations need saved GitHub/GitLab tokens.

Notion, Asana, and Linear importer workflows use direct provider APIs through `fetch` and require saved tokens before any network request is made. They are read/attach only: Code UX searches, fetches readable context, persists local linked-source records, enriches sprint prompts, and can plan from that imported scope, but it does not archive Notion pages, complete Asana tasks, transition Linear issues, or close those external items.
External importer workflows use direct provider APIs through `fetch` and require saved tokens before any network request is made. They are read/attach only: Code UX searches, fetches readable context, persists local linked-source records, enriches sprint prompts, and can plan from that imported scope, but it does not archive Notion pages, complete Asana tasks, transition Linear issues, mutate canvas boards/files/documents/murals, write comments, or close those external items.

Provider-specific search behavior:
- Notion uses `POST https://api.notion.com/v1/search` with `Authorization: Bearer` and `Notion-Version`, maps pages and databases, and reads page/database block children into prompt markdown when blocks are readable.
- Asana uses `GET https://app.asana.com/api/1.0/workspaces/{workspace_gid}/tasks/search` for workspace task search and falls back to project tasks when a project id is supplied. When conversation context is requested, task stories/comments are appended to prompt markdown.
- Linear uses `POST https://api.linear.app/graphql` for issue search/filter queries and explicit issue fetches. Results include description, labels, state, team/project, assignee, URL, and comments when conversation context is requested.
- Miro uses `GET https://api.miro.com/v2/boards` for board discovery and `GET https://api.miro.com/v2/boards/{boardId}/items` for readable board items. Results map board/item ids, titles, item types, URLs, modified timestamps, and readable text/data fields into prompt markdown.
- Lucid uses `POST https://api.lucid.co/documents/search` for document search and `GET https://api.lucid.co/v1/documents/{id}/contents` for readable Lucidchart/Lucidspark contents. Requests use `Authorization: Bearer` and `Lucid-Api-Version: 1`.
- Figma/FigJam uses `GET https://api.figma.com/v1/files/{fileKey}` and, when `includeConversation` is true, `GET https://api.figma.com/v1/files/{fileKey}/comments` with `X-Figma-Token`. Results include file name, last modified timestamp, top-level pages/nodes, and comments.
- Mural uses `https://app.mural.co/api/public/v1`, `GET /workspaces/{workspaceId}/murals` for listing, and `GET /murals/{muralId}` for mural metadata/content available to the token. Mural public API support is beta/limited, so imported prompt context may contain only metadata and readable content the token can access.

## Notion, Asana, And Linear Scope Import

Expand All @@ -102,7 +110,7 @@ Result cards support multi-select, `Select all visible`, `Clear selection`, per-

## Project-Management And Canvas Integration Settings

Code UX carries shared typed settings for additional importer providers: Notion, Asana, Linear, Miro, Lucid, Figma, and Mural. Notion, Asana, and Linear have API-backed sprint importers today. Miro, Lucid, Figma, and Mural currently have settings and linked-source persistence contracts but no API-backed sprint importer in this flow yet. Jira continues to use the existing `jira` settings block, and GitHub/GitLab continue to use `git.githubToken` and `git.gitlabToken`.
Code UX carries shared typed settings for additional importer providers: Notion, Asana, Linear, Miro, Lucid, Figma, and Mural. These providers have API-backed read-only sprint importers. Jira continues to use the existing `jira` settings block, and GitHub/GitLab continue to use `git.githubToken` and `git.gitlabToken`.

Each new provider settings block stores only strings and a bounded numeric search limit:

Expand All @@ -122,6 +130,15 @@ Each new provider settings block stores only strings and a bounded numeric searc

The fields are intentionally generic across project-management and collaborative-canvas systems. Provider-specific importer UI can use only the identifiers it needs, while reset, save, sanitize, and effective-settings preview paths preserve the complete block.

Accepted canvas identifiers:
- `boardId`: Miro board id. For Mural, the existing shared `boardId` setting is also accepted as the default mural id until a dedicated settings field exists.
- `documentId`: Lucidchart or Lucidspark document id.
- `fileKey`: Figma or FigJam file key from the file URL.
- `workspaceId`: Mural workspace id for listing murals; also used by Asana for task search.
- `muralId`: explicit Mural id in route/MCP payloads.
- `externalIds`: explicit provider object ids. For canvas imports this can hold Miro item ids, Lucid document ids, Figma file keys, or Mural ids.
- `itemTypes`: optional Miro item type filters such as `sticky_note` or `text`.

## Linked Source Persistence

Persisted sprint scope can represent both numeric repository issues and non-numeric external objects.
Expand Down
Loading