Linear
This server enables AI assistants to interact with Linear project management systems via the Model Context Protocol (MCP). Key capabilities include:
Retrieve data about users, organizations, teams, projects, issues, cycles, and labels
Create, update, and manage issues, including changing status, priority, due dates, and estimates
Create and update projects and teams
Add comments to issues and view issue history
Assign issues to team members and manage subscribers
Handle issue relationships (blocks, blocked by, related, duplicates)
Manage subtasks and issue hierarchies
Search and filter issues using various criteria
Archive, duplicate, and transfer issues between teams
Add issues to cycles and projects
Manage issue labels and workflow states
Enables interaction with Linear's GraphQL API, allowing querying and mutation operations for project management data.
Provides tools for interacting with Linear's GraphQL API, enabling AI assistants to retrieve issues, projects, and teams data, create and update issues, change issue status, assign issues to team members, add comments, and create projects and teams.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Linear show me all my open issues in the Frontend team"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Linear
A Model Context Protocol (MCP) server for the Linear GraphQL API, built for real project-management workflows — not just basic issue CRUD.
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-limitPrompts:
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)
Log in to your Linear account at linear.app
Click on your organization avatar (top-left corner)
Select Settings
Navigate to Security & access in the left sidebar
Under Personal API Keys click New API Key
Give your key a name (e.g.,
MCP Linear Integration)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-linearOr 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_TOKENAdd -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.jsonClaude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.jsonClaude VSCode Extension:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.jsonGoMCP:
~/.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 globallyRunning the server
Run the server with your Linear API token:
mcp-linear --token YOUR_LINEAR_API_TOKENOr with a managing OAuth application's access token:
mcp-linear --oauth-token YOUR_OAUTH_ACCESS_TOKENOr set the token in your environment and run without arguments:
export LINEAR_API_TOKEN=YOUR_LINEAR_API_TOKEN
mcp-linearValidation
The default validation path is:
npm test
npm run buildnpm 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.
Links
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 toolslinear_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_addIssueLabelBIdempotent
Add a label to an issue in Linear
Inputs: issueId (required), labelId (required). Returns: issueId, labelId, success
linear_addIssueToCycleBIdempotent
Add an issue to a cycle
Inputs: cycleId (required), issueId (required). Returns: issue, success
linear_addIssueToProjectAIdempotent
Add an existing issue to a project
Inputs: issueId (required), projectId (required). Returns: issue, success
linear_addIssueToReleaseBIdempotent
Add an issue to a release
Inputs: issueId (required), releaseId (required). Returns: issue, release, success
linear_addProjectMemberAIdempotent
Add a member to a project
Inputs: userId (required), projectId (required). Returns: userId, success, projectId
linear_addProjectToInitiativeBIdempotent
Add a project to an initiative
Inputs: projectId (required), initiativeId (required). Returns: project, success
linear_addToFavoritesAIdempotent
Add an entity to the current user's Linear favorites
Inputs: entityId (required). Returns: id, success, entityId, favorite
linear_addUserToTeamBIdempotent
Add a user to a team
Inputs: teamId (required), userId (required), owner, sortOrder. Returns: id, team, user, owner, +3 more
linear_archiveCustomerNeedBDestructiveIdempotent
Archive a customer need
Inputs: id (required). Returns: id, success
linear_archiveDocumentADestructiveIdempotent
Archive (trash) a Linear document
Inputs: id (required). Returns: id, success
linear_archiveInitiativeDDestructiveIdempotent
Archive an initiative
Inputs: initiativeId (required). Returns: success
linear_archiveInitiativeUpdateBDestructiveIdempotent
Archive an initiative update
Inputs: id (required). Returns: id, success
linear_archiveIssueBDestructiveIdempotent
Archive an issue
Inputs: issueId (required). Returns: message, success
linear_archiveManagedOAuthApplicationADestructiveIdempotent
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_archiveMilestoneADestructiveIdempotent
Archive a project milestone
Inputs: id (required). Returns: success, milestone
linear_archiveProjectCDestructiveIdempotent
Archive a project
Inputs: projectId (required). Returns: project, success
linear_archiveProjectUpdateBDestructiveIdempotent
Archive a Linear project update
Inputs: id (required). Returns: id, success
linear_archiveReleaseADestructiveIdempotent
Archive a release
Inputs: releaseId (required). Returns: release, success
linear_archiveReleasePipelineBDestructiveIdempotent
Archive a release pipeline
Inputs: pipelineId (required). Returns: success, releasePipeline
linear_archiveReleaseStageBDestructiveIdempotent
Archive a release stage
Inputs: stageId (required). Returns: success, releaseStage
linear_archiveRoadmapBDestructiveIdempotent
Archive a roadmap
Inputs: roadmapId (required). Returns: roadmap, success
linear_archiveTeamCDestructiveIdempotent
Archive a team
Inputs: id (required). Returns: id, success
linear_archiveTemplateBDestructiveIdempotent
Archive an issue template
Inputs: id (required). Returns: id, success
linear_assignIssueBIdempotent
Assign an issue to a user
Inputs: issueId (required), assigneeId (required). Returns: issue, success
linear_completeCycleBIdempotent
Mark a cycle as complete
Inputs: id (required). Returns: id, name, team, endsAt, +5 more
linear_completeReleaseAIdempotent
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_convertIssueToSubtaskBIdempotent
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_deleteCommentADestructiveIdempotent
Delete a comment
Inputs: id (required). Returns: id, success
linear_deleteCustomerBDestructiveIdempotent
Delete a customer
Inputs: id (required). Returns: id, success
linear_deleteCustomerNeedBDestructiveIdempotent
Delete a customer need
Inputs: id (required). Returns: id, success
linear_deleteInitiativeBDestructiveIdempotent
Delete an initiative (move to trash)
Inputs: initiativeId (required). Returns: success
linear_deleteIssueRelationADestructiveIdempotent
Delete an issue relation by ID
Inputs: id (required). Returns: id, success
linear_deleteProjectUpdateCDestructiveIdempotent
Delete a Linear project update
Inputs: id (required). Returns: id, success
linear_deleteReleaseNoteCDestructiveIdempotent
Delete a release note
Inputs: id (required). Returns: id, success
linear_deleteReleasePipelineBDestructiveIdempotent
Delete a release pipeline
Inputs: pipelineId (required). Returns: id, success
linear_deleteSavedViewADestructiveIdempotent
Delete a Linear saved view (API: deleteCustomView)
Inputs: id (required). Returns: id, success
linear_deleteWebhookCDestructiveIdempotent
Delete a webhook
Inputs: id (required). Returns: id, success
linear_duplicateIssueC
Duplicate an issue
Inputs: issueId (required). Returns: success, originalIssue, duplicatedIssue
linear_generateOAuthApplicationSetupARead-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_generateOAuthAuthorizationUrlARead-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_getActiveCycleARead-onlyIdempotent
Get the currently active cycle for a team
Inputs: teamId (required). Returns: id, name, team, endsAt, +7 more
linear_getAttachmentsCRead-onlyIdempotent
Get attachments for an issue
Inputs: issueId (required), limit, orderBy, includeArchived. Returns: items
linear_getAuthenticationSessionsARead-onlyIdempotent
Get active authentication sessions
Inputs: no named parameters. Returns: items
linear_getCommentsCRead-onlyIdempotent
Get comments for an issue, project, initiative, update, or document content
Inputs: limit, cursor, postId, issueId, +6 more. Returns: items
linear_getCustomerByIdBRead-onlyIdempotent
Get a customer by ID
Inputs: id (required). Returns: id, url, name, size, +14 more
linear_getCustomerNeedByIdARead-onlyIdempotent
Get a customer need by ID
Inputs: id (required). Returns: id, url, body, issue, +17 more
linear_getCustomerNeedsCRead-onlyIdempotent
Get customer needs from Linear
Inputs: limit, issueId, orderBy, priority, +3 more. Returns: items
linear_getCustomersBRead-onlyIdempotent
Get customers from Linear
Inputs: name, limit, domain, tierId, +4 more. Returns: items
linear_getCustomerStatusesCRead-onlyIdempotent
Get customer statuses from Linear
Inputs: limit, orderBy, includeArchived. Returns: items
linear_getCustomerTiersBRead-onlyIdempotent
Get customer tiers from Linear
Inputs: limit, orderBy, includeArchived. Returns: items
linear_getCustomFieldsARead-onlyIdempotent
Get the custom field definitions available in the authenticated Linear workspace
Inputs: no named parameters. Returns: items
linear_getCycleByIdARead-onlyIdempotent
Get details of a specific cycle
Inputs: id (required). Returns: id, name, team, endsAt, +5 more
linear_getCycleDocumentsBRead-onlyIdempotent
Get documents associated with a specific Linear cycle
Inputs: cycleId (required), limit, title, orderBy, +1 more. Returns: items
linear_getCycleIssuesARead-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_getCyclesBRead-onlyIdempotent
Get a list of all cycles
Inputs: limit, teamId. Returns: items
linear_getCycleStatsCRead-onlyIdempotent
Get statistics for a cycle
Inputs: id (required). Returns: id, name, number, progress, +6 more
linear_getDocumentByIdBRead-onlyIdempotent
Get details of a specific Linear document
Inputs: id (required). Returns: id, url, icon, team, +20 more
linear_getDocumentContentHistoryARead-onlyIdempotent
Get content history entries for a Linear document content record
Inputs: id (required). Returns: history, success
linear_getDocumentsBRead-onlyIdempotent
Get workspace documents from Linear
Inputs: limit, title, teamId, cycleId, +6 more. Returns: items
linear_getFavoriteViewsARead-onlyIdempotent
Get favorite Linear views, including saved views and predefined views
Inputs: limit, orderBy, includeArchived. Returns: items
linear_getInitiativeByIdARead-onlyIdempotent
Get details of a specific initiative by ID
Inputs: initiativeId (required), includeProjects. Returns: id, url, icon, name, +8 more
linear_getInitiativeDocumentsARead-onlyIdempotent
Get documents for a specific Linear initiative
Inputs: initiativeId (required), limit, title, orderBy, +1 more. Returns: items
linear_getInitiativeProjectsARead-onlyIdempotent
Get all projects associated with an initiative
Inputs: initiativeId (required), includeArchived. Returns: items
linear_getInitiativesARead-onlyIdempotent
Get a list of all initiatives from Linear
Inputs: limit, includeArchived. Returns: items
linear_getInitiativeUpdateByIdBRead-onlyIdempotent
Get a specific initiative update by ID
Inputs: id (required). Returns: id, url, body, diff, +12 more
linear_getInitiativeUpdatesBRead-onlyIdempotent
Get updates for an initiative
Inputs: initiativeId (required), limit. Returns: items
linear_getIntegrationsCRead-onlyIdempotent
Get a list of active integrations
Inputs: limit, orderBy, includeArchived. Returns: items
linear_getIssueByIdARead-onlyIdempotent
Get a specific issue by ID or identifier (e.g., ABC-123)
Inputs: id (required). Returns: id, url, team, cycle, +16 more
linear_getIssueCustomFieldsARead-onlyIdempotent
Get the custom field values that are currently set on a specific issue
Inputs: issueId (required). Returns: issueId, identifier, customFields
linear_getIssueDocumentsARead-onlyIdempotent
Get documents associated with a specific Linear issue
Inputs: issueId (required), limit, title, orderBy, +1 more. Returns: items
linear_getIssueHistoryBRead-onlyIdempotent
Get the history of changes made to an issue
Inputs: issueId (required), limit. Returns: history, issueId, identifier
linear_getIssuesBRead-onlyIdempotent
Get a list of recent issues from Linear
Inputs: limit. Returns: items
linear_getIssueTemplateByIdARead-onlyIdempotent
Get details of a specific issue template
Inputs: id (required). Returns: id, name, team, type, +7 more
linear_getIssueTemplatesCRead-onlyIdempotent
Get a list of issue templates
Inputs: limit, orderBy, includeArchived. Returns: items
linear_getLabelsBRead-onlyIdempotent
Get a list of issue labels from Linear
Inputs: no named parameters. Returns: items
linear_getManagedOAuthApplicationByIdARead-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_getManagedOAuthApplicationsARead-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_getMilestoneByIdARead-onlyIdempotent
Get details of a specific project milestone by ID
Inputs: id (required). Returns: id, name, status, project, +7 more
linear_getMilestonesARead-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_getNotificationsBRead-onlyIdempotent
Get notifications for the current user
Inputs: limit, orderBy, includeArchived. Returns: items
linear_getOrganizationARead-onlyIdempotent
Get information about the current Linear organization
Inputs: no named parameters. Returns: id, name, urlKey, logoUrl
linear_getOrganizationAuditEventsBRead-onlyIdempotent
Get audit events for the organization
Inputs: limit, orderBy, includeArchived. Returns: items
linear_getProjectByIdARead-onlyIdempotent
Get details for a specific Linear project by ID
Inputs: id (required). Returns: id, url, icon, lead, +11 more
linear_getProjectDocumentsBRead-onlyIdempotent
Get documents for a specific Linear project
Inputs: projectId (required), limit, title, orderBy, +1 more. Returns: items
linear_getProjectIssuesARead-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_getProjectMembersARead-onlyIdempotent
Get members assigned to a project
Inputs: projectId (required), limit, orderBy, includeArchived, +1 more. Returns: items
linear_getProjectsARead-onlyIdempotent
Get a list of projects from Linear
Inputs: no named parameters. Returns: items
linear_getProjectUpdateByIdARead-onlyIdempotent
Get a specific Linear project update by ID
Inputs: id (required). Returns: id, url, body, diff, +10 more
linear_getProjectUpdatesARead-onlyIdempotent
Get all updates associated with a project
Inputs: projectId (required), limit. Returns: items
linear_getRateLimitStatusARead-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_getReleaseByIdBRead-onlyIdempotent
Get details of a specific release
Inputs: id (required). Returns: id, url, name, stage, +17 more
linear_getReleaseDocumentsARead-onlyIdempotent
Get documents associated with a specific Linear release
Inputs: releaseId (required), limit, title, orderBy, +1 more. Returns: items
linear_getReleaseNoteByIdARead-onlyIdempotent
Get details of a specific release note
Inputs: id (required). Returns: id, title, slugId, content, +4 more
linear_getReleaseNotesBRead-onlyIdempotent
Get release notes from Linear
Inputs: limit, orderBy, includeArchived. Returns: items
linear_getReleasePipelineByIdARead-onlyIdempotent
Get details of a specific release pipeline
Inputs: id (required). Returns: id, url, name, type, +10 more
linear_getReleasePipelinesBRead-onlyIdempotent
Get release pipelines from Linear
Inputs: limit, orderBy, includeArchived. Returns: items
linear_getReleasesBRead-onlyIdempotent
Get releases from Linear with optional pipeline and stage filters
Inputs: limit, orderBy, stageId, pipelineId, +1 more. Returns: items
linear_getReleaseStagesARead-onlyIdempotent
Get release stages from Linear
Inputs: limit, orderBy, pipelineId, includeArchived. Returns: items
linear_getRoadmapByIdARead-onlyIdempotent
Get details of a specific roadmap by ID
Inputs: id (required). Returns: id, url, name, color, +9 more
linear_getRoadmapsCRead-onlyIdempotent
Get a list of roadmaps from Linear
Inputs: limit, orderBy, includeArchived. Returns: items
linear_getSavedViewsARead-onlyIdempotent
Get Linear saved views (API: CustomView)
Inputs: limit, orderBy, includeArchived. Returns: items
linear_getServerStatusARead-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_getSubscriptionsBRead-onlyIdempotent
Get subscriptions for the current user
Inputs: limit, orderBy, includeArchived. Returns: items
linear_getTeamDocumentsBRead-onlyIdempotent
Get documents associated with a specific Linear team
Inputs: teamId (required), limit, title, orderBy, +1 more. Returns: items
linear_getTeamLabelsARead-onlyIdempotent
Get labels for a specific team
Inputs: teamId (required), limit, orderBy, includeArchived. Returns: items
linear_getTeamMembershipsCRead-onlyIdempotent
Get team memberships
Inputs: teamId (required), limit, orderBy, includeArchived. Returns: items
linear_getTeamResourcesBRead-onlyIdempotent
Get team home resource sections and pinned documents or external links
Inputs: teamId (required). Returns: team, sections, unsectioned
linear_getTeamsARead-onlyIdempotent
Get a list of teams from Linear
Inputs: no named parameters. Returns: items
linear_getTeamTemplatesBRead-onlyIdempotent
Get templates for a specific team
Inputs: teamId (required), limit, orderBy, includeArchived. Returns: items
linear_getUnreadNotificationCountARead-onlyIdempotent
Get count of unread notifications
Inputs: limit. Returns: count
linear_getUserAuditEventsCRead-onlyIdempotent
Get audit events for a specific user
Inputs: userId (required), limit, orderBy, includeArchived. Returns: items
linear_getUsersARead-onlyIdempotent
Get a list of users in the Linear organization
Inputs: no named parameters. Returns: items
linear_getViewerARead-onlyIdempotent
Get information about the currently authenticated user
Inputs: no named parameters. Returns: id, name, email, active, +2 more
linear_getWebhookByIdARead-onlyIdempotent
Get one ordinary workspace webhook by ID.
Inputs: id (required). Returns: id, url, team, label, +7 more
linear_getWebhooksCRead-onlyIdempotent
Get a list of webhooks
Inputs: limit, teamId, orderBy, includeArchived. Returns: items
linear_getWorkflowStatesBRead-onlyIdempotent
Get workflow states for a team
Inputs: teamId (required), includeArchived. Returns: items
linear_logoutAllSessionsBDestructiveIdempotent
Revoke all sessions
Inputs: no named parameters. Returns: success
linear_logoutOtherSessionsADestructiveIdempotent
Revoke all other sessions
Inputs: no named parameters. Returns: success
linear_logoutSessionBDestructiveIdempotent
Revoke a specific session
Inputs: sessionId (required). Returns: success
linear_markAllNotificationsAsReadCIdempotent
Mark all notifications as read
Inputs: limit. Returns: count, success
linear_markNotificationAsReadCIdempotent
Mark a notification as read
Inputs: id (required). Returns: id, success
linear_removeFromFavoritesAIdempotent
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_removeIssueFromCycleAIdempotent
Remove an issue from a cycle
Inputs: cycleId (required), issueId (required). Returns: cycle, issue, success
linear_removeIssueFromProjectBIdempotent
Remove an existing issue from a project
Inputs: issueId (required), projectId (required). Returns: issue, project, success
linear_removeIssueFromReleaseBIdempotent
Remove an issue from a release
Inputs: issueId (required), releaseId (required). Returns: issue, release, success
linear_removeIssueLabelAIdempotent
Remove a label from an issue in Linear
Inputs: issueId (required), labelId (required). Returns: issueId, labelId, success
linear_removeProjectFromInitiativeBIdempotent
Remove a project from an initiative
Inputs: projectId (required), initiativeId (required). Returns: message, project, success, initiative
linear_removeProjectMemberAIdempotent
Remove a member from a project
Inputs: userId (required), projectId (required). Returns: userId, success, projectId
linear_removeUserFromTeamAIdempotent
Remove a user from a team
Inputs: teamId (required), userId (required), alsoLeaveParentTeams. Returns: teamId, userId, success
linear_rotateManagedOAuthApplicationSecretADestructive
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_rotateManagedOAuthApplicationWebhookSecretADestructive
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_rotateWebhookSecretBDestructive
Rotate an ordinary workspace webhook signing secret.
Inputs: id (required), confirmSecretExposure (required). Returns: id, secret, success
linear_searchDocumentsBRead-onlyIdempotent
Search Linear documents by term
Inputs: term (required), limit, teamId, orderBy, +3 more. Returns: nodes, totalCount
linear_searchIssuesCRead-onlyIdempotent
Search for issues with various filters
Inputs: dates, limit, query, states, +3 more. Returns: items
linear_searchReleasesCRead-onlyIdempotent
Search releases by term, version, or pipeline name
Inputs: term, limit, stageId, pipelineId, +1 more. Returns: items
linear_setIssuePriorityAIdempotent
Set the priority of an issue
Inputs: issueId (required), priority (required). Returns: issue, success
linear_subscribeToIssueCIdempotent
Subscribe to issue updates
Inputs: issueId (required). Returns: message, success
linear_transferIssueBIdempotent
Transfer an issue to another team
Inputs: teamId (required), issueId (required). Returns: issue, success
linear_unarchiveCustomerNeedAIdempotent
Restore an archived customer need
Inputs: id (required). Returns: id, success
linear_unarchiveDocumentAIdempotent
Restore a previously archived Linear document
Inputs: id (required). Returns: id, success
linear_unarchiveInitiativeBIdempotent
Unarchive an initiative
Inputs: initiativeId (required). Returns: success
linear_unarchiveInitiativeUpdateBIdempotent
Restore an archived initiative update
Inputs: id (required). Returns: id, success
linear_unarchiveProjectUpdateAIdempotent
Restore an archived Linear project update
Inputs: id (required). Returns: id, success
linear_unarchiveReleaseBIdempotent
Unarchive a release
Inputs: releaseId (required). Returns: release, success
linear_unarchiveReleasePipelineBIdempotent
Unarchive a release pipeline
Inputs: pipelineId (required). Returns: success, releasePipeline
linear_unarchiveReleaseStageAIdempotent
Unarchive a release stage
Inputs: stageId (required). Returns: success, releaseStage
linear_updateCommentCIdempotent
Update an existing comment
Inputs: id (required), body, quotedText, subscriberIds, +3 more. Returns: id, url, body, user, +6 more
linear_updateCustomerCIdempotent
Update a customer
Inputs: id (required), name, size, tierId, +8 more. Returns: id, url, name, size, +14 more
linear_updateCustomerNeedCIdempotent
Update a customer need
Inputs: id (required), body, issueId, priority, +5 more. Returns: id, url, body, issue, +17 more
linear_updateCycleAIdempotent
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_updateDocumentAIdempotent
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_updateInitiativeBIdempotent
Update an existing initiative
Inputs: initiativeId (required), icon, name, color, +5 more. Returns: id, url, name, status, +1 more
linear_updateInitiativeUpdateBIdempotent
Update an existing initiative update
Inputs: id (required), body, health, isDiffHidden. Returns: id, url, body, diff, +12 more
linear_updateIssueBIdempotent
Update an existing issue in Linear
Inputs: id (required), title, teamId, cycleId, +14 more. Returns: id, url, title, identifier
linear_updateIssueCustomFieldBIdempotent
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_updateIssueTemplateAIdempotent
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_updateManagedOAuthApplicationAIdempotent
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_updateMilestoneAIdempotent
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_updateProjectCIdempotent
Update an existing project in Linear
Inputs: id (required), icon, name, color, +8 more. Returns: id, url, icon, lead, +11 more
linear_updateProjectUpdateAIdempotent
Update an existing project update in Linear
Inputs: id (required), body, health, isDiffHidden. Returns: id, url, body, diff, +10 more
linear_updateReleaseAIdempotent
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_updateReleaseNoteAIdempotent
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_updateReleasePipelineAIdempotent
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_updateReleaseStageAIdempotent
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_updateRoadmapCIdempotent
Update an existing roadmap
Inputs: id (required), name, color, ownerId, +2 more. Returns: id, url, name, color, +9 more
linear_updateSavedViewAIdempotent
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_updateTeamDIdempotent
Update team settings
Inputs: id (required), key, icon, name, +6 more. Returns: id, key, icon, name, +7 more
linear_updateTeamMembershipBIdempotent
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_updateWebhookCIdempotent
Update an ordinary workspace webhook.
Inputs: id (required), url, label, secret, +2 more. Returns: id, url, team, label, +7 more
linear_updateWorkflowStateBIdempotent
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
Scored across 198 tools
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.
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.
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.
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
Related MCP Connectors
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server for generating rough-draft project plans from natural-language prompts.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA 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 npmMIT
- AlicenseNot gradedqualityNot gradedmaintenanceAn 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.-
- AlicenseBqualityDmaintenanceAn 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.252,467 npmMIT
- AlicenseNot gradedqualityCmaintenanceCustom MCP server for Linear that enables managing issues, projects, and workspaces through natural language, backed by raw GraphQL.672 npm1MIT