- Step 1 of a two-step upload: request a signed upload URL for a file. This action does NOT transfer any file bytes — it only returns a pre-signed URL that the caller must then PUT the file contents to. Use it to prepare an image/video/attachment for use as a Linear asset.
- Update organization settings (admin only)
- Invite a new member to the organization by email (admin only)
- Suspend a user account (admin only)
- Retrieve agent sessions with cursor pagination
- Retrieve a specific agent session by ID
- Get the current Linear connection's unified credentials and identity.
- Get basic information for an application by client ID
- Link an external resource to an issue as an attachment
- Remove (delete) an attachment from its issue by attachment ID — this is the action for a 'remove/delete this attachment' request
- Edit an existing attachment's title, subtitle, icon, or metadata (does NOT remove it — use delete_attachment to remove/detach an attachment)
- Retrieve comments with optional filtering and cursor pagination
- Retrieve a specific comment by ID
- Create a new comment on an issue
- Update an existing comment's body
- Delete a comment by ID
- Mark a comment thread as resolved
- Reopen a resolved comment thread
- Retrieve customers with optional filtering and cursor pagination
- Retrieve a specific customer by ID
- Create a new customer with name, domains, and optional revenue, size, status, and tier
- Update an existing customer's name, domains, revenue, size, status, or tier
- Delete a customer by ID
- Create or update a customer by matching on id or externalId, useful for idempotent sync workflows
- Retrieve customer needs with optional filtering and cursor pagination
- Retrieve the full details of a specific customer need by its ID (call this after list_customer_needs to return the requested details)
- Create a new customer need attached to an issue, project, or comment
- Update a customer need's body, priority, customer, or the issue/project it is linked to
- Delete a customer need by ID
- Retrieve customer statuses with cursor pagination
- Retrieve a specific customer status by ID
- Create a new customer status with a color and a name or displayName, plus optional description and position
- Update an existing customer status's name, description, color, or position
- Delete a customer status by ID
- Retrieve customer tiers with cursor pagination
- Retrieve a specific customer tier by its ID (resolve a tier name to its ID via list_customer_tiers first)
- Create a new customer tier with name and optional description
- Update an existing customer tier's display name, description, color, or position
- Delete a customer tier by ID
- Create a new saved custom view with filters
- Update an existing custom view's name, filters, or sharing settings
- Delete a custom view by ID
- Retrieve cycles with optional filtering and cursor pagination
- Retrieve a specific cycle by ID
- Create a new cycle for a team
- Update an existing cycle's name, description, or dates
- Archive a cycle by ID
- Retrieve documents with optional filtering and cursor pagination
- Retrieve a specific document by ID
- Create a new document with title, content, and optional project or initiative association
- Update an existing document's title, content, or associations (does NOT trash a document — use delete_document to move a document to trash)
- Move a document to trash by ID — this is the action for a 'move to trash', 'trash this document', or 'delete document' request
- Retrieve external users for the organization with cursor pagination
- Retrieve a specific external user by ID
- Retrieve the authenticated user's favorites, including the subject each one points to
- Add an item (issue, project, cycle, custom view, document, label, or user) to the user's favorites
- Remove an item from favorites by favorite ID
- Retrieve initiatives with optional filtering and cursor pagination
- Retrieve a specific initiative by ID
- Create a new initiative to group projects
- Update an existing initiative's name, description, dates, or other properties
- Delete an initiative by ID
- Archive an initiative by ID
- Link an initiative to a project
- Remove the link between an initiative and a project
- Create a status update for an initiative
- Retrieve issues with optional filtering by team, project, assignee, or status and cursor pagination
- Retrieve a specific issue by ID or identifier
- Create a new issue in Linear with title, description, team, and optional fields
- Update an existing issue's title, description, assignee, priority, state, or other fields
- Delete an issue by ID
- Suggests filters for an issue view based on a text prompt
- Search issues by text term with optional filtering and cursor pagination
- Archive an issue by ID
- Restore an archived issue by ID
- Create a relationship between two issues
- Remove a relationship between two issues
- Create multiple issues at once
- Update multiple issues at once by their UUIDs
- Retrieve issue labels with optional filtering and cursor pagination
- Retrieve a specific issue label by ID
- Create a new issue label for a team
- Update an existing issue label's name, description, or color
- Delete an issue label by ID
- Retrieve an issue attachment by ID. Use format=url to get its title and download URL without fetching the file content. Linear upload URLs are signed for five minutes; call again to refresh. External URLs are returned unchanged. Files embedded in comments have no issue attachment ID; use the URLs in list_comments attachments instead. Download and process documents with your own file tools.
- Prepare a direct Linear file upload for an existing issue. Uploaded files appear in the issue's Resources; they are not native Linear Documents. To embed a file in Markdown without adding it to an issue's Resources, use prepare_file_upload instead. For written findings or proposals, prefer updating the issue description or using save_document with issue to create an editable Linear Document, unless the user requests a file. The upload workflow creates the Resources link; do not also add the upload URL to save_issue's links field. To revise a file, upload a replacement. To remove its Resources link, use delete_attachment with the attachment ID returned by get_issue. These tools do not edit uploaded file contents, permanently delete stored files, or inspect or change per-file permissions. Explain these limits when relevant. Workflow: 1. Call this tool with issue, filename, contentType, and size. 2. Upload raw bytes with PUT to uploadRequest.url outside MCP. 3. All headers in uploadRequest.headers are part of the signed request, so send them verbatim. 4. After PUT succeeds, call create_attachment_from_upload with assetUrl to link it to the issue. Do not base64-encode or transform the file. Use curl --data-binary @path or fetch(url, { method: 'PUT', body: blob }). Omitting or modifying any signed header, including casing, will return HTTP 403. The signed URL must be used within 60 seconds or it will expire. Upload sequencing: Prepare, PUT, and finalize one file before calling this tool for another file. Do not batch multiple prepare_attachment_upload calls before starting the PUTs because earlier signed URLs can expire while later files are prepared. Example: curl -X PUT --data-binary @file.png \
-H "content-type: image/png" \
-H "x-goog-content-length-range: N,N" \
-H "cache-control: public, max-age=31536000" \
-H 'Content-Disposition: attachment; filename="file.png"' \
"<uploadRequest.url>"
- Prepare a direct Linear file upload to embed an image or file in a Markdown field. The file is not added to any issue's Resources. To attach a file to an issue's Resources, use prepare_attachment_upload. Workflow: 1. Call this tool with filename, contentType, and size. 2. Upload raw bytes with PUT to uploadRequest.url outside MCP. 3. All headers in uploadRequest.headers are part of the signed request, so send them verbatim. 4. After PUT succeeds, put markdown (or assetUrl) in the body of save_diff_comment, update_diff, submit_diff_review, save_comment, save_document, save_project, or another Markdown field.
For submit_diff_evidence, use assetUrl as an attachment url instead.
Do not base64-encode or transform the file. Use curl --data-binary @path or fetch(url, { method: 'PUT', body: blob }). Omitting or modifying any signed header, including casing, will return HTTP 403. The signed URL must be used within 60 seconds or it will expire. Upload sequencing: Prepare and PUT one file before calling this tool for another file. Do not batch multiple prepare_file_upload calls before starting the PUTs because earlier signed URLs can expire while later files are prepared. Example: curl -X PUT --data-binary @file.png \
-H "content-type: image/png" \
-H "x-goog-content-length-range: N,N" \
-H "cache-control: public, max-age=31536000" \
-H 'Content-Disposition: attachment; filename="file.png"' \
"<uploadRequest.url>"
- Link an already-uploaded Linear assetUrl to an existing issue as an attachment. Uploaded files appear in the issue's Resources; they are not native Linear Documents. To embed a file in Markdown without adding it to an issue's Resources, use prepare_file_upload instead. For written findings or proposals, prefer updating the issue description or using save_document with issue to create an editable Linear Document, unless the user requests a file. The upload workflow creates the Resources link; do not also add the upload URL to save_issue's links field. To revise a file, upload a replacement. To remove its Resources link, use delete_attachment with the attachment ID returned by get_issue. These tools do not edit uploaded file contents, permanently delete stored files, or inspect or change per-file permissions. Explain these limits when relevant. Use this only after: 1. prepare_attachment_upload returned an assetUrl and uploadRequest. 2. The client successfully PUT raw file bytes to uploadRequest.url. This tool does not upload file content. It only creates the Linear attachment row. If the direct upload failed or the signed URL expired, rerun prepare_attachment_upload and upload again.
- 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`. Uploaded files appear in the issue's Resources; they are not native Linear Documents. To embed a file in Markdown without adding it to an issue's Resources, use prepare_file_upload instead. For written findings or proposals, prefer updating the issue description or using save_document with issue to create an editable Linear Document, unless the user requests a file. The upload workflow creates the Resources link; do not also add the upload URL to save_issue's links field. To revise a file, upload a replacement. To remove its Resources link, use delete_attachment with the attachment ID returned by get_issue. These tools do not edit uploaded file contents, permanently delete stored files, or inspect or change per-file permissions. Explain these limits when relevant. CRITICAL: Do not print base64Content and then copy it into this tool call. Opaque base64 copied through model-visible text is easy to corrupt. Generate base64Content mechanically from the source bytes and pass it through a programmatic argument construction path whenever available. Before calling this tool, verify the values are consistent: Unix-like shells: file="/path/to/file" base64Content=$(base64 < "$file" | tr -d '\n\r') sha256=$(shasum -a 256 "$file" | awk '{print $1}') decodedSha256=$(printf '%s' "$base64Content" | base64 -d | shasum -a 256 | awk '{print $1}') size=$(wc -c < "$file" | tr -d ' ') # optional; stat can also get file byte size decodedSize=$(printf '%s' "$base64Content" | base64 -d | wc -c | tr -d ' ') PowerShell: $file = 'C:\path\to\file' $bytes = [IO.File]::ReadAllBytes($file) $base64Content = [Convert]::ToBase64String($bytes) $sha256 = (Get-FileHash -Algorithm SHA256 -Path $file).Hash.ToLower() $size = $bytes.Length # optional $decoded = [Convert]::FromBase64String($base64Content) $decodedStream = [IO.MemoryStream]::new($decoded) $decodedSha256 = (Get-FileHash -Algorithm SHA256 -InputStream $decodedStream).Hash.ToLower() $decodedSize = $decoded.Length decodedSha256 must equal sha256. If you pass size, decodedSize must equal size. Pass `sha256`. Passing `size` is optional, but recommended for clearer mismatch errors.
- Remove an attachment link from an issue's Resources. This does not delete the stored file. Use the attachment ID from get_issue's attachments array, not a UUID from the upload URL.
- List Linear Agent skills available to the authenticated user.
- Retrieve a Linear Agent skill by ID, including its full markdown instructions.
- 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`. `statusUpdateType` applies only to `statusUpdateId`; omit it for every other parent. 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. Files uploaded in comment bodies are returned in `attachments` with titles and download URLs, not issue attachment IDs. Signed upload URLs expire after five minutes; call list_comments again to refresh them. Download documents using these URLs and process them with your own file tools.
- 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` (`statusUpdateType` applies only to `statusUpdateId`; omit it for every other parent) — comments on issues/projects/initiatives become top-level discussion threads; comments on documents/milestones become description comments. A status update holds a single thread, so a comment on an update that already has one is added to it as a reply. To reply to an existing thread, pass `parentId` and `body`; the reply inherits the parent's thread type, so no entity reference is needed. Parent reference fields are ignored when `id` or `parentId` is provided (`statusUpdateType` is rejected instead).
- 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.
- List a team's cycles with their IDs, numbers, dates, and issue and scope histories
- Find saved issue, project, and initiative views accessible to the user, including personal, workspace, and team views. Excludes archived views and views scoped to a project or initiative. Returns view metadata, not the records matching its filters.
- Retrieve a Linear document by ID or slug
- List documents in the user's Linear workspace
- Create or update a Linear document. If `id` is provided, edits 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`.
- 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.
- Retrieve detailed information about an issue by ID, including attachments, git branch name, and active Triage Intelligence suggestions when the issue is in triage. A nonempty fields selection overrides the include options; request optional fields directly in fields.
- List issues in the user's Linear workspace, including active Triage Intelligence suggestions for issues in triage. For issues assigned to me, use "me" as the assignee. For issues created by me, use "me" as the creator. Use "null" for no assignee.
- Create or update a Linear issue. If `id` is provided, updates the existing issue; otherwise creates a new one. When creating, `team` is required, and `title` is required unless `template` is set. Note: use `assignee` (not `assigneeId`) to set the assignee — it accepts a user ID, name, email, or "me".
- List available issue statuses in a Linear team
- Retrieve detailed information about an issue status in Linear by name or ID
- List available issue labels in a Linear workspace or team. A retired label carries `retiredAt` and cannot be applied to new issues.
- Create or update a Linear issue label. If `id` is provided, updates the existing label; otherwise creates a new one. When creating, `name` is required.
- Create a new Linear issue label. Deprecated: use `save_issue_label`, which can also update labels.
- Retire a Linear issue label so it cannot be applied to new issues. The label stays visible on issues that already have it. Retiring a label group also retires its child labels. Undo with `restore_issue_label`.
- Restore a retired Linear issue label, making it available for use on issues again. Restoring a label group also restores every child label, including any that were retired separately.
- List projects in the user's Linear workspace
- Retrieve details of a specific project in Linear
- 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. Pass `template` to create the project from a project template. To change parts of the description without resending all of it, pass `patch` instead of `description`. `state` resolves against the project statuses of the lead team, so pass `leadTeam` when creating a multi-team project whose teams use different statuses.
- List available project labels in a Linear workspace or team. Returns workspace labels by default; pass `team` to also include that team's labels. Pass `includeGroups` to include groups, which return `groupType`; child labels return their `parent` and `parentGroupType`. A team-scoped label carries a `team` field; different teams can hold same-named labels, so check it before acting on an ID. A retired label carries `retiredAt` and cannot be applied to new projects.
- Retire a Linear project label so it cannot be applied to new projects. The label stays visible on projects that already have it. Retiring a label group also retires its child labels. Undo with `restore_project_label`.
- Restore a retired Linear project label, making it available for use on projects again. Restoring a label group also restores every child label, including any that were retired separately.
- Create or update a Linear project label. If `id` is provided, updates the existing label; otherwise creates a new one. When creating, `name` is required.
- List release pipelines in the workspace.
- List releases in the workspace, with optional filtering by pipeline, stage, version, and text.
- Retrieve details of a release by ID or slug.
- 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.
- List release notes in the workspace, optionally filtered by pipeline or covered release.
- Retrieve release notes by ID or slug, including markdown content.
- 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`.
- Share an issue with a workspace user who cannot otherwise access it. Use this tool only when the user explicitly asks to share the issue.
- Remove a workspace user's shared access to an issue. Use this tool only when the user explicitly asks to stop sharing the issue.
- List all milestones in a Linear project
- Retrieve details of a specific milestone by ID or name
- 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.
- Get a page of notifications from the authenticated user's Linear inbox.
- Mark a Linear inbox notification as read or unread, or snooze or unsnooze it.
- List teams in the user's Linear workspace, including their parent IDs and hierarchy names
- Retrieve details of a specific Linear team, including its parent ID and hierarchy name. Use list_teams with parentTeam or ancestorTeam to find its sub-teams
- Retrieve who is responsible for a team's triage: the person on triage now, what happens when an issue enters triage, and the upcoming shifts of the team's triage rotation. Pass `user` to get only that person's shifts, for example to find when their next triage duty starts, even when it is weeks away.
- List the Linear issue, project, and document templates available to the authenticated user. Use this to find the template a team expects, then call get_template for its content.
- Retrieve a Linear template by ID or name: the content it pre-fills, the ids it applies, its sub-issues, and its form fields. Pass the template to save_issue or save_project to apply it. References come back as ids, so read a name with the matching tool when you need one. A form template collects its answers through a form, so applying one here creates an issue with the form unanswered.
- List workspace users with their IDs, names, emails, and admin, guest, and active flags. Use get_user for team memberships.
- Retrieve one user's profile, email, admin, guest, and active flags, plus team IDs, names, and keys. Use list_users to find matching users.
- Retrieve the connected workspace's ID, name, and URL to confirm which workspace you are using
- Search Linear's product documentation for feature and usage guidance. Returns up to five results with titles, URLs, and content snippets per page.
- Exact lookup for a Linear diff. Use with review URLs, GitHub PR URLs, Linear full identifiers, UUIDs, or slugs.
- List Linear diff pull requests visible to the authenticated user
- Exact lookup for diff threads and the authenticated user's drafts. Use with review URLs, GitHub PR URLs, Linear full identifiers, UUIDs, or slugs.
- 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.
- Resolve or reopen a top-level comment thread on a Linear diff
- Delete a comment or persisted draft from a Linear diff
- Approve a Linear diff, request changes, or submit a review comment
- Update a Linear diff's title, description, reviewer requests, issue links, or status. Provide at least one update. Combined updates can partially succeed; inspect the result before retrying. Use merge_diff to merge and submit_diff_review to approve or request changes.
- Merge a Linear diff or add it to the repository's merge queue
- Retrieve the authenticated user, the connected workspace, and how this connection reaches Linear
- List customers in the user's Linear workspace
- Create or update a Linear customer. If `id` is provided, updates the existing customer; otherwise creates a new one. When creating, `name` is required.
- Delete a customer in Linear
- List customer needs (customer requests) for an issue, project, or initiative. Provide exactly one of `issue`, `project`, or `initiative`. Project results include requests linked to the project's issues; initiative results include requests on projects in the initiative or any of its sub-initiatives, and on their issues. Returns requests on closed work too; each need includes its issue's workflow state and its project's status so callers can filter. Paginated; pass `cursor` from the previous page to fetch the next.
- 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.
- Archive a customer need (request) in Linear
- List initiatives in the user's Linear workspace
- Retrieve detailed information about a specific initiative in Linear
- 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`.
- List available initiative labels in the Linear workspace. Pass `includeGroups` to include groups, which return `groupType`; child labels return their `parent` and `parentGroupType`. A retired label carries `retiredAt` and cannot be applied to new initiatives.
- Create or update a Linear initiative label. If `id` is provided, updates the existing label; otherwise creates a new one. When creating, `name` is required.
- Create a new Linear initiative label. Deprecated: use `save_initiative_label`, which can also update labels.
- Retire a Linear initiative label so it cannot be applied to new initiatives. The label stays visible on initiatives that already have it. Retiring a label group also retires its child labels. Undo with `restore_initiative_label`.
- Restore a retired Linear initiative label, making it available for use on initiatives again. Restoring a label group also restores every child label, including any that were retired separately.
- List or get project/initiative status updates with their body, health, author, and parent project or initiative. Pass id to get one update and ignore list filters; omit id to list.
- Create or update a project/initiative status update and return the saved update. To create, omit id and provide body plus project or initiative matching type. To update, provide id; project and initiative are ignored.
- Delete (archive) a project or initiative status update.
- Subscribe to notifications for a team, project, cycle, label, custom view, initiative, or user
- Retrieve projects in the workspace with optional filtering and cursor pagination
- Retrieve a specific project by ID with full details
- Create a new project with name, description, and optional team associations
- Update an existing project's details
- Delete a project by ID
- Archive a project by ID
- Create a status update for a project
- Retrieve project labels with optional filtering and cursor pagination
- Retrieve a specific project label by ID
- Create a new project label
- Update an existing project label's name, description, or color
- Delete a project label by ID
- Retrieve project milestones with optional filtering and cursor pagination
- Retrieve a specific project milestone by ID
- Create a new milestone for a project
- Update an existing project milestone's name, description, or target date
- Delete a project milestone by ID
- Retrieve project statuses with cursor pagination
- Retrieve a specific project status by ID
- Create a new project status with name, type, and optional description, color, and position
- Update an existing project status's name, description, type, color, or position
- Archive a project status by ID
- Add an emoji reaction to a comment, issue, or project update
- Remove an emoji reaction by reaction ID
- Create a new release in a pipeline
- Update an existing release's name, version, description, or other properties
- Delete a release by ID
- Mark a release as complete in a pipeline
- Retrieve teams in the workspace with optional filtering and cursor pagination
- Retrieve a specific team by ID
- Update an existing team's name, description, icon, color, or other properties
- Create a new team with name and optional settings
- Delete a team by ID
- List the memberships of a team, returning each membership's ID alongside its user — needed to remove a user from a team
- Add a user to a team, with optional owner role assignment
- Remove a user from a team
- Create a new issue or project template
- Update an existing template's name, description, data, or other properties
- Delete a template by ID
- Retrieve the currently authenticated user (viewer)
- Retrieve users in the workspace with optional filtering and cursor pagination, use the filter input to search.
- Retrieve a specific user by ID
- Update your own Linear user profile, status, or display settings
- Retrieve webhooks in the organization with cursor pagination
- Retrieve a specific webhook by ID
- Create a new webhook to receive HTTP notifications for data updates
- Update an existing webhook's URL, enabled status, or resource types
- Delete a webhook by ID
- Rotate the signing secret for a webhook
- Retrieve workflow states with optional filtering and cursor pagination
- Retrieve a specific workflow state by ID
- Create a new workflow state for a team with a specified type, name, and color
- Update an existing workflow state's name, color, description, or position
No matching actions