Linear MCP
Vendor MCP63 toolsOAuth 2.1/DCRProject ManagementDeveloper ToolsConnect to Linear's hosted MCP server to manage issues, projects, cycles, and comments directly from your AI workflows.
Linear MCP connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret> -
Authorize and make your first call
Section titled “Authorize and make your first call”quickstart.ts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENV_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'linearmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Linear MCP:', link)process.stdout.write('Press Enter after authorizing...')await new Promise(r => process.stdin.once('data', r))// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'linearmcp_get_workspace',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "linearmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Linear MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="linearmcp_get_workspace",connection_name=connection_name,identifier=identifier,)print(result)
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- Review submit diff — Approve a Linear diff, request changes, or submit a review comment
- Note save release — Create or update release notes
- Release save — Create or update a release
- Initiative save — Create or update a Linear initiative
- Comment save diff, save — Create, reply to, or edit a comment or persisted draft on a Linear diff
- Need save customer — Create or update a customer need (request) in Linear
Tool list
Section titled “Tool list”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
linearmcp_create_attachment#Deprecated fallback for tiny files only. Accepts base64 file content, verifies SHA-256 checksum, and uploads it through the MCP worker. Prefer prepare_attachment_upload plus direct PUT plus create_attachment_from_upload.8 params
Deprecated fallback for tiny files only. Accepts base64 file content, verifies SHA-256 checksum, and uploads it through the MCP worker. Prefer prepare_attachment_upload plus direct PUT plus create_attachment_from_upload.
base64ContentstringrequiredDeprecated base64-encoded file content to uploadcontentTypestringrequiredMIME type for the upload (e.g., 'image/png', 'application/pdf')filenamestringrequiredFilename for the upload (e.g., 'screenshot.png')issuestringrequiredIssue ID or identifier (e.g., LIN-123)sha256stringrequiredExpected SHA-256 hex digest of the decoded file bytes.sizeintegeroptionalOptional expected decoded file size in bytes. Rejects the upload if it does not match.subtitlestringoptionalOptional subtitle for the attachmenttitlestringoptionalOptional title for the attachmentlinearmcp_create_attachment_from_upload#Link an already-uploaded Linear assetUrl to an existing issue as an attachment.4 params
Link an already-uploaded Linear assetUrl to an existing issue as an attachment.
assetUrlstringrequiredLinear upload assetUrl returned by prepare_attachment_uploadissuestringrequiredIssue ID or identifier (e.g., LIN-123)subtitlestringoptionalOptional attachment subtitletitlestringoptionalAttachment title. Defaults to filename or asset URLlinearmcp_create_initiative_label#Create a new Linear initiative label5 params
Create a new Linear initiative label
namestringrequiredLabel namecolorstringoptionalHex color codedescriptionstringoptionalLabel descriptionisGroupbooleanoptionalIs label group (not directly applicable)parentstringoptionalParent label group namelinearmcp_create_issue_label#Create a new Linear issue label6 params
Create a new Linear issue label
namestringrequiredLabel namecolorstringoptionalHex color codedescriptionstringoptionalLabel descriptionisGroupbooleanoptionalIs label group (not directly applicable)parentstringoptionalParent label group nameteamIdstringoptionalTeam UUID (omit for workspace label)linearmcp_delete_attachment#Delete an attachment by ID1 param
Delete an attachment by ID
idstringrequiredAttachment IDlinearmcp_delete_comment#Delete a Linear comment. Inline description comments (those with non-null `quotedText`) anchor a mark in the editor, so their root cannot be deleted — delete the replies individually or resolve the thread instead.1 param
Delete a Linear comment. Inline description comments (those with non-null `quotedText`) anchor a mark in the editor, so their root cannot be deleted — delete the replies individually or resolve the thread instead.
idstringrequiredComment IDlinearmcp_delete_customer#Delete a customer in Linear1 param
Delete a customer in Linear
idstringrequiredCustomer IDlinearmcp_delete_customer_need#Archive a customer need in Linear1 param
Archive a customer need in Linear
idstringrequiredCustomer need IDlinearmcp_delete_diff_comment#Delete a comment from a Linear diff1 param
Delete a comment from a Linear diff
commentIdstringrequiredDiff comment ID to deletelinearmcp_delete_status_update#Delete (archive) a project or initiative status update.2 params
Delete (archive) a project or initiative status update.
idstringrequiredStatus update IDtypestringrequiredType of status updatelinearmcp_extract_images#Extract and fetch images from markdown content. Use this to view screenshots, diagrams, or other images embedded in Linear issues, comments, or documents. Pass the markdown content (e.g., issue description) and receive the images as viewable data.1 param
Extract and fetch images from markdown content. Use this to view screenshots, diagrams, or other images embedded in Linear issues, comments, or documents. Pass the markdown content (e.g., issue description) and receive the images as viewable data.
markdownstringrequiredMarkdown content containing image references (e.g., issue description, comment body)linearmcp_get_agent_skill#Retrieve a Linear Agent skill by ID, including its full markdown instructions.1 param
Retrieve a Linear Agent skill by ID, including its full markdown instructions.
idstringrequiredAgent skill IDlinearmcp_get_attachment#Retrieve an attachment's content by ID.1 param
Retrieve an attachment's content by ID.
idstringrequiredAttachment IDlinearmcp_get_diff#Exact lookup for a Linear diff. Use with review URLs, GitHub PR URLs, Linear full identifiers, UUIDs, or slugs.1 param
Exact lookup for a Linear diff. Use with review URLs, GitHub PR URLs, Linear full identifiers, UUIDs, or slugs.
urlOrIdstringrequiredLinear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URLlinearmcp_get_diff_threads#Exact lookup for diff threads. Use with review URLs, GitHub PR URLs, Linear full identifiers, UUIDs, or slugs.4 params
Exact lookup for diff threads. Use with review URLs, GitHub PR URLs, Linear full identifiers, UUIDs, or slugs.
urlOrIdstringrequiredLinear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URLorderBystringoptionalSort: createdAt | updatedAtresolvedbooleanoptionalFilter returned threads by resolved statethreadIdstringoptionalOptional Linear comment UUID of any comment in the thread (not its `externalThreadId`); a reply's UUID resolves to its thread rootlinearmcp_get_document#Retrieve a Linear document by ID or slug1 param
Retrieve a Linear document by ID or slug
idstringrequiredDocument ID or sluglinearmcp_get_initiative#Retrieve detailed information about a specific initiative in Linear3 params
Retrieve detailed information about a specific initiative in Linear
querystringrequiredInitiative name, ID, identifier (e.g., INIT-123), or slugincludeProjectsbooleanoptionalInclude projectsincludeSubInitiativesbooleanoptionalInclude sub-initiativeslinearmcp_get_issue#Retrieve detailed information about an issue by ID, including attachments, git branch name, and active Triage Intelligence suggestions when the issue is in triage4 params
Retrieve detailed information about an issue by ID, including attachments, git branch name, and active Triage Intelligence suggestions when the issue is in triage
idstringrequiredIssue ID or identifier (e.g., LIN-123)includeCustomerNeedsbooleanoptionalInclude associated customer needsincludeRelationsbooleanoptionalInclude blocking/related/duplicate relationsincludeReleasesbooleanoptionalInclude associated releaseslinearmcp_get_issue_status#Retrieve detailed information about an issue status in Linear by name or ID3 params
Retrieve detailed information about an issue status in Linear by name or ID
idstringrequiredStatus IDnamestringrequiredStatus nameteamstringrequiredTeam name or IDlinearmcp_get_milestone#Retrieve details of a specific milestone by ID or name2 params
Retrieve details of a specific milestone by ID or name
projectstringrequiredProject name, ID, identifier (e.g., PROJ-123), or slugquerystringrequiredMilestone name or IDlinearmcp_get_project#Retrieve details of a specific project in Linear4 params
Retrieve details of a specific project in Linear
querystringrequiredProject name, ID, identifier (e.g., PROJ-123), or slugincludeMembersbooleanoptionalInclude project membersincludeMilestonesbooleanoptionalInclude milestonesincludeResourcesbooleanoptionalInclude resources (documents, links, attachments)linearmcp_get_release#Retrieve details of a release by ID or slug.2 params
Retrieve details of a release by ID or slug.
idstringrequiredRelease ID or slugincludeReleaseNotesbooleanoptionalInclude associated release noteslinearmcp_get_release_note#Retrieve release notes by ID or slug, including markdown content.2 params
Retrieve release notes by ID or slug, including markdown content.
idstringrequiredRelease notes ID or slugincludeReleasesbooleanoptionalInclude associated releaseslinearmcp_get_status_updates#List or get project/initiative status updates. Pass `id` to get a specific update, or filter to list.11 params
List or get project/initiative status updates. Pass `id` to get a specific update, or filter to list.
typestringrequiredType of status update — project or initiativecreatedAtstringoptionalCreated after: ISO-8601 date/duration (e.g., -P1D)cursorstringoptionalNext page cursoridstringoptionalStatus update ID - if provided, returns this specific updateincludeArchivedbooleanoptionalInclude archived itemsinitiativestringoptionalInitiative name, ID, identifier (e.g., INIT-123), or sluglimitnumberoptionalMax results (default 50, max 250)orderBystringoptionalSort: createdAt | updatedAtprojectstringoptionalProject name, ID, identifier (e.g., PROJ-123), or slugupdatedAtstringoptionalUpdated after: ISO-8601 date/duration (e.g., -P1D)userstringoptionalUser ID, name, email, or "me"linearmcp_get_team#Retrieve details of a specific Linear team1 param
Retrieve details of a specific Linear team
querystringrequiredTeam UUID, key, or namelinearmcp_get_user#Retrieve details of a specific Linear user1 param
Retrieve details of a specific Linear user
querystringrequiredUser ID, name, email, or "me"linearmcp_get_workspace#Retrieve the connected Linear workspace0 params
Retrieve the connected Linear workspace
linearmcp_list_agent_skills#List Linear Agent skills available to the authenticated user.3 params
List Linear Agent skills available to the authenticated user.
cursorstringoptionalNext page cursorlimitnumberoptionalMax results (default 50, max 250)orderBystringoptionalSort: createdAt | updatedAtlinearmcp_list_comments#List comments on a Linear issue, project, initiative, document, project milestone, or project/initiative status update. Provide exactly one of issueId, projectId, initiativeId, documentId, milestoneId, or statusUpdateId. For issues, projects, and initiatives this returns both top-level discussion threads and inline description comments. Inline (anchored) comments carry a non-null quotedText set to the snippet of description text they reference. Returned comments include author and nullable onBehalfOf; when set, onBehalfOf identifies the user the agent author acted for.10 params
List comments on a Linear issue, project, initiative, document, project milestone, or project/initiative status update. Provide exactly one of issueId, projectId, initiativeId, documentId, milestoneId, or statusUpdateId. For issues, projects, and initiatives this returns both top-level discussion threads and inline description comments. Inline (anchored) comments carry a non-null quotedText set to the snippet of description text they reference. Returned comments include author and nullable onBehalfOf; when set, onBehalfOf identifies the user the agent author acted for.
cursorstringoptionalNext page cursordocumentIdstringoptionalDocument ID or slug (provide exactly one parent)initiativeIdstringoptionalInitiative name, ID, identifier (e.g., INIT-123), or slug (provide exactly one parent)issueIdstringoptionalIssue ID or identifier (e.g., LIN-123) (provide exactly one parent)limitnumberoptionalMax results (default 50, max 250)milestoneIdstringoptionalMilestone UUID (provide exactly one parent). Resolve milestone names via list_milestones first.orderBystringoptionalSort: createdAt | updatedAtprojectIdstringoptionalProject name, ID, identifier (e.g., PROJ-123), or slug (provide exactly one parent)statusUpdateIdstringoptionalStatus update UUID (provide exactly one parent). Resolve status updates via get_status_updates first.statusUpdateTypestringoptionalType of status update named by statusUpdateId, as returned by get_status_updates. Only valid together with statusUpdateId; omit to check both project and initiative status updates.linearmcp_list_customers#List customers in the user's Linear workspace11 params
List customers in the user's Linear workspace
createdAtstringoptionalCreated after: ISO-8601 date/duration (e.g., -P1D)cursorstringoptionalNext page cursorincludeArchivedbooleanoptionalInclude archived itemsincludeNeedsbooleanoptionalInclude associated customer needslimitnumberoptionalMax results (default 50, max 250)orderBystringoptionalSort: createdAt | updatedAtownerstringoptionalUser ID, name, email, or "me"querystringoptionalSearch customer namestatusstringoptionalCustomer status name or IDtierstringoptionalCustomer tier name or IDupdatedAtstringoptionalUpdated after: ISO-8601 date/duration (e.g., -P1D)linearmcp_list_cycles#Retrieve cycles for a specific Linear team2 params
Retrieve cycles for a specific Linear team
teamIdstringrequiredTeam IDtypestringoptionalFilter: current, previous, next, or alllinearmcp_list_diffs#List Linear diff pull requests visible to the authenticated user7 params
List Linear diff pull requests visible to the authenticated user
cursorstringoptionalNext page cursorlimitnumberoptionalMax results (default 50, max 250)orderBystringoptionalSort: createdAt | updatedAtownerstringoptionalFilter returned diffs by repository ownerquerystringoptionalBroad search by title, branch, PR number, or bare slugrepostringoptionalFilter returned diffs by repository namestatusstringoptionalFilter returned diffs by pull request statuslinearmcp_list_documents#List documents in the user's Linear workspace12 params
List documents in the user's Linear workspace
createdAtstringoptionalCreated after: ISO-8601 date/duration (e.g., -P1D)creatorIdstringoptionalFilter by creator IDcursorstringoptionalNext page cursorfieldsarrayoptionalFields to include in each result. id is always included. Omit or pass an empty array for the default response.includeArchivedbooleanoptionalInclude archived documentsinitiativeIdstringoptionalFilter by initiative IDlimitnumberoptionalMax results (default 50, max 250)orderBystringoptionalSort: createdAt | updatedAtprojectIdstringoptionalFilter by project IDquerystringoptionalSearch queryteamIdstringoptionalFilter by team IDupdatedAtstringoptionalUpdated after: ISO-8601 date/duration (e.g., -P1D)linearmcp_list_initiative_labels#List available initiative labels in the Linear workspace4 params
List available initiative labels in the Linear workspace
cursorstringoptionalNext page cursorlimitnumberoptionalMax results (default 50, max 250)namestringoptionalFilter by nameorderBystringoptionalSort: createdAt | updatedAtlinearmcp_list_initiatives#List initiatives in the user's Linear workspace15 params
List initiatives in the user's Linear workspace
createdAtstringoptionalCreated after: ISO-8601 date/duration (e.g., -P1D)cursorstringoptionalNext page cursorfieldsarrayoptionalFields to include in each result. id is always included. Omit or pass an empty array for the default response.includeArchivedbooleanoptionalInclude archived itemsincludeProjectsbooleanoptionalInclude projectsincludeSubInitiativesbooleanoptionalInclude sub-initiativeslabelstringoptionalLabel name or IDleadTeamstringoptionalLead team name, key, or IDlimitnumberoptionalMax results (default 50, max 250)orderBystringoptionalSort: createdAt | updatedAtownerstringoptionalUser ID, name, email, or "me"parentInitiativestringoptionalParent initiative. Initiative name, ID, identifier (e.g., INIT-123), or slugquerystringoptionalSearch initiative namestatusstringoptionalStatus of the initiativeupdatedAtstringoptionalUpdated after: ISO-8601 date/duration (e.g., -P1D)linearmcp_list_issue_labels#List available issue labels in a Linear workspace or team5 params
List available issue labels in a Linear workspace or team
cursorstringoptionalNext page cursorlimitnumberoptionalMax results (default 50, max 250)namestringoptionalFilter by nameorderBystringoptionalSort: createdAt | updatedAtteamstringoptionalTeam name or IDlinearmcp_list_issue_statuses#List available issue statuses in a Linear team1 param
List available issue statuses in a Linear team
teamstringrequiredTeam name or IDlinearmcp_list_issues#List issues in the user's Linear workspace, including active Triage Intelligence suggestions for issues in triage. For my issues, use "me" as the assignee. Use "null" for no assignee.18 params
List issues in the user's Linear workspace, including active Triage Intelligence suggestions for issues in triage. For my issues, use "me" as the assignee. Use "null" for no assignee.
assigneestringoptionalUser ID, name, email, or "me"createdAtstringoptionalCreated after: ISO-8601 date/duration (e.g., -P1D)cursorstringoptionalNext page cursorcyclestringoptionalCycle name, number, or IDdelegatestringoptionalAgent name or ID. When the user asks to delegate to "Linear" or "the Linear agent", this refers to the "Linear" app user specificallyfieldsarrayoptionalFields to include in each result. id is always included. Omit or pass an empty array for the default response.includeArchivedbooleanoptionalInclude archived itemslabelstringoptionalLabel name or IDlimitnumberoptionalMax results (default 50, max 250)orderBystringoptionalSort: createdAt | updatedAtparentIdstringoptionalParent issue ID or identifier (e.g., LIN-123)prioritynumberoptional0=None, 1=Urgent, 2=High, 3=Medium, 4=LowprojectstringoptionalProject name, ID, identifier (e.g., PROJ-123), or slugquerystringoptionalSearch issue title or descriptionreleasestringoptionalRelease ID or slugstatestringoptionalState type, name, or IDteamstringoptionalTeam name or IDupdatedAtstringoptionalUpdated after: ISO-8601 date/duration (e.g., -P1D)linearmcp_list_milestones#List all milestones in a Linear project1 param
List all milestones in a Linear project
projectstringrequiredProject name, ID, identifier (e.g., PROJ-123), or sluglinearmcp_list_project_labels#List available project labels in the Linear workspace4 params
List available project labels in the Linear workspace
cursorstringoptionalNext page cursorlimitnumberoptionalMax results (default 50, max 250)namestringoptionalFilter by nameorderBystringoptionalSort: createdAt | updatedAtlinearmcp_list_projects#List projects in the user's Linear workspace15 params
List projects in the user's Linear workspace
createdAtstringoptionalCreated after: ISO-8601 date/duration (e.g., -P1D)cursorstringoptionalNext page cursorfieldsarrayoptionalFields to include in each result. id is always included. Omit or pass an empty array for the default response.includeArchivedbooleanoptionalInclude archived itemsincludeMembersbooleanoptionalInclude project membersincludeMilestonesbooleanoptionalInclude milestonesinitiativestringoptionalInitiative name, ID, identifier (e.g., INIT-123), or sluglabelstringoptionalLabel name or IDlimitnumberoptionalMax results (default 50, max 50)memberstringoptionalUser ID, name, email, or "me"orderBystringoptionalSort: createdAt | updatedAtquerystringoptionalSearch project namestatestringoptionalState type, name, or IDteamstringoptionalTeam name or IDupdatedAtstringoptionalUpdated after: ISO-8601 date/duration (e.g., -P1D)linearmcp_list_release_notes#List release notes in the workspace, optionally filtered by pipeline or covered release.11 params
List release notes in the workspace, optionally filtered by pipeline or covered release.
createdAtstringoptionalCreated after: ISO-8601 date/duration (e.g., -P1D)cursorstringoptionalNext page cursorincludeArchivedbooleanoptionalInclude archived itemsincludeContentbooleanoptionalInclude markdown release notes contentincludeReleasesbooleanoptionalInclude associated releaseslimitnumberoptionalMax results (default 50, max 250)orderBystringoptionalSort: createdAt | updatedAtpipelinestringoptionalRelease pipeline ID, slug, or exact namequerystringoptionalSearch release notes titlereleasestringoptionalRelease ID or slugupdatedAtstringoptionalUpdated after: ISO-8601 date/duration (e.g., -P1D)linearmcp_list_release_pipelines#List release pipelines in the workspace.12 params
List release pipelines in the workspace.
createdAtstringoptionalCreated after: ISO-8601 date/duration (e.g., -P1D)cursorstringoptionalNext page cursorincludeArchivedbooleanoptionalInclude archived itemsincludeStagesbooleanoptionalInclude each pipeline's stagesincludeTeamsbooleanoptionalInclude each pipeline's teamsisProductionbooleanoptionalFilter by production pipeline flaglimitnumberoptionalMax results (default 50, max 250)orderBystringoptionalSort: createdAt | updatedAtquerystringoptionalSearch pipeline nameteamstringoptionalTeam name or IDtypestringoptionalPipeline type: continuous | scheduledupdatedAtstringoptionalUpdated after: ISO-8601 date/duration (e.g., -P1D)linearmcp_list_releases#List releases in the workspace, with optional filtering by pipeline, stage, version, and text.13 params
List releases in the workspace, with optional filtering by pipeline, stage, version, and text.
createdAtstringoptionalCreated after: ISO-8601 date/duration (e.g., -P1D)cursorstringoptionalNext page cursorhasReleaseNotesbooleanoptionalFilter to releases that do (true) or do not (false) have release notesincludeArchivedbooleanoptionalInclude archived itemsincludeReleaseNotesbooleanoptionalInclude associated release noteslimitnumberoptionalMax results (default 50, max 250)orderBystringoptionalSort: createdAt | updatedAtpipelinestringoptionalRelease pipeline ID, slug, or exact namequerystringoptionalSearch release name or versionstagestringoptionalRelease stage ID or exact namestageTypestringoptionalFilter by stage lifecycle typeupdatedAtstringoptionalUpdated after: ISO-8601 date/duration (e.g., -P1D)versionstringoptionalExact version matchlinearmcp_list_teams#List teams in the user's Linear workspace7 params
List teams in the user's Linear workspace
createdAtstringoptionalCreated after: ISO-8601 date/duration (e.g., -P1D)cursorstringoptionalNext page cursorincludeArchivedbooleanoptionalInclude archived teamslimitnumberoptionalMax results (default 50, max 250)orderBystringoptionalSort: createdAt | updatedAtquerystringoptionalSearch queryupdatedAtstringoptionalUpdated after: ISO-8601 date/duration (e.g., -P1D)linearmcp_list_users#Retrieve users in the Linear workspace5 params
Retrieve users in the Linear workspace
cursorstringoptionalNext page cursorlimitnumberoptionalMaximum number of users to returnorderBystringoptionalSort: createdAt | updatedAtquerystringoptionalFilter by name or emailteamstringoptionalTeam name or IDlinearmcp_merge_diff#Merge a Linear diff or add it to the repository's merge queue2 params
Merge a Linear diff or add it to the repository's merge queue
urlOrIdstringrequiredLinear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URLmergeMethodstringoptionalMerge method; omit to use the repository defaultlinearmcp_prepare_attachment_upload#Prepare a direct Linear file upload for an existing issue. Workflow: 1. Call this with issue, filename, contentType, and size. 2. Upload raw bytes with PUT to uploadRequest.url. 3. After PUT succeeds, call create_attachment_from_upload with assetUrl.6 params
Prepare a direct Linear file upload for an existing issue. Workflow: 1. Call this with issue, filename, contentType, and size. 2. Upload raw bytes with PUT to uploadRequest.url. 3. After PUT succeeds, call create_attachment_from_upload with assetUrl.
contentTypestringrequiredMIME type, e.g. image/png or application/pdffilenamestringrequiredFilename for the upload, e.g. screenshot.pngissuestringrequiredIssue ID or identifier (e.g., LIN-123)sizeintegerrequiredExact file size in bytes. Must be smaller than 2 GB.subtitlestringoptionalSuggested attachment subtitle for the finalize steptitlestringoptionalSuggested attachment title for the finalize steplinearmcp_resolve_diff_thread#Resolve or reopen a top-level comment thread on a Linear diff2 params
Resolve or reopen a top-level comment thread on a Linear diff
threadIdstringrequiredTop-level diff thread/comment IDresolvedbooleanoptionalTrue to resolve the thread; false to reopen itlinearmcp_save_comment#Create or update a comment on a Linear issue, project, initiative, document, project milestone, or project/initiative status update. If id is provided, updates the existing comment; otherwise creates a new one. To start a new thread, pass body and exactly one of issueId, projectId, initiativeId, documentId, milestoneId, or statusUpdateId. To reply to an existing thread, pass parentId and body.10 params
Create or update a comment on a Linear issue, project, initiative, document, project milestone, or project/initiative status update. If id is provided, updates the existing comment; otherwise creates a new one. To start a new thread, pass body and exactly one of issueId, projectId, initiativeId, documentId, milestoneId, or statusUpdateId. To reply to an existing thread, pass parentId and body.
bodystringrequiredContent as Markdown. Do not escape the string, use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)documentIdstringoptionalDocument ID or slug (provide exactly one parent)idstringoptionalComment ID. If provided, updates the existing commentinitiativeIdstringoptionalInitiative name, ID, identifier (e.g., INIT-123), or slug (provide exactly one parent)issueIdstringoptionalIssue ID or identifier (e.g., LIN-123) (provide exactly one parent)milestoneIdstringoptionalMilestone UUID (provide exactly one parent). Resolve milestone names via list_milestones first.parentIdstringoptionalParent comment ID (for replies, only when creating)projectIdstringoptionalProject name, ID, identifier (e.g., PROJ-123), or slug (provide exactly one parent)statusUpdateIdstringoptionalStatus update UUID (provide exactly one parent). Resolve status updates via get_status_updates first.statusUpdateTypestringoptionalType of status update named by statusUpdateId, as returned by get_status_updates. Only valid together with statusUpdateId; rejected when id or parentId is provided.linearmcp_save_customer#Create or update a Linear customer. If id is provided, updates the existing customer; otherwise creates a new one. When creating, name is required.9 params
Create or update a Linear customer. If id is provided, updates the existing customer; otherwise creates a new one. When creating, name is required.
domainsarrayoptionalDomains to add to this customer. Append-only; existing domains are never removedexternalIdsarrayoptionalExternal system IDs to add. Append-only; existing IDs are never removedidstringoptionalCustomer ID. If provided, updates the existing customernamestringoptionalCustomer name (required when creating)ownerstringoptionalUser ID, name, email, or "me"revenuenumberoptionalAnnual revenue generated by the customersizenumberoptionalSize of the customer organizationstatusstringoptionalCustomer status name or IDtierstringoptionalCustomer tier name or IDlinearmcp_save_customer_need#Create or update a customer need (request) in Linear. If id is provided, updates the existing need; otherwise creates a new one. When creating, body is required.7 params
Create or update a customer need (request) in Linear. If id is provided, updates the existing need; otherwise creates a new one. When creating, body is required.
bodystringoptionalDescription of the customer need (required when creating)customerstringoptionalCustomer ID or nameidstringoptionalCustomer need ID. If provided, updates the existing needissuestringoptionalIssue ID or identifier (e.g., LIN-123) to associate with this needprioritynumberoptionalWhether the need is important. 0 = Not important, 1 = ImportantprojectstringoptionalProject name, ID, identifier (e.g., PROJ-123), or slug to associate with this needsourcestringoptionalURL to attach as the source for this customer need, such as a transcript or support threadlinearmcp_save_diff_comment#Create, reply to, or edit a comment or persisted draft on a Linear diff. Set draft to true to save without submitting. Provide draftId to edit or submit a persisted draft, and commentId only to edit a submitted comment. Submitting an inline draft reuses its saved anchor; submitting a reply draft requires parentId again.8 params
Create, reply to, or edit a comment or persisted draft on a Linear diff. Set draft to true to save without submitting. Provide draftId to edit or submit a persisted draft, and commentId only to edit a submitted comment. Submitting an inline draft reuses its saved anchor; submitting a reply draft requires parentId again.
bodystringrequiredComment body as plain textanchorobjectoptionalOptional comment anchor copied from a diff thread or built for a file or diff hunkanchorContentstringoptionalExact source text of the anchor's end line; stored with an inline draft so it can be re-anchored after the diff receives new revisionscommentIdstringoptionalExisting comment ID to editdraftbooleanoptionalSave as a private persisted draft without submittingdraftIdstringoptionalExisting persisted draft ID to edit or submitparentIdstringoptionalTop-level comment ID to reply to; also required when submitting a persisted reply drafturlOrIdstringoptionalLinear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URLlinearmcp_save_document#Create or update a Linear document. If id is provided, updates the existing document; otherwise creates a new one. When creating, title is required and exactly one parent (project, issue, initiative, cycle, or team) must be specified. On update, passing a parent reparents the document. To change parts of the content without resending all of it, pass patch instead of content.11 params
Create or update a Linear document. If id is provided, updates the existing document; otherwise creates a new one. When creating, title is required and exactly one parent (project, issue, initiative, cycle, or team) must be specified. On update, passing a parent reparents the document. To change parts of the content without resending all of it, pass patch instead of content.
colorstringoptionalHex colorcontentstringoptionalContent as Markdown. Do not escape the string, use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)cyclestringoptionalCycle name, number, or ID. When passing a name or number, also pass team to disambiguate.iconstringoptionalIcon name or emoji code (e.g. "Rocket" or ":eagle:"), not a raw Unicode emojiidstringoptionalDocument ID or slug to update. Omit to create a new document.initiativestringoptionalInitiative name, ID, identifier (e.g., INIT-123), or slugissuestringoptionalIssue ID or identifier (e.g., LIN-123)patcharrayoptionalPartial edits applied to the current content, in order and atomically (one failing operation aborts the whole save). Every anchor string must match the current content exactly once. Only valid on update, in place of the full content field.projectstringoptionalProject name, ID, identifier (e.g., PROJ-123), or slugteamstringoptionalTeam name or ID. Attaches the document to the team, unless cycle is also passed, in which case it disambiguates the cycle.titlestringoptionalDocument title (required when creating)linearmcp_save_initiative#Create or update a Linear initiative. If id is provided, updates the existing initiative; otherwise creates a new one. When creating, name is required. To change parts of the description without resending all of it, pass patch instead of description.14 params
Create or update a Linear initiative. If id is provided, updates the existing initiative; otherwise creates a new one. When creating, name is required. To change parts of the description without resending all of it, pass patch instead of description.
colorstringoptionalHex colordescriptionstringoptionalContent as Markdown. Do not escape the string, use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)iconstringoptionalIcon name or emoji code (e.g. "Rocket" or ":eagle:"), not a raw Unicode emojiidstringoptionalInitiative name, ID, identifier (e.g., INIT-123), or slug. If provided, updates the existing initiativelabelsarrayoptionalLabel names or IDs as a JSON array of strings (e.g. ["Bug", "Urgent"]). Replaces the full label set; existing labels not included are removed. Omit to leave labels unchangedleadTeamstringoptionalLead team name, key, or ID. Null to remove the lead teamnamestringoptionalInitiative name (required when creating)ownerstringoptionalUser ID, name, email, or "me". Null to removeparentInitiativesarrayoptionalParent initiatives to add. Initiative name, ID, identifier (e.g., INIT-123), or slug. Appended to existing parentspatcharrayoptionalPartial edits applied to the current content, in order and atomically (one failing operation aborts the whole save). Every anchor string must match the current content exactly once. Only valid on update, in place of the full description field.priorityintegeroptional0=None, 1=Urgent, 2=High, 3=Medium, 4=LowstatusstringoptionalInitiative status (Proposed, Planned, Active, Completed, Canceled)summarystringoptionalShort summary (max 255 chars)targetDatestringoptionalTarget date (ISO format)linearmcp_save_issue#Create or update a Linear issue. If id is provided, updates the existing issue; otherwise creates a new one. When creating, title and team are required. Note: use assignee (not assigneeId) to set the assignee, it accepts a user ID, name, email, or "me".29 params
Create or update a Linear issue. If id is provided, updates the existing issue; otherwise creates a new one. When creating, title and team are required. Note: use assignee (not assigneeId) to set the assignee, it accepts a user ID, name, email, or "me".
addReleasesarrayoptionalRelease IDs or slugs to add. Append-only; existing releases are never removedassigneestringoptionalUser ID, name, email, or 'me'. Null to remove assignee.blockedByarrayoptionalIssue IDs/identifiers blocking this. Append-only; existing relations are never removedblocksarrayoptionalIssue IDs/identifiers this blocks. Append-only; existing relations are never removedcyclestringoptionalCycle name, number, or ID. Pass null to remove from cycle.delegatestringoptionalAgent name or ID. When the user asks to delegate to "Linear" or "the Linear agent", this refers to the "Linear" app user specifically. Null to remove delegate.descriptionstringoptionalContent as Markdown. Do not escape the string, use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)dueDatestringoptionalDue date (ISO format). On update, pass null to remove the due dateduplicateOfstringoptionalIssue ID this is a duplicate of. Pass null to remove.estimatestringoptionalIssue estimate value. On create, pass null or omit for no estimate. On update, pass null to clear the estimate; omitting leaves it unchanged. 0 is a real estimate only on teams that allow zero estimates.idstringoptionalOnly for updating. Issue ID or identifier (e.g., LIN-123). Do NOT pass when creating.labelsarrayoptionalLabel names or IDs to apply to the issue. Replaces the full label set; existing labels not included are removed.linksarrayoptionalLink attachments to add [{url, title}]. Append-only; existing links are never removedmilestonestringoptionalMilestone name or IDparentIdstringoptionalParent issue ID or identifier (e.g., LIN-123). Null to remove.patcharrayoptionalPartial edits applied to the current content, in order and atomically (one failing operation aborts the whole save). Every anchor string must match the current content exactly once. Only valid on update, in place of the full description field.prioritynumberoptional0=None, 1=Urgent, 2=High, 3=Medium, 4=LowprojectstringoptionalProject name, ID, identifier (e.g., PROJ-123), or slug. Null to removerelatedToarrayoptionalRelated issue IDs/identifiers. Append-only; existing relations are never removedremoveBlockedByarrayoptionalIssue IDs/identifiers to remove as blockers of this issueremoveBlocksarrayoptionalIssue IDs/identifiers to stop blockingremoveRelatedToarrayoptionalRelated issue IDs/identifiers to removeremoveReleasesarrayoptionalRelease IDs or slugs to remove. Only valid when updating an existing issuesetReleasesarrayoptionalReplace all releases on the issue with these. Cannot be combined with addReleases/removeReleasesslaBreachesAtstringoptionalISO-8601 timestamp when the SLA will breach. On update, pass null to remove the SLAslaTypestringoptionalSLA day counting type: "all" or "onlyBusinessDays". Only use with slaBreachesAt; null means unsetstatestringoptionalState type, name, or IDteamstringoptionalTeam name or ID (required when creating)titlestringoptionalIssue title (required when creating)linearmcp_save_milestone#Create or update a milestone in a Linear project. If id is provided, updates the existing milestone; otherwise creates a new one. When creating, name is required.5 params
Create or update a milestone in a Linear project. If id is provided, updates the existing milestone; otherwise creates a new one. When creating, name is required.
projectstringrequiredProject name, ID, identifier (e.g., PROJ-123), or slugdescriptionstringoptionalMilestone descriptionidstringoptionalMilestone name or ID. If provided, updates existingnamestringoptionalMilestone name (required when creating)targetDatestringoptionalTarget completion date (ISO format, null to remove)linearmcp_save_project#Create or update a Linear project. If id is provided, updates the existing project; otherwise creates a new one. When creating, name and at least one team (via addTeams or setTeams) are required. To change parts of the description without resending all of it, pass patch instead of description.22 params
Create or update a Linear project. If id is provided, updates the existing project; otherwise creates a new one. When creating, name and at least one team (via addTeams or setTeams) are required. To change parts of the description without resending all of it, pass patch instead of description.
addInitiativesarrayoptionalInitiatives to add. Initiative name, ID, identifier (e.g., INIT-123), or slugaddTeamsarrayoptionalTeam name or ID to addcolorstringoptionalHex colordescriptionstringoptionalContent as Markdown. Do not escape the string, use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)iconstringoptionalIcon name or emoji codeidstringoptionalProject name, ID, identifier (e.g., PROJ-123), or slug. If provided, updates the existing projectlabelsarrayoptionalLabel names or IDsleadstringoptionalUser ID, name, email, or 'me'. Null to removelinksarrayoptionalExternal resource links to add [{url, title}]. Append-only; existing links are never removednamestringoptionalProject name (required when creating)patcharrayoptionalPartial edits applied to the current content, in order and atomically (one failing operation aborts the whole save). Every anchor string must match the current content exactly once. Only valid on update, in place of the full description field.priorityintegeroptional0=None, 1=Urgent, 2=High, 3=Medium, 4=LowremoveInitiativesarrayoptionalInitiatives to remove. Initiative name, ID, identifier (e.g., INIT-123), or slugremoveTeamsarrayoptionalTeam name or ID to removesetInitiativesarrayoptionalReplace all initiatives with these. Initiative name, ID, identifier (e.g., INIT-123), or slug. Cannot combine with addInitiatives/removeInitiativessetTeamsarrayoptionalReplace all teams with these. Cannot combine with addTeams/removeTeamsstartDatestringoptionalStart date (ISO format). Pair with startDateResolution to indicate precision (e.g. month, quarter)startDateResolutionstringoptionalStart date resolutionstatestringoptionalProject statesummarystringoptionalShort summary (max 255 chars)targetDatestringoptionalTarget date (ISO format). Pair with targetDateResolution to indicate precision (e.g. month, quarter)targetDateResolutionstringoptionalTarget date resolutionlinearmcp_save_release#Create or update a release. If id is provided, updates the existing release; otherwise creates a new one. When creating, name and pipeline are required. Release status is modeled as the release pipeline stage.12 params
Create or update a release. If id is provided, updates the existing release; otherwise creates a new one. When creating, name and pipeline are required. Release status is modeled as the release pipeline stage.
commitShastringoptionalCommit SHA associated with the releasecompletedAtstringoptionalCompleted timestamp (ISO DateTime, null to remove)createdAtstringoptionalImport/create timestamp (ISO DateTime)descriptionstringoptionalRelease descriptionidstringoptionalRelease ID or slug to update. Omit to create a new release.namestringoptionalRelease name (required when creating)pipelinestringoptionalRelease pipeline ID, slug, or exact name (required when creating)stagestringoptionalRelease stage ID, exact name, or lifecycle type within the release pipelinestartDatestringoptionalEstimated start date (ISO YYYY-MM-DD, null to remove)startedAtstringoptionalStarted timestamp (ISO DateTime, null to remove)targetDatestringoptionalEstimated completion date (ISO YYYY-MM-DD, null to remove)versionstringoptionalVersion identifierlinearmcp_save_release_note#Create or update release notes. If id is provided, updates the existing release notes; otherwise creates a new one. When creating, pipeline and either releases or a release range are required. To change parts of the content without resending all of it, pass patch instead of content.8 params
Create or update release notes. If id is provided, updates the existing release notes; otherwise creates a new one. When creating, pipeline and either releases or a release range are required. To change parts of the content without resending all of it, pass patch instead of content.
contentstringoptionalContent as Markdown. Do not escape the string, use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)idstringoptionalRelease notes ID or slug to update. Omit to create new release notes.patcharrayoptionalPartial edits applied to the current content, in order and atomically (one failing operation aborts the whole save). Every anchor string must match the current content exactly once. Only valid on update, in place of the full content field.pipelinestringoptionalRelease pipeline ID, slug, or exact name (required when creating)rangeFromReleasestringoptionalOldest release ID or slug in the note rangerangeToReleasestringoptionalNewest release ID or slug in the note rangereleasesarrayoptionalRelease IDs or slugs to include in the notetitlestringoptionalRelease notes titlelinearmcp_save_status_update#Create or update a project/initiative status update. Omit `id` to create, provide `id` to update.7 params
Create or update a project/initiative status update. Omit `id` to create, provide `id` to update.
typestringrequiredType of status updatebodystringoptionalContent as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)healthstringoptionalHealth status of the project or initiativeidstringoptionalStatus update ID - if provided, updates this existing updateinitiativestringoptionalInitiative name, ID, identifier (e.g., INIT-123), or slugisDiffHiddenbooleanoptionalDeprecated. Hide diff with previous update (create only)projectstringoptionalProject name, ID, identifier (e.g., PROJ-123), or sluglinearmcp_search_documentation#Search Linear's documentation to learn about features and usage2 params
Search Linear's documentation to learn about features and usage
querystringrequiredSearch querypagenumberoptionalPage numberlinearmcp_submit_diff_review#Approve a Linear diff, request changes, or submit a review comment3 params
Approve a Linear diff, request changes, or submit a review comment
decisionstringrequiredReview decision: approved, changesRequested, or commentedurlOrIdstringrequiredLinear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URLbodystringoptionalOptional review body; required when requesting changes or commenting