Skip to main content
Glama

MCP Linear

A Model Context Protocol (MCP) server for the Linear GraphQL API, built for real project-management workflows — not just basic issue CRUD.

MCP Linear npm version

Features

MCP Linear bridges AI assistants and Linear by implementing the MCP protocol. With it you can:

  • Retrieve issues, projects, teams, cycles, milestones, roadmaps, customers, customer needs, and workspace/project/initiative/team/issue/release/cycle documents

  • Create and update issues, change status, assign, and comment

  • Manage projects, full diff-aware project and initiative update lifecycles, milestones, roadmaps, saved views, and favorites

  • Create and manage workspace webhooks, including updates and signing-secret rotation

  • Prepare OAuth app manifests and authorization URLs, issue scoped client-credentials tokens, or manage child OAuth apps when authenticated as a managing OAuth application

  • Work with templates, custom fields, and attachments

  • Work with customer records, customer statuses/tiers, and customer needs linked to issues or projects

  • Read notifications, subscriptions, sessions, audits, and integrations without leaving MCP

  • Inspect rate-limit and server health before running heavy planning sessions

See TOOLS.md for the full inventory.

MCP-native resources and prompts

The server exposes MCP resources and prompts in addition to tools, including:

  • Resources: linear://viewer, linear://organization, linear://teams, linear://projects, linear://project/{id}, linear://project/{id}/issues, linear://project/{id}/documents, linear://issue/{id}, linear://document/{id}, linear://roadmap/{id}, linear://milestone/{id}, linear://rate-limit

  • Prompts: summarize-project-status, draft-project-update, triage-issue, summarize-document

Related MCP server: MCP Linear.app Server

Example prompts

Once connected, you can use prompts like:

  • "Show me all my Linear issues"

  • "Create a new issue titled 'Fix login bug' in the Frontend team"

  • "Change the status of issue FE-123 to 'In Progress'"

  • "Assign issue BE-456 to John Smith"

  • "Show all open issues in this project grouped by milestone and cycle"

  • "Draft a weekly project update from the current Linear state"

  • "Find the newest documents related to a project and summarize the key decisions"

  • "Show the pinned documents and links on this team's home page"

  • "Create a document for ENG-123 with resource ordering metadata"

  • "Get the latest project update diff and archive an outdated update"

  • "Show customer needs for this project and mark the important ones"

  • "Create an initiative update and hide the generated diff from the update body"

  • "Prepare a private OAuth app for my GitHub issue pipeline with client credentials enabled"

  • "Issue a narrowly scoped client-credentials token for that GitHub pipeline"

  • "Create a webhook for Issue and Comment events, then rotate its signing secret"

Installation

Authentication

Personal API key (default)

  1. Log in to your Linear account at linear.app

  2. Click on your organization avatar (top-left corner)

  3. Select Settings

  4. Navigate to Security & access in the left sidebar

  5. Under Personal API Keys click New API Key

  6. Give your key a name (e.g., MCP Linear Integration)

  7. Copy the generated API token and store it securely — you won't be able to see it again

Personal API keys support the normal Linear and workspace-webhook tools. They cannot call Linear's alpha managed-child-OAuth-application API because that API requires the caller itself to be an OAuth application. With a personal API key, linear_generateOAuthApplicationSetup still prepares an official manifest and pre-filled Linear setup URL for an administrator to confirm.

OAuth access token (managed OAuth applications)

To let MCP actually create and manage child OAuth applications, authenticate it with an access token belonging to a Linear OAuth application that is eligible to manage those child applications:

export LINEAR_OAUTH_ACCESS_TOKEN=YOUR_OAUTH_ACCESS_TOKEN
mcp-linear

Or pass --oauth-token YOUR_OAUTH_ACCESS_TOKEN. Explicit command-line credentials take precedence over environment variables; when both environment credential types are present, OAuth authentication is selected. See Linear's OAuth documentation and OAuth application manifests.

Each MCP server process uses one Linear credential. If the managing app token uses actor=app (which cannot receive admin) and you also need admin-scoped workspace-webhook tools, configure two MCP server entries: one with the managing OAuth token for child-app operations and one with a workspace administrator's personal API key for workspace webhooks. A user-actor OAuth token carrying admin can cover the webhook side instead.

OAuth scopes are selected when an authorization URL or client-credentials token is requested; they are not mutable fields on an OAuth application. The MCP validates current Linear scopes, prepares authorization URLs, and can issue app-actor tokens with linear_createOAuthClientCredentialsToken. For GitHub-hosted pipelines, enable the client_credentials grant and request the narrowest useful scope, such as issues:create.

Client-credentials tokens normally expire after 30 days and have no refresh token. Linear permits multiple active tokens only while they use the same scope set; requesting a different scope set revokes the application's existing app-actor tokens. The token tool therefore requires both confirmSecretExposure: true and confirmScopeChangeRisk: true.

Creating an OAuth app and rotating OAuth or webhook secrets returns one-time secret material through MCP. Those tools require confirmSecretExposure: true; move returned values directly into a secret manager such as GitHub Actions secrets and do not paste them into source control or logs.

Webhook URLs must be publicly reachable HTTPS endpoints. Validation rejects credentials in URLs and obvious loopback, private-network, link-local, and local-hostname destinations.

Installing via add-mcp (Recommended)

add-mcp installs the server into Claude Code, Cursor, Codex, VS Code, Claude Desktop, and many other MCP-aware agents with a single command:

npx add-mcp @tacticlaunch/mcp-linear --env LINEAR_API_TOKEN=YOUR_LINEAR_API_TOKEN

Add -g to install globally instead of into the current project. See the add-mcp docs for the full agent list and flags.

Manual configuration

Add the following to your MCP settings file:

{
  "mcpServers": {
    "linear": {
      "command": "npx",
      "args": ["-y", "@tacticlaunch/mcp-linear"],
      "env": {
        "LINEAR_API_TOKEN": "<YOUR_TOKEN>"
      }
    }
  }
}

Client-specific configuration locations

  • Cursor: ~/.cursor/mcp.json

  • Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Claude VSCode Extension: ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json

  • GoMCP: ~/.config/gomcp/config.yaml

Manual run

Prerequisites:

  • Node.js (v20+)

  • NPM or Yarn

  • Linear personal API key or OAuth access token

# Install globally
npm install -g @tacticlaunch/mcp-linear

# Or clone and install locally
git clone https://github.com/tacticlaunch/mcp-linear.git
cd mcp-linear
npm install
npm link  # Makes the package available globally

Running the server

Run the server with your Linear API token:

mcp-linear --token YOUR_LINEAR_API_TOKEN

Or with a managing OAuth application's access token:

mcp-linear --oauth-token YOUR_OAUTH_ACCESS_TOKEN

Or set the token in your environment and run without arguments:

export LINEAR_API_TOKEN=YOUR_LINEAR_API_TOKEN
mcp-linear

Validation

The default validation path is:

npm test
npm run build

npm test runs Jest unit tests and an official MCP SDK smoke test against the built stdio server, covering tool, resource, and prompt registration plus host-compatible schema emission.

Development

See DEVELOPMENT.md for local development details.

tacticlaunch/cursor-memory-bank — If you are a developer seeking to enhance your workflow with Cursor, consider giving it a try.

License

This project is licensed under the MIT License — see the LICENSE file for details.

Available Tools

198 tools
linear_addAttachmentC

Add an attachment to an issue

Inputs: url (required), title (required), issueId (required), iconUrl, +4 more. Returns: id, url, issue, title, +5 more

linear_addIssueLabelB
Idempotent

Add a label to an issue in Linear

Inputs: issueId (required), labelId (required). Returns: issueId, labelId, success

linear_addIssueToCycleB
Idempotent

Add an issue to a cycle

Inputs: cycleId (required), issueId (required). Returns: issue, success

linear_addIssueToProjectA
Idempotent

Add an existing issue to a project

Inputs: issueId (required), projectId (required). Returns: issue, success

linear_addIssueToReleaseB
Idempotent

Add an issue to a release

Inputs: issueId (required), releaseId (required). Returns: issue, release, success

linear_addProjectMemberA
Idempotent

Add a member to a project

Inputs: userId (required), projectId (required). Returns: userId, success, projectId

linear_addProjectToInitiativeB
Idempotent

Add a project to an initiative

Inputs: projectId (required), initiativeId (required). Returns: project, success

linear_addToFavoritesA
Idempotent

Add an entity to the current user's Linear favorites

Inputs: entityId (required). Returns: id, success, entityId, favorite

linear_addUserToTeamB
Idempotent

Add a user to a team

Inputs: teamId (required), userId (required), owner, sortOrder. Returns: id, team, user, owner, +3 more

linear_archiveCustomerNeedB
DestructiveIdempotent

Archive a customer need

Inputs: id (required). Returns: id, success

linear_archiveDocumentA
DestructiveIdempotent

Archive (trash) a Linear document

Inputs: id (required). Returns: id, success

linear_archiveInitiativeD
DestructiveIdempotent

Archive an initiative

Inputs: initiativeId (required). Returns: success

linear_archiveInitiativeUpdateB
DestructiveIdempotent

Archive an initiative update

Inputs: id (required). Returns: id, success

linear_archiveIssueB
DestructiveIdempotent

Archive an issue

Inputs: issueId (required). Returns: message, success

linear_archiveManagedOAuthApplicationA
DestructiveIdempotent

Archive an alpha child OAuth application owned by the calling OAuth application. This does not revoke an unrelated authorized application.

Inputs: id (required). Returns: id, success

linear_archiveMilestoneA
DestructiveIdempotent

Archive a project milestone

Inputs: id (required). Returns: success, milestone

linear_archiveProjectC
DestructiveIdempotent

Archive a project

Inputs: projectId (required). Returns: project, success

linear_archiveProjectUpdateB
DestructiveIdempotent

Archive a Linear project update

Inputs: id (required). Returns: id, success

linear_archiveReleaseA
DestructiveIdempotent

Archive a release

Inputs: releaseId (required). Returns: release, success

linear_archiveReleasePipelineB
DestructiveIdempotent

Archive a release pipeline

Inputs: pipelineId (required). Returns: success, releasePipeline

linear_archiveReleaseStageB
DestructiveIdempotent

Archive a release stage

Inputs: stageId (required). Returns: success, releaseStage

linear_archiveRoadmapB
DestructiveIdempotent

Archive a roadmap

Inputs: roadmapId (required). Returns: roadmap, success

linear_archiveTeamC
DestructiveIdempotent

Archive a team

Inputs: id (required). Returns: id, success

linear_archiveTemplateB
DestructiveIdempotent

Archive an issue template

Inputs: id (required). Returns: id, success

linear_assignIssueB
Idempotent

Assign an issue to a user

Inputs: issueId (required), assigneeId (required). Returns: issue, success

linear_completeCycleB
Idempotent

Mark a cycle as complete

Inputs: id (required). Returns: id, name, team, endsAt, +5 more

linear_completeReleaseA
Idempotent

Mark a release as completed within a pipeline. The target pipeline must already have a completed release stage configured.

Inputs: pipelineId (required), version. Returns: id, url, name, stage, +15 more

linear_convertIssueToSubtaskB
Idempotent

Convert an issue to a subtask

Inputs: issueId (required), parentIssueId (required). Returns: issue, success

linear_createCommentB

Add a comment to an issue, project, initiative, update, document content, or as a threaded reply

Inputs: body (required), postId, issueId, parentId, +7 more. Returns: id, url, body, user, +8 more

linear_createCustomerC

Create a customer

Inputs: name (required), size, tierId, domains, +7 more. Returns: id, url, name, size, +14 more

linear_createCustomerNeedB

Create a customer need linked to an issue or project

Inputs: body, issueId, priority, commentId, +6 more. Returns: id, url, body, issue, +17 more

linear_createCustomerNeedFromAttachmentC

Create or unarchive a customer need from an existing attachment

Inputs: attachmentId (required), priority, customerId, customerExternalId. Returns: id, url, body, issue, +17 more

linear_createCycleC

Create a new cycle

Inputs: endsAt (required), teamId (required), startsAt (required), name, +2 more. Returns: id, name, team, endsAt, +5 more

linear_createDocumentC

Create a new Linear document

Inputs: title (required), icon, color, teamId, +9 more. Returns: id, url, icon, team, +20 more

linear_createInitiativeC

Create a new initiative

Inputs: name (required), icon, color, status, +4 more. Returns: id, url, name, status, +1 more

linear_createInitiativeUpdateB

Create a new initiative update

Inputs: body (required), initiativeId (required), health, isDiffHidden. Returns: id, url, body, diff, +12 more

linear_createIssueB

Create a new issue in Linear

Inputs: title (required), teamId (required), cycleId, dueDate, +12 more. Returns: id, url, title, identifier

linear_createIssueFromTemplateA

Create a new issue from a template

Inputs: teamId (required), templateId (required), title, cycleId, +4 more. Returns: id, url, title

linear_createIssueRelationA

Create relations between issues (blocks, is blocked by, etc.)

Inputs: type (required), issueId (required), relatedIssueId (required). Returns: success, relation

linear_createIssueTemplateB

Create a new issue template

Inputs: name (required), templateData (required), teamId, sortOrder, +1 more. Returns: id, name, team, type, +7 more

linear_createManagedOAuthApplicationA

Create an alpha child OAuth application owned by the calling OAuth application. This is not the human setup flow and returns one-time client and optional webhook secrets in the MCP result. It cannot set distribution or pre-grant OAuth scopes.

Inputs: name (required), developer (required), redirectUris (required), confirmSecretExposure (required), +7 more. Returns: application, clientSecret, webhookSecret

linear_createMilestoneA

Create a new project milestone in Linear

Inputs: name (required), projectId (required), sortOrder, targetDate, +1 more. Returns: id, name, status, project, +7 more

linear_createOAuthClientCredentialsTokenA

Issue a scoped Linear app-actor access token through the client_credentials grant for server-to-server pipelines. The token is returned once, has no refresh token, and is normally valid for 30 days. If the requested scope set differs from existing app-actor tokens, Linear revokes those existing tokens.

Inputs: scopes (required), clientId (required), clientSecret (required), confirmSecretExposure (required), +1 more. Returns: scopes, expiresIn, tokenType, accessToken

linear_createProjectC

Create a new project in Linear

Inputs: name (required), teamIds (required), icon, color, +8 more. Returns: id, url, icon, lead, +11 more

linear_createProjectUpdateB

Create a new project update for a Linear project

Inputs: body (required), projectId (required), health, isDiffHidden. Returns: id, url, body, diff, +10 more

linear_createReleaseA

Create a new release in a release pipeline

Inputs: name (required), pipelineId (required), stageId, version, +7 more. Returns: id, url, name, stage, +15 more

linear_createReleaseNoteA

Create a release note using either explicit release IDs or a release range within a pipeline

Inputs: pipelineId (required), content, releaseIds, rangeToReleaseId, +1 more. Returns: id, title, slugId, content, +4 more

linear_createReleasePipelineC

Create a new release pipeline

Inputs: name (required), teamIds (required), type, slugId, +2 more. Returns: id, url, name, type, +10 more

linear_createReleaseStageB

Create a new release stage in a pipeline

Inputs: name (required), type (required), color (required), position (required), +3 more. Returns: id, name, type, color, +7 more

linear_createRoadmapA

Create a new roadmap in Linear

Inputs: name (required), color, ownerId, sortOrder, +1 more. Returns: id, url, name, color, +9 more

linear_createSavedViewB

Create a Linear saved view (API: createCustomView)

Inputs: name (required), icon, color, shared, +7 more. Returns: id, icon, name, team, +11 more

linear_createTeamC

Create a new team

Inputs: name (required), key, icon, color, +5 more. Returns: id, key, icon, name, +7 more

linear_createTeamLabelC

Create a new label for a team

Inputs: name (required), teamId (required), color, parentId, +1 more. Returns: id, name, team, color, +2 more

linear_createWebhookC

Create a webhook for integration events

Inputs: url (required), resourceTypes (required), label, secret, +3 more. Returns: id, url, team, label, +7 more

linear_createWorkflowStateC

Create a new workflow state

Inputs: name (required), type (required), color (required), teamId (required), +2 more. Returns: id, name, team, type, +3 more

linear_deleteCommentA
DestructiveIdempotent

Delete a comment

Inputs: id (required). Returns: id, success

linear_deleteCustomerB
DestructiveIdempotent

Delete a customer

Inputs: id (required). Returns: id, success

linear_deleteCustomerNeedB
DestructiveIdempotent

Delete a customer need

Inputs: id (required). Returns: id, success

linear_deleteInitiativeB
DestructiveIdempotent

Delete an initiative (move to trash)

Inputs: initiativeId (required). Returns: success

linear_deleteIssueRelationA
DestructiveIdempotent

Delete an issue relation by ID

Inputs: id (required). Returns: id, success

linear_deleteProjectUpdateC
DestructiveIdempotent

Delete a Linear project update

Inputs: id (required). Returns: id, success

linear_deleteReleaseNoteC
DestructiveIdempotent

Delete a release note

Inputs: id (required). Returns: id, success

linear_deleteReleasePipelineB
DestructiveIdempotent

Delete a release pipeline

Inputs: pipelineId (required). Returns: id, success

linear_deleteSavedViewA
DestructiveIdempotent

Delete a Linear saved view (API: deleteCustomView)

Inputs: id (required). Returns: id, success

linear_deleteWebhookC
DestructiveIdempotent

Delete a webhook

Inputs: id (required). Returns: id, success

linear_duplicateIssueC

Duplicate an issue

Inputs: issueId (required). Returns: success, originalIssue, duplicatedIssue

linear_generateOAuthApplicationSetupA
Read-onlyIdempotent

Generate an official Linear OAuth application manifest and a human-confirmed setup URL. This does not create the application; an authorized workspace admin or owner must review and submit it in Linear.

Inputs: name (required), developer (required), redirectUris (required), imageUrl, +7 more. Returns: manifest, creationUrl, requiresUserConfirmation

linear_generateOAuthAuthorizationUrlA
Read-onlyIdempotent

Generate a Linear OAuth authorization URL. Scopes are requested during authorization; this tool does not create, grant, approve, persist, or modify scopes. Actor/scope rules: with actor: "app" the admin scope is rejected, and the agent-only scopes (app:assignable, app:mentionable, customer:read, customer:write, initiative:read, initiative:write) require actor: "app".

Inputs: scopes (required), clientId (required), redirectUri (required), actor, +3 more. Returns: scopes, warnings, authorizationUrl

linear_getActiveCycleA
Read-onlyIdempotent

Get the currently active cycle for a team

Inputs: teamId (required). Returns: id, name, team, endsAt, +7 more

linear_getAttachmentsC
Read-onlyIdempotent

Get attachments for an issue

Inputs: issueId (required), limit, orderBy, includeArchived. Returns: items

linear_getAuthenticationSessionsA
Read-onlyIdempotent

Get active authentication sessions

Inputs: no named parameters. Returns: items

linear_getCommentsC
Read-onlyIdempotent

Get comments for an issue, project, initiative, update, or document content

Inputs: limit, cursor, postId, issueId, +6 more. Returns: items

linear_getCustomerByIdB
Read-onlyIdempotent

Get a customer by ID

Inputs: id (required). Returns: id, url, name, size, +14 more

linear_getCustomerNeedByIdA
Read-onlyIdempotent

Get a customer need by ID

Inputs: id (required). Returns: id, url, body, issue, +17 more

linear_getCustomerNeedsC
Read-onlyIdempotent

Get customer needs from Linear

Inputs: limit, issueId, orderBy, priority, +3 more. Returns: items

linear_getCustomersB
Read-onlyIdempotent

Get customers from Linear

Inputs: name, limit, domain, tierId, +4 more. Returns: items

linear_getCustomerStatusesC
Read-onlyIdempotent

Get customer statuses from Linear

Inputs: limit, orderBy, includeArchived. Returns: items

linear_getCustomerTiersB
Read-onlyIdempotent

Get customer tiers from Linear

Inputs: limit, orderBy, includeArchived. Returns: items

linear_getCustomFieldsA
Read-onlyIdempotent

Get the custom field definitions available in the authenticated Linear workspace

Inputs: no named parameters. Returns: items

linear_getCycleByIdA
Read-onlyIdempotent

Get details of a specific cycle

Inputs: id (required). Returns: id, name, team, endsAt, +5 more

linear_getCycleDocumentsB
Read-onlyIdempotent

Get documents associated with a specific Linear cycle

Inputs: cycleId (required), limit, title, orderBy, +1 more. Returns: items

linear_getCycleIssuesA
Read-onlyIdempotent

Get issues in a cycle, with PM-friendly filters like state, assignee, labels, and completion status

Inputs: cycleId (required), limit, states, orderBy, +3 more. Returns: items

linear_getCyclesB
Read-onlyIdempotent

Get a list of all cycles

Inputs: limit, teamId. Returns: items

linear_getCycleStatsC
Read-onlyIdempotent

Get statistics for a cycle

Inputs: id (required). Returns: id, name, number, progress, +6 more

linear_getDocumentByIdB
Read-onlyIdempotent

Get details of a specific Linear document

Inputs: id (required). Returns: id, url, icon, team, +20 more

linear_getDocumentContentHistoryA
Read-onlyIdempotent

Get content history entries for a Linear document content record

Inputs: id (required). Returns: history, success

linear_getDocumentsB
Read-onlyIdempotent

Get workspace documents from Linear

Inputs: limit, title, teamId, cycleId, +6 more. Returns: items

linear_getFavoriteViewsA
Read-onlyIdempotent

Get favorite Linear views, including saved views and predefined views

Inputs: limit, orderBy, includeArchived. Returns: items

linear_getInitiativeByIdA
Read-onlyIdempotent

Get details of a specific initiative by ID

Inputs: initiativeId (required), includeProjects. Returns: id, url, icon, name, +8 more

linear_getInitiativeDocumentsA
Read-onlyIdempotent

Get documents for a specific Linear initiative

Inputs: initiativeId (required), limit, title, orderBy, +1 more. Returns: items

linear_getInitiativeProjectsA
Read-onlyIdempotent

Get all projects associated with an initiative

Inputs: initiativeId (required), includeArchived. Returns: items

linear_getInitiativesA
Read-onlyIdempotent

Get a list of all initiatives from Linear

Inputs: limit, includeArchived. Returns: items

linear_getInitiativeUpdateByIdB
Read-onlyIdempotent

Get a specific initiative update by ID

Inputs: id (required). Returns: id, url, body, diff, +12 more

linear_getInitiativeUpdatesB
Read-onlyIdempotent

Get updates for an initiative

Inputs: initiativeId (required), limit. Returns: items

linear_getIntegrationsC
Read-onlyIdempotent

Get a list of active integrations

Inputs: limit, orderBy, includeArchived. Returns: items

linear_getIssueByIdA
Read-onlyIdempotent

Get a specific issue by ID or identifier (e.g., ABC-123)

Inputs: id (required). Returns: id, url, team, cycle, +16 more

linear_getIssueCustomFieldsA
Read-onlyIdempotent

Get the custom field values that are currently set on a specific issue

Inputs: issueId (required). Returns: issueId, identifier, customFields

linear_getIssueDocumentsA
Read-onlyIdempotent

Get documents associated with a specific Linear issue

Inputs: issueId (required), limit, title, orderBy, +1 more. Returns: items

linear_getIssueHistoryB
Read-onlyIdempotent

Get the history of changes made to an issue

Inputs: issueId (required), limit. Returns: history, issueId, identifier

linear_getIssuesB
Read-onlyIdempotent

Get a list of recent issues from Linear

Inputs: limit. Returns: items

linear_getIssueTemplateByIdA
Read-onlyIdempotent

Get details of a specific issue template

Inputs: id (required). Returns: id, name, team, type, +7 more

linear_getIssueTemplatesC
Read-onlyIdempotent

Get a list of issue templates

Inputs: limit, orderBy, includeArchived. Returns: items

linear_getLabelsB
Read-onlyIdempotent

Get a list of issue labels from Linear

Inputs: no named parameters. Returns: items

linear_getManagedOAuthApplicationByIdA
Read-onlyIdempotent

Get an alpha child OAuth application owned by the calling OAuth application. It cannot retrieve an arbitrary workspace OAuth application.

Inputs: id (required). Returns: id, name, clientId, imageUrl, +11 more

linear_getManagedOAuthApplicationsA
Read-onlyIdempotent

List alpha child OAuth applications owned by the calling OAuth application. This is not a workspace-wide OAuth application admin listing and does not work as generic scope CRUD.

Inputs: no named parameters. Returns: items

linear_getMilestoneByIdA
Read-onlyIdempotent

Get details of a specific project milestone by ID

Inputs: id (required). Returns: id, name, status, project, +7 more

linear_getMilestonesA
Read-onlyIdempotent

Get project milestones from Linear, with PM-friendly filters for project, team, and milestone status

Inputs: limit, status, teamId, orderBy, +2 more. Returns: items

linear_getNotificationsB
Read-onlyIdempotent

Get notifications for the current user

Inputs: limit, orderBy, includeArchived. Returns: items

linear_getOrganizationA
Read-onlyIdempotent

Get information about the current Linear organization

Inputs: no named parameters. Returns: id, name, urlKey, logoUrl

linear_getOrganizationAuditEventsB
Read-onlyIdempotent

Get audit events for the organization

Inputs: limit, orderBy, includeArchived. Returns: items

linear_getProjectByIdA
Read-onlyIdempotent

Get details for a specific Linear project by ID

Inputs: id (required). Returns: id, url, icon, lead, +11 more

linear_getProjectDocumentsB
Read-onlyIdempotent

Get documents for a specific Linear project

Inputs: projectId (required), limit, title, orderBy, +1 more. Returns: items

linear_getProjectIssuesA
Read-onlyIdempotent

Get issues associated with a project, with PM-friendly filters like state, assignee, labels, cycle, and milestone

Inputs: projectId (required), limit, states, cycleId, +5 more. Returns: items

linear_getProjectMembersA
Read-onlyIdempotent

Get members assigned to a project

Inputs: projectId (required), limit, orderBy, includeArchived, +1 more. Returns: items

linear_getProjectsA
Read-onlyIdempotent

Get a list of projects from Linear

Inputs: no named parameters. Returns: items

linear_getProjectUpdateByIdA
Read-onlyIdempotent

Get a specific Linear project update by ID

Inputs: id (required). Returns: id, url, body, diff, +10 more

linear_getProjectUpdatesA
Read-onlyIdempotent

Get all updates associated with a project

Inputs: projectId (required), limit. Returns: items

linear_getRateLimitStatusA
Read-onlyIdempotent

Get the shared MCP-side Linear rate-limit cooldown and retry snapshot

Inputs: no named parameters. Returns: isBlocked, lastDelayMs, blockedUntil, lastOperation, +1 more

linear_getReleaseByIdB
Read-onlyIdempotent

Get details of a specific release

Inputs: id (required). Returns: id, url, name, stage, +17 more

linear_getReleaseDocumentsA
Read-onlyIdempotent

Get documents associated with a specific Linear release

Inputs: releaseId (required), limit, title, orderBy, +1 more. Returns: items

linear_getReleaseNoteByIdA
Read-onlyIdempotent

Get details of a specific release note

Inputs: id (required). Returns: id, title, slugId, content, +4 more

linear_getReleaseNotesB
Read-onlyIdempotent

Get release notes from Linear

Inputs: limit, orderBy, includeArchived. Returns: items

linear_getReleasePipelineByIdA
Read-onlyIdempotent

Get details of a specific release pipeline

Inputs: id (required). Returns: id, url, name, type, +10 more

linear_getReleasePipelinesB
Read-onlyIdempotent

Get release pipelines from Linear

Inputs: limit, orderBy, includeArchived. Returns: items

linear_getReleasesB
Read-onlyIdempotent

Get releases from Linear with optional pipeline and stage filters

Inputs: limit, orderBy, stageId, pipelineId, +1 more. Returns: items

linear_getReleaseStagesA
Read-onlyIdempotent

Get release stages from Linear

Inputs: limit, orderBy, pipelineId, includeArchived. Returns: items

linear_getRoadmapByIdA
Read-onlyIdempotent

Get details of a specific roadmap by ID

Inputs: id (required). Returns: id, url, name, color, +9 more

linear_getRoadmapsC
Read-onlyIdempotent

Get a list of roadmaps from Linear

Inputs: limit, orderBy, includeArchived. Returns: items

linear_getSavedViewsA
Read-onlyIdempotent

Get Linear saved views (API: CustomView)

Inputs: limit, orderBy, includeArchived. Returns: items

linear_getServerStatusA
Read-onlyIdempotent

Get MCP Linear server runtime status, counts, and current rate-limit snapshot

Inputs: no named parameters. Returns: pid, version, rateLimit, toolCount, +3 more

linear_getSubscriptionsB
Read-onlyIdempotent

Get subscriptions for the current user

Inputs: limit, orderBy, includeArchived. Returns: items

linear_getTeamDocumentsB
Read-onlyIdempotent

Get documents associated with a specific Linear team

Inputs: teamId (required), limit, title, orderBy, +1 more. Returns: items

linear_getTeamLabelsA
Read-onlyIdempotent

Get labels for a specific team

Inputs: teamId (required), limit, orderBy, includeArchived. Returns: items

linear_getTeamMembershipsC
Read-onlyIdempotent

Get team memberships

Inputs: teamId (required), limit, orderBy, includeArchived. Returns: items

linear_getTeamResourcesB
Read-onlyIdempotent

Get team home resource sections and pinned documents or external links

Inputs: teamId (required). Returns: team, sections, unsectioned

linear_getTeamsA
Read-onlyIdempotent

Get a list of teams from Linear

Inputs: no named parameters. Returns: items

linear_getTeamTemplatesB
Read-onlyIdempotent

Get templates for a specific team

Inputs: teamId (required), limit, orderBy, includeArchived. Returns: items

linear_getUnreadNotificationCountA
Read-onlyIdempotent

Get count of unread notifications

Inputs: limit. Returns: count

linear_getUserAuditEventsC
Read-onlyIdempotent

Get audit events for a specific user

Inputs: userId (required), limit, orderBy, includeArchived. Returns: items

linear_getUsersA
Read-onlyIdempotent

Get a list of users in the Linear organization

Inputs: no named parameters. Returns: items

linear_getViewerA
Read-onlyIdempotent

Get information about the currently authenticated user

Inputs: no named parameters. Returns: id, name, email, active, +2 more

linear_getWebhookByIdA
Read-onlyIdempotent

Get one ordinary workspace webhook by ID.

Inputs: id (required). Returns: id, url, team, label, +7 more

linear_getWebhooksC
Read-onlyIdempotent

Get a list of webhooks

Inputs: limit, teamId, orderBy, includeArchived. Returns: items

linear_getWorkflowStatesB
Read-onlyIdempotent

Get workflow states for a team

Inputs: teamId (required), includeArchived. Returns: items

linear_logoutAllSessionsB
DestructiveIdempotent

Revoke all sessions

Inputs: no named parameters. Returns: success

linear_logoutOtherSessionsA
DestructiveIdempotent

Revoke all other sessions

Inputs: no named parameters. Returns: success

linear_logoutSessionB
DestructiveIdempotent

Revoke a specific session

Inputs: sessionId (required). Returns: success

linear_markAllNotificationsAsReadC
Idempotent

Mark all notifications as read

Inputs: limit. Returns: count, success

linear_markNotificationAsReadC
Idempotent

Mark a notification as read

Inputs: id (required). Returns: id, success

linear_removeFromFavoritesA
Idempotent

Remove an entity or favorite entry from the current user's Linear favorites. Provide either favoriteId or entityId.

Inputs: entityId, favoriteId. Returns: id, success, entityId, favorite

linear_removeIssueFromCycleA
Idempotent

Remove an issue from a cycle

Inputs: cycleId (required), issueId (required). Returns: cycle, issue, success

linear_removeIssueFromProjectB
Idempotent

Remove an existing issue from a project

Inputs: issueId (required), projectId (required). Returns: issue, project, success

linear_removeIssueFromReleaseB
Idempotent

Remove an issue from a release

Inputs: issueId (required), releaseId (required). Returns: issue, release, success

linear_removeIssueLabelA
Idempotent

Remove a label from an issue in Linear

Inputs: issueId (required), labelId (required). Returns: issueId, labelId, success

linear_removeProjectFromInitiativeB
Idempotent

Remove a project from an initiative

Inputs: projectId (required), initiativeId (required). Returns: message, project, success, initiative

linear_removeProjectMemberA
Idempotent

Remove a member from a project

Inputs: userId (required), projectId (required). Returns: userId, success, projectId

linear_removeUserFromTeamA
Idempotent

Remove a user from a team

Inputs: teamId (required), userId (required), alsoLeaveParentTeams. Returns: teamId, userId, success

linear_rotateManagedOAuthApplicationSecretA
Destructive

Rotate the client secret of an alpha child app owned by the calling OAuth application. The new one-time secret is exposed in the MCP result and existing client-credentials tokens may be invalidated.

Inputs: id (required), confirmSecretExposure (required). Returns: id, success, clientSecret

linear_rotateManagedOAuthApplicationWebhookSecretA
Destructive

Rotate the webhook signing secret of an alpha child app owned by the calling OAuth application. The new one-time secret is exposed in the MCP result.

Inputs: id (required), confirmSecretExposure (required). Returns: id, success, webhookSecret

linear_rotateWebhookSecretB
Destructive

Rotate an ordinary workspace webhook signing secret.

Inputs: id (required), confirmSecretExposure (required). Returns: id, secret, success

linear_searchDocumentsB
Read-onlyIdempotent

Search Linear documents by term

Inputs: term (required), limit, teamId, orderBy, +3 more. Returns: nodes, totalCount

linear_searchIssuesC
Read-onlyIdempotent

Search for issues with various filters

Inputs: dates, limit, query, states, +3 more. Returns: items

linear_searchReleasesC
Read-onlyIdempotent

Search releases by term, version, or pipeline name

Inputs: term, limit, stageId, pipelineId, +1 more. Returns: items

linear_setIssuePriorityA
Idempotent

Set the priority of an issue

Inputs: issueId (required), priority (required). Returns: issue, success

linear_subscribeToIssueC
Idempotent

Subscribe to issue updates

Inputs: issueId (required). Returns: message, success

linear_transferIssueB
Idempotent

Transfer an issue to another team

Inputs: teamId (required), issueId (required). Returns: issue, success

linear_unarchiveCustomerNeedA
Idempotent

Restore an archived customer need

Inputs: id (required). Returns: id, success

linear_unarchiveDocumentA
Idempotent

Restore a previously archived Linear document

Inputs: id (required). Returns: id, success

linear_unarchiveInitiativeB
Idempotent

Unarchive an initiative

Inputs: initiativeId (required). Returns: success

linear_unarchiveInitiativeUpdateB
Idempotent

Restore an archived initiative update

Inputs: id (required). Returns: id, success

linear_unarchiveProjectUpdateA
Idempotent

Restore an archived Linear project update

Inputs: id (required). Returns: id, success

linear_unarchiveReleaseB
Idempotent

Unarchive a release

Inputs: releaseId (required). Returns: release, success

linear_unarchiveReleasePipelineB
Idempotent

Unarchive a release pipeline

Inputs: pipelineId (required). Returns: success, releasePipeline

linear_unarchiveReleaseStageA
Idempotent

Unarchive a release stage

Inputs: stageId (required). Returns: success, releaseStage

linear_updateCommentC
Idempotent

Update an existing comment

Inputs: id (required), body, quotedText, subscriberIds, +3 more. Returns: id, url, body, user, +6 more

linear_updateCustomerC
Idempotent

Update a customer

Inputs: id (required), name, size, tierId, +8 more. Returns: id, url, name, size, +14 more

linear_updateCustomerNeedC
Idempotent

Update a customer need

Inputs: id (required), body, issueId, priority, +5 more. Returns: id, url, body, issue, +17 more

linear_updateCycleA
Idempotent

Update an existing cycle. Provide id plus at least one other field to change.

Inputs: id (required), name, endsAt, startsAt, +2 more. Returns: id, name, team, endsAt, +5 more

linear_updateDocumentA
Idempotent

Update an existing Linear document. Provide id plus at least one other field to change.

Inputs: id (required), icon, color, title, +12 more. Returns: id, url, icon, team, +20 more

linear_updateInitiativeB
Idempotent

Update an existing initiative

Inputs: initiativeId (required), icon, name, color, +5 more. Returns: id, url, name, status, +1 more

linear_updateInitiativeUpdateB
Idempotent

Update an existing initiative update

Inputs: id (required), body, health, isDiffHidden. Returns: id, url, body, diff, +12 more

linear_updateIssueB
Idempotent

Update an existing issue in Linear

Inputs: id (required), title, teamId, cycleId, +14 more. Returns: id, url, title, identifier

linear_updateIssueCustomFieldB
Idempotent

Set or clear a custom field value on an issue. Pass null as value to clear it.

Inputs: value (required), issueId (required), customFieldId (required). Returns: raw, value, issueId, success, +2 more

linear_updateIssueTemplateA
Idempotent

Update an existing issue template. Provide id plus at least one other field to change.

Inputs: id (required), name, teamId, sortOrder, +2 more. Returns: id, name, team, type, +7 more

linear_updateManagedOAuthApplicationA
Idempotent

Update metadata, grant capabilities, or webhook configuration for an alpha child app owned by the calling OAuth application. This does not grant or approve token scopes.

Inputs: id (required), name, imageUrl, developer, +7 more. Returns: id, name, clientId, imageUrl, +11 more

linear_updateMilestoneA
Idempotent

Update an existing project milestone in Linear. Provide id plus at least one other field to change.

Inputs: id (required), name, projectId, sortOrder, +2 more. Returns: id, name, status, project, +7 more

linear_updateProjectC
Idempotent

Update an existing project in Linear

Inputs: id (required), icon, name, color, +8 more. Returns: id, url, icon, lead, +11 more

linear_updateProjectUpdateA
Idempotent

Update an existing project update in Linear

Inputs: id (required), body, health, isDiffHidden. Returns: id, url, body, diff, +10 more

linear_updateReleaseA
Idempotent

Update an existing release. Provide id plus at least one other field to change.

Inputs: id (required), name, stageId, trashed, +8 more. Returns: id, url, name, stage, +15 more

linear_updateReleaseNoteA
Idempotent

Update a release note using either explicit release IDs or a release range. Provide id plus at least one other field to change.

Inputs: id (required), content, releaseIds, rangeToReleaseId, +1 more. Returns: id, title, slugId, content, +4 more

linear_updateReleasePipelineA
Idempotent

Update an existing release pipeline. Provide id plus at least one other field to change.

Inputs: id (required), name, type, slugId, +3 more. Returns: id, url, name, type, +10 more

linear_updateReleaseStageA
Idempotent

Update an existing release stage. Provide id plus at least one other field to change.

Inputs: id (required), name, color, frozen, +1 more. Returns: id, name, type, color, +7 more

linear_updateRoadmapC
Idempotent

Update an existing roadmap

Inputs: id (required), name, color, ownerId, +2 more. Returns: id, url, name, color, +9 more

linear_updateSavedViewA
Idempotent

Update a Linear saved view (API: updateCustomView). Provide id plus at least one other field to change.

Inputs: id (required), icon, name, color, +8 more. Returns: id, icon, name, team, +11 more

linear_updateTeamD
Idempotent

Update team settings

Inputs: id (required), key, icon, name, +6 more. Returns: id, key, icon, name, +7 more

linear_updateTeamMembershipB
Idempotent

Update a user's role in a team. Provide id plus at least one other field to change.

Inputs: id (required), owner, sortOrder. Returns: id, team, user, owner, +3 more

linear_updateWebhookC
Idempotent

Update an ordinary workspace webhook.

Inputs: id (required), url, label, secret, +2 more. Returns: id, url, team, label, +7 more

linear_updateWorkflowStateB
Idempotent

Update a workflow state. Provide id plus at least one other field to change.

Inputs: id (required), name, color, position, +1 more. Returns: id, name, team, type, +3 more

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.8/5.0

    Scored across 198 tools

    Disambiguation3/5

    Most tools pair a distinct entity with an action, but the 198-tool surface contains many overlapping list/search variants such as getIssues, searchIssues, getProjectIssues, and getCycleIssues. Archive/delete/remove/unarchive distinctions also require careful reading, so selection errors remain likely despite helpful descriptions.

    Naming Consistency4/5

    Names consistently use the linear_ prefix followed by camelCase verb+entity patterns, with predictable get/create/update/archive/delete forms. Minor deviations such as getViewer and getOrganization versus plural list names like getUsers are readable but not perfectly uniform.

    Tool Count1/5

    198 tools is far beyond a well-scoped MCP server and creates an extreme selection and maintenance burden. Even for a large domain like Linear, the surface should be split, tiered, or reduced to core workflows.

    Completeness4/5

    Coverage is extensive across issues, projects, cycles, initiatives, documents, releases, customers, webhooks, OAuth, notifications, and admin surfaces. However, there are notable gaps such as no unarchiveIssue/deleteIssue, limited label CRUD, no obvious listIssueRelations, and several resources supporting archive but not full delete/unarchive lifecycle.

    Maintenance

    ActivityMaintained
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A Model Context Protocol server that enables AI assistants to interact with Linear project management systems, allowing users to create, update, and manage issues, projects, teams, and comments through natural language.
      85,521 npm
      MIT
    • A
      license
      Not graded
      quality
      Not graded
      maintenance
      An MCP server that enables interaction with Linear.app's API for issue tracking, project management, and workflow automation. It allows users to create, update, and search issues, manage cycles and labels, and perform team operations through natural language.
      -
    • A
      license
      B
      quality
      D
      maintenance
      An MCP server that integrates with Linear's API, enabling users to manage issues, projects, teams, and comments through natural language. It supports creating, updating, deleting, and searching issues, as well as project and team management.
      25
      2,467 npm
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Custom MCP server for Linear that enables managing issues, projects, and workspaces through natural language, backed by raw GraphQL.
      672 npm
      1
      MIT