---
title: Linear
description: Interact with Linear issues, projects, and more
---

import { BlockInfoCard } from "@/components/ui/block-info-card"

<BlockInfoCard 
  type="linear_v2"
  color="#5E6AD2"
/>

{/* MANUAL-CONTENT-START:intro */}
[Linear](https://linear.app) is a modern project management and issue tracking platform that helps teams plan, track, and manage their work with a streamlined interface. Linear supports agile methodologies with customizable workflows, cycles, and project milestones.

With the Linear integration in Sim, you can:

- **Manage issues**: Create, read, update, search, archive, unarchive, and delete issues
- **Manage labels**: Add or remove labels from issues, and create, update, or archive labels
- **Comment on issues**: Create, update, delete, and list comments on issues
- **Manage projects**: List, get, create, update, archive, and delete projects with milestones, labels, and statuses
- **Track cycles**: List, get, and create cycles, and retrieve the active cycle
- **Handle attachments**: Create, list, update, and delete attachments on issues
- **Manage issue relations**: Create, list, and delete relationships between issues
- **Access team data**: List users, teams, workflow states, notifications, and favorites
- **Manage customers**: Create, update, delete, list, and merge customers with statuses, tiers, and requests

In Sim, the Linear integration enables your agents to interact with your project management workflow as part of automated processes. Agents can create issues from external triggers, update statuses, manage projects and cycles, and synchronize data—enabling intelligent project management automation at scale.
{/* MANUAL-CONTENT-END */}


## Usage Instructions

Integrate Linear into the workflow. Can manage issues, comments, projects, labels, workflow states, cycles, attachments, and more. Can also trigger workflows based on Linear webhook events.



## Tools

### `linear_read_issues`

Fetch and filter issues from Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | No | Linear team ID \(UUID format\) to filter issues by team |
| `projectId` | string | No | Linear project ID \(UUID format\) to filter issues by project |
| `assigneeId` | string | No | User ID to filter by assignee |
| `stateId` | string | No | Workflow state ID to filter by status |
| `priority` | number | No | Priority to filter by \(0=No priority, 1=Urgent, 2=High, 3=Normal, 4=Low\) |
| `labelIds` | array | No | Array of label IDs to filter by |
| `createdAfter` | string | No | Filter issues created after this date \(ISO 8601 format\) |
| `updatedAfter` | string | No | Filter issues updated after this date \(ISO 8601 format\) |
| `includeArchived` | boolean | No | Include archived issues \(default: false\) |
| `first` | number | No | Number of issues to return \(default: 50, max: 250\) |
| `after` | string | No | Pagination cursor for next page |
| `orderBy` | string | No | Sort order: "createdAt" or "updatedAt" \(default: "updatedAt"\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `hasNextPage` | boolean | Whether there are more results |
| `endCursor` | string | Cursor for the next page |
| `issues` | array | Array of filtered issues from Linear |
|   ↳ `id` | string | Issue ID |
|   ↳ `title` | string | Issue title |
|   ↳ `description` | string | Issue description |
|   ↳ `priority` | number | Priority \(0=No priority, 1=Urgent, 2=High, 3=Normal, 4=Low\) |
|   ↳ `estimate` | number | Estimate in points |
|   ↳ `url` | string | Issue URL |
|   ↳ `dueDate` | string | Due date \(YYYY-MM-DD\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |
|   ↳ `state` | object | Workflow state/status |
|     ↳ `id` | string | State ID |
|     ↳ `name` | string | State name \(e.g., "Todo", "In Progress"\) |
|     ↳ `type` | string | State type \(unstarted, started, completed, canceled\) |
|   ↳ `assignee` | object | User object |
|     ↳ `id` | string | User ID |
|     ↳ `name` | string | User name |
|     ↳ `email` | string | User email |
|   ↳ `teamId` | string | Team ID |
|   ↳ `teamName` | string | Team name |
|   ↳ `projectId` | string | Project ID |
|   ↳ `projectName` | string | Project name |
|   ↳ `cycleId` | string | Cycle ID |
|   ↳ `cycleNumber` | number | Cycle number |
|   ↳ `cycleName` | string | Cycle name |
|   ↳ `labels` | array | Issue labels |
|     ↳ `id` | string | Label ID |
|     ↳ `name` | string | Label name |
|     ↳ `color` | string | Label color \(hex\) |

### `linear_get_issue`

Get a single issue by ID from Linear with full details

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `issueId` | string | Yes | Linear issue ID |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `issue` | object | The issue with full details |
|   ↳ `id` | string | Issue ID |
|   ↳ `title` | string | Issue title |
|   ↳ `description` | string | Issue description |
|   ↳ `priority` | number | Priority \(0=No priority, 1=Urgent, 2=High, 3=Normal, 4=Low\) |
|   ↳ `estimate` | number | Estimate in points |
|   ↳ `url` | string | Issue URL |
|   ↳ `dueDate` | string | Due date \(YYYY-MM-DD\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `completedAt` | string | Completion timestamp \(ISO 8601\) |
|   ↳ `canceledAt` | string | Cancellation timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |
|   ↳ `state` | object | Workflow state/status |
|     ↳ `id` | string | State ID |
|     ↳ `name` | string | State name \(e.g., "Todo", "In Progress"\) |
|     ↳ `type` | string | State type \(unstarted, started, completed, canceled\) |
|   ↳ `assignee` | object | User object |
|     ↳ `id` | string | User ID |
|     ↳ `name` | string | User name |
|     ↳ `email` | string | User email |
|   ↳ `teamId` | string | Team ID |
|   ↳ `projectId` | string | Project ID |
|   ↳ `labels` | array | Issue labels |
|     ↳ `id` | string | Label ID |
|     ↳ `name` | string | Label name |
|     ↳ `color` | string | Label color \(hex\) |

### `linear_create_issue`

Create a new issue in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Yes | Linear team ID \(UUID format\) where the issue will be created |
| `projectId` | string | No | Linear project ID \(UUID format\) to associate with the issue |
| `title` | string | Yes | Issue title |
| `description` | string | No | Issue description |
| `stateId` | string | No | Workflow state ID \(status\) |
| `assigneeId` | string | No | User ID to assign the issue to |
| `priority` | number | No | Priority \(0=No priority, 1=Urgent, 2=High, 3=Normal, 4=Low\) |
| `estimate` | number | No | Estimate in points |
| `labelIds` | array | No | Array of label IDs to set on the issue |
| `cycleId` | string | No | Cycle ID to assign the issue to |
| `parentId` | string | No | Parent issue ID \(for creating sub-issues\) |
| `dueDate` | string | No | Due date in ISO 8601 format \(date only: YYYY-MM-DD\) |
| `subscriberIds` | array | No | Array of user IDs to subscribe to the issue |
| `projectMilestoneId` | string | No | Project milestone ID to associate with the issue |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `issue` | object | The created issue with all its properties |
|   ↳ `id` | string | Issue ID |
|   ↳ `title` | string | Issue title |
|   ↳ `description` | string | Issue description |
|   ↳ `priority` | number | Priority \(0=No priority, 1=Urgent, 2=High, 3=Normal, 4=Low\) |
|   ↳ `estimate` | number | Estimate in points |
|   ↳ `url` | string | Issue URL |
|   ↳ `dueDate` | string | Due date \(YYYY-MM-DD\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `completedAt` | string | Completion timestamp \(ISO 8601\) |
|   ↳ `canceledAt` | string | Cancellation timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |
|   ↳ `state` | object | Workflow state/status |
|     ↳ `id` | string | State ID |
|     ↳ `name` | string | State name \(e.g., "Todo", "In Progress"\) |
|     ↳ `type` | string | State type \(unstarted, started, completed, canceled\) |
|   ↳ `assignee` | object | User object |
|     ↳ `id` | string | User ID |
|     ↳ `name` | string | User name |
|     ↳ `email` | string | User email |
|   ↳ `teamId` | string | Team ID |
|   ↳ `projectId` | string | Project ID |
|   ↳ `labels` | array | Issue labels |
|     ↳ `id` | string | Label ID |
|     ↳ `name` | string | Label name |
|     ↳ `color` | string | Label color \(hex\) |
|   ↳ `cycleId` | string | Cycle ID |
|   ↳ `cycleNumber` | number | Cycle number |
|   ↳ `cycleName` | string | Cycle name |
|   ↳ `parentId` | string | Parent issue ID |
|   ↳ `parentTitle` | string | Parent issue title |
|   ↳ `projectMilestoneId` | string | Project milestone ID |
|   ↳ `projectMilestoneName` | string | Project milestone name |

### `linear_update_issue`

Update an existing issue in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `issueId` | string | Yes | Linear issue ID to update |
| `title` | string | No | New issue title |
| `description` | string | No | New issue description |
| `stateId` | string | No | Workflow state ID \(status\) |
| `assigneeId` | string | No | User ID to assign the issue to |
| `priority` | number | No | Priority \(0=No priority, 1=Urgent, 2=High, 3=Normal, 4=Low\) |
| `estimate` | number | No | Estimate in points |
| `labelIds` | array | No | Array of label IDs to set on the issue \(replaces all existing labels\) |
| `projectId` | string | No | Project ID to move the issue to |
| `cycleId` | string | No | Cycle ID to assign the issue to |
| `parentId` | string | No | Parent issue ID \(for making this a sub-issue\) |
| `dueDate` | string | No | Due date in ISO 8601 format \(date only: YYYY-MM-DD\) |
| `addedLabelIds` | array | No | Array of label IDs to add to the issue \(without replacing existing labels\) |
| `removedLabelIds` | array | No | Array of label IDs to remove from the issue |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `issue` | object | The updated issue |
|   ↳ `id` | string | Issue ID |
|   ↳ `title` | string | Issue title |
|   ↳ `description` | string | Issue description |
|   ↳ `priority` | number | Priority \(0=No priority, 1=Urgent, 2=High, 3=Normal, 4=Low\) |
|   ↳ `estimate` | number | Estimate in points |
|   ↳ `url` | string | Issue URL |
|   ↳ `dueDate` | string | Due date \(YYYY-MM-DD\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `completedAt` | string | Completion timestamp \(ISO 8601\) |
|   ↳ `canceledAt` | string | Cancellation timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |
|   ↳ `state` | object | Workflow state/status |
|     ↳ `id` | string | State ID |
|     ↳ `name` | string | State name \(e.g., "Todo", "In Progress"\) |
|     ↳ `type` | string | State type \(unstarted, started, completed, canceled\) |
|   ↳ `assignee` | object | User object |
|     ↳ `id` | string | User ID |
|     ↳ `name` | string | User name |
|     ↳ `email` | string | User email |
|   ↳ `teamId` | string | Team ID |
|   ↳ `projectId` | string | Project ID |
|   ↳ `labels` | array | Issue labels |
|     ↳ `id` | string | Label ID |
|     ↳ `name` | string | Label name |
|     ↳ `color` | string | Label color \(hex\) |
|   ↳ `cycleId` | string | Cycle ID |
|   ↳ `cycleNumber` | number | Cycle number |
|   ↳ `cycleName` | string | Cycle name |
|   ↳ `parentId` | string | Parent issue ID |
|   ↳ `parentTitle` | string | Parent issue title |
|   ↳ `projectMilestoneId` | string | Project milestone ID |
|   ↳ `projectMilestoneName` | string | Project milestone name |

### `linear_archive_issue`

Archive an issue in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `issueId` | string | Yes | Linear issue ID to archive |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the archive operation was successful |
| `issueId` | string | The ID of the archived issue |

### `linear_unarchive_issue`

Unarchive (restore) an archived issue in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `issueId` | string | Yes | Linear issue ID to unarchive |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the unarchive operation was successful |
| `issueId` | string | The ID of the unarchived issue |

### `linear_delete_issue`

Delete (trash) an issue in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `issueId` | string | Yes | Linear issue ID to delete |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the delete operation was successful |

### `linear_search_issues`

Search for issues in Linear using full-text search

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `query` | string | Yes | Search query string |
| `teamId` | string | No | Filter by team ID |
| `includeArchived` | boolean | No | Include archived issues in search results |
| `first` | number | No | Number of results to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `issues` | array | Array of matching issues |
|   ↳ `id` | string | Issue ID |
|   ↳ `title` | string | Issue title |
|   ↳ `description` | string | Issue description |
|   ↳ `priority` | number | Priority \(0=No priority, 1=Urgent, 2=High, 3=Normal, 4=Low\) |
|   ↳ `estimate` | number | Estimate in points |
|   ↳ `url` | string | Issue URL |
|   ↳ `dueDate` | string | Due date \(YYYY-MM-DD\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `completedAt` | string | Completion timestamp \(ISO 8601\) |
|   ↳ `canceledAt` | string | Cancellation timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |
|   ↳ `state` | object | Workflow state/status |
|     ↳ `id` | string | State ID |
|     ↳ `name` | string | State name \(e.g., "Todo", "In Progress"\) |
|     ↳ `type` | string | State type \(unstarted, started, completed, canceled\) |
|   ↳ `assignee` | object | User object |
|     ↳ `id` | string | User ID |
|     ↳ `name` | string | User name |
|     ↳ `email` | string | User email |
|   ↳ `teamId` | string | Team ID |
|   ↳ `projectId` | string | Project ID |
|   ↳ `labels` | array | Issue labels |
|     ↳ `id` | string | Label ID |
|     ↳ `name` | string | Label name |
|     ↳ `color` | string | Label color \(hex\) |

### `linear_add_label_to_issue`

Add a label to an issue in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `issueId` | string | Yes | Linear issue ID |
| `labelId` | string | Yes | Label ID to add to the issue |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the label was successfully added |
| `issueId` | string | The ID of the issue |

### `linear_remove_label_from_issue`

Remove a label from an issue in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `issueId` | string | Yes | Linear issue ID |
| `labelId` | string | Yes | Label ID to remove from the issue |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the label was successfully removed |
| `issueId` | string | The ID of the issue |

### `linear_create_comment`

Add a comment to an issue in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `issueId` | string | Yes | Linear issue ID to comment on |
| `body` | string | Yes | Comment text \(supports Markdown\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `comment` | object | The created comment |
|   ↳ `id` | string | Comment ID |
|   ↳ `body` | string | Comment text \(Markdown\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `user` | object | User object |
|     ↳ `id` | string | User ID |
|     ↳ `name` | string | User name |
|     ↳ `email` | string | User email |
|   ↳ `issue` | object | Issue object |
|     ↳ `id` | string | Issue ID |
|     ↳ `title` | string | Issue title |

### `linear_update_comment`

Edit a comment in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `commentId` | string | Yes | Comment ID to update |
| `body` | string | No | New comment text \(supports Markdown\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `comment` | object | The updated comment |
|   ↳ `id` | string | Comment ID |
|   ↳ `body` | string | Comment text \(Markdown\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `user` | object | User object |
|     ↳ `id` | string | User ID |
|     ↳ `name` | string | User name |
|     ↳ `email` | string | User email |
|   ↳ `issue` | object | Issue object |
|     ↳ `id` | string | Issue ID |
|     ↳ `title` | string | Issue title |

### `linear_delete_comment`

Delete a comment from Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `commentId` | string | Yes | Comment ID to delete |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the delete operation was successful |

### `linear_list_comments`

List all comments on an issue in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `issueId` | string | Yes | Linear issue ID |
| `first` | number | No | Number of comments to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `comments` | array | Array of comments on the issue |
|   ↳ `id` | string | Comment ID |
|   ↳ `body` | string | Comment text \(Markdown\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `user` | object | User object |
|     ↳ `id` | string | User ID |
|     ↳ `name` | string | User name |
|     ↳ `email` | string | User email |
|   ↳ `issue` | object | Issue object |
|     ↳ `id` | string | Issue ID |
|     ↳ `title` | string | Issue title |

### `linear_list_projects`

List projects in Linear with optional filtering

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | No | Filter by team ID |
| `includeArchived` | boolean | No | Include archived projects |
| `first` | number | No | Number of projects to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `projects` | array | Array of projects |
|   ↳ `id` | string | Project ID |
|   ↳ `name` | string | Project name |
|   ↳ `description` | string | Project description |
|   ↳ `state` | string | Project state \(planned, started, paused, completed, canceled\) |
|   ↳ `priority` | number | Project priority \(0-4\) |
|   ↳ `startDate` | string | Start date \(YYYY-MM-DD\) |
|   ↳ `targetDate` | string | Target date \(YYYY-MM-DD\) |
|   ↳ `url` | string | Project URL |
|   ↳ `lead` | object | User object |
|     ↳ `id` | string | User ID |
|     ↳ `name` | string | User name |
|     ↳ `email` | string | User email |
|   ↳ `teams` | array | Associated teams |
|     ↳ `id` | string | Team ID |
|     ↳ `name` | string | Team name |

### `linear_get_project`

Get a single project by ID from Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Yes | Linear project ID |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `project` | object | The project with full details |
|   ↳ `id` | string | Project ID |
|   ↳ `name` | string | Project name |
|   ↳ `description` | string | Project description |
|   ↳ `state` | string | Project state \(planned, started, paused, completed, canceled\) |
|   ↳ `priority` | number | Project priority \(0-4\) |
|   ↳ `startDate` | string | Start date \(YYYY-MM-DD\) |
|   ↳ `targetDate` | string | Target date \(YYYY-MM-DD\) |
|   ↳ `url` | string | Project URL |
|   ↳ `lead` | object | User object |
|     ↳ `id` | string | User ID |
|     ↳ `name` | string | User name |
|     ↳ `email` | string | User email |
|   ↳ `teams` | array | Associated teams |
|     ↳ `id` | string | Team ID |
|     ↳ `name` | string | Team name |

### `linear_create_project`

Create a new project in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Yes | Team ID to create the project in |
| `name` | string | Yes | Project name |
| `description` | string | No | Project description |
| `leadId` | string | No | User ID of the project lead |
| `startDate` | string | No | Project start date \(ISO format\) |
| `targetDate` | string | No | Project target date \(ISO format\) |
| `priority` | number | No | Project priority \(0-4\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `project` | object | The created project |
|   ↳ `id` | string | Project ID |
|   ↳ `name` | string | Project name |
|   ↳ `description` | string | Project description |
|   ↳ `state` | string | Project state \(planned, started, paused, completed, canceled\) |
|   ↳ `priority` | number | Project priority \(0-4\) |
|   ↳ `startDate` | string | Start date \(YYYY-MM-DD\) |
|   ↳ `targetDate` | string | Target date \(YYYY-MM-DD\) |
|   ↳ `url` | string | Project URL |
|   ↳ `lead` | object | User object |
|     ↳ `id` | string | User ID |
|     ↳ `name` | string | User name |
|     ↳ `email` | string | User email |
|   ↳ `teams` | array | Associated teams |
|     ↳ `id` | string | Team ID |
|     ↳ `name` | string | Team name |

### `linear_update_project`

Update an existing project in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Yes | Project ID to update |
| `name` | string | No | New project name |
| `description` | string | No | New project description |
| `state` | string | No | Project state \(planned, started, completed, canceled\) |
| `leadId` | string | No | User ID of the project lead |
| `startDate` | string | No | Project start date \(ISO format: YYYY-MM-DD\) |
| `targetDate` | string | No | Project target date \(ISO format: YYYY-MM-DD\) |
| `priority` | number | No | Project priority \(0=No priority, 1=Urgent, 2=High, 3=Normal, 4=Low\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `project` | object | The updated project |
|   ↳ `id` | string | Project ID |
|   ↳ `name` | string | Project name |
|   ↳ `description` | string | Project description |
|   ↳ `state` | string | Project state \(planned, started, paused, completed, canceled\) |
|   ↳ `priority` | number | Project priority \(0-4\) |
|   ↳ `startDate` | string | Start date \(YYYY-MM-DD\) |
|   ↳ `targetDate` | string | Target date \(YYYY-MM-DD\) |
|   ↳ `url` | string | Project URL |
|   ↳ `lead` | object | User object |
|     ↳ `id` | string | User ID |
|     ↳ `name` | string | User name |
|     ↳ `email` | string | User email |
|   ↳ `teams` | array | Associated teams |
|     ↳ `id` | string | Team ID |
|     ↳ `name` | string | Team name |

### `linear_archive_project`

Archive a project in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Yes | Project ID to archive |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the archive operation was successful |
| `projectId` | string | The ID of the archived project |

### `linear_list_users`

List all users in the Linear workspace

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `includeDisabled` | boolean | No | Include disabled/inactive users |
| `first` | number | No | Number of users to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `users` | array | Array of workspace users |
|   ↳ `id` | string | User ID |
|   ↳ `name` | string | User name |
|   ↳ `email` | string | User email |
|   ↳ `displayName` | string | Display name |
|   ↳ `active` | boolean | Whether user is active |
|   ↳ `admin` | boolean | Whether user is admin |
|   ↳ `avatarUrl` | string | Avatar URL |

### `linear_list_teams`

List all teams in the Linear workspace

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `first` | number | No | Number of teams to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `teams` | array | Array of teams |
|   ↳ `id` | string | Team ID |
|   ↳ `name` | string | Team name |
|   ↳ `key` | string | Team key \(used in issue identifiers\) |
|   ↳ `description` | string | Team description |

### `linear_get_viewer`

Get the currently authenticated user (viewer) information

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `user` | object | The currently authenticated user |
|   ↳ `id` | string | User ID |
|   ↳ `name` | string | User name |
|   ↳ `email` | string | User email |
|   ↳ `displayName` | string | Display name |
|   ↳ `active` | boolean | Whether user is active |
|   ↳ `admin` | boolean | Whether user is admin |
|   ↳ `avatarUrl` | string | Avatar URL |

### `linear_list_labels`

List all labels in Linear workspace or team

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | No | Filter by team ID |
| `first` | number | No | Number of labels to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `labels` | array | Array of labels |
|   ↳ `id` | string | Label ID |
|   ↳ `name` | string | Label name |
|   ↳ `color` | string | Label color \(hex\) |
|   ↳ `description` | string | Label description |
|   ↳ `isGroup` | boolean | Whether this label is a group |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |
|   ↳ `team` | object | Team object |
|     ↳ `id` | string | Team ID |
|     ↳ `name` | string | Team name |

### `linear_create_label`

Create a new label in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `name` | string | Yes | Label name |
| `color` | string | No | Label color \(hex format, e.g., "#ff0000"\) |
| `description` | string | No | Label description |
| `teamId` | string | No | Team ID \(if omitted, creates workspace label\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `label` | object | The created label |
|   ↳ `id` | string | Label ID |
|   ↳ `name` | string | Label name |
|   ↳ `color` | string | Label color \(hex\) |
|   ↳ `description` | string | Label description |
|   ↳ `isGroup` | boolean | Whether this label is a group |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |
|   ↳ `team` | object | Team object |
|     ↳ `id` | string | Team ID |
|     ↳ `name` | string | Team name |

### `linear_update_label`

Update an existing label in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `labelId` | string | Yes | Label ID to update |
| `name` | string | No | New label name |
| `color` | string | No | New label color \(hex format\) |
| `description` | string | No | New label description |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `label` | object | The updated label |
|   ↳ `id` | string | Label ID |
|   ↳ `name` | string | Label name |
|   ↳ `color` | string | Label color \(hex\) |
|   ↳ `description` | string | Label description |
|   ↳ `isGroup` | boolean | Whether this label is a group |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |
|   ↳ `team` | object | Team object |
|     ↳ `id` | string | Team ID |
|     ↳ `name` | string | Team name |

### `linear_archive_label`

Archive a label in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `labelId` | string | Yes | Label ID to archive |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the archive operation was successful |
| `labelId` | string | The ID of the archived label |

### `linear_list_workflow_states`

List all workflow states (statuses) in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | No | Filter by team ID |
| `first` | number | No | Number of states to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `states` | array | Array of workflow states |
|   ↳ `id` | string | State ID |
|   ↳ `name` | string | State name \(e.g., "Todo", "In Progress"\) |
|   ↳ `description` | string | State description |
|   ↳ `type` | string | State type \(triage, backlog, unstarted, started, completed, canceled\) |
|   ↳ `color` | string | State color \(hex\) |
|   ↳ `position` | number | State position in workflow |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |
|   ↳ `team` | object | Team object |
|     ↳ `id` | string | Team ID |
|     ↳ `name` | string | Team name |

### `linear_create_workflow_state`

Create a new workflow state (status) in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Yes | Team ID to create the state in |
| `name` | string | Yes | State name \(e.g., "In Review"\) |
| `color` | string | No | State color \(hex format\) |
| `type` | string | Yes | State type: "backlog", "unstarted", "started", "completed", or "canceled" |
| `description` | string | No | State description |
| `position` | number | No | Position in the workflow |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `state` | object | The created workflow state |
|   ↳ `id` | string | State ID |
|   ↳ `name` | string | State name \(e.g., "Todo", "In Progress"\) |
|   ↳ `description` | string | State description |
|   ↳ `type` | string | State type \(triage, backlog, unstarted, started, completed, canceled\) |
|   ↳ `color` | string | State color \(hex\) |
|   ↳ `position` | number | State position in workflow |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |
|   ↳ `team` | object | Team object |
|     ↳ `id` | string | Team ID |
|     ↳ `name` | string | Team name |

### `linear_update_workflow_state`

Update an existing workflow state in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `stateId` | string | Yes | Workflow state ID to update |
| `name` | string | No | New state name |
| `color` | string | No | New state color \(hex format\) |
| `description` | string | No | New state description |
| `position` | number | No | New position in workflow |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `state` | object | The updated workflow state |
|   ↳ `id` | string | State ID |
|   ↳ `name` | string | State name \(e.g., "Todo", "In Progress"\) |
|   ↳ `description` | string | State description |
|   ↳ `type` | string | State type \(triage, backlog, unstarted, started, completed, canceled\) |
|   ↳ `color` | string | State color \(hex\) |
|   ↳ `position` | number | State position in workflow |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |
|   ↳ `team` | object | Team object |
|     ↳ `id` | string | Team ID |
|     ↳ `name` | string | Team name |

### `linear_list_cycles`

List cycles (sprints/iterations) in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | No | Filter by team ID |
| `first` | number | No | Number of cycles to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `cycles` | array | Array of cycles |
|   ↳ `id` | string | Cycle ID |
|   ↳ `number` | number | Cycle number |
|   ↳ `name` | string | Cycle name |
|   ↳ `startsAt` | string | Start date \(ISO 8601\) |
|   ↳ `endsAt` | string | End date \(ISO 8601\) |
|   ↳ `completedAt` | string | Completion date \(ISO 8601\) |
|   ↳ `progress` | number | Progress percentage \(0-1\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `team` | object | Team object |
|     ↳ `id` | string | Team ID |
|     ↳ `name` | string | Team name |

### `linear_get_cycle`

Get a single cycle by ID from Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `cycleId` | string | Yes | Cycle ID |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `cycle` | object | The cycle with full details |
|   ↳ `id` | string | Cycle ID |
|   ↳ `number` | number | Cycle number |
|   ↳ `name` | string | Cycle name |
|   ↳ `startsAt` | string | Start date \(ISO 8601\) |
|   ↳ `endsAt` | string | End date \(ISO 8601\) |
|   ↳ `completedAt` | string | Completion date \(ISO 8601\) |
|   ↳ `progress` | number | Progress percentage \(0-1\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `team` | object | Team object |
|     ↳ `id` | string | Team ID |
|     ↳ `name` | string | Team name |

### `linear_create_cycle`

Create a new cycle (sprint/iteration) in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Yes | Team ID to create the cycle in |
| `startsAt` | string | Yes | Cycle start date \(ISO format\) |
| `endsAt` | string | Yes | Cycle end date \(ISO format\) |
| `name` | string | No | Cycle name \(optional, will be auto-generated if not provided\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `cycle` | object | The created cycle |
|   ↳ `id` | string | Cycle ID |
|   ↳ `number` | number | Cycle number |
|   ↳ `name` | string | Cycle name |
|   ↳ `startsAt` | string | Start date \(ISO 8601\) |
|   ↳ `endsAt` | string | End date \(ISO 8601\) |
|   ↳ `completedAt` | string | Completion date \(ISO 8601\) |
|   ↳ `progress` | number | Progress percentage \(0-1\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `team` | object | Team object |
|     ↳ `id` | string | Team ID |
|     ↳ `name` | string | Team name |

### `linear_get_active_cycle`

Get the currently active cycle for a team

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Yes | Team ID |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `cycle` | object | The active cycle \(null if no active cycle\) |
|   ↳ `id` | string | Cycle ID |
|   ↳ `number` | number | Cycle number |
|   ↳ `name` | string | Cycle name |
|   ↳ `startsAt` | string | Start date \(ISO 8601\) |
|   ↳ `endsAt` | string | End date \(ISO 8601\) |
|   ↳ `completedAt` | string | Completion date \(ISO 8601\) |
|   ↳ `progress` | number | Progress percentage \(0-1\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `team` | object | Team object |
|     ↳ `id` | string | Team ID |
|     ↳ `name` | string | Team name |

### `linear_create_attachment`

Add an attachment to an issue in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `issueId` | string | Yes | Issue ID to attach to |
| `url` | string | No | URL of the attachment |
| `file` | file | No | File to attach |
| `title` | string | Yes | Attachment title |
| `subtitle` | string | No | Attachment subtitle/description |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `attachment` | object | The created attachment |
|   ↳ `id` | string | Attachment ID |
|   ↳ `title` | string | Attachment title |
|   ↳ `subtitle` | string | Attachment subtitle |
|   ↳ `url` | string | Attachment URL |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |

### `linear_list_attachments`

List all attachments on an issue in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `issueId` | string | Yes | Issue ID |
| `first` | number | No | Number of attachments to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `attachments` | array | Array of attachments |
|   ↳ `id` | string | Attachment ID |
|   ↳ `title` | string | Attachment title |
|   ↳ `subtitle` | string | Attachment subtitle |
|   ↳ `url` | string | Attachment URL |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |

### `linear_update_attachment`

Update an attachment metadata in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `attachmentId` | string | Yes | Attachment ID to update |
| `title` | string | Yes | New attachment title |
| `subtitle` | string | No | New attachment subtitle |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `attachment` | object | The updated attachment |
|   ↳ `id` | string | Attachment ID |
|   ↳ `title` | string | Attachment title |
|   ↳ `subtitle` | string | Attachment subtitle |
|   ↳ `url` | string | Attachment URL |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |

### `linear_delete_attachment`

Delete an attachment from Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `attachmentId` | string | Yes | Attachment ID to delete |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the delete operation was successful |

### `linear_create_issue_relation`

Link two issues together in Linear (blocks, relates to, duplicates)

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `issueId` | string | Yes | Source issue ID |
| `relatedIssueId` | string | Yes | Target issue ID to link to |
| `type` | string | Yes | Relation type: "blocks", "duplicate", or "related". Note: When creating "blocks" from A to B, the inverse relation \(B blocked by A\) is automatically created. |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `relation` | object | The created issue relation |
|   ↳ `id` | string | Relation ID |
|   ↳ `type` | string | Relation type |
|   ↳ `issue` | object | Source issue |
|   ↳ `relatedIssue` | object | Target issue |

### `linear_list_issue_relations`

List all relations (dependencies) for an issue in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `issueId` | string | Yes | Issue ID |
| `first` | number | No | Number of relations to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `relations` | array | Array of issue relations |
|   ↳ `id` | string | Relation ID |
|   ↳ `type` | string | Relation type |
|   ↳ `issue` | object | Source issue |
|   ↳ `relatedIssue` | object | Target issue |
| `pageInfo` | object | Pagination information |

### `linear_delete_issue_relation`

Remove a relation between two issues in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `relationId` | string | Yes | Relation ID to delete |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the delete operation was successful |

### `linear_create_favorite`

Bookmark an issue, project, cycle, or label in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `issueId` | string | No | Issue ID to favorite |
| `projectId` | string | No | Project ID to favorite |
| `cycleId` | string | No | Cycle ID to favorite |
| `labelId` | string | No | Label ID to favorite |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `favorite` | object | The created favorite |
|   ↳ `id` | string | Favorite ID |
|   ↳ `type` | string | Favorite type |
|   ↳ `issue` | object | Favorited issue \(if applicable\) |
|   ↳ `project` | object | Favorited project \(if applicable\) |
|   ↳ `cycle` | object | Favorited cycle \(if applicable\) |

### `linear_list_favorites`

List all bookmarked items for the current user in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `first` | number | No | Number of favorites to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `favorites` | array | Array of favorited items |
|   ↳ `id` | string | Favorite ID |
|   ↳ `type` | string | Favorite type |
|   ↳ `issue` | object | Favorited issue |
|   ↳ `project` | object | Favorited project |
|   ↳ `cycle` | object | Favorited cycle |
| `pageInfo` | object | Pagination information |

### `linear_create_project_update`

Post a status update for a project in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Yes | Project ID to post update for |
| `body` | string | Yes | Update message \(supports Markdown\) |
| `health` | string | No | Project health: "onTrack", "atRisk", or "offTrack" |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `update` | object | The created project update |
|   ↳ `id` | string | Update ID |
|   ↳ `body` | string | Update message |
|   ↳ `health` | string | Project health status |
|   ↳ `createdAt` | string | Creation timestamp |
|   ↳ `user` | object | User who created the update |

### `linear_list_project_updates`

List all status updates for a project in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Yes | Project ID |
| `first` | number | No | Number of updates to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `updates` | array | Array of project updates |
|   ↳ `id` | string | Update ID |
|   ↳ `body` | string | Update message |
|   ↳ `health` | string | Project health |
|   ↳ `createdAt` | string | Creation timestamp |
|   ↳ `user` | object | User who created the update |
| `pageInfo` | object | Pagination information |

### `linear_list_notifications`

List notifications for the current user in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `first` | number | No | Number of notifications to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `notifications` | array | Array of notifications |
|   ↳ `id` | string | Notification ID |
|   ↳ `type` | string | Notification type |
|   ↳ `createdAt` | string | Creation timestamp |
|   ↳ `readAt` | string | Read timestamp \(null if unread\) |
|   ↳ `issue` | object | Related issue |
| `pageInfo` | object | Pagination information |

### `linear_update_notification`

Mark a notification as read or unread in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `notificationId` | string | Yes | Notification ID to update |
| `readAt` | string | No | Timestamp to mark as read \(ISO format\). Pass null or omit to mark as unread |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `notification` | object | The updated notification |
|   ↳ `id` | string | Notification ID |
|   ↳ `type` | string | Notification type |
|   ↳ `createdAt` | string | Creation timestamp |
|   ↳ `readAt` | string | Read timestamp |
|   ↳ `issue` | object | Related issue |

### `linear_create_customer`

Create a new customer in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `name` | string | Yes | Customer name |
| `domains` | array | No | Domains associated with this customer |
| `externalIds` | array | No | External IDs from other systems |
| `logoUrl` | string | No | Customer's logo URL |
| `ownerId` | string | No | ID of the user who owns this customer |
| `revenue` | number | No | Annual revenue from this customer |
| `size` | number | No | Size of the customer organization |
| `statusId` | string | No | Customer status ID |
| `tierId` | string | No | Customer tier ID |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customer` | object | The created customer |
|   ↳ `id` | string | Customer ID |
|   ↳ `name` | string | Customer name |
|   ↳ `domains` | array | Associated domains |
|   ↳ `externalIds` | array | External IDs from other systems |
|   ↳ `logoUrl` | string | Logo URL |
|   ↳ `slugId` | string | Unique URL slug |
|   ↳ `approximateNeedCount` | number | Number of customer needs |
|   ↳ `revenue` | number | Annual revenue |
|   ↳ `size` | number | Organization size |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_list_customers`

List all customers in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `first` | number | No | Number of customers to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |
| `includeArchived` | boolean | No | Include archived customers \(default: false\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `customers` | array | Array of customers |
|   ↳ `id` | string | Customer ID |
|   ↳ `name` | string | Customer name |
|   ↳ `domains` | array | Associated domains |
|   ↳ `externalIds` | array | External IDs from other systems |
|   ↳ `logoUrl` | string | Logo URL |
|   ↳ `slugId` | string | Unique URL slug |
|   ↳ `approximateNeedCount` | number | Number of customer needs |
|   ↳ `revenue` | number | Annual revenue |
|   ↳ `size` | number | Organization size |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_create_customer_request`

Create a customer request (need) in Linear. Assign to customer, set urgency (priority: 0 = Not important, 1 = Important), and optionally link to an issue.

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `customerId` | string | Yes | Customer ID to assign this request to |
| `body` | string | No | Description of the customer request |
| `priority` | number | No | Urgency level: 0 = Not important, 1 = Important \(default: 0\) |
| `issueId` | string | No | Issue ID to link this request to |
| `projectId` | string | No | Project ID to link this request to |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customerNeed` | object | The created customer request |
|   ↳ `id` | string | Customer request ID |
|   ↳ `body` | string | Request description |
|   ↳ `priority` | number | Urgency level \(0 = Not important, 1 = Important\) |
|   ↳ `createdAt` | string | Creation timestamp |
|   ↳ `updatedAt` | string | Last update timestamp |
|   ↳ `archivedAt` | string | Archive timestamp \(null if not archived\) |
|   ↳ `customer` | object | Assigned customer |
|   ↳ `issue` | object | Linked issue \(null if not linked\) |
|   ↳ `project` | object | Linked project \(null if not linked\) |
|   ↳ `creator` | object | User who created the request |
|   ↳ `url` | string | URL to the customer request |

### `linear_update_customer_request`

Update a customer request (need) in Linear. Can change urgency, description, customer assignment, and linked issue.

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `customerNeedId` | string | Yes | Customer request ID to update |
| `body` | string | No | Updated description of the customer request |
| `priority` | number | No | Updated urgency level: 0 = Not important, 1 = Important |
| `customerId` | string | No | New customer ID to assign this request to |
| `issueId` | string | No | New issue ID to link this request to |
| `projectId` | string | No | New project ID to link this request to |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customerNeed` | object | The updated customer request |
|   ↳ `id` | string | Customer request ID |
|   ↳ `body` | string | Request description |
|   ↳ `priority` | number | Urgency level \(0 = Not important, 1 = Important\) |
|   ↳ `createdAt` | string | Creation timestamp |
|   ↳ `updatedAt` | string | Last update timestamp |
|   ↳ `archivedAt` | string | Archive timestamp \(null if not archived\) |
|   ↳ `customer` | object | Assigned customer |
|   ↳ `issue` | object | Linked issue \(null if not linked\) |
|   ↳ `project` | object | Linked project \(null if not linked\) |
|   ↳ `creator` | object | User who created the request |
|   ↳ `url` | string | URL to the customer request |

### `linear_list_customer_requests`

List all customer requests (needs) in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `first` | number | No | Number of customer requests to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |
| `includeArchived` | boolean | No | Include archived customer requests \(default: false\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customerNeeds` | array | Array of customer requests |
|   ↳ `id` | string | Customer request ID |
|   ↳ `body` | string | Request description |
|   ↳ `priority` | number | Urgency level \(0 = Not important, 1 = Important\) |
|   ↳ `createdAt` | string | Creation timestamp |
|   ↳ `updatedAt` | string | Last update timestamp |
|   ↳ `archivedAt` | string | Archive timestamp \(null if not archived\) |
|   ↳ `customer` | object | Assigned customer |
|   ↳ `issue` | object | Linked issue \(null if not linked\) |
|   ↳ `project` | object | Linked project \(null if not linked\) |
|   ↳ `creator` | object | User who created the request |
|   ↳ `url` | string | URL to the customer request |
| `pageInfo` | object | Pagination information |

### `linear_get_customer`

Get a single customer by ID in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `customerId` | string | Yes | Customer ID to retrieve |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customer` | object | The customer data |
|   ↳ `id` | string | Customer ID |
|   ↳ `name` | string | Customer name |
|   ↳ `domains` | array | Associated domains |
|   ↳ `externalIds` | array | External IDs from other systems |
|   ↳ `logoUrl` | string | Logo URL |
|   ↳ `slugId` | string | Unique URL slug |
|   ↳ `approximateNeedCount` | number | Number of customer needs |
|   ↳ `revenue` | number | Annual revenue |
|   ↳ `size` | number | Organization size |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_update_customer`

Update a customer in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `customerId` | string | Yes | Customer ID to update |
| `name` | string | No | Updated customer name |
| `domains` | array | No | Updated domains |
| `externalIds` | array | No | Updated external IDs |
| `logoUrl` | string | No | Updated logo URL |
| `ownerId` | string | No | Updated owner user ID |
| `revenue` | number | No | Updated annual revenue |
| `size` | number | No | Updated organization size |
| `statusId` | string | No | Updated customer status ID |
| `tierId` | string | No | Updated customer tier ID |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customer` | object | The updated customer |
|   ↳ `id` | string | Customer ID |
|   ↳ `name` | string | Customer name |
|   ↳ `domains` | array | Associated domains |
|   ↳ `externalIds` | array | External IDs from other systems |
|   ↳ `logoUrl` | string | Logo URL |
|   ↳ `slugId` | string | Unique URL slug |
|   ↳ `approximateNeedCount` | number | Number of customer needs |
|   ↳ `revenue` | number | Annual revenue |
|   ↳ `size` | number | Organization size |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_delete_customer`

Delete a customer in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `customerId` | string | Yes | Customer ID to delete |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the deletion was successful |

### `linear_merge_customers`

Merge two customers in Linear by moving all data from source to target

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `sourceCustomerId` | string | Yes | Source customer ID \(will be deleted after merge\) |
| `targetCustomerId` | string | Yes | Target customer ID \(will receive all data\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customer` | object | The merged target customer |

### `linear_create_customer_status`

Create a new customer status in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `name` | string | Yes | Customer status name |
| `color` | string | Yes | Status color \(hex code\) |
| `description` | string | No | Status description |
| `displayName` | string | No | Display name for the status |
| `position` | number | No | Position in status list |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customerStatus` | object | The created customer status |
|   ↳ `id` | string | Customer status ID |
|   ↳ `name` | string | Status name |
|   ↳ `description` | string | Status description |
|   ↳ `color` | string | Status color \(hex\) |
|   ↳ `position` | number | Position in list |
|   ↳ `type` | string | Status type \(active, inactive\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last updated timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_update_customer_status`

Update a customer status in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `statusId` | string | Yes | Customer status ID to update |
| `name` | string | No | Updated status name |
| `color` | string | No | Updated status color |
| `description` | string | No | Updated description |
| `displayName` | string | No | Updated display name |
| `position` | number | No | Updated position |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customerStatus` | object | The updated customer status |
|   ↳ `id` | string | Customer status ID |
|   ↳ `name` | string | Status name |
|   ↳ `description` | string | Status description |
|   ↳ `color` | string | Status color \(hex\) |
|   ↳ `position` | number | Position in list |
|   ↳ `type` | string | Status type \(active, inactive\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last updated timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_delete_customer_status`

Delete a customer status in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `statusId` | string | Yes | Customer status ID to delete |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the deletion was successful |

### `linear_list_customer_statuses`

List all customer statuses in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `first` | number | No | Number of statuses to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `customerStatuses` | array | List of customer statuses |
|   ↳ `id` | string | Customer status ID |
|   ↳ `name` | string | Status name |
|   ↳ `description` | string | Status description |
|   ↳ `color` | string | Status color \(hex\) |
|   ↳ `position` | number | Position in list |
|   ↳ `type` | string | Status type \(active, inactive\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last updated timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_create_customer_tier`

Create a new customer tier in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `name` | string | Yes | Customer tier name |
| `color` | string | Yes | Tier color \(hex code\) |
| `displayName` | string | No | Display name for the tier |
| `description` | string | No | Tier description |
| `position` | number | No | Position in tier list |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customerTier` | object | The created customer tier |
|   ↳ `id` | string | Customer tier ID |
|   ↳ `name` | string | Tier name |
|   ↳ `displayName` | string | Display name |
|   ↳ `description` | string | Tier description |
|   ↳ `color` | string | Tier color \(hex\) |
|   ↳ `position` | number | Position in list |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_update_customer_tier`

Update a customer tier in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `tierId` | string | Yes | Customer tier ID to update |
| `name` | string | No | Updated tier name |
| `color` | string | No | Updated tier color |
| `displayName` | string | No | Updated display name |
| `description` | string | No | Updated description |
| `position` | number | No | Updated position |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customerTier` | object | The updated customer tier |

### `linear_delete_customer_tier`

Delete a customer tier in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `tierId` | string | Yes | Customer tier ID to delete |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the deletion was successful |

### `linear_list_customer_tiers`

List all customer tiers in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `first` | number | No | Number of tiers to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `customerTiers` | array | List of customer tiers |
|   ↳ `id` | string | Customer tier ID |
|   ↳ `name` | string | Tier name |
|   ↳ `displayName` | string | Display name |
|   ↳ `description` | string | Tier description |
|   ↳ `color` | string | Tier color \(hex\) |
|   ↳ `position` | number | Position in list |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_delete_project`

Delete a project in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Yes | Project ID to delete |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the deletion was successful |

### `linear_create_project_label`

Create a new project label in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `name` | string | Yes | Project label name |
| `color` | string | No | Label color \(hex code\) |
| `description` | string | No | Label description |
| `isGroup` | boolean | No | Whether this is a label group |
| `parentId` | string | No | Parent label group ID |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `projectLabel` | object | The created project label |
|   ↳ `id` | string | Project label ID |
|   ↳ `name` | string | Label name |
|   ↳ `description` | string | Label description |
|   ↳ `color` | string | Label color \(hex\) |
|   ↳ `isGroup` | boolean | Whether this label is a group |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_update_project_label`

Update a project label in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `labelId` | string | Yes | Project label ID to update |
| `name` | string | No | Updated label name |
| `color` | string | No | Updated label color |
| `description` | string | No | Updated description |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `projectLabel` | object | The updated project label |
|   ↳ `id` | string | Project label ID |
|   ↳ `name` | string | Label name |
|   ↳ `description` | string | Label description |
|   ↳ `color` | string | Label color \(hex\) |
|   ↳ `isGroup` | boolean | Whether this label is a group |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_delete_project_label`

Delete a project label in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `labelId` | string | Yes | Project label ID to delete |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the deletion was successful |

### `linear_list_project_labels`

List all project labels in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | No | Optional project ID to filter labels for a specific project |
| `first` | number | No | Number of labels to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `projectLabels` | array | List of project labels |
|   ↳ `id` | string | Project label ID |
|   ↳ `name` | string | Label name |
|   ↳ `description` | string | Label description |
|   ↳ `color` | string | Label color \(hex\) |
|   ↳ `isGroup` | boolean | Whether this label is a group |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last update timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_add_label_to_project`

Add a label to a project in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Yes | Project ID |
| `labelId` | string | Yes | Label ID to add |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the label was added successfully |
| `projectId` | string | The project ID |

### `linear_remove_label_from_project`

Remove a label from a project in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Yes | Project ID |
| `labelId` | string | Yes | Label ID to remove |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the label was removed successfully |
| `projectId` | string | The project ID |

### `linear_create_project_milestone`

Create a new project milestone in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Yes | Project ID |
| `name` | string | Yes | Milestone name |
| `description` | string | No | Milestone description |
| `targetDate` | string | No | Target date \(ISO 8601\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `projectMilestone` | object | The created project milestone |
|   ↳ `id` | string | Project milestone ID |
|   ↳ `name` | string | Milestone name |
|   ↳ `description` | string | Milestone description |
|   ↳ `projectId` | string | Project ID |
|   ↳ `targetDate` | string | Target date \(YYYY-MM-DD\) |
|   ↳ `progress` | number | Progress percentage \(0-1\) |
|   ↳ `sortOrder` | number | Sort order within the project |
|   ↳ `status` | string | Milestone status \(done, next, overdue, unstarted\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_update_project_milestone`

Update a project milestone in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `milestoneId` | string | Yes | Project milestone ID to update |
| `name` | string | No | Updated milestone name |
| `description` | string | No | Updated description |
| `targetDate` | string | No | Updated target date \(ISO 8601\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `projectMilestone` | object | The updated project milestone |
|   ↳ `id` | string | Project milestone ID |
|   ↳ `name` | string | Milestone name |
|   ↳ `description` | string | Milestone description |
|   ↳ `projectId` | string | Project ID |
|   ↳ `targetDate` | string | Target date \(YYYY-MM-DD\) |
|   ↳ `progress` | number | Progress percentage \(0-1\) |
|   ↳ `sortOrder` | number | Sort order within the project |
|   ↳ `status` | string | Milestone status \(done, next, overdue, unstarted\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_delete_project_milestone`

Delete a project milestone in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `milestoneId` | string | Yes | Project milestone ID to delete |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the deletion was successful |

### `linear_list_project_milestones`

List all milestones for a project in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Yes | Project ID to list milestones for |
| `first` | number | No | Number of milestones to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `projectMilestones` | array | List of project milestones |
|   ↳ `id` | string | Project milestone ID |
|   ↳ `name` | string | Milestone name |
|   ↳ `description` | string | Milestone description |
|   ↳ `projectId` | string | Project ID |
|   ↳ `targetDate` | string | Target date \(YYYY-MM-DD\) |
|   ↳ `progress` | number | Progress percentage \(0-1\) |
|   ↳ `sortOrder` | number | Sort order within the project |
|   ↳ `status` | string | Milestone status \(done, next, overdue, unstarted\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_create_project_status`

Create a new project status in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `name` | string | Yes | Project status name |
| `type` | string | Yes | Status type: "backlog", "planned", "started", "paused", "completed", or "canceled" |
| `color` | string | Yes | Status color \(hex code\) |
| `position` | number | Yes | Position in status list \(e.g. 0, 1, 2...\) |
| `description` | string | No | Status description |
| `indefinite` | boolean | No | Whether the status is indefinite |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `projectStatus` | object | The created project status |
|   ↳ `id` | string | Project status ID |
|   ↳ `name` | string | Status name |
|   ↳ `description` | string | Status description |
|   ↳ `color` | string | Status color \(hex\) |
|   ↳ `indefinite` | boolean | Whether this status is indefinite |
|   ↳ `position` | number | Position in list |
|   ↳ `type` | string | Status type \(backlog, planned, started, paused, completed, canceled\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last updated timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_update_project_status`

Update a project status in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `statusId` | string | Yes | Project status ID to update |
| `name` | string | No | Updated status name |
| `color` | string | No | Updated status color |
| `description` | string | No | Updated description |
| `indefinite` | boolean | No | Updated indefinite flag |
| `position` | number | No | Updated position |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `projectStatus` | object | The updated project status |
|   ↳ `id` | string | Project status ID |
|   ↳ `name` | string | Status name |
|   ↳ `description` | string | Status description |
|   ↳ `color` | string | Status color \(hex\) |
|   ↳ `indefinite` | boolean | Whether this status is indefinite |
|   ↳ `position` | number | Position in list |
|   ↳ `type` | string | Status type \(backlog, planned, started, paused, completed, canceled\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last updated timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |

### `linear_delete_project_status`

Delete a project status in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `statusId` | string | Yes | Project status ID to delete |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Whether the deletion was successful |

### `linear_list_project_statuses`

List all project statuses in Linear

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `first` | number | No | Number of statuses to return \(default: 50\) |
| `after` | string | No | Cursor for pagination |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pageInfo` | object | Pagination information |
|   ↳ `hasNextPage` | boolean | Whether there are more results |
|   ↳ `endCursor` | string | Cursor for the next page |
| `projectStatuses` | array | List of project statuses |
|   ↳ `id` | string | Project status ID |
|   ↳ `name` | string | Status name |
|   ↳ `description` | string | Status description |
|   ↳ `color` | string | Status color \(hex\) |
|   ↳ `indefinite` | boolean | Whether this status is indefinite |
|   ↳ `position` | number | Position in list |
|   ↳ `type` | string | Status type \(backlog, planned, started, paused, completed, canceled\) |
|   ↳ `createdAt` | string | Creation timestamp \(ISO 8601\) |
|   ↳ `updatedAt` | string | Last updated timestamp \(ISO 8601\) |
|   ↳ `archivedAt` | string | Archive timestamp \(ISO 8601\) |


