---
canonical_url: "https://docs.composio.dev/toolkits/linear_mcp"
markdown_url: "https://docs.composio.dev/toolkits/linear_mcp.md"
product: "platform"
version: null
last_updated: null
---

# Linear MCP

Linear MCP lets agents find, create, and update issues, projects, comments, and related planning objects in a Linear workspace.

- **Category:** model context protocol
- **Auth:** DCR_OAUTH
- **Composio-managed OAuth available?** No
- **Tools:** 78
- **Triggers:** 0
- **Slug:** `LINEAR_MCP`
- **Version:** 20260910_00

## Tools

### Create attachment

**Slug:** `LINEAR_MCP_CREATE_ATTACHMENT`

Deprecated fallback for tiny files only. Accepts base64 file content, verifies SHA-256 checksum, and uploads it through the MCP worker.
Prefer `prepare_attachment_upload` plus direct PUT plus `create_attachment_from_upload`.

CRITICAL: Do not print base64Content and then copy it into this tool call.
Opaque base64 copied through model-visible text is easy to corrupt.

Generate base64Content mechanically from the source bytes and pass it through a programmatic argument construction path whenever available. Before calling this tool, verify the values are consistent:

Unix-like shells:
file="/path/to/file"
base64Content=$(base64 < "$file" | tr -d '\n\r')
sha256=$(shasum -a 256 "$file" | awk '{print $1}')
decodedSha256=$(printf '%s' "$base64Content" | base64 -d | shasum -a 256 | awk '{print $1}')
size=$(wc -c < "$file" | tr -d ' ') # optional; stat can also get file byte size
decodedSize=$(printf '%s' "$base64Content" | base64 -d | wc -c | tr -d ' ')

PowerShell:
$file = 'C:\path\to\file'
$bytes = [IO.File]::ReadAllBytes($file)
$base64Content = [Convert]::ToBase64String($bytes)
$sha256 = (Get-FileHash -Algorithm SHA256 -Path $file).Hash.ToLower()
$size = $bytes.Length # optional
$decoded = [Convert]::FromBase64String($base64Content)
$decodedStream = [IO.MemoryStream]::new($decoded)
$decodedSha256 = (Get-FileHash -Algorithm SHA256 -InputStream $decodedStream).Hash.ToLower()
$decodedSize = $decoded.Length

decodedSha256 must equal sha256. If you pass size, decodedSize must equal size.
Pass `sha256`. Passing `size` is optional, but recommended for clearer mismatch errors.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `size` | integer | No | Optional expected decoded file size in bytes. Rejects the upload if it does not match. |
| `issue` | string | Yes | Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues |
| `title` | string | No | Optional title for the attachment |
| `sha256` | string | Yes | Expected SHA-256 hex digest of the decoded file bytes. |
| `filename` | string | Yes | Filename for the upload (e.g., 'screenshot.png') |
| `subtitle` | string | No | Optional subtitle for the attachment |
| `contentType` | string | Yes | MIME type for the upload (e.g., 'image/png', 'application/pdf') |
| `base64Content` | string | Yes | Deprecated base64-encoded file content to upload |

### Create attachment from upload

**Slug:** `LINEAR_MCP_CREATE_ATTACHMENT_FROM_UPLOAD`

Link an already-uploaded Linear assetUrl to an existing issue as an attachment.

Use this only after:
1. prepare_attachment_upload returned an assetUrl and uploadRequest.
2. The client successfully PUT raw file bytes to uploadRequest.url.

This tool does not upload file content. It only creates the Linear attachment row.
If the direct upload failed or the signed URL expired, rerun prepare_attachment_upload and upload again.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `issue` | string | Yes | Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues |
| `title` | string | No | Attachment title. Defaults to filename or asset URL |
| `assetUrl` | string | Yes | Linear upload assetUrl returned by prepare_attachment_upload |
| `subtitle` | string | No | Optional attachment subtitle |

### Create initiative label

**Slug:** `LINEAR_MCP_CREATE_INITIATIVE_LABEL`

Create a new Linear initiative label. Deprecated: use `save_initiative_label`, which can also update labels.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | Yes | Label name |
| `color` | string | No | Hex color code |
| `parent` | string | No | Parent label group name or ID |
| `isGroup` | boolean | No | Whether the label is a group |
| `description` | string | No | Label description |

### Create issue label

**Slug:** `LINEAR_MCP_CREATE_ISSUE_LABEL`

Create a new Linear issue label. Deprecated: use `save_issue_label`, which can also update labels.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | Yes | Label name |
| `color` | string | No | Hex color code |
| `parent` | string | No | Parent label group name or ID |
| `teamId` | string | No | Team UUID (omit for workspace label) |
| `isGroup` | boolean | No | Whether the label is a group |
| `description` | string | No | Label description |

### Delete attachment

**Slug:** `LINEAR_MCP_DELETE_ATTACHMENT`

Delete an attachment by ID

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Attachment ID |

### Delete comment

**Slug:** `LINEAR_MCP_DELETE_COMMENT`

Delete a Linear comment. Inline description comments (those with non-null `quotedText`) anchor a mark in the editor, so their root cannot be deleted — delete the replies individually or resolve the thread instead.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Comment ID |

### Delete customer

**Slug:** `LINEAR_MCP_DELETE_CUSTOMER`

Delete a customer in Linear

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Customer ID |

### Delete customer need

**Slug:** `LINEAR_MCP_DELETE_CUSTOMER_NEED`

Archive a customer need in Linear

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Customer need ID |

### Delete diff comment

**Slug:** `LINEAR_MCP_DELETE_DIFF_COMMENT`

Delete a comment or persisted draft from a Linear diff

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `draftId` | string | No | Persisted diff comment draft ID to delete |
| `commentId` | string | No | Submitted diff comment ID to delete |

### Delete status update

**Slug:** `LINEAR_MCP_DELETE_STATUS_UPDATE`

Delete (archive) a project or initiative status update.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Status update ID |
| `type` | string ("project" | "initiative") | Yes | Type of status update |

### Extract images

**Slug:** `LINEAR_MCP_EXTRACT_IMAGES`

Extract and fetch images from markdown content. Use this to view screenshots, diagrams, or other images embedded in Linear issues, comments, or documents. Pass the markdown content (e.g., issue description) and receive the images as viewable data.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `markdown` | string | Yes | Markdown content containing image references (e.g., issue description, comment body) |

### Get agent skill

**Slug:** `LINEAR_MCP_GET_AGENT_SKILL`

Retrieve a Linear Agent skill by ID, including its full markdown instructions.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Agent skill ID |

### Get attachment

**Slug:** `LINEAR_MCP_GET_ATTACHMENT`

Retrieve an attachment's content by ID.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Attachment ID |

### Get diff

**Slug:** `LINEAR_MCP_GET_DIFF`

Exact lookup for a Linear diff. Use with review URLs, GitHub PR URLs, Linear full identifiers, UUIDs, or slugs.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `urlOrId` | string | Yes | Linear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URL |

### Get diff threads

**Slug:** `LINEAR_MCP_GET_DIFF_THREADS`

Exact lookup for diff threads and the authenticated user's drafts. Use with review URLs, GitHub PR URLs, Linear full identifiers, UUIDs, or slugs.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `urlOrId` | string | Yes | Linear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URL |
| `resolved` | boolean | No | Filter returned threads by resolved state |
| `threadId` | string | No | Optional Linear comment UUID of any comment in the thread (not its `externalThreadId`); a reply's UUID resolves to its thread root |

### Get document

**Slug:** `LINEAR_MCP_GET_DOCUMENT`

Retrieve a Linear document by ID or slug

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Document ID or slug |

### Get initiative

**Slug:** `LINEAR_MCP_GET_INITIATIVE`

Retrieve detailed information about a specific initiative in Linear

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `query` | string | Yes | Initiative name, ID, identifier (e.g., I-123), or slug |
| `includeProjects` | boolean | No | Include projects |
| `includeSubInitiatives` | boolean | No | Include sub-initiatives |

### Get issue

**Slug:** `LINEAR_MCP_GET_ISSUE`

Retrieve detailed information about an issue by ID, including attachments, git branch name, and active Triage Intelligence suggestions when the issue is in triage

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues |
| `includeReleases` | boolean | No | Include associated releases |
| `includeRelations` | boolean | No | Include blocking/related/duplicate relations |
| `includeCustomerNeeds` | boolean | No | Include associated customer needs |

### Get issue status

**Slug:** `LINEAR_MCP_GET_ISSUE_STATUS`

Retrieve detailed information about an issue status in Linear by name or ID

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Status ID |
| `name` | string | Yes | Status name |
| `team` | string | Yes | Team name or ID |

### Get milestone

**Slug:** `LINEAR_MCP_GET_MILESTONE`

Retrieve details of a specific milestone by ID or name

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `query` | string | Yes | Milestone name or ID |
| `project` | string | Yes | Project name, ID, identifier (e.g., P-ENG-123), or slug |

### Get notifications

**Slug:** `LINEAR_MCP_GET_NOTIFICATIONS`

Get a page of notifications from the authenticated user's Linear inbox.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `limit` | number | No | Max results (default 50, max 250) |
| `cursor` | string | No | Next page cursor |
| `unreadOnly` | boolean | No | Only return unread notifications |

### Get project

**Slug:** `LINEAR_MCP_GET_PROJECT`

Retrieve details of a specific project in Linear

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `query` | string | Yes | Project name, ID, identifier (e.g., P-ENG-123), or slug |
| `includeMembers` | boolean | No | Include project members |
| `includeResources` | boolean | No | Include resources (documents, links, attachments) |
| `includeMilestones` | boolean | No | Include milestones |

### Get release

**Slug:** `LINEAR_MCP_GET_RELEASE`

Retrieve details of a release by ID or slug.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Release ID or slug |
| `includeReleaseNotes` | boolean | No | Include associated release notes |

### Get release note

**Slug:** `LINEAR_MCP_GET_RELEASE_NOTE`

Retrieve release notes by ID or slug, including markdown content.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Release notes ID or slug |
| `includeReleases` | boolean | No | Include associated releases |

### Get status updates

**Slug:** `LINEAR_MCP_GET_STATUS_UPDATES`

List or get project/initiative status updates. Pass `id` to get a specific update, or filter to list.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Status update ID - if provided, returns this specific update |
| `type` | string ("project" | "initiative") | Yes | Type of status update |
| `user` | string | No | User ID, name, email, or "me" |
| `limit` | number | No | Max results (default 50, max 250) |
| `cursor` | string | No | Next page cursor |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `project` | string | No | Project name, ID, identifier (e.g., P-ENG-123), or slug |
| `createdAt` | string | No | Created after: ISO-8601 date/duration (e.g., -P1D) |
| `updatedAt` | string | No | Updated after: ISO-8601 date/duration (e.g., -P1D) |
| `initiative` | string | No | Initiative name, ID, identifier (e.g., I-123), or slug |
| `includeArchived` | boolean | No | Include archived items |

### Get team

**Slug:** `LINEAR_MCP_GET_TEAM`

Retrieve details of a specific Linear team

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `query` | string | Yes | Team UUID, key, or name |

### Get template

**Slug:** `LINEAR_MCP_GET_TEMPLATE`

Retrieve a Linear template by ID or name: the content it pre-fills, the ids it applies, its sub-issues, and its form fields. Pass the template to save_issue or save_project to apply it. References come back as ids, so read a name with the matching tool when you need one. A form template collects its answers through a form, so applying one here creates an issue with the form unanswered.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Template ID or name |

### Get user

**Slug:** `LINEAR_MCP_GET_USER`

Retrieve details of a specific Linear user

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `query` | string | Yes | User ID, name, email, or "me" |

### Get workspace

**Slug:** `LINEAR_MCP_GET_WORKSPACE`

Retrieve the connected Linear workspace

### List agent skills

**Slug:** `LINEAR_MCP_LIST_AGENT_SKILLS`

List Linear Agent skills available to the authenticated user.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `limit` | number | No | Max results (default 50, max 250) |
| `cursor` | string | No | Next page cursor |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |

### List comments

**Slug:** `LINEAR_MCP_LIST_COMMENTS`

List comments on a Linear issue, project, initiative, document, project milestone, or project/initiative status update. Provide exactly one of `issueId`, `projectId`, `initiativeId`, `documentId`, `milestoneId`, or `statusUpdateId`. For issues, projects, and initiatives this returns both top-level discussion threads and inline description comments. Inline (anchored) comments carry a non-null `quotedText` set to the snippet of description text they reference. Returned comments include `author` and nullable `onBehalfOf`; when set, `onBehalfOf` identifies the user the agent author acted for.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `limit` | number | No | Max results (default 50, max 250) |
| `cursor` | string | No | Next page cursor |
| `issueId` | string | No | Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues (provide exactly one parent) |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `projectId` | string | No | Project name, ID, identifier (e.g., P-ENG-123), or slug (provide exactly one parent) |
| `documentId` | string | No | Document ID or slug (provide exactly one parent) |
| `milestoneId` | string | No | Milestone UUID (provide exactly one parent). Resolve milestone names via `list_milestones` first. |
| `initiativeId` | string | No | Initiative name, ID, identifier (e.g., I-123), or slug (provide exactly one parent) |
| `statusUpdateId` | string | No | Status update UUID (provide exactly one parent). Resolve status updates via `get_status_updates` first. |
| `statusUpdateType` | string ("project" | "initiative") | No | Type of status update named by `statusUpdateId`, as returned by `get_status_updates`. Only valid together with `statusUpdateId`; omit to check both project and initiative status updates. |

### List customers

**Slug:** `LINEAR_MCP_LIST_CUSTOMERS`

List customers in the user's Linear workspace

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `tier` | string | No | Customer tier name or ID |
| `limit` | number | No | Max results (default 50, max 250) |
| `owner` | string | No | User ID, name, email, or "me" |
| `query` | string | No | Search customer name |
| `cursor` | string | No | Next page cursor |
| `status` | string | No | Customer status name or ID |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `createdAt` | string | No | Created after: ISO-8601 date/duration (e.g., -P1D) |
| `updatedAt` | string | No | Updated after: ISO-8601 date/duration (e.g., -P1D) |
| `includeNeeds` | boolean | No | Include associated customer needs |
| `includeArchived` | boolean | No | Include archived items |

### List cycles

**Slug:** `LINEAR_MCP_LIST_CYCLES`

Retrieve cycles for a specific Linear team

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `type` | string ("current" | "previous" | "next") | No | Filter: current, previous, next, or all |
| `teamId` | string | Yes | Team ID |

### List diffs

**Slug:** `LINEAR_MCP_LIST_DIFFS`

List Linear diff pull requests visible to the authenticated user

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `repo` | string | No | Filter returned diffs by repository name |
| `limit` | number | No | Max results (default 50, max 250) |
| `owner` | string | No | Filter returned diffs by repository owner |
| `query` | string | No | Broad search by title, branch, PR number, or bare slug |
| `author` | string | No | Filter by author ID, name, email, or "me" |
| `cursor` | string | No | Next page cursor |
| `status` | string | No | Filter returned diffs by pull request status |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `reviewer` | string | No | Filter by reviewer ID, name, email, or "me" |
| `reviewState` | string ("pending" | "approved" | "changesRequested" | "commented" | "dismissed") | No | Reviewer state; requires reviewer and defaults to pending when reviewer is set |

### List documents

**Slug:** `LINEAR_MCP_LIST_DOCUMENTS`

List documents in the user's Linear workspace

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `limit` | number | No | Max results (default 50, max 250) |
| `query` | string | No | Search query |
| `cursor` | string | No | Next page cursor |
| `fields` | array | No | Fields to include in each result. `id` is always included. Omit or pass an empty array for the default response. |
| `teamId` | string | No | Filter by team ID |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `createdAt` | string | No | Created after: ISO-8601 date/duration (e.g., -P1D) |
| `creatorId` | string | No | Filter by creator ID |
| `projectId` | string | No | Filter by project ID |
| `updatedAt` | string | No | Updated after: ISO-8601 date/duration (e.g., -P1D) |
| `initiativeId` | string | No | Filter by initiative ID |
| `includeArchived` | boolean | No | Include archived items |

### List initiative labels

**Slug:** `LINEAR_MCP_LIST_INITIATIVE_LABELS`

List available initiative labels in the Linear workspace. A retired label carries `retiredAt` and cannot be applied to new initiatives.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | Filter by name |
| `limit` | number | No | Max results (default 50, max 250) |
| `cursor` | string | No | Next page cursor |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `includeGroups` | boolean | No | Include label groups in the results, marked with `isGroup`. A group cannot be applied directly; retiring or restoring one cascades to its child labels |

### List initiatives

**Slug:** `LINEAR_MCP_LIST_INITIATIVES`

List initiatives in the user's Linear workspace

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `label` | string | No | Label name or ID |
| `limit` | number | No | Max results (default 50, max 250) |
| `owner` | string | No | User ID, name, email, or "me" |
| `query` | string | No | Search initiative name |
| `cursor` | string | No | Next page cursor |
| `fields` | array | No | Fields to include in each result. `id` is always included. Omit or pass an empty array for the default response. |
| `status` | string | No | Status of the initiative |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `leadTeam` | string | No | Lead team name, key, or ID |
| `createdAt` | string | No | Created after: ISO-8601 date/duration (e.g., -P1D) |
| `updatedAt` | string | No | Updated after: ISO-8601 date/duration (e.g., -P1D) |
| `includeArchived` | boolean | No | Include archived items |
| `includeProjects` | boolean | No | Include projects |
| `parentInitiative` | string | No | Parent initiative. Initiative name, ID, identifier (e.g., I-123), or slug |
| `includeSubInitiatives` | boolean | No | Include sub-initiatives |

### List issue labels

**Slug:** `LINEAR_MCP_LIST_ISSUE_LABELS`

List available issue labels in a Linear workspace or team. A retired label carries `retiredAt` and cannot be applied to new issues.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | Filter by name |
| `team` | string | No | Team name or ID |
| `limit` | number | No | Max results (default 50, max 250) |
| `cursor` | string | No | Next page cursor |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `includeGroups` | boolean | No | Include label groups in the results, marked with `isGroup`. A group cannot be applied directly; retiring or restoring one cascades to its child labels |

### List issues

**Slug:** `LINEAR_MCP_LIST_ISSUES`

List issues in the user's Linear workspace, including active Triage Intelligence suggestions for issues in triage. For my issues, use "me" as the assignee. Use "null" for no assignee.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `team` | string | No | Team name or ID |
| `cycle` | string | No | Cycle name, number, or ID |
| `label` | string | No | Label name or ID |
| `limit` | number | No | Max results (default 50, max 250) |
| `query` | string | No | Search issue title or description |
| `state` | string | No | State type, name, or ID |
| `cursor` | string | No | Next page cursor |
| `fields` | array | No | Fields to include in each result. `id` is always included. Omit or pass an empty array for the default response. |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `project` | string | No | Project name, ID, identifier (e.g., P-ENG-123), or slug |
| `release` | string | No | Release ID or slug |
| `assignee` | string | No | User ID, name, email, or "me" |
| `delegate` | string | No | Agent name or ID. When the user asks to delegate to "Linear" or "the Linear agent", this refers to the "Linear" app user specifically |
| `parentId` | string | No | Parent issue ID or identifier (e.g., LIN-123) |
| `priority` | number | No | 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low |
| `createdAt` | string | No | Created after: ISO-8601 date/duration (e.g., -P1D) |
| `updatedAt` | string | No | Updated after: ISO-8601 date/duration (e.g., -P1D) |
| `includeArchived` | boolean | No | Include archived items |

### List issue statuses

**Slug:** `LINEAR_MCP_LIST_ISSUE_STATUSES`

List available issue statuses in a Linear team

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `team` | string | Yes | Team name or ID |

### List milestones

**Slug:** `LINEAR_MCP_LIST_MILESTONES`

List all milestones in a Linear project

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `project` | string | Yes | Project name, ID, identifier (e.g., P-ENG-123), or slug |

### List project labels

**Slug:** `LINEAR_MCP_LIST_PROJECT_LABELS`

List available project labels in the Linear workspace. A team-scoped label carries a `team` field; different teams can hold same-named labels, so check it before acting on an ID. A retired label carries `retiredAt` and cannot be applied to new projects.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | Filter by name |
| `limit` | number | No | Max results (default 50, max 250) |
| `cursor` | string | No | Next page cursor |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `includeGroups` | boolean | No | Include label groups in the results, marked with `isGroup`. A group cannot be applied directly; retiring or restoring one cascades to its child labels |

### List projects

**Slug:** `LINEAR_MCP_LIST_PROJECTS`

List projects in the user's Linear workspace

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `team` | string | No | Team name or ID |
| `label` | string | No | Label name or ID |
| `limit` | number | No | Max results (default 50, max 50) |
| `query` | string | No | Search project name |
| `state` | string | No | State type, name, or ID |
| `cursor` | string | No | Next page cursor |
| `fields` | array | No | Fields to include in each result. `id` is always included. Omit or pass an empty array for the default response. |
| `member` | string | No | User ID, name, email, or "me" |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `createdAt` | string | No | Created after: ISO-8601 date/duration (e.g., -P1D) |
| `updatedAt` | string | No | Updated after: ISO-8601 date/duration (e.g., -P1D) |
| `initiative` | string | No | Initiative name, ID, identifier (e.g., I-123), or slug |
| `includeMembers` | boolean | No | Include project members |
| `includeArchived` | boolean | No | Include archived items |
| `includeMilestones` | boolean | No | Include milestones |

### List release notes

**Slug:** `LINEAR_MCP_LIST_RELEASE_NOTES`

List release notes in the workspace, optionally filtered by pipeline or covered release.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `limit` | number | No | Max results (default 50, max 250) |
| `query` | string | No | Search release notes title |
| `cursor` | string | No | Next page cursor |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `release` | string | No | Release ID or slug |
| `pipeline` | string | No | Release pipeline ID, slug, or exact name |
| `createdAt` | string | No | Created after: ISO-8601 date/duration (e.g., -P1D) |
| `updatedAt` | string | No | Updated after: ISO-8601 date/duration (e.g., -P1D) |
| `includeContent` | boolean | No | Include markdown release notes content |
| `includeArchived` | boolean | No | Include archived items |
| `includeReleases` | boolean | No | Include associated releases |

### List release pipelines

**Slug:** `LINEAR_MCP_LIST_RELEASE_PIPELINES`

List release pipelines in the workspace.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `team` | string | No | Team name or ID |
| `type` | string ("continuous" | "scheduled") | No | Pipeline type: continuous &#124; scheduled |
| `limit` | number | No | Max results (default 50, max 250) |
| `query` | string | No | Search pipeline name |
| `cursor` | string | No | Next page cursor |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `createdAt` | string | No | Created after: ISO-8601 date/duration (e.g., -P1D) |
| `updatedAt` | string | No | Updated after: ISO-8601 date/duration (e.g., -P1D) |
| `includeTeams` | boolean | No | Include each pipeline's teams |
| `isProduction` | boolean | No | Filter by production pipeline flag |
| `includeStages` | boolean | No | Include each pipeline's stages |
| `includeArchived` | boolean | No | Include archived items |

### List releases

**Slug:** `LINEAR_MCP_LIST_RELEASES`

List releases in the workspace, with optional filtering by pipeline, stage, version, and text.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `limit` | number | No | Max results (default 50, max 250) |
| `query` | string | No | Search release name or version |
| `stage` | string | No | Release stage ID or exact name |
| `cursor` | string | No | Next page cursor |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `version` | string | No | Exact version match |
| `pipeline` | string | No | Release pipeline ID, slug, or exact name |
| `createdAt` | string | No | Created after: ISO-8601 date/duration (e.g., -P1D) |
| `stageType` | string ("planned" | "started" | "completed" | "canceled") | No | Filter by stage lifecycle type |
| `updatedAt` | string | No | Updated after: ISO-8601 date/duration (e.g., -P1D) |
| `hasReleaseNotes` | boolean | No | Filter to releases that do (true) or do not (false) have release notes |
| `includeArchived` | boolean | No | Include archived items |
| `includeReleaseNotes` | boolean | No | Include associated release notes |

### List teams

**Slug:** `LINEAR_MCP_LIST_TEAMS`

List teams in the user's Linear workspace

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `limit` | number | No | Max results (default 50, max 250) |
| `query` | string | No | Search query |
| `cursor` | string | No | Next page cursor |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |
| `createdAt` | string | No | Created after: ISO-8601 date/duration (e.g., -P1D) |
| `updatedAt` | string | No | Updated after: ISO-8601 date/duration (e.g., -P1D) |
| `includeArchived` | boolean | No | Include archived items |

### List templates

**Slug:** `LINEAR_MCP_LIST_TEMPLATES`

List the Linear issue, project, and document templates available to the authenticated user. Use this to find the template a team expects, then call get_template for its content.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `team` | string | No | Team name or ID. Returns that team's templates plus workspace-level ones |
| `type` | string ("issue" | "project" | "document") | No | Filter by template type. Omit to return every type |

### List users

**Slug:** `LINEAR_MCP_LIST_USERS`

Retrieve users in the Linear workspace

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `team` | string | No | Team name or ID |
| `limit` | number | No | Max results (default 50, max 250) |
| `query` | string | No | Filter by name or email |
| `cursor` | string | No | Next page cursor |
| `orderBy` | string ("createdAt" | "updatedAt") | No | Sort: createdAt &#124; updatedAt |

### Mark notification

**Slug:** `LINEAR_MCP_MARK_NOTIFICATION`

Mark a Linear inbox notification as read or unread, or snooze or unsnooze it.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Notification ID |
| `read` | boolean | No | Whether the notification should be marked as read |
| `snoozedUntilAt` | string | No | ISO-8601 time to snooze until, or null to unsnooze |

### Merge diff

**Slug:** `LINEAR_MCP_MERGE_DIFF`

Merge a Linear diff or add it to the repository's merge queue

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `urlOrId` | string | Yes | Linear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URL |
| `mergeMethod` | string ("MERGE" | "REBASE" | "SQUASH") | No | Merge method; omit to use the repository default |

### Prepare attachment upload

**Slug:** `LINEAR_MCP_PREPARE_ATTACHMENT_UPLOAD`

Prepare a direct Linear file upload for an existing issue.

Workflow:
1. Call this tool with issue, filename, contentType, and size.
2. Upload raw bytes with PUT to uploadRequest.url outside MCP.
3. All headers in uploadRequest.headers are part of the signed request, so send them verbatim.
4. After PUT succeeds, call create_attachment_from_upload with assetUrl to link it to the issue.

Do not base64-encode or transform the file. Use curl --data-binary @path or fetch(url, { method: 'PUT', body: blob }).
Omitting or modifying any signed header, including casing, will return HTTP 403.
The signed URL must be used within 60 seconds or it will expire.

Upload sequencing:
Prepare, PUT, and finalize one file before calling this tool for another file.
Do not batch multiple prepare_attachment_upload calls before starting the PUTs because earlier signed URLs can expire while later files are prepared.

Example:
curl -X PUT --data-binary @file.png \
  -H "content-type: image/png" \
  -H "x-goog-content-length-range: N,N" \
  -H "cache-control: public, max-age=31536000" \
  -H 'Content-Disposition: attachment; filename="file.png"' \
  "<uploadRequest.url>"

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `size` | integer | Yes | Exact file size in bytes. Must be smaller than 2 GB. |
| `issue` | string | Yes | Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues |
| `title` | string | No | Suggested attachment title for the finalize step |
| `filename` | string | Yes | Filename for the upload, e.g. screenshot.png |
| `subtitle` | string | No | Suggested attachment subtitle for the finalize step |
| `contentType` | string | Yes | MIME type, e.g. image/png or application/pdf |

### Resolve diff thread

**Slug:** `LINEAR_MCP_RESOLVE_DIFF_THREAD`

Resolve or reopen a top-level comment thread on a Linear diff

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `resolved` | boolean | No | True to resolve the thread; false to reopen it |
| `threadId` | string | Yes | Top-level diff thread/comment ID |

### Restore initiative label

**Slug:** `LINEAR_MCP_RESTORE_INITIATIVE_LABEL`

Restore a retired Linear initiative label, making it available for use on initiatives again. Restoring a label group also restores every child label, including any that were retired separately.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Label or label group ID |

### Restore issue label

**Slug:** `LINEAR_MCP_RESTORE_ISSUE_LABEL`

Restore a retired Linear issue label, making it available for use on issues again. Restoring a label group also restores every child label, including any that were retired separately.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Label or label group ID |

### Restore project label

**Slug:** `LINEAR_MCP_RESTORE_PROJECT_LABEL`

Restore a retired Linear project label, making it available for use on projects again. Restoring a label group also restores every child label, including any that were retired separately.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Label or label group ID |

### Retire initiative label

**Slug:** `LINEAR_MCP_RETIRE_INITIATIVE_LABEL`

Retire a Linear initiative label so it cannot be applied to new initiatives. The label stays visible on initiatives that already have it. Retiring a label group also retires its child labels. Undo with `restore_initiative_label`.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Label or label group ID |

### Retire issue label

**Slug:** `LINEAR_MCP_RETIRE_ISSUE_LABEL`

Retire a Linear issue label so it cannot be applied to new issues. The label stays visible on issues that already have it. Retiring a label group also retires its child labels. Undo with `restore_issue_label`.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Label or label group ID |

### Retire project label

**Slug:** `LINEAR_MCP_RETIRE_PROJECT_LABEL`

Retire a Linear project label so it cannot be applied to new projects. The label stays visible on projects that already have it. Retiring a label group also retires its child labels. Undo with `restore_project_label`.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | Yes | Label or label group ID |

### Save comment

**Slug:** `LINEAR_MCP_SAVE_COMMENT`

Create or update a comment on a Linear issue, project, initiative, document, project milestone, or project/initiative status update. If `id` is provided, updates the existing comment; otherwise creates a new one. To start a new thread, pass `body` and exactly one of `issueId`, `projectId`, `initiativeId`, `documentId`, `milestoneId`, or `statusUpdateId` — comments on issues/projects/initiatives become top-level discussion threads; comments on documents/milestones become description comments. A status update holds a single thread, so a comment on an update that already has one is added to it as a reply. To reply to an existing thread, pass `parentId` and `body`; the reply inherits the parent's thread type, so no entity reference is needed. Parent reference fields are ignored when `id` or `parentId` is provided (`statusUpdateType` is rejected instead).

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Comment ID. If provided, updates the existing comment |
| `body` | string | Yes | Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe) |
| `issueId` | string | No | Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues (provide exactly one parent) |
| `parentId` | string | No | Parent comment ID (for replies, only when creating) |
| `projectId` | string | No | Project name, ID, identifier (e.g., P-ENG-123), or slug (provide exactly one parent) |
| `documentId` | string | No | Document ID or slug (provide exactly one parent) |
| `milestoneId` | string | No | Milestone UUID (provide exactly one parent). Resolve milestone names via `list_milestones` first. |
| `initiativeId` | string | No | Initiative name, ID, identifier (e.g., I-123), or slug (provide exactly one parent) |
| `statusUpdateId` | string | No | Status update UUID (provide exactly one parent). Resolve status updates via `get_status_updates` first. |
| `statusUpdateType` | string ("project" | "initiative") | No | Type of status update named by `statusUpdateId`, as returned by `get_status_updates`. Only valid together with `statusUpdateId`; omit to check both project and initiative status updates. |

### Save customer

**Slug:** `LINEAR_MCP_SAVE_CUSTOMER`

Create or update a Linear customer. If `id` is provided, updates the existing customer; otherwise creates a new one. When creating, `name` is required.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Customer ID. If provided, updates the existing customer |
| `name` | string | No | Customer name (required when creating) |
| `size` | number | No | Size of the customer organization |
| `tier` | string | No | Customer tier name or ID |
| `owner` | string | No | User ID, name, email, or "me" |
| `status` | string | No | Customer status name or ID |
| `domains` | array | No | Domains to add to this customer. Append-only; existing domains are never removed |
| `revenue` | number | No | Annual revenue generated by the customer |
| `externalIds` | array | No | External system IDs to add. Append-only; existing IDs are never removed |

### Save customer need

**Slug:** `LINEAR_MCP_SAVE_CUSTOMER_NEED`

Create or update a customer need (request) in Linear. If `id` is provided, updates the existing need; otherwise creates a new one. When creating, `body` is required.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Customer need ID. If provided, updates the existing need |
| `body` | string | No | Description of the customer need (required when creating) |
| `issue` | string | No | Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues to associate with this need |
| `source` | string | No | URL to attach as the source for this customer need, such as a transcript or support thread |
| `project` | string | No | Project name, ID, identifier (e.g., P-ENG-123), or slug to associate with this need |
| `customer` | string | No | Customer ID or name |
| `priority` | number | No | Whether the need is important. 0 = Not important, 1 = Important |

### Save diff comment

**Slug:** `LINEAR_MCP_SAVE_DIFF_COMMENT`

Create, reply to, or edit a comment or persisted draft on a Linear diff. Set draft to true to save without submitting. Provide draftId to edit or submit a persisted draft, and commentId only to edit a submitted comment. Submitting an inline draft reuses its saved anchor; submitting a reply draft requires parentId again.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `body` | string | Yes | Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences |
| `draft` | boolean | No | Save as a private persisted draft without submitting |
| `anchor` | object | No | Optional comment anchor copied from a diff thread or built for a file or diff hunk |
| `draftId` | string | No | Existing persisted draft ID to edit or submit |
| `urlOrId` | string | No | Linear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URL |
| `parentId` | string | No | Top-level comment ID to reply to; also required when submitting a persisted reply draft |
| `commentId` | string | No | Existing comment ID to edit |
| `anchorContent` | string | No | Exact source text of the anchor's end line; stored with an inline draft so it can be re-anchored after the diff receives new revisions |

### Save document

**Slug:** `LINEAR_MCP_SAVE_DOCUMENT`

Create or update a Linear document. If `id` is provided, edits the existing document; otherwise creates a new one. When creating, `title` is required and exactly one parent (`project`, `issue`, `initiative`, `cycle`, or `team`) must be specified. On update, passing a parent reparents the document. To change parts of the content without resending all of it, pass `patch` instead of `content`.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Document ID or slug to update. Omit to create a new document. |
| `icon` | string | No | Icon name or emoji code (e.g. "Rocket" or ":eagle:"), not a raw Unicode emoji |
| `team` | string | No | Team name or ID. Attaches the document to the team, unless `cycle` is also passed, in which case it disambiguates the cycle. |
| `color` | string | No | Hex color |
| `cycle` | string | No | Cycle name, number, or ID. When passing a name or number, also pass `team` to disambiguate. |
| `issue` | string | No | Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues |
| `patch` | array | No | Partial edits applied to the current content, in order and atomically (one failing operation aborts the whole save). Every anchor string must match the current content exactly once. Only valid on update, in place of the full content/description field |
| `title` | string | No | Document title (required when creating) |
| `content` | string | No | Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe) |
| `project` | string | No | Project name, ID, identifier (e.g., P-ENG-123), or slug |
| `initiative` | string | No | Initiative name, ID, identifier (e.g., I-123), or slug |

### Save initiative

**Slug:** `LINEAR_MCP_SAVE_INITIATIVE`

Create or update a Linear initiative. If `id` is provided, updates the existing initiative; otherwise creates a new one. When creating, `name` is required. To change parts of the description without resending all of it, pass `patch` instead of `description`.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Initiative name, ID, identifier (e.g., I-123), or slug. If provided, updates the existing initiative |
| `icon` | string | No | Icon name or emoji code (e.g. "Rocket" or ":eagle:"), not a raw Unicode emoji |
| `name` | string | No | Initiative name (required when creating) |
| `color` | string | No | Hex color |
| `owner` | string | No | User ID, name, email, or "me". Null to remove |
| `patch` | array | No | Partial edits applied to the current content, in order and atomically (one failing operation aborts the whole save). Every anchor string must match the current content exactly once. Only valid on update, in place of the full content/description field |
| `labels` | array | No | Label names or IDs as a JSON array of strings (e.g. ["Bug", "Urgent"]). Replaces the full label set; existing labels not included are removed. Omit to leave labels unchanged |
| `status` | string | No | Initiative status (Proposed, Planned, Active, Completed, Canceled) |
| `summary` | string | No | Short summary (max 255 chars) |
| `leadTeam` | string | No | Lead team name, key, or ID. Null to remove the lead team |
| `priority` | integer | No | 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low |
| `targetDate` | string | No | Target date (ISO format) |
| `description` | string | No | Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe) |
| `parentInitiatives` | array | No | Parent initiatives to add. Initiative name, ID, identifier (e.g., I-123), or slug. Appended to existing parents |

### Save initiative label

**Slug:** `LINEAR_MCP_SAVE_INITIATIVE_LABEL`

Create or update a Linear initiative label. If `id` is provided, updates the existing label; otherwise creates a new one. When creating, `name` is required.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Label name or ID. If provided, updates the existing label |
| `name` | string | No | Label name (required when creating) |
| `color` | string | No | Hex color code |
| `parent` | string | No | Parent label group name or ID. Null to remove from its group |
| `isGroup` | boolean | No | Whether the label is a group |
| `description` | string | No | Label description. Null to clear it |

### Save issue

**Slug:** `LINEAR_MCP_SAVE_ISSUE`

Create or update a Linear issue. If `id` is provided, updates the existing issue; otherwise creates a new one. When creating, `team` is required, and `title` is required unless `template` is set. Note: use `assignee` (not `assigneeId`) to set the assignee — it accepts a user ID, name, email, or "me".

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Only for updating an existing issue. Pass the issue ID or identifier (e.g., LIN-123). Do NOT pass this parameter when creating a new issue. |
| `team` | string | No | Team name or ID (required when creating) |
| `cycle` | string | No | Cycle name, number, or ID. Null to remove |
| `links` | array | No | Link attachments to add [{url, title}]. Append-only; existing links are never removed |
| `patch` | array | No | Partial edits applied to the current content, in order and atomically (one failing operation aborts the whole save). Every anchor string must match the current content exactly once. Only valid on update, in place of the full content/description field |
| `state` | string | No | State type, name, or ID |
| `title` | string | No | Issue title (required when creating, unless template is set) |
| `blocks` | array | No | Issue IDs/identifiers this blocks. Append-only; existing relations are never removed |
| `labels` | array | No | Label names or IDs as a JSON array of strings (e.g. ["Bug", "Urgent"]). Replaces the full label set; existing labels not included are removed. Omit to leave labels unchanged. Cannot be combined with addLabels/removeLabels; prefer those for incremental changes |
| `dueDate` | string | No | Due date (ISO format). On update, pass null to remove the due date |
| `project` | string | No | Project name, ID, identifier (e.g., P-ENG-123), or slug. Null to remove |
| `slaType` | string | No | SLA day counting type: "all" or "onlyBusinessDays". Only use with slaBreachesAt; null means unset |
| `assignee` | string | No | User ID, name, email, or "me". Null to remove |
| `delegate` | string | No | Agent name or ID. When the user asks to delegate to "Linear" or "the Linear agent", this refers to the "Linear" app user specifically. Null to remove |
| `estimate` | string | No | Issue estimate value. On create, pass null or omit for no estimate. On update, pass null to clear the estimate; omitting leaves it unchanged. 0 is a real estimate only on teams that allow zero estimates. |
| `parentId` | string | No | Parent issue ID or identifier (e.g., LIN-123). Null to remove |
| `priority` | number | No | 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low |
| `template` | string | No | Template name or ID. Applied on create only. The template fills in the content, fields, and sub-issues server-side. A `description` replaces the template body rather than merging with it, but an empty `description` keeps the template body. Labels merge with the template's own |
| `addLabels` | array | No | Label names or IDs as a JSON array of strings (e.g. ["Bug", "Urgent"]) to add. Append-only; existing labels are never removed. Cannot be combined with a team change |
| `blockedBy` | array | No | Issue IDs/identifiers blocking this. Append-only; existing relations are never removed |
| `milestone` | string | No | Milestone name or ID |
| `relatedTo` | array | No | Related issue IDs/identifiers. Append-only; existing relations are never removed |
| `addReleases` | array | No | Release IDs or slugs to add. Append-only; existing releases are never removed |
| `description` | string | No | Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe) |
| `duplicateOf` | string | No | Duplicate of issue ID/identifier. Null to remove |
| `setReleases` | array | No | Replace all releases on the issue with these. Cannot be combined with addReleases/removeReleases |
| `removeBlocks` | array | No | Issue IDs/identifiers to stop blocking |
| `removeLabels` | array | No | Label names or IDs as a JSON array of strings (e.g. ["Bug", "Urgent"]) to remove. Only valid when updating an existing issue. Cannot be combined with a team change |
| `slaBreachesAt` | string | No | ISO-8601 timestamp when the SLA will breach. On update, pass null to remove the SLA |
| `removeReleases` | array | No | Release IDs or slugs to remove. Only valid when updating an existing issue |
| `removeBlockedBy` | array | No | Issue IDs/identifiers to remove as blockers of this issue |
| `removeRelatedTo` | array | No | Related issue IDs/identifiers to remove |

### Save issue label

**Slug:** `LINEAR_MCP_SAVE_ISSUE_LABEL`

Create or update a Linear issue label. If `id` is provided, updates the existing label; otherwise creates a new one. When creating, `name` is required.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Label name or ID. If provided, updates the existing label |
| `name` | string | No | Label name (required when creating) |
| `color` | string | No | Hex color code |
| `parent` | string | No | Parent label group name or ID. Null to remove from its group |
| `teamId` | string | No | Team UUID (omit for workspace label). When updating, only disambiguates `id` by name; a label's team cannot be changed |
| `isGroup` | boolean | No | Whether the label is a group |
| `description` | string | No | Label description. Null to clear it |

### Save milestone

**Slug:** `LINEAR_MCP_SAVE_MILESTONE`

Create or update a milestone in a Linear project. If `id` is provided, updates the existing milestone; otherwise creates a new one. When creating, `name` is required.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Milestone name or ID |
| `name` | string | No | Milestone name (required when creating) |
| `project` | string | Yes | Project name, ID, identifier (e.g., P-ENG-123), or slug |
| `targetDate` | string | No | Target completion date (ISO format, null to remove) |
| `description` | string | No | Milestone description |

### Save project

**Slug:** `LINEAR_MCP_SAVE_PROJECT`

Create or update a Linear project. If `id` is provided, updates the existing project; otherwise creates a new one. When creating, `name` and at least one team (via `addTeams` or `setTeams`) are required. Pass `template` to create the project from a project template. To change parts of the description without resending all of it, pass `patch` instead of `description`.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Project name, ID, identifier (e.g., P-ENG-123), or slug. If provided, updates the existing project |
| `icon` | string | No | Icon name or emoji code (e.g. "Rocket" or ":eagle:"), not a raw Unicode emoji |
| `lead` | string | No | User ID, name, email, or "me". Null to remove, except on create with a template that names a lead |
| `name` | string | No | Project name (required when creating) |
| `color` | string | No | Hex color |
| `links` | array | No | External resource links to add [{url, title}]. Append-only; existing links are never removed |
| `patch` | array | No | Partial edits applied to the current content, in order and atomically (one failing operation aborts the whole save). Every anchor string must match the current content exactly once. Only valid on update, in place of the full content/description field |
| `state` | string | No | Project state |
| `labels` | array | No | Label names or IDs as a JSON array of strings (e.g. ["Bug", "Urgent"]). Replaces the full label set; existing labels not included are removed. Omit to leave labels unchanged |
| `summary` | string | No | Short summary (max 255 chars) |
| `addTeams` | array | No | Team name or ID to add |
| `priority` | integer | No | 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low |
| `setTeams` | array | No | Replace all teams with these. Cannot combine with addTeams/removeTeams |
| `template` | string | No | Template name or ID. Applied on create only. The template fills in the content, fields, and sub-issues server-side. A `description` replaces the template body rather than merging with it, but an empty `description` keeps the template body. Labels merge with the template's own |
| `startDate` | string | No | Start date (ISO format). Pair with startDateResolution to indicate precision (e.g. month, quarter) |
| `targetDate` | string | No | Target date (ISO format). Pair with targetDateResolution to indicate precision (e.g. month, quarter) |
| `description` | string | No | Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe) |
| `removeTeams` | array | No | Team name or ID to remove |
| `addInitiatives` | array | No | Initiatives to add. Initiative name, ID, identifier (e.g., I-123), or slug |
| `setInitiatives` | array | No | Replace all initiatives with these. Initiative name, ID, identifier (e.g., I-123), or slug. Cannot combine with addInitiatives/removeInitiatives |
| `removeInitiatives` | array | No | Initiatives to remove. Initiative name, ID, identifier (e.g., I-123), or slug |
| `startDateResolution` | string ("halfYear" | "month" | "quarter" | "year") | No | Start date resolution |
| `targetDateResolution` | string ("halfYear" | "month" | "quarter" | "year") | No | Target date resolution |

### Save project label

**Slug:** `LINEAR_MCP_SAVE_PROJECT_LABEL`

Create or update a Linear project label. If `id` is provided, updates the existing label; otherwise creates a new one. When creating, `name` is required.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Label name or ID. If provided, updates the existing label |
| `name` | string | No | Label name (required when creating) |
| `color` | string | No | Hex color code |
| `parent` | string | No | Parent label group name or ID. Null to remove from its group |
| `isGroup` | boolean | No | Whether the label is a group |
| `description` | string | No | Label description. Null to clear it |

### Save release

**Slug:** `LINEAR_MCP_SAVE_RELEASE`

Create or update a release. If `id` is provided, updates the existing release; otherwise creates a new one. When creating, `name` and `pipeline` are required. Release status is modeled as the release pipeline stage.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Release ID or slug to update. Omit to create a new release. |
| `name` | string | No | Release name (required when creating) |
| `stage` | string | No | Release stage ID, exact name, or lifecycle type within the release pipeline |
| `version` | string | No | Version identifier |
| `pipeline` | string | No | Release pipeline ID, slug, or exact name (required when creating) |
| `commitSha` | string | No | Commit SHA associated with the release |
| `createdAt` | string | No | Import/create timestamp (ISO DateTime) |
| `startDate` | string | No | Estimated start date (ISO YYYY-MM-DD, null to remove) |
| `startedAt` | string | No | Started timestamp (ISO DateTime, null to remove) |
| `targetDate` | string | No | Estimated completion date (ISO YYYY-MM-DD, null to remove) |
| `completedAt` | string | No | Completed timestamp (ISO DateTime, null to remove) |
| `description` | string | No | Release description |

### Save release note

**Slug:** `LINEAR_MCP_SAVE_RELEASE_NOTE`

Create or update release notes. If `id` is provided, updates the existing release notes; otherwise creates a new one. When creating, `pipeline` and either `releases` or a release range are required. To change parts of the content without resending all of it, pass `patch` instead of `content`.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Release notes ID or slug to update. Omit to create new release notes. |
| `patch` | array | No | Partial edits applied to the current content, in order and atomically (one failing operation aborts the whole save). Every anchor string must match the current content exactly once. Only valid on update, in place of the full content/description field |
| `title` | string | No | Release notes title |
| `content` | string | No | Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe) |
| `pipeline` | string | No | Release pipeline ID, slug, or exact name (required when creating) |
| `releases` | array | No | Release IDs or slugs to include in the note |
| `rangeToRelease` | string | No | Newest release ID or slug in the note range |
| `rangeFromRelease` | string | No | Oldest release ID or slug in the note range |

### Save status update

**Slug:** `LINEAR_MCP_SAVE_STATUS_UPDATE`

Create or update a project/initiative status update. Omit `id` to create, provide `id` to update.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Status update ID - if provided, updates this existing update |
| `body` | string | No | Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe) |
| `type` | string ("project" | "initiative") | Yes | Type of status update |
| `health` | string ("onTrack" | "atRisk" | "offTrack") | No | onTrack &#124; atRisk &#124; offTrack |
| `project` | string | No | Project name, ID, identifier (e.g., P-ENG-123), or slug |
| `initiative` | string | No | Initiative name, ID, identifier (e.g., I-123), or slug |
| `isDiffHidden` | boolean | No | Deprecated. Hide diff with previous update (create only) |

### Search documentation

**Slug:** `LINEAR_MCP_SEARCH_DOCUMENTATION`

Search Linear's documentation to learn about features and usage

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | number | No | Page number |
| `query` | string | Yes | Search query |

### Share issue

**Slug:** `LINEAR_MCP_SHARE_ISSUE`

Share an issue with a workspace user who cannot otherwise access it. Use this tool only when the user explicitly asks to share the issue.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `user` | string | Yes | User ID, name, email, or "me" Must be an email address or UUID. |
| `issue` | string | Yes | Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues |

### Submit diff review

**Slug:** `LINEAR_MCP_SUBMIT_DIFF_REVIEW`

Approve a Linear diff, request changes, or submit a review comment

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `body` | string | No | Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. Required when requesting changes or commenting |
| `urlOrId` | string | Yes | Linear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URL |
| `decision` | string ("approved" | "changesRequested" | "commented") | Yes | Review decision: approved, changesRequested, or commented |

### Unshare issue

**Slug:** `LINEAR_MCP_UNSHARE_ISSUE`

Remove a workspace user's shared access to an issue. Use this tool only when the user explicitly asks to stop sharing the issue.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `user` | string | Yes | User ID, name, email, or "me" Must be an email address or UUID. |
| `issue` | string | Yes | Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues |
