Integrate Linear (API key) MCP server into your Slack workspace for instant access to your AI agent.
Tools that your AI agent can use through this MCP server to interact with Linear (API key)
Updates an existing Linear issue. All fields are optional; only provided fields are changed — prior values are preserved for any omitted field. Use Get Teams for team IDs, List Workflow States for state IDs, List Users for assignee IDs, List Labels for label IDs, and Search Issues for the issue ID. Example: issueId: "iss_01abc", stateId: "state_done_xyz" → returns {success: true, issue: {id: "iss_01abc", identifier: "ENG-42", state: {name: "Done"}}}. See the documentation.
Update an existing initiative in Linear. All fields are optional; only provided fields are updated. Use List Initiatives to find the initiative ID. Example: initiativeId: "b2c3d4e5-0000-0000-0000-000000000002", status: "Completed" → returns {success: true, initiative: {id: "b2c3d4e5-...", name: "Q4 Platform Upgrade", status: "Completed"}}. See the documentation
Search Linear issues by team, project, assignee, labels, state, or text query. Returns up to 200 matching issues (paginated internally). Use Get Teams for team IDs, List Projects for project IDs, List Workflow States for state IDs, List Users for assignee IDs, and List Labels for label names. Use the optional fields prop to narrow the response to only the keys you need (reduces context size for large result sets). Example: teamId: "9d1c3f7e-...", query: "login redirect" → returns [{id: "iss_01", identifier: "ENG-42", title: "Fix login redirect on mobile", state: {name: "In Progress"}}]. See the documentation.
Remove a label from an issue in Linear. The label can be re-added at any time, so this operation is reversible. Use Search Issues to find the issue ID, and List Labels to find the label ID. Example: issueId: "iss_01abc", labelId: "lbl_bug123" → removes the label and returns {success: true}. See the documentation
List workflow states (statuses) in Linear. Returns state IDs, names, types (e.g. backlog, started, completed, cancelled), and team info. Optionally filter by team (use the Get Teams action to discover valid team IDs, e.g. 4e80f53c-da9e-4dee-b14e-2cab3e2e8716). Example: teamId: "9d1c3f7e-..." → returns {nodes: [{id: "state_done_xyz", name: "Done", type: "completed"}, {id: "state_prog_abc", name: "In Progress", type: "started"}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentation.
List saved custom views in Linear. Use this to discover valid view IDs for the Get View Issues action. Custom views combine filters (team, assignee, state, labels, etc.) into a reusable saved search. Optionally filter by team. Example: teamId: "9d1c3f7e-..." → returns {nodes: [{id: "cv1abc", name: "My Open Issues", teamId: "9d1c3f7e-..."}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentation
List members of the Linear workspace. Use this to discover valid user IDs for assigning issues or initiatives. Returns {nodes, pageInfo}, where each node includes id, name, and email. If pageInfo.hasNextPage is true, call again with after set to pageInfo.endCursor to fetch more. Example: call with no filters to list all members → returns {nodes: [{id: "abc123", name: "Alice", email: "[email protected]"}], pageInfo: {endCursor: "abc123", hasNextPage: false}}. See the documentation.
List projects in Linear, optionally filtered by team. Returns project objects including id, name, state, priority, and progress history. Use Get Teams to find team IDs. Use the optional fields prop to narrow the response when only specific fields are needed (reduces context for large result sets). Example: teamId: "9d1c3f7e-..." → returns {nodes: [{id: "proj_01", name: "Mobile App v2", state: {name: "In Progress"}}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentation.
List project updates in Linear, optionally scoped to a single project. Use List Projects to find a project ID. Returns update objects with id, body, health, createdAt, and author. Example: projectId: "a1b2c3d4-0000-0000-0000-000000000001", first: 10 → returns {nodes: [{id: "pu_01xyz", body: "Q3 milestone complete.", health: "onTrack"}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentation.
List available project statuses in the Linear workspace. Use this to discover valid status IDs when creating or updating projects. Returns {nodes, pageInfo}, where each node includes id, name, and type. If pageInfo.hasNextPage is true, call again with after set to pageInfo.endCursor to fetch more. Example: returns {nodes: [{id: "5a1b2c3d-0000-0000-0000-000000000006", name: "Planned", type: "planned"}], pageInfo: {endCursor: "5a1b2c3d-0000-0000-0000-000000000006", hasNextPage: false}}. See the documentation.
List available project labels in the Linear workspace. Use this to discover valid label IDs when creating or updating projects. Returns {nodes, pageInfo}, where each node includes id, name, and optional color. If pageInfo.hasNextPage is true, call again with after set to pageInfo.endCursor to fetch more. Example: returns {nodes: [{id: "9a1b2c3d-0000-0000-0000-000000000007", name: "Frontend", color: "#0ea5e9"}], pageInfo: {endCursor: "9a1b2c3d-0000-0000-0000-000000000007", hasNextPage: false}}. See the documentation.
List issue labels in the Linear workspace. Use this to discover valid label names and IDs for creating or filtering issues. Returns label objects with id, name, and color. Example: first: 50 → returns {nodes: [{id: "lbl_bug123", name: "Bug", color: "#ef4444"}, {id: "lbl_fe456", name: "Frontend", color: "#0ea5e9"}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentation.
List initiatives in Linear, optionally filtered by name or status. Use this to discover valid initiative IDs for creating updates or linking projects. Returns initiative objects with id, name, status, and targetDate. Example: status: "Active" → returns {nodes: [{id: "ini_01abc", name: "Q4 Platform Upgrade", status: "Active"}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentation
List initiative updates in Linear, optionally scoped to a single initiative. Use List Initiatives to find an initiative ID. Returns update objects with id, body, health, createdAt, and author. Example: initiativeId: "b2c3d4e5-0000-0000-0000-000000000002", first: 10 → returns {nodes: [{id: "iu_01xyz", body: "Two projects completed.", health: "onTrack"}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentation.
List comments in Linear, optionally filtered by issue or body text. Returns comment objects with id, body, createdAt, and author details. Supports pagination via first/after. Use Search Issues to find an issue ID to filter by. Example: issueId: "iss_01abc", body: "PR #" → returns {nodes: [{id: "cmt_xyz", body: "Fixed in PR #123.", createdAt: "2024-01-15T10:00:00Z"}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentation
Retrieve issues filtered by a saved custom view in Linear. Custom views encapsulate pre-configured filters (team, state, assignee, labels, etc.). Use List Views to find the view ID. Use the optional fields prop to narrow the response to only the keys you need (reduces context for large result sets). Example: viewId: "cv1b2c3d4-..." → returns {nodes: [{id: "iss_01", identifier: "ENG-42", title: "Fix login", state: {name: "In Progress"}}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentation
Retrieves teams in your Linear workspace. Returns team objects with id, name, key, and more (including internal settings fields). Use this to discover valid team IDs (UUIDs) for creating or filtering issues and projects. Supports pagination: pass after with the previous response's pageInfo.endCursor to load the next page. Use the optional fields prop to narrow the response to only the keys you need (reduces context for large result sets). Example: call with limit: 50 → returns {nodes: [{id: "9d1c3f7e-...", name: "Engineering", key: "ENG"}, ...], pageInfo: {endCursor: "...", hasNextPage: true}}. See the documentation.
Retrieve a single project update by its ID in Linear. Use List Project Updates first to obtain a valid update ID. Returns the full update including id, body, health, createdAt, and author. Example: projectUpdateId: "7df5e7f9-a357-4539-ae94-4a004fec635f" → returns {id: "7df5e7f9-a357-4539-ae94-4a004fec635f", body: "Q3 milestone complete.", health: "onTrack", createdAt: "2024-01-15T10:00:00Z"}. See the documentation.
Retrieve a single Linear issue by its UUID or human-readable identifier. Provide exactly one of issueId (UUID) or issueIdentifier (e.g. ENG-42). Returns complete issue details: title, description, state, assignee, team, project, labels, and timestamps. Use the optional fields prop to narrow the response to only the keys you need (reduces context for large result sets). Example: issueIdentifier: "ENG-42" → returns {id: "iss_01abc", identifier: "ENG-42", title: "Fix login redirect", state: {name: "In Progress"}}. See the documentation.
Retrieve a single initiative update by its ID in Linear. Use List Initiative Updates first to obtain a valid update ID. Returns the full update including id, body, health, createdAt, and author. Example: initiativeUpdateId: "530f4366-88ab-4866-a44b-c2326728c32d" → returns {id: "530f4366-88ab-4866-a44b-c2326728c32d", body: "Two projects completed.", health: "onTrack", createdAt: "2024-01-15T10:00:00Z"}. See the documentation.
Create a new project in Linear to track a body of work. Projects group related issues within a team. Use Get Teams for team IDs, List Project Statuses to find status IDs, List Users for member IDs, and List Project Labels for label IDs. Example: teamId: "9d1c3f7e-...", projectName: "Mobile App v2", statusId: "s2abc" → returns {success: true, project: {id: "proj_01", name: "Mobile App v2"}}. See the documentation.
Post a status update on a Linear project. Use List Projects first to obtain the project ID. Updates appear in the project's activity feed. Example: projectId: "a1b2c3d4-0000-0000-0000-000000000001", body: "Q3 milestone complete; all P0 issues resolved.", health: "onTrack" → returns {success: true, projectUpdate: {id: "pu_01xyz"}}. See the documentation.
Creates a new issue in Linear. Requires a team ID and title; all other fields are optional. Use Get Teams to discover valid team IDs, List Workflow States to find state IDs, List Users to find assignee IDs, and List Labels to find label IDs. Example: teamId: "9d1c3f7e-2b48-4c6a-9f1e-5a7b8c9d0e1f", title: "Fix login redirect on mobile" → returns {success: true, issue: {id: "iss_01", identifier: "ENG-42", title: "Fix login redirect on mobile"}}. See the documentation.
Create a new initiative in Linear to track a cross-team strategic goal. Initiatives group multiple projects toward a shared objective. Use List Users to find a valid owner ID. Example: initiativeName: "Q4 Platform Upgrade", status: "Active", targetDate: "2024-12-31" → returns {success: true, initiative: {id: "ini_01abc", name: "Q4 Platform Upgrade"}}. See the documentation
Post a status update on a Linear initiative. Use List Initiatives first to obtain the initiative ID. Updates appear in the initiative's activity feed and can include a health status. Example: initiativeId: "b2c3d4e5-0000-0000-0000-000000000002", body: "Two projects completed; on track for Q4.", health: "onTrack" → returns {success: true, initiativeUpdate: {id: "iu_01xyz"}}. See the documentation.
Add a comment to a Linear issue. Use Search Issues to find the target issue ID first. Returns the new comment's ID and body. Example: issueId: "iss_01abc", body: "Fixed in PR #123." → returns {success: true, comment: {id: "cmt_xyz", body: "Fixed in PR #123."}}. See the documentation