Linear
You have Linear tools for managing issues and responding to notifications. These tools call the Linear GraphQL API directly — they handle auth, formatting, and error handling for you.
Tools
linear_queue — notification inbox
Manages the queue of Linear notifications routed to you by webhooks.
| Action |
Effect |
peek |
View all pending items sorted by priority. Non-destructive. |
pop |
Claim the highest-priority pending item (marks it in_progress). |
drain |
Claim all pending items (marks them in_progress). |
complete |
Finish work on a claimed item (requires issueId). Removes it from the queue. |
Queue items have this shape:
{
"id": "TEAM-123",
"issueId": "TEAM-123",
"event": "ticket",
"summary": "Issue title or comment text",
"priority": 1,
"status": "pending",
"addedAt": "ISO timestamp"
}
Event types:
| Event |
Meaning |
ticket |
You have a ticket to work on. |
mention |
You were mentioned in a comment. |
For ticket events, id and issueId are the same (the issue identifier). For mention events, id is the comment ID and issueId is the parent issue identifier. Always use issueId when calling linear_issue, linear_comment, or linear_queue complete.
Priority maps from the Linear issue (1=Urgent, 2=High, 3=Medium, 4=Low, 5=None). Mentions always get priority 0, so they are processed before any ticket. Higher-priority items are popped first.
linear_issue — manage issues
Manage Linear issues: view details, search/filter, create, update, and delete.
| Action |
Required Params |
Optional Params |
view |
issueId |
— |
list |
— |
state, assignee, team, project, limit |
create |
title |
description, assignee, state, priority, team, project, parent, labels, dueDate |
update |
issueId |
title, description, appendDescription, assignee, state, priority, labels, project, dueDate |
delete |
issueId |
— |
issueId accepts human-readable identifiers like ENG-123
assignee accepts display name or email
state accepts workflow state name (e.g. In Progress, Done)
team accepts team key (e.g. ENG)
priority is numeric: 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low
labels is an array of label names
parent accepts a parent issue identifier for creating sub-issues
appendDescription (boolean) — when true, appends description to the existing description instead of replacing it (update only)
dueDate accepts a date string in YYYY-MM-DD format (e.g. 2025-12-31); pass an empty string to clear the due date
description supports markdown. Use actual newlines for line breaks, not \n escape sequences — literal \n will appear as-is in the ticket instead of creating line breaks
linear_comment — manage comments
Read, create, and update comments on Linear issues.
| Action |
Required Params |
Optional Params |
list |
issueId |
— |
add |
issueId, body |
parentCommentId |
update |
commentId, body |
— |
body supports markdown. Use actual newlines for line breaks, not \n escape sequences — literal \n will appear as-is in the comment instead of creating line breaks
parentCommentId threads the comment as a reply
linear_team — teams and members
View teams and their members.
| Action |
Required Params |
Optional Params |
list |
— |
— |
members |
team |
— |
team is the team key (e.g. ENG)
linear_project — manage projects
List, view, and create Linear projects.
| Action |
Required Params |
Optional Params |
list |
— |
team, status |
view |
projectId |
— |
create |
name |
team, description |
linear_relation — issue relations
Manage relations between Linear issues (blocks, blocked-by, related, duplicate).
| Action |
Required Params |
Optional Params |
list |
issueId |
— |
add |
issueId, type, relatedIssueId |
— |
delete |
relationId |
— |
type is one of: blocks, blocked-by, related, duplicate
Processing workflow
When you receive a Linear notification:
- Peek with
linear_queue { action: "peek" } to see all pending items.
- Skip if there are no items.
- Pop the next item with
linear_queue { action: "pop" }. This claims it (status becomes in_progress).
- Read the issue with
linear_issue { action: "view", issueId: "<id>" }.
- Read comments with
linear_comment { action: "list", issueId: "<id>" } if the event is a mention or you need discussion context.
- Act on the item:
ticket — do the work, then update state with linear_issue { action: "update", ... }.
mention — read the thread and reply with linear_comment { action: "add", ... }.
- Complete with
linear_queue { action: "complete", issueId: "<id>" } to remove it from the queue.
- Repeat from step 3 until pop returns null.
1---2name: linear-43description: Linear project management integration. Provides tools for processing a notification queue, managing issues, comments, teams, projects, and issue relations via the Linear GraphQL API.4---5
6# Linear
7
8You have Linear tools for managing issues and responding to notifications. These tools call the Linear GraphQL API directly — they handle auth, formatting, and error handling for you.
9
10## Tools
11
12### `linear_queue` — notification inbox
13
14Manages the queue of Linear notifications routed to you by webhooks.
15
16| Action | Effect |
17|---|---|
18| `peek` | View all pending items sorted by priority. Non-destructive. |
19| `pop` | Claim the highest-priority pending item (marks it `in_progress`). |
20| `drain` | Claim all pending items (marks them `in_progress`). |
21| `complete` | Finish work on a claimed item (requires `issueId`). Removes it from the queue. |
22
23Queue items have this shape:
24
25```json
26{
27 "id": "TEAM-123",
28 "issueId": "TEAM-123",
29 "event": "ticket",
30 "summary": "Issue title or comment text",
31 "priority": 1,
32 "status": "pending",
33 "addedAt": "ISO timestamp"
34}
35```
36
37Event types:
38
39| Event | Meaning |
40|---|---|
41| `ticket` | You have a ticket to work on. |
42| `mention` | You were mentioned in a comment. |
43
44For `ticket` events, `id` and `issueId` are the same (the issue identifier). For `mention` events, `id` is the comment ID and `issueId` is the parent issue identifier. Always use `issueId` when calling `linear_issue`, `linear_comment`, or `linear_queue complete`.
45
46Priority maps from the Linear issue (1=Urgent, 2=High, 3=Medium, 4=Low, 5=None). Mentions always get priority 0, so they are processed before any ticket. Higher-priority items are popped first.
47
48### `linear_issue` — manage issues
49
50Manage Linear issues: view details, search/filter, create, update, and delete.
51
52| Action | Required Params | Optional Params |
53|---|---|---|
54| `view` | `issueId` | — |
55| `list` | — | `state`, `assignee`, `team`, `project`, `limit` |
56| `create` | `title` | `description`, `assignee`, `state`, `priority`, `team`, `project`, `parent`, `labels`, `dueDate` |
57| `update` | `issueId` | `title`, `description`, `appendDescription`, `assignee`, `state`, `priority`, `labels`, `project`, `dueDate` |
58| `delete` | `issueId` | — |
59
60- `issueId` accepts human-readable identifiers like `ENG-123`
61- `assignee` accepts display name or email
62- `state` accepts workflow state name (e.g. `In Progress`, `Done`)
63- `team` accepts team key (e.g. `ENG`)
64- `priority` is numeric: 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low
65- `labels` is an array of label names
66- `parent` accepts a parent issue identifier for creating sub-issues
67- `appendDescription` (boolean) — when true, appends `description` to the existing description instead of replacing it (update only)
68- `dueDate` accepts a date string in `YYYY-MM-DD` format (e.g. `2025-12-31`); pass an empty string to clear the due date
69- `description` supports markdown. **Use actual newlines for line breaks, not `\n` escape sequences** — literal `\n` will appear as-is in the ticket instead of creating line breaks
70
71### `linear_comment` — manage comments
72
73Read, create, and update comments on Linear issues.
74
75| Action | Required Params | Optional Params |
76|---|---|---|
77| `list` | `issueId` | — |
78| `add` | `issueId`, `body` | `parentCommentId` |
79| `update` | `commentId`, `body` | — |
80
81- `body` supports markdown. **Use actual newlines for line breaks, not `\n` escape sequences** — literal `\n` will appear as-is in the comment instead of creating line breaks
82- `parentCommentId` threads the comment as a reply
83
84### `linear_team` — teams and members
85
86View teams and their members.
87
88| Action | Required Params | Optional Params |
89|---|---|---|
90| `list` | — | — |
91| `members` | `team` | — |
92
93- `team` is the team key (e.g. `ENG`)
94
95### `linear_project` — manage projects
96
97List, view, and create Linear projects.
98
99| Action | Required Params | Optional Params |
100|---|---|---|
101| `list` | — | `team`, `status` |
102| `view` | `projectId` | — |
103| `create` | `name` | `team`, `description` |
104
105### `linear_relation` — issue relations
106
107Manage relations between Linear issues (blocks, blocked-by, related, duplicate).
108
109| Action | Required Params | Optional Params |
110|---|---|---|
111| `list` | `issueId` | — |
112| `add` | `issueId`, `type`, `relatedIssueId` | — |
113| `delete` | `relationId` | — |
114
115- `type` is one of: `blocks`, `blocked-by`, `related`, `duplicate`
116
117## Processing workflow
118
119When you receive a Linear notification:
120
1211. **Peek** with `linear_queue { action: "peek" }` to see all pending items.
1222. **Skip** if there are no items.
1233. **Pop** the next item with `linear_queue { action: "pop" }`. This claims it (status becomes `in_progress`).
1244. **Read** the issue with `linear_issue { action: "view", issueId: "<id>" }`.
1255. **Read comments** with `linear_comment { action: "list", issueId: "<id>" }` if the event is a mention or you need discussion context.
1266. **Act** on the item:
127 - `ticket` — do the work, then update state with `linear_issue { action: "update", ... }`.
128 - `mention` — read the thread and reply with `linear_comment { action: "add", ... }`.
1297. **Complete** with `linear_queue { action: "complete", issueId: "<id>" }` to remove it from the queue.
1308. **Repeat** from step 3 until pop returns null.