MCP Hub
Back to servers

linear-mcp

A Model Context Protocol server that enables interaction with Linear workspaces to manage issues, projects, cycles, and teams through a GraphQL interface. It provides 21 tools for comprehensive task management, search, and workflow coordination using OAuth2 authentication.

Stars
1
Forks
1
Updated
Feb 13, 2026

linear-mcp

A Linear MCP server for Dedalus.

Prerequisites

  • Python 3.11+
  • uv
  • A Linear workspace

Setup

cd linear-mcp
cp .env.example .env   # then fill in your values
uv sync

Environment variables

Linear uses OAuth2 for authentication. The Dedalus platform (DAuth) handles the OAuth flow. The MCP server declares the secret name it needs (e.g. LINEAR_ACCESS_TOKEN).

OAuth provider configuration (consumed by the Dedalus platform):

VariableDescription
OAUTH_ENABLEDtrue
OAUTH_AUTHORIZE_URLhttps://linear.app/oauth/authorize
OAUTH_TOKEN_URLhttps://api.linear.app/oauth/token
OAUTH_CLIENT_IDYour Linear OAuth app client ID
OAUTH_CLIENT_SECRETYour Linear OAuth app client secret
OAUTH_SCOPES_AVAILABLEread,write,issues:create,comments:create
OAUTH_BASE_URLhttps://api.linear.app

Dedalus client configuration (for _client.py testing):

VariableDescription
DEDALUS_API_KEYYour Dedalus API key (dsk_*)
DEDALUS_API_URLDefaults to https://api.dedaluslabs.ai
DEDALUS_AS_URLDefaults to https://as.dedaluslabs.ai

Run the server

uv run src/main.py

Test locally

uv run src/_client.py

This opens an interactive agent loop. On first use, DAuth will prompt you to complete the Linear OAuth flow in your browser.

Lint and typecheck

uv run --group lint ruff format src/
uv run --group lint ruff check src/ --fix
uv run --group lint ty check src/

Available tools

ToolR/WDescription
linear_get_issueRGet issue by ID or identifier (ENG-123)
linear_list_issuesRList issues with filters
linear_create_issueWCreate a new issue
linear_update_issueWUpdate an existing issue
linear_list_commentsRList comments on an issue
linear_create_commentWAdd a comment to an issue
linear_get_projectRGet project by ID
linear_list_projectsRList projects
linear_create_projectWCreate a new project
linear_update_projectWUpdate an existing project
linear_list_cyclesRList cycles for a team
linear_get_cycleRGet a cycle by ID
linear_active_cycleRGet the current active cycle for a team
linear_list_teamsRList all teams
linear_get_teamRGet a team by ID
linear_list_team_statesRList workflow states (statuses) for a team
linear_whoamiRGet authenticated user profile
linear_list_usersRList workspace members
linear_list_labelsRList labels
linear_create_labelWCreate a new label
linear_search_issuesRFull-text search across issues

21 tools (14 read, 7 write)

Architecture

Linear uses a single GraphQL endpoint (POST /graphql) for all operations. The request layer in src/linear/request.py dispatches queries through Dedalus's HTTP enclave, which injects OAuth credentials transparently.

src/
├── linear/
│   ├── config.py      # Connection definition (OAuth)
│   ├── request.py     # GraphQL dispatch + coercion helpers
│   └── types.py       # Typed dataclass models
├── tools/
│   ├── issues.py      # Issue CRUD
│   ├── comments.py    # Comment operations
│   ├── projects.py    # Project CRUD
│   ├── cycles.py      # Cycle queries
│   ├── teams.py       # Team + workflow states
│   ├── users.py       # User queries
│   ├── labels.py      # Label operations
│   └── search.py      # Issue search
├── server.py          # MCPServer setup
├── main.py            # Entry point
└── _client.py         # Interactive agent loop (DAuth)

Notes

  • Linear's API is GraphQL-only. Every tool dispatches a GraphQL query or mutation.
  • Workflow states (statuses) vary per team. Use linear_list_team_states to discover valid state IDs before creating or transitioning issues.
  • Issue identifiers (e.g. ENG-123) can be used interchangeably with UUIDs in most tools.
  • Priority values: 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low.
  • Archived resources are hidden by default. Some tools accept include_archived to surface them.
  • Authentication uses OAuth2 via DAuth. Personal API keys are not supported in this server.

Reviews

No reviews yet

Sign in to write a review