Skip to main content
Glama

Linear MCP Server

An MCP server for interacting with Linear's API. This server provides a set of tools for managing Linear issues, projects, and teams through Cline.

Setup Guide

1. Environment Setup

  1. Clone the repository

  2. Install dependencies:

    npm install
  3. Copy .env.example to .env:

    cp .env.example .env

2. Authentication

The server supports two authentication methods:

  1. Go to Linear Settings

  2. Navigate to the "Security & access" section

  3. Find the "Personal API keys" section

  4. Click "New API key"

  5. Give the key a descriptive label (e.g. "Cline MCP")

  6. Copy the generated token immediately

  7. Add the token to your .env file:

    LINEAR_API_KEY=your_api_key

OAuth Flow (Alternative) NOT IMPLEMENTED

  1. Create an OAuth application at https://linear.app/settings/api/applications

  2. Configure OAuth environment variables in .env:

    LINEAR_CLIENT_ID=your_oauth_client_id
    LINEAR_CLIENT_SECRET=your_oauth_client_secret
    LINEAR_REDIRECT_URI=http://localhost:3000/callback

3. Running the Server

  1. Build the server:

    npm run build
  2. Start the server:

    npm start

4. Cline Integration

  1. Open your Cline MCP settings file:

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

    • Windows: %APPDATA%/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json

    • Linux: ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json

  2. Add the Linear MCP server configuration:

    {
      "mcpServers": {
        "linear": {
          "command": "node",
          "args": ["/path/to/linear-mcp/build/index.js"],
          "env": {
            "LINEAR_API_KEY": "your_personal_access_token"
          },
          "disabled": false,
          "autoApprove": []
        }
      }
    }

Related MCP server: Linear MCP Server

Available Actions

The server currently supports the following operations:

Issue Management

  • ✅ Create issues with full field support (title, description, team, project, etc.)

  • ✅ Update existing issues (priority, description, etc.)

  • ✅ Delete issues (single or bulk deletion)

  • ✅ Search issues with filtering

  • ✅ Associate issues with projects

  • ✅ Create parent/child issue relationships

  • ✅ Read and create comments and threaded comments

Project Management

  • ✅ Create projects with associated issues

  • ✅ Get project information with rich text descriptions

  • ✅ Search projects with rich text descriptions

  • ✅ Associate issues with projects

  • ✅ Proper description handling using Linear's documentContent field

Team Management

  • ✅ Get team information (with states and workflow details)

  • ✅ Access team states and labels

Authentication

  • ✅ API Key authentication

  • ✅ Secure token storage

Batch Operations

  • ✅ Bulk issue creation

  • ✅ Bulk issue deletion

Bulk Updates (In Testing)

  • 🚧 Bulk issue updates (parallel processing implemented, needs testing)

Rich Text Description Support

The server now properly handles Linear's rich text descriptions for projects:

  • Legacy Support: Maintains compatibility with the old description field

  • Rich Content: Uses Linear's documentContent field for actual description content

  • Automatic Fallback: Falls back to legacy field if rich content is unavailable

  • Type Safety: Includes proper TypeScript types for both description formats

How It Works

Linear uses a dual-field system for descriptions:

  1. description - Legacy field (often empty for backward compatibility)

  2. documentContent.content - Contains the actual rich text description content

The MCP server automatically:

  • Queries both fields from Linear's API

  • Prioritizes documentContent.content over the legacy description field

  • Provides a utility function getProjectDescription() for consistent access

  • Returns an actualDescription field in responses for easy access

Features in Development

The following features are currently being worked on:

Issue Management

  • 🚧 Complex search filters

  • 🚧 Pagination support for large result sets

Metadata Operations

  • 🚧 Label management (create/update/assign)

  • 🚧 Cycle/milestone management

Project Management

  • 🚧 Project template support

  • 🚧 Advanced project operations

Authentication

  • 🚧 OAuth flow with automatic token refresh

Performance & Security

  • 🚧 Rate limiting

  • 🚧 Detailed logging

  • 🚧 Load testing and optimization

Development

# Install dependencies
npm install

# Run tests
npm test

# Run integration tests (requires LINEAR_API_KEY)
npm run test:integration

# Build the server
npm run build

# Start the server
npm start

Integration Testing

Integration tests verify that authentication and API calls work correctly:

  1. Set up authentication (API Key recommended for testing)

  2. Run integration tests:

    npm run test:integration

For OAuth testing:

  1. Configure OAuth credentials in .env

  2. Remove .skip from OAuth tests in src/__tests__/auth.integration.test.ts

  3. Run integration tests

Recent Improvements

Project Description Support (Latest)

  • ✅ Fixed empty project descriptions by implementing Linear's documentContent field support

  • ✅ Added proper TypeScript types for rich text content

  • ✅ Implemented automatic fallback from rich content to legacy description

  • ✅ Updated all project-related queries and handlers

  • ✅ Added comprehensive tests for new description handling

  • ✅ Maintained backward compatibility with existing API consumers

Previous Improvements

  • ✅ Enhanced type safety across all operations

  • ✅ Implemented true batch operations for better performance

  • ✅ Improved error handling and validation

  • ✅ Added comprehensive test coverage

  • ✅ Refactored architecture for better maintainability

Available Tools

22 tools
linear_authC

Initialize OAuth flow with Linear

Inputs: clientId (required), redirectUri (required), clientSecret (required).

linear_auth_callbackC

Handle OAuth callback

Inputs: code (required).

linear_bulk_update_issuesC

Update multiple issues at once

Inputs: update (required), issueIds (required).

linear_create_commentA

Create a new comment on an issue or reply to an existing comment

Inputs: body (required), issueId (required), createAsUser, displayIconUrl, +1 more.

linear_create_issueC

Create a new issue in Linear

Inputs: title (required), teamId (required), description (required), estimate, +5 more.

linear_create_issuesA

Create multiple issues at once

Inputs: issues (required).

linear_create_project_milestoneC

Create a new project milestone in Linear

Inputs: name (required), projectId (required), sortOrder, targetDate, +1 more.

linear_create_project_milestonesA

Create multiple project milestones at once

Inputs: projectId (required), milestones (required).

linear_create_project_with_issuesB

Create a new project with associated issues. Note: Project requires teamIds (array) not teamId (single value).

Inputs: issues (required), project (required).

linear_delete_issueC

Delete an issue

Inputs: id (required).

linear_delete_issuesC

Delete multiple issues

Inputs: ids (required).

linear_delete_project_milestoneB

Delete a project milestone

Inputs: id (required).

linear_get_issue_commentsA

Get comments for a specific issue, including threaded replies

Inputs: issueId (required), after, first, includeArchived.

linear_get_projectC

Get project information

Inputs: id (required).

linear_get_project_milestoneC

Get information about a specific project milestone

Inputs: id (required).

linear_get_project_milestonesC

Get all milestones for a specific project

Inputs: projectId (required), after, first, orderBy.

linear_get_teamsA

Get all teams with their states and labels

Inputs: no named parameters.

linear_get_userB

Get current user information

Inputs: no named parameters.

linear_search_issuesB

Search for issues with filtering and pagination

Inputs: after, first, query, states, +4 more.

linear_search_project_milestonesB

Search for project milestones with filtering and pagination

Inputs: name, after, first, orderBy, +2 more.

linear_search_projectsC

Search for projects by name

Inputs: name (required).

linear_update_project_milestoneB

Update an existing project milestone

Inputs: id (required), name, projectId, sortOrder, +2 more.

Tool Schema Changelog

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

    TDQS

    B3.1/5.0

    Scored across 22 tools

    Disambiguation4/5

    Most tools are clearly distinct by resource and action (e.g., issues vs. projects vs. milestones). The few potentially confusable pairs are singular/plural variants like create_issue/create_issues and delete_issue/delete_issues, but the plural forms clearly indicate bulk operations.

    Naming Consistency5/5

    All tools use a consistent linear_ prefix followed by snake_case verb_noun patterns (e.g., create_issue, search_projects, get_project_milestones). The singular/plural distinction is applied uniformly, and there are no mixed conventions or vague verbs.

    Tool Count3/5

    At 22 tools, the count falls into the borderline-heavy range (16-25). However, the coverage spans multiple subdomains (issues, projects, milestones, comments, auth, teams, user), so the count is defensible but feels slightly high for an MCP server.

    Completeness3/5

    Issues have create, update (bulk), delete, and search, but no single-issue get; projects support create/get/search but not update or delete; comments only support get and create. These are notable gaps in lifecycle coverage for the core resources.

    Maintenance

    ActivityInactive
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers