Linear MCP server
Issues, projects and comments in your Linear workspace, through Linear's hosted MCP server.
How it connects
New to MCP? What is an MCP server?
- Runs on
- Linear's own MCP endpoint
- Connects with
- Your Linear account, connected once for your org
- Category
- Productivity
What it does
Linear hosts this server at https://mcp.linear.app/mcp. It covers far more than issues: an agent can also run projects and milestones, write documents and status updates, manage labels and releases, and review and merge pull requests through Linear's diffs. Every call acts as the Linear user who signed in.
Tools
The hosted server listed 68 tools to a connected client on Oct 16, 2026. The save_* tools both create and update: called without an id they create, and with one they edit.
Issues and triage
| Tool | What it does | Reads or changes |
|---|---|---|
list_issues | Lists issues with filters. | Reads |
get_issue | Gets one issue in full. | Reads |
save_issue | Creates an issue, or updates one: title, description, state, assignee, priority and so on. | Changes |
list_issue_statuses | Lists a team's workflow states. | Reads |
get_issue_status | Gets one workflow state by name or ID. | Reads |
share_issue | Shares an issue with a workspace user who cannot otherwise see it. | Changes |
unshare_issue | Removes that shared access. | Changes |
list_cycles | Lists a team's cycles. | Reads |
list_custom_views | Lists saved custom views. | Reads |
list_templates | Lists templates. | Reads |
get_template | Gets one template. | Reads |
get_triage_responsibility | Shows who is on triage for a team now and the upcoming rotation shifts. | Reads |
Labels
| Tool | What it does | Reads or changes |
|---|---|---|
list_issue_labels | Lists issue labels. | Reads |
save_issue_label | Creates or updates an issue label. | Changes |
create_issue_label | Creates an issue label. Deprecated in favour of save_issue_label. | Changes |
retire_issue_label | Retires a label so it can't be applied to new issues. Retiring a group retires its children. | Changes |
restore_issue_label | Brings a retired issue label back. | Changes |
list_project_labels | Lists project labels. | Reads |
save_project_label | Creates or updates a project label. | Changes |
retire_project_label | Retires a project label. | Changes |
restore_project_label | Brings a retired project label back. | Changes |
Projects, milestones and status updates
| Tool | What it does | Reads or changes |
|---|---|---|
list_projects | Lists projects. | Reads |
get_project | Gets one project. | Reads |
save_project | Creates or updates a project. | Changes |
list_milestones | Lists a project's milestones. | Reads |
get_milestone | Gets one milestone. | Reads |
save_milestone | Creates or updates a milestone. | Changes |
get_status_updates | Gets project or initiative status updates. | Reads |
save_status_update | Posts or edits a project or initiative status update. | Changes |
delete_status_update | Deletes (archives) a status update. | Changes |
Documents and comments
| Tool | What it does | Reads or changes |
|---|---|---|
list_documents | Lists documents. | Reads |
get_document | Gets one document. | Reads |
save_document | Creates or updates a document. | Changes |
list_comments | Lists comments. | Reads |
save_comment | Posts or edits a comment. | Changes |
delete_comment | Deletes a comment. | Changes |
Attachments and images
| Tool | What it does | Reads or changes |
|---|---|---|
get_attachment | Gets an attachment. | Reads |
prepare_attachment_upload | Starts a file upload for an attachment. | Changes |
create_attachment_from_upload | Attaches an uploaded file to an issue. | Changes |
create_attachment | Attaches a base64 file. A deprecated fallback. | Changes |
delete_attachment | Deletes an attachment. | Changes |
extract_images | Fetches the images embedded in issue, comment or document Markdown so the agent can see them. | Reads |
Releases
| Tool | What it does | Reads or changes |
|---|---|---|
list_release_pipelines | Lists release pipelines. | Reads |
list_releases | Lists releases. | Reads |
get_release | Gets one release. | Reads |
save_release | Creates or updates a release, including moving it to another pipeline stage. | Changes |
list_release_notes | Lists release notes. | Reads |
get_release_note | Gets one set of release notes. | Reads |
save_release_note | Creates or edits release notes. | Changes |
Diffs and code review
Linear's diffs are pull requests shown in Linear. These tools accept a Linear review URL or a GitHub PR URL.
| Tool | What it does | Reads or changes |
|---|---|---|
list_diffs | Lists pull requests visible to the user. | Reads |
get_diff | Gets one pull request with its reviewers. | Reads |
get_diff_threads | Gets the review threads on a pull request. | Reads |
update_diff | Changes a pull request's title, description, reviewers or issue links, or closes, reopens or drafts it. | Changes |
save_diff_comment | Posts or edits a review comment. | Changes |
delete_diff_comment | Deletes a review comment. | Changes |
resolve_diff_thread | Resolves a review thread. | Changes |
submit_diff_review | Approves a pull request or requests changes. | Changes |
merge_diff | Merges a pull request, or adds it to the merge queue. | Changes |
Workspace, people and notifications
| Tool | What it does | Reads or changes |
|---|---|---|
get_workspace | Gets workspace details. | Reads |
list_teams | Lists teams. | Reads |
get_team | Gets one team. | Reads |
list_users | Lists workspace users. | Reads |
get_user | Gets one user. | Reads |
get_notifications | Reads the signed-in user's notification inbox. | Reads |
mark_notification | Changes the state of a notification in the user's inbox, such as marking it read. | Changes |
list_agent_skills | Lists Linear Agent skills. | Reads |
get_agent_skill | Gets a Linear Agent skill with its full instructions. | Reads |
search_documentation | Searches Linear's own help docs. | Reads |
Set it up
Directly
Claude Code, using the command from Linear's docs:
claude mcp add --transport http linear-server https://mcp.linear.app/mcpRun /mcp in a session to sign in. In Cursor, add the URL to ~/.cursor/mcp.json, or use the install link on Linear's page:
{
"mcpServers": {
"linear": {
"url": "https://mcp.linear.app/mcp"
}
}
}Linear offers a read-only endpoint, https://mcp.linear.app/mcp/readonly, that exposes only the read tools. You can also skip OAuth and send a Linear API key or OAuth token as Authorization: Bearer <token>. A key created with only the Read permission gives you a read-only connection. Each Linear workspace needs its own sign-in. The general client steps are in How to add MCP servers to Claude Code and How to set up MCP servers in Cursor.
Through Statio
Install Linear from the catalog, press Connect and approve on Linear's page. One person with permission to manage credentials connects it for the organization, and Statio refreshes the tokens before they expire. Then grant tools under Permissions to a person, a team or an agent. A team grant gives every member the whole server, so grant single tools to a person or agent when you want only some of them.
The desktop app writes the client config. By hand, point Cursor at http://127.0.0.1:7777/linear/mcp, using the server name from your dashboard, and for Claude Code run mcphub config claude-code. A non-interactive agent signs in with its own client ID and secret, which Connect a client describes. If nothing appears, start a fresh session and then work through How to debug an MCP server that won't connect.
What to hold back
A Linear connection is easy to think of as "the issue tracker". It also carries code review and merge rights over your GitHub pull requests, release management, and every team the user can see. Decide per agent.
A triage bot needs list_issues, get_issue, save_issue, save_comment, the label and status reads, and maybe get_triage_responsibility. Keep these from it:
share_issuegives a person access to an issue they could not otherwise see. An agent following text in a bug report ("loop in alex@...") can expose an issue from a private team.save_status_updateposts a project update that stakeholders read as the team's word.delete_status_updateanddelete_commentremove history.retire_issue_labelon a label group retires every child label, which breaks any triage filter built on those labels.save_project,save_milestoneandsave_releasemove dates and stages on plans other people rely on.
A coding agent that picks up issues and opens pull requests should read diffs, and maybe post review comments. Hold back:
merge_diff. It merges the pull request in your repository, or queues the merge. An agent that wrote the change and then merges it has skipped review entirely.submit_diff_review. An agent approving its own pull request is the same problem with an extra step.update_diffwith its close and reopen actions, if you'd rather a person decides when a PR is abandoned.
get_notifications and mark_notification act on the connecting user's personal inbox. A shared agent identity marking things read hides them from the person who owns that inbox. Issue descriptions and comments are also untrusted input: anyone who can file an issue can write instructions an agent will read, which is why the write grants above matter. MCP permissions explains how per-tool grants work in Statio.
Questions
What Statio adds
- You choose which of its tools each agent may call. A tool you hold back is removed from that agent's tool list, and a call to it is refused.
- Agents get a Statio token, never the Linear one.
- Every call is recorded with the agent that made it, when, how long it took and whether it succeeded.
Lock down your first tool in minutes.
Three MCP servers, one of them hosted, and 10,000 calls a month, free and without a card. If you outgrow it the next plan is $19.
Two steps: create your account, then install the desktop app on each machine that runs an AI client.
- Keys encrypted at rest, never handed to an agent
- Cancel anytime, nothing is deleted
- How Statio handles credentials