Skip to main content Announcing Tool Policies: AI agent permissions down to the field Read the announcement
Live 222 Actions

Linear MCP Server
for AI Agents

Connect your AI agent to StackOne's Linear MCP server and give it 222 MCP tools out of the box. Auth, tool execution, and security all managed.

Linear logo
Linear MCP Server
Built by StackOne StackOne
DrataGPLocalyzeFlipMindtoolsScreenloop

Coverage

222 Agent Actions

Agents can read, write, delete and run operations in Linear. Extend your agent's capabilities with custom actions.

Authentication

Agent Tool Authentication

Per-user OAuth in one call. Your Linear MCP server gets session-scoped tokens with zero credentials stored on your infra.

Agent Auth →

Security

Agent Protection

Every Linear tool response scanned for prompt injection in milliseconds, with 88.7% accuracy, all running on CPU.

Prompt Injection Defense →

Performance

Max Agent Context. Min Cost.

Free up to 96% of your agent's context window to enhance reasoning and reduce cost, on every Linear call.

Tools Discovery →

What is the Linear MCP Server?

A Linear MCP server lets AI agents read and write Linear data through the Model Context Protocol, Anthropic's open standard for connecting LLMs to external tools. StackOne's Linear MCP server ships with 222 pre-built actions, fully extensible via the Connector Builder, plus managed authentication, prompt injection defense, observability, and agent execution runtime. Connect it from MCP clients like Claude Desktop, Claude Code, Cursor, Goose, and VS Code, or from agent frameworks like OpenAI Agents SDK, LangChain, and Vercel AI SDK.

All Linear MCP Tools

Every StackOne action for Linear, ready for your agent. Read, write, delete and run operations, scoped to exactly what you need.

Agent Sessions

  • List Agent Sessions

    Retrieve agent sessions with cursor pagination

  • Get Agent Session

    Retrieve a specific agent session by ID

Attachments

  • Create Attachment

    Link an external resource to an issue as an attachment

  • Get Attachment

    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.

  • Update Attachment

    Edit an existing attachment's title, subtitle, icon, or metadata (does NOT remove it — use delete_attachment to remove/detach an attachment)

  • Delete Attachment

    Remove (delete) an attachment from its issue by attachment ID — this is the action for a 'remove/delete this attachment' request

  • Delete Attachment

    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.

Comments

  • Create Comment

    Create a new comment on an issue

  • List Comments

    Retrieve comments with optional filtering and cursor pagination

  • Get Comment

    Retrieve a specific comment by ID

  • 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`. `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.

  • Update Comment

    Update an existing comment's body

  • Delete Comment

    Delete a comment by ID

  • 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.

Customers

  • Create Customer

    Create a new customer with name, domains, and optional revenue, size, status, and tier

  • List Customers

    Retrieve customers with optional filtering and cursor pagination

  • Get Customer

    Retrieve a specific customer by ID

  • List Customers

    List customers in the user's Linear workspace

  • Update Customer

    Update an existing customer's name, domains, revenue, size, status, or tier

  • Delete Customer

    Delete a customer by ID

  • Delete Customer

    Delete a customer in Linear

Customer Needs

  • Create Customer Need

    Create a new customer need attached to an issue, project, or comment

  • List Customer Needs

    Retrieve customer needs with optional filtering and cursor pagination

  • Get Customer Need

    Retrieve the full details of a specific customer need by its ID (call this after list_customer_needs to return the requested details)

  • List Customer Needs

    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.

  • Update Customer Need

    Update a customer need's body, priority, customer, or the issue/project it is linked to

  • Delete Customer Need

    Delete a customer need by ID

  • Delete Customer Need

    Archive a customer need (request) in Linear

Customer Status

  • Create Customer Status

    Create a new customer status with a color and a name or displayName, plus optional description and position

  • Get Customer Status

    Retrieve a specific customer status by ID

  • Update Customer Status

    Update an existing customer status's name, description, color, or position

  • Delete Customer Status

    Delete a customer status by ID

Customer Tiers

  • Create Customer Tier

    Create a new customer tier with name and optional description

  • List Customer Tiers

    Retrieve customer tiers with cursor pagination

  • Get Customer Tier

    Retrieve a specific customer tier by its ID (resolve a tier name to its ID via list_customer_tiers first)

  • Update Customer Tier

    Update an existing customer tier's display name, description, color, or position

  • Delete Customer Tier

    Delete a customer tier by ID

Custom Views

  • Create Custom View

    Create a new saved custom view with filters

  • List Custom Views

    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.

  • Update Custom View

    Update an existing custom view's name, filters, or sharing settings

  • Delete Custom View

    Delete a custom view by ID

Cycles

  • Create Cycle

    Create a new cycle for a team

  • List Cycles

    Retrieve cycles with optional filtering and cursor pagination

  • Get Cycle

    Retrieve a specific cycle by ID

  • List Cycles

    List a team's cycles with their IDs, numbers, dates, and issue and scope histories

  • Update Cycle

    Update an existing cycle's name, description, or dates

Documents

  • Create Document

    Create a new document with title, content, and optional project or initiative association

  • List Documents

    Retrieve documents with optional filtering and cursor pagination

  • Get Document

    Retrieve a specific document by ID

  • Get Document

    Retrieve a Linear document by ID or slug

  • List Documents

    List documents in the user's Linear workspace

  • Update Document

    Update an existing document's title, content, or associations (does NOT trash a document — use delete_document to move a document to trash)

  • Delete Document

    Move a document to trash by ID — this is the action for a 'move to trash', 'trash this document', or 'delete document' request

External Users

  • List External Users

    Retrieve external users for the organization with cursor pagination

  • Get External User

    Retrieve a specific external user by ID

Favorites

  • Create Favorite

    Add an item (issue, project, cycle, custom view, document, label, or user) to the user's favorites

  • List Favorites

    Retrieve the authenticated user's favorites, including the subject each one points to

  • Delete Favorite

    Remove an item from favorites by favorite ID

Initiatives

  • Create Initiative

    Create a new initiative to group projects

  • List Initiatives

    Retrieve initiatives with optional filtering and cursor pagination

  • Get Initiative

    Retrieve a specific initiative by ID

  • List Initiatives

    List initiatives in the user's Linear workspace

  • Get Initiative

    Retrieve detailed information about a specific initiative in Linear

  • Update Initiative

    Update an existing initiative's name, description, dates, or other properties

  • Delete Initiative

    Delete an initiative by ID

Initiative To Project Links

  • Create Initiative To Project Link

    Link an initiative to a project

  • Delete Initiative To Project Link

    Remove the link between an initiative and a project

Issues

  • Create Issue

    Create a new issue in Linear with title, description, team, and optional fields

  • List Issues

    Retrieve issues with optional filtering by team, project, assignee, or status and cursor pagination

  • Get Issue

    Retrieve a specific issue by ID or identifier

  • Search Issues

    Search issues by text term with optional filtering and cursor pagination

  • 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 triage. A nonempty fields selection overrides the include options; request optional fields directly in fields.

  • List Issues

    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.

  • Update Issue

    Update an existing issue's title, description, assignee, priority, state, or other fields

  • Batch Create Issues

    Create multiple issues at once

  • Batch Update Issues

    Update multiple issues at once by their UUIDs

  • Delete Issue

    Delete an issue by ID

Issue Relations

  • Create Issue Relation

    Create a relationship between two issues

  • Delete Issue Relation

    Remove a relationship between two issues

Issue Labels

  • Create Issue Label

    Create a new issue label for a team

  • List Issue Labels

    Retrieve issue labels with optional filtering and cursor pagination

  • Get Issue Label

    Retrieve a specific issue label by ID

  • List Issue Labels

    List available issue labels in a Linear workspace or team. A retired label carries `retiredAt` and cannot be applied to new issues.

  • Update Issue Label

    Update an existing issue label's name, description, or color

  • Delete Issue Label

    Delete an issue label by ID

Agent Skills

  • List Agent Skills

    List Linear Agent skills available to the authenticated user.

  • Get Agent Skill

    Retrieve a Linear Agent skill by ID, including its full markdown instructions.

Projects

  • Create Project

    Create a new project with name, description, and optional team associations

  • List Projects

    List projects in the user's Linear workspace

  • Get Project

    Retrieve details of a specific project in Linear

  • List Projects

    Retrieve projects in the workspace with optional filtering and cursor pagination

  • Get Project

    Retrieve a specific project by ID with full details

  • Update Project

    Update an existing project's details

  • Delete Project

    Delete a project by ID

Project Labels

  • Create Project Label

    Create a new project label

  • List Project Labels

    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.

  • List Project Labels

    Retrieve project labels with optional filtering and cursor pagination

  • Get Project Label

    Retrieve a specific project label by ID

  • Update Project Label

    Update an existing project label's name, description, or color

  • Delete Project Label

    Delete a project label by ID

Releases

  • Create Release

    Create a new release in a pipeline

  • List Releases

    List releases in the workspace, with optional filtering by pipeline, stage, version, and text.

  • Get Release

    Retrieve details of a release by ID or slug.

  • Update Release

    Update an existing release's name, version, description, or other properties

  • Delete Release

    Delete a release by ID

Release Notes

  • List Release Notes

    List release notes in the workspace, optionally filtered by pipeline or covered release.

  • Get Release Notes

    Retrieve release notes by ID or slug, including markdown content.

Project Milestones

  • Create Project Milestone

    Create a new milestone for a project

  • List Project Milestones

    List all milestones in a Linear project

  • List Project Milestones

    Retrieve project milestones with optional filtering and cursor pagination

  • Get Project Milestone

    Retrieve a specific project milestone by ID

  • Update Project Milestone

    Update an existing project milestone's name, description, or target date

  • Delete Project Milestone

    Delete a project milestone by ID

Teams

  • Create Team

    Create a new team with name and optional settings

  • List Teams

    List teams in the user's Linear workspace, including their parent IDs and hierarchy names

  • Get Team

    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

  • List Teams

    Retrieve teams in the workspace with optional filtering and cursor pagination

  • Get Team

    Retrieve a specific team by ID

  • Update Team

    Update an existing team's name, description, icon, color, or other properties

  • Delete Team

    Delete a team by ID

Templates

  • Create Template

    Create a new issue or project template

  • List Templates

    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.

  • Get Template

    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.

  • Update Template

    Update an existing template's name, description, data, or other properties

  • Delete Template

    Delete a template by ID

Users

  • List Users

    List workspace users with their IDs, names, emails, and admin, guest, and active flags. Use get_user for team memberships.

  • Get User

    Retrieve one user's profile, email, admin, guest, and active flags, plus team IDs, names, and keys. Use list_users to find matching users.

  • List Users

    Retrieve users in the workspace with optional filtering and cursor pagination, use the filter input to search.

  • Get User

    Retrieve a specific user by ID

  • Update User

    Update your own Linear user profile, status, or display settings

Diffs

  • Get Diff

    Exact lookup for a Linear diff. Use with review URLs, GitHub PR URLs, Linear full identifiers, UUIDs, or slugs.

  • List Diffs

    List Linear diff pull requests visible to the authenticated user

  • Update Diff

    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.

Status Updates

  • Get Status Updates

    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.

  • Delete Status Update

    Delete (archive) a project or initiative status update.

Project Status

  • Create Project Status

    Create a new project status with name, type, and optional description, color, and position

  • Get Project Status

    Retrieve a specific project status by ID

  • Update Project Status

    Update an existing project status's name, description, type, color, or position

Reactions

  • Create Reaction

    Add an emoji reaction to a comment, issue, or project update

  • Delete Reaction

    Remove an emoji reaction by reaction ID

Team Memberships

  • Create Team Membership

    Add a user to a team, with optional owner role assignment

  • List Team Memberships

    List the memberships of a team, returning each membership's ID alongside its user — needed to remove a user from a team

  • Delete Team Membership

    Remove a user from a team

Webhooks

  • Create Webhook

    Create a new webhook to receive HTTP notifications for data updates

  • List Webhooks

    Retrieve webhooks in the organization with cursor pagination

  • Get Webhook

    Retrieve a specific webhook by ID

  • Update Webhook

    Update an existing webhook's URL, enabled status, or resource types

  • Delete Webhook

    Delete a webhook by ID

Workflow States

  • Create Workflow State

    Create a new workflow state for a team with a specified type, name, and color

  • List Workflow States

    Retrieve workflow states with optional filtering and cursor pagination

  • Get Workflow State

    Retrieve a specific workflow state by ID

  • Update Workflow State

    Update an existing workflow state's name, color, description, or position

Other (70)

  • Create Organization Invite

    Invite a new member to the organization by email (admin only)

  • Create Initiative Update

    Create a status update for an initiative

  • Create Attachment From Upload

    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.

  • Create Attachment (deprecated)

    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.

  • Create Issue Label (deprecated)

    Create a new Linear issue label. Deprecated: use `save_issue_label`, which can also update labels.

  • Create Initiative Label (deprecated)

    Create a new Linear initiative label. Deprecated: use `save_initiative_label`, which can also update labels.

  • Create Notification Subscription

    Subscribe to notifications for a team, project, cycle, label, custom view, initiative, or user

  • Create Project Update

    Create a status update for a project

  • Get Unified Credentials

    Get the current Linear connection's unified credentials and identity.

  • Get Application Info

    Get basic information for an application by client ID

  • List Customer Statuses

    Retrieve customer statuses with cursor pagination

  • List Issue Statuses

    List available issue statuses in a Linear team

  • Get Issue Status

    Retrieve detailed information about an issue status in Linear by name or ID

  • List Release Pipelines

    List release pipelines in the workspace.

  • Get Milestone

    Retrieve details of a specific milestone by ID or name

  • Get Notifications

    Get a page of notifications from the authenticated user's Linear inbox.

  • Get Triage Responsibility

    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.

  • Get Workspace

    Retrieve the connected workspace's ID, name, and URL to confirm which workspace you are using

  • Search Documentation

    Search Linear's product documentation for feature and usage guidance. Returns up to five results with titles, URLs, and content snippets per page.

  • Get Diff Threads

    Exact lookup for diff threads and the authenticated user's drafts. Use with review URLs, GitHub PR URLs, Linear full identifiers, UUIDs, or slugs.

  • List Initiative Labels

    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.

  • List Project Statuses

    Retrieve project statuses with cursor pagination

  • Get Viewer

    Retrieve the currently authenticated user (viewer)

  • Update Organization

    Update organization settings (admin only)

  • Delete Diff Comment

    Delete a comment or persisted draft from a Linear diff

  • File Upload

    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.

  • Suspend User

    Suspend a user account (admin only)

  • Resolve Comment

    Mark a comment thread as resolved

  • Unresolve Comment

    Reopen a resolved comment thread

  • Upsert Customer

    Create or update a customer by matching on id or externalId, useful for idempotent sync workflows

  • Archive Cycle

    Archive a cycle by ID

  • Archive Initiative

    Archive an initiative by ID

  • Issue Filter Suggestion

    Suggests filters for an issue view based on a text prompt

  • Archive Issue

    Archive an issue by ID

  • Unarchive Issue

    Restore an archived issue by ID

  • Prepare Attachment Upload

    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 File Upload

    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>"

  • 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` (`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).

  • Save Document

    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 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.

  • Save Issue

    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".

  • Save Issue Label

    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.

  • Retire Issue Label

    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 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.

  • 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. 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.

  • Retire Project Label

    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 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.

  • Save Project Label

    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.

  • 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.

  • Save Release Notes

    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 Issue

    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.

  • Unshare 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.

  • 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.

  • Mark Notification

    Mark a Linear inbox notification as read or unread, or snooze or unsnooze it.

  • 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.

  • Resolve Diff Thread

    Resolve or reopen a top-level comment thread on a Linear diff

  • Submit Diff Review

    Approve a Linear diff, request changes, or submit a review comment

  • Merge Diff

    Merge a Linear diff or add it to the repository's merge queue

  • Who Am I

    Retrieve the authenticated user, the connected workspace, and how this connection reaches Linear

  • 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.

  • 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.

  • 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`.

  • Save Initiative Label

    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.

  • Retire Initiative Label

    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 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.

  • Save Status Update

    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.

  • Archive Project

    Archive a project by ID

  • Archive Project Status

    Archive a project status by ID

  • Complete Release

    Mark a release as complete in a pipeline

  • Rotate Webhook Secret

    Rotate the signing secret for a webhook

Set Up Your Linear MCP Server in Minutes

One endpoint. Any framework. Your agent is talking to Linear in under 10 lines of code.

Agent Frameworks

Claude Desktop
{
  "mcpServers": {
    "stackone": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote@latest",
        "https://api.stackone.com/mcp?x-account-id=<account_id>",
        "--header",
        "Authorization: Basic <YOUR_BASE64_TOKEN>"
      ]
    }
  }
}

Check More Project Management MCP Servers

Smartsheet

203+ actions

Azure DevOps

185+ actions

GitLab

156+ actions

Jira

147+ actions

Confluence

145+ actions

BigChange

144+ actions

Bitbucket

142+ actions

Linear MCP Server FAQ

Does StackOne have a Linear MCP server?
Yes. StackOne offers a managed Linear MCP server with 222 pre-built actions, and every action is tested and QA'd by StackOne. Connect it to Claude, Cursor, and any other MCP client, or to any agent framework through the AI Action SDK. It ships with managed agent authentication, prompt injection defense, and tool discovery with server-side execution that preserve your agent's context window and keep reasoning performance.
Linear MCP server vs direct API integration: what's the difference?
A Linear MCP server and direct API integration serve different use cases. Direct API integration is for software-to-software work, where backend code calls Linear. A Linear MCP server is for AI agents that discover and call Linear at runtime, such as MCP clients like Claude and Cursor, plus framework agents built with OpenAI, LangChain, or Vercel AI. StackOne provides both.
How does Linear authentication work for AI agents?
Linear authentication for AI agents works through a StackOne Connect Session. Create one via the dashboard or the SDK to get an auth link and ready-to-paste config for Claude Desktop, Cursor, and other MCP clients. Your user authenticates their own Linear account; StackOne handles token exchange, storage, and refresh. Credentials never reach the LLM, and each user is isolated via origin_owner_id.
Are Linear MCP tools vulnerable to prompt injection?
Yes. Linear MCP tools can be vulnerable to indirect prompt injection. Any tool that reads user-written content, such as documents, messages, tickets, records, or free-text fields, is a potential vector. StackOne Defender scans every tool response before it enters the agent's context. It runs regex patterns in ~1ms, then a MiniLM classifier in ~4ms. Accuracy is 88.7%, and it runs entirely on CPU.
What is the context bloat of a Linear agent and how do I avoid it?
Context bloat happens when Linear tool schemas and API responses eat your Linear agent's memory, preventing it from reasoning effectively. A single Linear query can return a massive JSON response, and connecting multiple tools compounds the problem. Tools Discovery reduces it by loading only the tools relevant to each query.
Can I limit which actions my Linear agent can access?
Yes. You can limit which actions your Linear agent can access directly from the StackOne dashboard. Toggle actions on or off, or restrict them to specific accounts, with no code changes to your agent. Session tokens can be scoped to exact actions so if one leaks, exposure stays contained.
Can I create custom agent actions for my Linear MCP server?
Yes. You can create custom agent actions for your Linear MCP server using Connector Builder. It's an integration agent your coding assistant (Claude Code, Cursor, or Copilot) can invoke to research Linear's API, generate production-ready connector YAML, test against the live API, and validate before you ship.
When should I NOT use a Linear MCP server?
Skip a Linear MCP server if your integration is purely software-to-software, because direct Linear API integration is simpler when no AI agent is involved. For deterministic, compliance-critical operations (financial transactions, regulatory reporting), direct API gives you predictable behavior without agent-driven decision-making. MCP shines when AI agents need to dynamically discover and call Linear actions at runtime.
What AI frameworks and AI clients does the StackOne Linear MCP server support?
The StackOne Linear MCP server supports both. MCP clients (paste-and-go apps): Claude Desktop, Claude Code, Cursor, VS Code, Goose. Agent frameworks (code SDKs you build with): OpenAI Agents SDK, Anthropic, Vercel AI, Google ADK, CrewAI, Pydantic AI, LangChain, LangGraph, Azure AI Foundry.

Put your AI agents to work

Connect AI to every company system and control what it can do in each one, down to the field.