The Linear MCP connector routes your AI agent's tool calls to Linear's own MCP server through Scalekit. Each user signs in to Linear once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 63 tools.
- Tools
- 63
- What they doRead · write · destructive
- 37 · 14 · 1237 read14 write12 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
What you can do
- Manage issues: create, update, list, and look up issues with their labels, statuses, and attachments
- Plan projects and initiatives: create and update projects, milestones, and initiatives, and post status updates
- Comment and discuss: add, edit, and delete comments on issues, projects, documents, and status updates
- Write documents: create, update, and read documents in the workspace
- Review code changes: read diffs and review threads, leave comments, approve or request changes, and merge
- Track customers and releases: manage customers and their requests, and create releases and release notes
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet 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>Create the Linear MCP connection
In AgentKit > Connections, create a Linear MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for Linear, so you don't need to register an OAuth app.
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_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)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'linearmcp_get_workspace',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_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)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toollinearmcp_extract_imagesExtract and fetch images from markdown content.Read-onlyExtractImages
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.
Inputs
markdownstringrequired- Markdown content containing image references (e.g., issue description, comment body)
linearmcp_get_agent_skillRetrieve a Linear Agent skill by ID, including its full markdown instructions.Read-onlyGetAgentSkill
Retrieve a Linear Agent skill by ID, including its full markdown instructions.
Inputs
idstringrequired- Agent skill ID
linearmcp_get_attachmentRetrieve an attachment's content by ID.Read-onlyGetAttachment
Retrieve an attachment's content by ID.
Inputs
idstringrequired- Attachment ID
linearmcp_get_diffExact lookup for a Linear diff.Read-onlyGetDiff
Exact lookup for a Linear diff. Use with review URLs, GitHub PR URLs, Linear full identifiers, UUIDs, or slugs.
Inputs
urlOrIdstringrequired- Linear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URL
linearmcp_get_diff_threadsExact lookup for diff threads.Read-onlyGetDiffThreads
Exact lookup for diff threads. Use with review URLs, GitHub PR URLs, Linear full identifiers, UUIDs, or slugs.
Inputs
urlOrIdstringrequired- Linear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URL
orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt resolvedboolean- Filter returned threads by resolved state
threadIdstring- Optional Linear comment UUID of any comment in the thread (not its `externalThreadId`); a reply's UUID resolves to its thread root
linearmcp_get_documentRetrieve a Linear document by ID or slugRead-onlyGetDocument
Retrieve a Linear document by ID or slug
Inputs
idstringrequired- Document ID or slug
linearmcp_get_initiativeRetrieve detailed information about a specific initiative in LinearRead-onlyGetInitiative
Retrieve detailed information about a specific initiative in Linear
Inputs
querystringrequired- Initiative name, ID, identifier (e.g., INIT-123), or slug
includeProjectsboolean- Include projectsdefault
false includeSubInitiativesboolean- Include sub-initiativesdefault
false
linearmcp_get_issueRetrieve detailed information about an issue by ID, including attachments, git branch name, and active Triage Intelligence suggestions when the issue is in triageRead-onlyGetIssue
Retrieve detailed information about an issue by ID, including attachments, git branch name, and active Triage Intelligence suggestions when the issue is in triage
Inputs
idstringrequired- Issue ID or identifier (e.g., LIN-123)
includeCustomerNeedsboolean- Include associated customer needsdefault
false includeRelationsboolean- Include blocking/related/duplicate relationsdefault
false includeReleasesboolean- Include associated releasesdefault
false
linearmcp_get_issue_statusRetrieve detailed information about an issue status in Linear by name or IDRead-onlyGetIssueStatus
Retrieve detailed information about an issue status in Linear by name or ID
Inputs
idstringrequired- Status ID
namestringrequired- Status name
teamstringrequired- Team name or ID
linearmcp_get_milestoneRetrieve details of a specific milestone by ID or nameRead-onlyGetMilestone
Retrieve details of a specific milestone by ID or name
Inputs
projectstringrequired- Project name, ID, identifier (e.g., PROJ-123), or slug
querystringrequired- Milestone name or ID
linearmcp_get_projectRetrieve details of a specific project in LinearRead-onlyGetProject
Retrieve details of a specific project in Linear
Inputs
querystringrequired- Project name, ID, identifier (e.g., PROJ-123), or slug
includeMembersboolean- Include project membersdefault
false includeMilestonesboolean- Include milestonesdefault
false includeResourcesboolean- Include resources (documents, links, attachments)default
false
linearmcp_get_releaseRetrieve details of a release by ID or slug.Read-onlyGetRelease
Retrieve details of a release by ID or slug.
Inputs
idstringrequired- Release ID or slug
includeReleaseNotesboolean- Include associated release notesdefault
false
linearmcp_get_release_noteRetrieve release notes by ID or slug, including markdown content.Read-onlyGetReleaseNote
Retrieve release notes by ID or slug, including markdown content.
Inputs
idstringrequired- Release notes ID or slug
includeReleasesboolean- Include associated releasesdefault
false
linearmcp_get_status_updatesList or get project/initiative status updates.Read-onlyGetStatusUpdates
List or get project/initiative status updates. Pass `id` to get a specific update, or filter to list.
Inputs
typestringrequired- Type of status update — project or initiativeone of
projectinitiative createdAtstring- Created after: ISO-8601 date/duration (e.g., -P1D)
cursorstring- Next page cursor
idstring- Status update ID - if provided, returns this specific update
includeArchivedboolean- Include archived itemsdefault
false initiativestring- Initiative name, ID, identifier (e.g., INIT-123), or slug
limitnumber- Max results (default 50, max 250)default
50 orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt projectstring- Project name, ID, identifier (e.g., PROJ-123), or slug
updatedAtstring- Updated after: ISO-8601 date/duration (e.g., -P1D)
userstring- User ID, name, email, or "me"
linearmcp_get_teamRetrieve details of a specific Linear teamRead-onlyGetTeam
Retrieve details of a specific Linear team
Inputs
querystringrequired- Team UUID, key, or name
linearmcp_get_userRetrieve details of a specific Linear userRead-onlyGetUser
Retrieve details of a specific Linear user
Inputs
querystringrequired- User ID, name, email, or "me"
linearmcp_get_workspaceRetrieve the connected Linear workspaceRead-onlyGetWorkspace
Retrieve the connected Linear workspace
Inputs
This tool takes no inputs.
linearmcp_list_agent_skillsList Linear Agent skills available to the authenticated user.Read-onlyListAgentSkills
List Linear Agent skills available to the authenticated user.
Inputs
cursorstring- Next page cursor
limitnumber- Max results (default 50, max 250)default
50 orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt
linearmcp_list_commentsList comments on a Linear issue, project, initiative, document, project milestone, or project/initiative status update.Read-onlyListComments
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.
Inputs
cursorstring- Next page cursor
documentIdstring- Document ID or slug (provide exactly one parent)
initiativeIdstring- Initiative name, ID, identifier (e.g., INIT-123), or slug (provide exactly one parent)
issueIdstring- Issue ID or identifier (e.g., LIN-123) (provide exactly one parent)
limitnumber- Max results (default 50, max 250)default
50 milestoneIdstring- Milestone UUID (provide exactly one parent). Resolve milestone names via list_milestones first.
orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt projectIdstring- Project name, ID, identifier (e.g., PROJ-123), or slug (provide exactly one parent)
statusUpdateIdstring- Status update UUID (provide exactly one parent). Resolve status updates via get_status_updates first.
statusUpdateTypestring- Type 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.one of
projectinitiative
linearmcp_list_customersList customers in the user's Linear workspaceRead-onlyListCustomers
List customers in the user's Linear workspace
Inputs
createdAtstring- Created after: ISO-8601 date/duration (e.g., -P1D)
cursorstring- Next page cursor
includeArchivedboolean- Include archived itemsdefault
false includeNeedsboolean- Include associated customer needsdefault
false limitnumber- Max results (default 50, max 250)default
50 orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt ownerstring- User ID, name, email, or "me"
querystring- Search customer name
statusstring- Customer status name or ID
tierstring- Customer tier name or ID
updatedAtstring- Updated after: ISO-8601 date/duration (e.g., -P1D)
linearmcp_list_cyclesRetrieve cycles for a specific Linear teamRead-onlyListCycles
Retrieve cycles for a specific Linear team
Inputs
teamIdstringrequired- Team ID
typestring- Filter: current, previous, next, or allone of
currentpreviousnext
linearmcp_list_diffsList Linear diff pull requests visible to the authenticated userRead-onlyListDiffs
List Linear diff pull requests visible to the authenticated user
Inputs
cursorstring- Next page cursor
limitnumber- Max results (default 50, max 250)default
50 orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt ownerstring- Filter returned diffs by repository owner
querystring- Broad search by title, branch, PR number, or bare slug
repostring- Filter returned diffs by repository name
statusstring- Filter returned diffs by pull request status
linearmcp_list_documentsList documents in the user's Linear workspaceRead-onlyListDocuments
List documents in the user's Linear workspace
Inputs
createdAtstring- Created after: ISO-8601 date/duration (e.g., -P1D)
creatorIdstring- Filter by creator ID
cursorstring- Next page cursor
fieldsarray- Fields to include in each result. id is always included. Omit or pass an empty array for the default response.
includeArchivedboolean- Include archived documentsdefault
false initiativeIdstring- Filter by initiative ID
limitnumber- Max results (default 50, max 250)default
50 orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt projectIdstring- Filter by project ID
querystring- Search query
teamIdstring- Filter by team ID
updatedAtstring- Updated after: ISO-8601 date/duration (e.g., -P1D)
linearmcp_list_initiative_labelsList available initiative labels in the Linear workspaceRead-onlyListInitiativeLabels
List available initiative labels in the Linear workspace
Inputs
cursorstring- Next page cursor
limitnumber- Max results (default 50, max 250)default
50 namestring- Filter by name
orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt
linearmcp_list_initiativesList initiatives in the user's Linear workspaceRead-onlyListInitiatives
List initiatives in the user's Linear workspace
Inputs
createdAtstring- Created after: ISO-8601 date/duration (e.g., -P1D)
cursorstring- Next page cursor
fieldsarray- Fields to include in each result. id is always included. Omit or pass an empty array for the default response.
includeArchivedboolean- Include archived itemsdefault
false includeProjectsboolean- Include projectsdefault
false includeSubInitiativesboolean- Include sub-initiativesdefault
false labelstring- Label name or ID
leadTeamstring- Lead team name, key, or ID
limitnumber- Max results (default 50, max 250)default
50 orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt ownerstring- User ID, name, email, or "me"
parentInitiativestring- Parent initiative. Initiative name, ID, identifier (e.g., INIT-123), or slug
querystring- Search initiative name
statusstring- Status of the initiative
updatedAtstring- Updated after: ISO-8601 date/duration (e.g., -P1D)
linearmcp_list_issue_labelsList available issue labels in a Linear workspace or teamRead-onlyListIssueLabels
List available issue labels in a Linear workspace or team
Inputs
cursorstring- Next page cursor
limitnumber- Max results (default 50, max 250)default
50 namestring- Filter by name
orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt teamstring- Team name or ID
linearmcp_list_issue_statusesList available issue statuses in a Linear teamRead-onlyListIssueStatuses
List available issue statuses in a Linear team
Inputs
teamstringrequired- Team name or ID
linearmcp_list_issuesList issues in the user's Linear workspace, including active Triage Intelligence suggestions for issues in triage.Read-onlyListIssues
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.
Inputs
assigneestring- User ID, name, email, or "me"
createdAtstring- Created after: ISO-8601 date/duration (e.g., -P1D)
cursorstring- Next page cursor
cyclestring- Cycle name, number, or ID
delegatestring- Agent name or ID. When the user asks to delegate to "Linear" or "the Linear agent", this refers to the "Linear" app user specifically
fieldsarray- Fields to include in each result. id is always included. Omit or pass an empty array for the default response.
includeArchivedboolean- Include archived itemsdefault
true labelstring- Label name or ID
limitnumber- Max results (default 50, max 250)default
50 orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt parentIdstring- Parent issue ID or identifier (e.g., LIN-123)
prioritynumber- 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low
projectstring- Project name, ID, identifier (e.g., PROJ-123), or slug
querystring- Search issue title or description
releasestring- Release ID or slug
statestring- State type, name, or ID
teamstring- Team name or ID
updatedAtstring- Updated after: ISO-8601 date/duration (e.g., -P1D)
linearmcp_list_milestonesList all milestones in a Linear projectRead-onlyListMilestones
List all milestones in a Linear project
Inputs
projectstringrequired- Project name, ID, identifier (e.g., PROJ-123), or slug
linearmcp_list_project_labelsList available project labels in the Linear workspaceRead-onlyListProjectLabels
List available project labels in the Linear workspace
Inputs
cursorstring- Next page cursor
limitnumber- Max results (default 50, max 250)default
50 namestring- Filter by name
orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt
linearmcp_list_projectsList projects in the user's Linear workspaceRead-onlyListProjects
List projects in the user's Linear workspace
Inputs
createdAtstring- Created after: ISO-8601 date/duration (e.g., -P1D)
cursorstring- Next page cursor
fieldsarray- Fields to include in each result. id is always included. Omit or pass an empty array for the default response.
includeArchivedboolean- Include archived itemsdefault
false includeMembersboolean- Include project membersdefault
false includeMilestonesboolean- Include milestonesdefault
false initiativestring- Initiative name, ID, identifier (e.g., INIT-123), or slug
labelstring- Label name or ID
limitnumber- Max results (default 50, max 50)default
50 memberstring- User ID, name, email, or "me"
orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt querystring- Search project name
statestring- State type, name, or ID
teamstring- Team name or ID
updatedAtstring- Updated after: ISO-8601 date/duration (e.g., -P1D)
linearmcp_list_release_notesList release notes in the workspace, optionally filtered by pipeline or covered release.Read-onlyListReleaseNotes
List release notes in the workspace, optionally filtered by pipeline or covered release.
Inputs
createdAtstring- Created after: ISO-8601 date/duration (e.g., -P1D)
cursorstring- Next page cursor
includeArchivedboolean- Include archived itemsdefault
false includeContentboolean- Include markdown release notes contentdefault
false includeReleasesboolean- Include associated releasesdefault
false limitnumber- Max results (default 50, max 250)default
50 orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt pipelinestring- Release pipeline ID, slug, or exact name
querystring- Search release notes title
releasestring- Release ID or slug
updatedAtstring- Updated after: ISO-8601 date/duration (e.g., -P1D)
linearmcp_list_release_pipelinesList release pipelines in the workspace.Read-onlyListReleasePipelines
List release pipelines in the workspace.
Inputs
createdAtstring- Created after: ISO-8601 date/duration (e.g., -P1D)
cursorstring- Next page cursor
includeArchivedboolean- Include archived itemsdefault
false includeStagesboolean- Include each pipeline's stagesdefault
false includeTeamsboolean- Include each pipeline's teamsdefault
false isProductionboolean- Filter by production pipeline flag
limitnumber- Max results (default 50, max 250)default
50 orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt querystring- Search pipeline name
teamstring- Team name or ID
typestring- Pipeline type: continuous | scheduledone of
continuousscheduled updatedAtstring- Updated after: ISO-8601 date/duration (e.g., -P1D)
linearmcp_list_releasesList releases in the workspace, with optional filtering by pipeline, stage, version, and text.Read-onlyListReleases
List releases in the workspace, with optional filtering by pipeline, stage, version, and text.
Inputs
createdAtstring- Created after: ISO-8601 date/duration (e.g., -P1D)
cursorstring- Next page cursor
hasReleaseNotesboolean- Filter to releases that do (true) or do not (false) have release notes
includeArchivedboolean- Include archived itemsdefault
false includeReleaseNotesboolean- Include associated release notesdefault
false limitnumber- Max results (default 50, max 250)default
50 orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt pipelinestring- Release pipeline ID, slug, or exact name
querystring- Search release name or version
stagestring- Release stage ID or exact name
stageTypestring- Filter by stage lifecycle typeone of
plannedstartedcompletedcanceled updatedAtstring- Updated after: ISO-8601 date/duration (e.g., -P1D)
versionstring- Exact version match
linearmcp_list_teamsList teams in the user's Linear workspaceRead-onlyListTeams
List teams in the user's Linear workspace
Inputs
createdAtstring- Created after: ISO-8601 date/duration (e.g., -P1D)
cursorstring- Next page cursor
includeArchivedboolean- Include archived teamsdefault
false limitnumber- Max results (default 50, max 250)default
50 orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt querystring- Search query
updatedAtstring- Updated after: ISO-8601 date/duration (e.g., -P1D)
linearmcp_list_usersRetrieve users in the Linear workspaceRead-onlyListUsers
Retrieve users in the Linear workspace
Inputs
cursorstring- Next page cursor
limitnumber- Maximum number of users to returndefault
50 orderBystring- Sort: createdAt | updatedAtone of
createdAtupdatedAtdefaultupdatedAt querystring- Filter by name or email
teamstring- Team name or ID
linearmcp_search_documentationSearch Linear's documentation to learn about features and usageRead-onlySearchDocumentation
Search Linear's documentation to learn about features and usage
Inputs
querystringrequired- Search query
pagenumber- Page numberdefault
0
linearmcp_create_attachmentDeprecated fallback for tiny files only.WriteCreateAttachment
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.
Inputs
base64Contentstringrequired- Deprecated base64-encoded file content to upload
contentTypestringrequired- MIME type for the upload (e.g., 'image/png', 'application/pdf')
filenamestringrequired- Filename for the upload (e.g., 'screenshot.png')
issuestringrequired- Issue ID or identifier (e.g., LIN-123)
sha256stringrequired- Expected SHA-256 hex digest of the decoded file bytes.
sizeinteger- Optional expected decoded file size in bytes. Rejects the upload if it does not match.
subtitlestring- Optional subtitle for the attachment
titlestring- Optional title for the attachment
linearmcp_create_attachment_from_uploadLink an already-uploaded Linear assetUrl to an existing issue as an attachment.WriteCreateAttachmentFromUpload
Link an already-uploaded Linear assetUrl to an existing issue as an attachment.
Inputs
assetUrlstringrequired- Linear upload assetUrl returned by prepare_attachment_upload
issuestringrequired- Issue ID or identifier (e.g., LIN-123)
subtitlestring- Optional attachment subtitle
titlestring- Attachment title. Defaults to filename or asset URL
linearmcp_create_initiative_labelCreate a new Linear initiative labelWriteCreateInitiativeLabel
Create a new Linear initiative label
Inputs
namestringrequired- Label name
colorstring- Hex color code
descriptionstring- Label description
isGroupboolean- Is label group (not directly applicable)default
false parentstring- Parent label group name
linearmcp_create_issue_labelCreate a new Linear issue labelWriteCreateIssueLabel
Create a new Linear issue label
Inputs
namestringrequired- Label name
colorstring- Hex color code
descriptionstring- Label description
isGroupboolean- Is label group (not directly applicable)default
false parentstring- Parent label group name
teamIdstring- Team UUID (omit for workspace label)
linearmcp_merge_diffMerge a Linear diff or add it to the repository's merge queueWriteMergeDiff
Merge a Linear diff or add it to the repository's merge queue
Inputs
urlOrIdstringrequired- Linear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URL
mergeMethodstring- Merge method; omit to use the repository defaultone of
MERGEREBASESQUASH
linearmcp_prepare_attachment_uploadPrepare a direct Linear file upload for an existing issue.WritePrepareAttachmentUpload
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.
Inputs
contentTypestringrequired- MIME type, e.g. image/png or application/pdf
filenamestringrequired- Filename for the upload, e.g. screenshot.png
issuestringrequired- Issue ID or identifier (e.g., LIN-123)
sizeintegerrequired- Exact file size in bytes. Must be smaller than 2 GB.
subtitlestring- Suggested attachment subtitle for the finalize step
titlestring- Suggested attachment title for the finalize step
linearmcp_resolve_diff_threadResolve or reopen a top-level comment thread on a Linear diffWriteResolveDiffThread
Resolve or reopen a top-level comment thread on a Linear diff
- Idempotent
Inputs
threadIdstringrequired- Top-level diff thread/comment ID
resolvedboolean- True to resolve the thread; false to reopen itdefault
true
linearmcp_save_customerCreate or update a Linear customer.WriteSaveCustomer
Create or update a Linear customer. If id is provided, updates the existing customer; otherwise creates a new one. When creating, name is required.
Inputs
domainsarray- Domains to add to this customer. Append-only; existing domains are never removed
externalIdsarray- External system IDs to add. Append-only; existing IDs are never removed
idstring- Customer ID. If provided, updates the existing customer
namestring- Customer name (required when creating)
ownerstring- User ID, name, email, or "me"
revenuenumber- Annual revenue generated by the customer
sizenumber- Size of the customer organization
statusstring- Customer status name or ID
tierstring- Customer tier name or ID
linearmcp_save_customer_needCreate or update a customer need (request) in Linear.WriteSaveCustomerNeed
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.
Inputs
bodystring- Description of the customer need (required when creating)
customerstring- Customer ID or name
idstring- Customer need ID. If provided, updates the existing need
issuestring- Issue ID or identifier (e.g., LIN-123) to associate with this need
prioritynumber- Whether the need is important. 0 = Not important, 1 = Important
projectstring- Project name, ID, identifier (e.g., PROJ-123), or slug to associate with this need
sourcestring- URL to attach as the source for this customer need, such as a transcript or support thread
linearmcp_save_diff_commentCreate, reply to, or edit a comment or persisted draft on a Linear diff.WriteSaveDiffComment
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.
Inputs
bodystringrequired- Comment body as plain text
anchorobject- Optional comment anchor copied from a diff thread or built for a file or diff hunk
anchorContentstring- Exact source text of the anchor's end line; stored with an inline draft so it can be re-anchored after the diff receives new revisions
commentIdstring- Existing comment ID to edit
draftboolean- Save as a private persisted draft without submittingdefault
false draftIdstring- Existing persisted draft ID to edit or submit
parentIdstring- Top-level comment ID to reply to; also required when submitting a persisted reply draft
urlOrIdstring- Linear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URL
linearmcp_save_initiativeCreate or update a Linear initiative.WriteSaveInitiative
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.
Inputs
colorstring- Hex color
descriptionstring- Content 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)
iconstring- Icon name or emoji code (e.g. "Rocket" or ":eagle:"), not a raw Unicode emoji
idstring- Initiative name, ID, identifier (e.g., INIT-123), or slug. If provided, updates the existing initiative
labelsarray- Label 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 unchanged
leadTeamstring- Lead team name, key, or ID. Null to remove the lead team
namestring- Initiative name (required when creating)
ownerstring- User ID, name, email, or "me". Null to remove
parentInitiativesarray- Parent initiatives to add. Initiative name, ID, identifier (e.g., INIT-123), or slug. Appended to existing parents
patcharray- Partial 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.
priorityinteger- 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low
statusstring- Initiative status (Proposed, Planned, Active, Completed, Canceled)
summarystring- Short summary (max 255 chars)
targetDatestring- Target date (ISO format)
linearmcp_save_releaseCreate or update a release.WriteSaveRelease
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.
Inputs
commitShastring- Commit SHA associated with the release
completedAtstring- Completed timestamp (ISO DateTime, null to remove)
createdAtstring- Import/create timestamp (ISO DateTime)
descriptionstring- Release description
idstring- Release ID or slug to update. Omit to create a new release.
namestring- Release name (required when creating)
pipelinestring- Release pipeline ID, slug, or exact name (required when creating)
stagestring- Release stage ID, exact name, or lifecycle type within the release pipeline
startDatestring- Estimated start date (ISO YYYY-MM-DD, null to remove)
startedAtstring- Started timestamp (ISO DateTime, null to remove)
targetDatestring- Estimated completion date (ISO YYYY-MM-DD, null to remove)
versionstring- Version identifier
linearmcp_save_release_noteCreate or update release notes.WriteSaveReleaseNote
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.
Inputs
contentstring- Content 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)
idstring- Release notes ID or slug to update. Omit to create new release notes.
patcharray- Partial 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.
pipelinestring- Release pipeline ID, slug, or exact name (required when creating)
rangeFromReleasestring- Oldest release ID or slug in the note range
rangeToReleasestring- Newest release ID or slug in the note range
releasesarray- Release IDs or slugs to include in the note
titlestring- Release notes title
linearmcp_submit_diff_reviewApprove a Linear diff, request changes, or submit a review commentWriteSubmitDiffReview
Approve a Linear diff, request changes, or submit a review comment
Inputs
decisionstringrequired- Review decision: approved, changesRequested, or commentedone of
approvedchangesRequestedcommented urlOrIdstringrequired- Linear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URL
bodystring- Optional review body; required when requesting changes or commenting
linearmcp_delete_attachmentDelete an attachment by IDDestructiveDeleteAttachment
Delete an attachment by ID
Inputs
idstringrequired- Attachment ID
linearmcp_delete_commentDelete a Linear comment.DestructiveDeleteComment
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.
Inputs
idstringrequired- Comment ID
linearmcp_delete_customerDelete a customer in LinearDestructiveDeleteCustomer
Delete a customer in Linear
Inputs
idstringrequired- Customer ID
linearmcp_delete_customer_needArchive a customer need in LinearDestructiveDeleteCustomerNeed
Archive a customer need in Linear
Inputs
idstringrequired- Customer need ID
linearmcp_delete_diff_commentDelete a comment from a Linear diffDestructiveDeleteDiffComment
Delete a comment from a Linear diff
Inputs
commentIdstringrequired- Diff comment ID to delete
linearmcp_delete_status_updateDelete (archive) a project or initiative status update.DestructiveDeleteStatusUpdate
Delete (archive) a project or initiative status update.
Inputs
idstringrequired- Status update ID
typestringrequired- Type of status updateone of
projectinitiative
linearmcp_save_commentCreate or update a comment on a Linear issue, project, initiative, document, project milestone, or project/initiative status update.DestructiveSaveComment
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.
Inputs
bodystringrequired- Content 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)
documentIdstring- Document ID or slug (provide exactly one parent)
idstring- Comment ID. If provided, updates the existing comment
initiativeIdstring- Initiative name, ID, identifier (e.g., INIT-123), or slug (provide exactly one parent)
issueIdstring- Issue ID or identifier (e.g., LIN-123) (provide exactly one parent)
milestoneIdstring- Milestone UUID (provide exactly one parent). Resolve milestone names via list_milestones first.
parentIdstring- Parent comment ID (for replies, only when creating)
projectIdstring- Project name, ID, identifier (e.g., PROJ-123), or slug (provide exactly one parent)
statusUpdateIdstring- Status update UUID (provide exactly one parent). Resolve status updates via get_status_updates first.
statusUpdateTypestring- Type of status update named by statusUpdateId, as returned by get_status_updates. Only valid together with statusUpdateId; rejected when id or parentId is provided.one of
projectinitiative
linearmcp_save_documentCreate or update a Linear document.DestructiveSaveDocument
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.
Inputs
colorstring- Hex color
contentstring- Content 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)
cyclestring- Cycle name, number, or ID. When passing a name or number, also pass team to disambiguate.
iconstring- Icon name or emoji code (e.g. "Rocket" or ":eagle:"), not a raw Unicode emoji
idstring- Document ID or slug to update. Omit to create a new document.
initiativestring- Initiative name, ID, identifier (e.g., INIT-123), or slug
issuestring- Issue ID or identifier (e.g., LIN-123)
patcharray- Partial 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.
projectstring- Project name, ID, identifier (e.g., PROJ-123), or slug
teamstring- Team name or ID. Attaches the document to the team, unless cycle is also passed, in which case it disambiguates the cycle.
titlestring- Document title (required when creating)
linearmcp_save_issueCreate or update a Linear issue.DestructiveSaveIssue
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".
Inputs
addReleasesarray- Release IDs or slugs to add. Append-only; existing releases are never removed
assigneestring- User ID, name, email, or 'me'. Null to remove assignee.
blockedByarray- Issue IDs/identifiers blocking this. Append-only; existing relations are never removed
blocksarray- Issue IDs/identifiers this blocks. Append-only; existing relations are never removed
cyclestring- Cycle name, number, or ID. Pass null to remove from cycle.
delegatestring- Agent 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.
descriptionstring- Content 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)
dueDatestring- Due date (ISO format). On update, pass null to remove the due date
duplicateOfstring- Issue ID this is a duplicate of. Pass null to remove.
estimatestring- Issue 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.
idstring- Only for updating. Issue ID or identifier (e.g., LIN-123). Do NOT pass when creating.
labelsarray- Label names or IDs to apply to the issue. Replaces the full label set; existing labels not included are removed.
linksarray- Link attachments to add [{url, title}]. Append-only; existing links are never removed
milestonestring- Milestone name or ID
parentIdstring- Parent issue ID or identifier (e.g., LIN-123). Null to remove.
patcharray- Partial 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.
prioritynumber- 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low
projectstring- Project name, ID, identifier (e.g., PROJ-123), or slug. Null to remove
relatedToarray- Related issue IDs/identifiers. Append-only; existing relations are never removed
removeBlockedByarray- Issue IDs/identifiers to remove as blockers of this issue
removeBlocksarray- Issue IDs/identifiers to stop blocking
removeRelatedToarray- Related issue IDs/identifiers to remove
removeReleasesarray- Release IDs or slugs to remove. Only valid when updating an existing issue
setReleasesarray- Replace all releases on the issue with these. Cannot be combined with addReleases/removeReleases
slaBreachesAtstring- ISO-8601 timestamp when the SLA will breach. On update, pass null to remove the SLA
slaTypestring- SLA day counting type: "all" or "onlyBusinessDays". Only use with slaBreachesAt; null means unset
statestring- State type, name, or ID
teamstring- Team name or ID (required when creating)
titlestring- Issue title (required when creating)
linearmcp_save_milestoneCreate or update a milestone in a Linear project.DestructiveSaveMilestone
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.
Inputs
projectstringrequired- Project name, ID, identifier (e.g., PROJ-123), or slug
descriptionstring- Milestone description
idstring- Milestone name or ID. If provided, updates existing
namestring- Milestone name (required when creating)
targetDatestring- Target completion date (ISO format, null to remove)
linearmcp_save_projectCreate or update a Linear project.DestructiveSaveProject
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.
Inputs
addInitiativesarray- Initiatives to add. Initiative name, ID, identifier (e.g., INIT-123), or slug
addTeamsarray- Team name or ID to add
colorstring- Hex color
descriptionstring- Content 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)
iconstring- Icon name or emoji code
idstring- Project name, ID, identifier (e.g., PROJ-123), or slug. If provided, updates the existing project
labelsarray- Label names or IDs
leadstring- User ID, name, email, or 'me'. Null to remove
linksarray- External resource links to add [{url, title}]. Append-only; existing links are never removed
namestring- Project name (required when creating)
patcharray- Partial 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.
priorityinteger- 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low
removeInitiativesarray- Initiatives to remove. Initiative name, ID, identifier (e.g., INIT-123), or slug
removeTeamsarray- Team name or ID to remove
setInitiativesarray- Replace all initiatives with these. Initiative name, ID, identifier (e.g., INIT-123), or slug. Cannot combine with addInitiatives/removeInitiatives
setTeamsarray- Replace all teams with these. Cannot combine with addTeams/removeTeams
startDatestring- Start date (ISO format). Pair with startDateResolution to indicate precision (e.g. month, quarter)
startDateResolutionstring- Start date resolutionone of
halfYearmonthquarteryear statestring- Project state
summarystring- Short summary (max 255 chars)
targetDatestring- Target date (ISO format). Pair with targetDateResolution to indicate precision (e.g. month, quarter)
targetDateResolutionstring- Target date resolutionone of
halfYearmonthquarteryear
linearmcp_save_status_updateCreate or update a project/initiative status update.DestructiveSaveStatusUpdate
Create or update a project/initiative status update. Omit `id` to create, provide `id` to update.
Inputs
typestringrequired- Type of status updateone of
projectinitiative bodystring- Content 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)
healthstring- Health status of the project or initiativeone of
onTrackatRiskoffTrack idstring- Status update ID - if provided, updates this existing update
initiativestring- Initiative name, ID, identifier (e.g., INIT-123), or slug
isDiffHiddenboolean- Deprecated. Hide diff with previous update (create only)
projectstring- Project name, ID, identifier (e.g., PROJ-123), or slug
No tools match.