mcp-linear

mcp-linear

Enables reading and managing Linear issues by human-readable ID, with tools for searching, creating, updating, commenting, and resolving teams, states, labels, and assignees by name.

Category
Visit Server

README

mcp-linear

MCP server exposing Linear issue operations. Standalone — no dependency on the built-in Claude Linear MCP.

Issues are addressed by their human identifier (GOV-123). States, teams, labels, and assignees are given by name; the server resolves them to Linear UUIDs and returns an error listing valid options when a name does not match.

Tools

Tool Description
get_issue Fetch an issue by identifier
list_my_issues Issues assigned to the API key's owner
search_issues Full-text search with team/state/assignee filters
create_issue Create an issue on a team
update_issue Update fields on an existing issue
get_comments Comments on an issue
add_comment Post a comment
list_teams Team keys and names
list_states Workflow states for a team
list_labels Labels on a team plus workspace labels (team optional)
list_users Active users

Setup

python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
cp .env.example .env
# Edit .env — set LINEAR_API_KEY

Get an API key: Linear → Settings → Security & access → Personal API keys. Write operations need a key with write access.

Add to Claude Code

{
  "mcpServers": {
    "linear": {
      "command": "/Users/piuschungath/Workspace/mcp-linear/.venv/bin/mcp-linear",
      "env": { "LINEAR_API_KEY": "lin_api_..." }
    }
  }
}

Tests

.venv/bin/pytest

All HTTP is mocked with respx. No API key and no network access are needed.

With mcp-pr-assistant

The two servers compose without importing each other: fetch a ticket with get_issue, pass its fields to create_pr_from_ticket, then post the PR URL back with add_comment.

Schema verification

The GraphQL field names in src/mcp_linear/queries.py were verified against the live Linear API on 2026-08-21, by running the tools' actual query strings (not copies of them) against a real workspace.

Verified correct:

  • the Float! issue-number comparator
  • team-scoped labels via team { labels }
  • the root issueLabels connection
  • viewer.assignedIssues(orderBy: updatedAt)
  • every field the three mutations send — IssueCreateInput, IssueUpdateInput and CommentCreateInput all accept teamId, title, description, stateId, assigneeId, priority, labelIds, issueId and body as used

One divergence was found and fixed:

  • Full-text search. issueSearch rejects its query argument as deprecated. Search now uses searchIssues(term: ...), which returns IssueSearchPayload whose nodes are IssueSearchResult, not Issue — so it cannot spread the IssueFields fragment. queries.py declares a second fragment, SearchFields, with the identical selection on that type. Introspection confirmed IssueSearchResult carries every field IssueFields selects. If you change one fragment, change the other.

One thing remains unconfirmed:

  • Workspace labels. The root issueLabels connection resolves, but whether it returns workspace-wide labels only — or also team-scoped labels belonging to other teams — was not established. Label resolution consults a team's own labels first, so a team label always wins over a same-named workspace one.

To re-verify after a Linear schema change:

LINEAR_API_KEY=lin_api_... .venv/bin/python scripts/probe_schema.py <team-key> <issue-number> <issue-uuid>

It takes a team key, an existing issue number on that team, and that issue's UUID (and prompts once, interactively, for a team UUID printed by its first probe). The probe is read-only: the mutations are checked by introspecting their input types, never by writing to your tracker.

Notes

  • Linear personal API keys are sent as Authorization: <key> with no Bearer prefix.
  • Linear reports most failures as HTTP 200 with a top-level errors array, so the client checks the response body rather than the status code.
  • Team, state, label, and user metadata is cached for the lifetime of the server process. Restart the server after changing a team's workflow states or labels.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured