Files
sim/apps/docs/content/docs/en/tools/linear.mdx
Waleed f99518b837 feat(calcom): added calcom (#3070)
* feat(tools): added calcom

* added more triggers, tested

* updated regex in script for release to be more lenient

* fix(tag-dropdown): performance improvements and scroll bug fixes

- Add flatTagIndexMap for O(1) tag lookups (replaces O(n²) findIndex calls)
- Memoize caret position calculation to avoid DOM manipulation on every render
- Use refs for inputValue/cursorPosition to keep handleTagSelect callback stable
- Change itemRefs from index-based to tag-based keys to prevent stale refs
- Fix scroll jump in nested folders by removing scroll reset from registerFolder
- Add onFolderEnter callback for scroll reset when entering folder via keyboard
- Disable keyboard navigation wrap-around at boundaries
- Simplify selection reset to single effect on flatTagList.length change

Also:
- Add safeCompare utility for timing-safe string comparison
- Refactor webhook signature validation to use safeCompare

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* updated types

* fix(calcom): simplify required field constraints for booking attendee

The condition field already restricts these to calcom_create_booking,
so simplified to required: true. Per Cal.com API docs, email is optional
while name and timeZone are required.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* added tests

* updated folder multi select, updated calcom and github tools and docs generator script

* updated drag, updated outputs for tools, regen docs with nested docs script

* updated setup instructions links, destructure trigger outputs, fix text subblock styling

* updated docs gen script

* updated docs script

* updated docs script

* updated script

* remove destructuring of stripe webhook

* expanded wand textarea, updated calcom tools

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 20:37:30 -08:00

1995 lines
68 KiB
Plaintext

---
title: Linear
description: Interact with Linear issues, projects, and more
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="linear"
color="#5E6AD2"
/>
{/* MANUAL-CONTENT-START:intro */}
[Linear](https://linear.app) is a leading project management and issue tracking platform that helps teams plan, track, and manage their work effectively. As a modern project management tool, Linear has become increasingly popular among software development teams and project management professionals for its streamlined interface and powerful features.
Linear provides a comprehensive set of tools for managing complex projects through its flexible and customizable workflow system. With its robust API and integration capabilities, Linear enables teams to streamline their development processes and maintain clear visibility of project progress.
Key features of Linear include:
- Agile Project Management: Support for Scrum and Kanban methodologies with customizable boards and workflows
- Issue Tracking: Sophisticated tracking system for bugs, stories, epics, and tasks with detailed reporting
- Workflow Automation: Powerful automation rules to streamline repetitive tasks and processes
- Advanced Search: Complex filtering and reporting capabilities for efficient issue management
In Sim, the Linear integration allows your agents to seamlessly interact with your project management workflow. This creates opportunities for automated issue creation, updates, and tracking as part of your AI workflows. The integration enables agents to read existing issues and create new ones programmatically, facilitating automated project management tasks and ensuring that important information is properly tracked and documented. By connecting Sim with Linear, you can build intelligent agents that maintain project visibility while automating routine project management tasks, enhancing team productivity and ensuring consistent project tracking.
{/* 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 to filter by |
| `projectId` | string | No | Linear project ID to filter by |
| `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 |
| `projectId` | string | No | Linear project ID |
| `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\) |
#### 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 |
| ↳ `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 |
| ↳ `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 |
| ↳ `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"\) |
| ↳ `type` | string | State type \(unstarted, started, completed, canceled\) |
| ↳ `color` | string | State color \(hex\) |
| ↳ `position` | number | State position in workflow |
| ↳ `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 |
| ↳ `type` | string | State type |
| ↳ `color` | string | State color |
| ↳ `position` | number | State position |
| ↳ `team` | object | Team this state belongs to |
### `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 |
| ↳ `type` | string | State type |
| ↳ `color` | string | State color |
| ↳ `position` | number | State position |
### `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\) |
| ↳ `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\) |
| ↳ `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 |
| ↳ `endsAt` | string | End date |
| ↳ `team` | object | Team this cycle belongs to |
### `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 |
| ↳ `endsAt` | string | End date |
| ↳ `progress` | number | Progress percentage |
| ↳ `team` | object | Team this cycle belongs to |
### `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 | Yes | URL of the attachment |
| `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 |
| ↳ `approximateNeedCount` | number | Number of customer needs |
| ↳ `createdAt` | string | Creation 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 |
| ↳ `approximateNeedCount` | number | Number of customer needs |
| ↳ `createdAt` | string | Creation 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 |
| ↳ `approximateNeedCount` | number | Number of customer needs |
| ↳ `createdAt` | string | Creation 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 |
| ↳ `approximateNeedCount` | number | Number of customer needs |
| ↳ `createdAt` | string | Creation 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\) |
| `displayName` | string | No | Display name for the status |
| `description` | string | No | Status description |
| `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 |
| ↳ `displayName` | string | Display name |
| ↳ `description` | string | Status description |
| ↳ `color` | string | Status color \(hex\) |
| ↳ `position` | number | Position in list |
| ↳ `createdAt` | string | Creation 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 |
| `displayName` | string | No | Updated display name |
| `description` | string | No | Updated description |
| `position` | number | No | Updated position |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customerStatus` | object | The updated customer status |
### `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 |
| --------- | ---- | -------- | ----------- |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customerStatuses` | array | List of customer statuses |
| ↳ `id` | string | Customer status ID |
| ↳ `name` | string | Status name |
| ↳ `displayName` | string | Display name |
| ↳ `description` | string | Status description |
| ↳ `color` | string | Status color \(hex\) |
| ↳ `position` | number | Position in list |
| ↳ `createdAt` | string | Creation 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 |
| --------- | ---- | -------- | ----------- |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `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 |
### `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 |
### `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 |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `projectLabels` | array | List of project labels |
### `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 |
### `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 |
### `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 |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `projectMilestones` | array | List of project milestones |
### `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 |
### `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 |
### `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 |
| --------- | ---- | -------- | ----------- |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `projectStatuses` | array | List of project statuses |