T

linear-mcp

...
Created 1/24/2025bycosmix

Categories

anthropiclinearllmmcp

Language:

TypeScript

Stars:

9

Forks:

2

Linear MCP Server

A Model Context Protocol (MCP) server implementation that provides access to Linear's issue tracking system through a standardized interface.

Features

  • Create new issues and subissues with label support
  • Retrieve the list of linear projects
  • Retrieve the project updates
  • Update existing issues with full field modification
  • Delete issue with validation
  • Self-assign issues using 'me' keyword
  • Advanced search by creator and assignee
  • Add comments to issues with markdown support
  • Query Linear issues by ID or key with optional relationships
  • Search issues using custom queries with enhanced metadata
  • Type-safe operations using Linear's official SDK
  • Comprehensive error handling
  • Rate limit handling
  • Clean data transformation
  • Parent/child relationship tracking with team inheritance
  • Label management and synchronization

Prerequisites

  • Bun runtime (v1.0.0 or higher)
  • Linear account with API access

Environment Variables

LINEAR_API_KEY=your_api_key  # Your Linear API token

Installation & Setup

1. Clone the repository:

git clone [repository-url]
cd linear-mcp

2. Install dependencies and build:

bun install
bun run build

3. Configure the MCP server:

Edit the appropriate configuration file:

macOS:

  • Cline: ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
  • Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows:

  • Cline: %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json
  • Claude Desktop: %APPDATA%\Claude Desktop\claude_desktop_config.json

Linux:

  • Cline: ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
  • Claude Desktop: sadly doesn't exist yet

Add the following configuration under the mcpServers object:

{
  "mcpServers": {
    "linear": {

            
        
            
                      "command": "node",
      "args": ["/absolute/path/to/linear-mcp/build/index.js"],
      "env": {
        "LINEAR_API_KEY": "your_api_key"
      }
    }
  }
}

4. Restart the MCP server.

Within Cline's MCP settings, restart the MCP server. Restart Claude Desktop to load the new MCP server.

Development

Run development server:

bun run dev

Build project:

bun run build

Available MCP Tools

create_issue

Create a new Linear issue or subissue.

Input Schema:

{
  "teamId": "string",     
  "title": "string",      
  "description": "string",
  "parentId": "string",   
  "status": "string",
  "priority": "number",   
  "assigneeId": "string | 'me'",
  "labelIds": ["string"]  
}

Example creating a new issue:

{
  "teamId": "team-123",
  "title": "New Feature Request"
}

Example creating a self-assigned issue:

{
  "teamId": "team-123",
  "title": "My Task",
  "assigneeId": "me"
}

Example creating a subissue:

{
  "parentId": "ISSUE-123",
  "title": "Subtask"
}

update_issue

Update an existing Linear issue.

Input Schema:

{
  "issueId": "string",    
  "title": "string",      
  "description": "string",
  "status": "string",     
  "priority": "number",   
  "assigneeId": "string | 'me'",
  "labelIds": ["string"]  
}

Example self-assigning an issue:

{
  "issueId": "ISSUE-123",
  "assigneeId": "me"
}

get_issue

Get detailed information about a specific Linear issue with optional relationships.

Input Schema:

{
  "issueId": "string",
  "includeRelationships": "boolean"  
}

search_issues

Search for Linear issues using a query string with advanced filtering.

Input Schema:

{
  "query": "string",
  "includeRelationships": "boolean",
  "filter": {
    "assignedTo": "string | 'me'",
    "createdBy": "string | 'me'"
  },
  "projectId": "string",
  "projectName": "string"
}

Example searching for self-assigned issues:

            ```json

{ "query": "", "filter": { "assignedTo": "me" } }


Example searching for issues created by you:
```json
{
  "query": "",
  "filter": {
    "createdBy": "me"
  }
}

Example searching for issues assigned to a specific user:

{
  "query": "",
  "filter": {
    "assignedTo": "user-id-123"
  }
}

Example searching for issues in a specific project:

{
  "query": "bug",
  "projectId": "project-123"
}

Example searching for issues by project name:

{
  "query": "feature",
  "projectName": "Website Redesign"
}

Example combining project filter with other filters:

{
  "query": "urgent",
  "projectId": "project-123",
  "filter": {
    "assignedTo": "me"
  }
}

get_teams

Get a list of Linear teams with optional name/key filtering.

Input Schema:

{
  "nameFilter": "string"  
}

delete_issue

Delete an existing Linear issue.

Input Schema:

{
  "issueId": "string"
}

create_comment

Create a new comment on a Linear issue.

Input Schema:

{
  "issueId": "string",
  "body": "string"
}

get_projects

Get a list of Linear projects with optional name filtering and pagination.

Input Schema:

{
  "nameFilter": "string",
  "includeArchived": "boolean",
  "first": "number",
  "after": "string"
}

Example fetching all projects:

{}

Example searching for projects by name:

{
  "nameFilter": "Website"
}

Example with pagination:

{
  "first": 10,
  "after": "cursor-from-previous-response"
}

get_project_updates

Get project updates for a given project ID with optional filtering parameters.

Input Schema:

{
  "projectId": "string",
  "includeArchived": "boolean",
  "first": "number",
  "after": "string",
  "createdAfter": "string",
  "createdBefore": "string",
  "userId": "string | 'me'",
  "health": "string"
}

Example fetching updates for a project:

{
  "projectId": "project-123"
}
            Example filtering by date range:
{
  "projectId": "project-123",
  "createdAfter": "2023-01-01T00:00:00Z",
  "createdBefore": "2023-12-31T23:59:59Z"
}

Example filtering by creator (self):

{
  "projectId": "project-123",
  "userId": "me"
}

Example filtering by health status:

{
  "projectId": "project-123",
  "health": "atRisk"
}

Technical Details

  • Built with TypeScript in strict mode
  • Uses Linear's official SDK (@linear/sdk)
  • Uses MCP SDK (@modelcontextprotocol/sdk 1.4.0)
  • Authentication via API tokens
  • Comprehensive error handling
  • Rate limiting considerations
  • Bun runtime for improved performance
  • ESM modules throughout
  • Vite build system
  • Type-safe operations
  • Data cleaning features:
    • Issue mention extraction (ABC-123 format)
    • User mention extraction (@username format)
    • Markdown content cleaning
    • Content optimization for AI context
  • Self-assignment support:
    • Automatic current user resolution
    • 'me' keyword support in create/update operations
    • Efficient user ID caching
  • Advanced search capabilities:
    • Filter by assignee (including self)
    • Filter by creator (including self)
    • Support for specific user IDs
    • Efficient query optimization

Error Handling

The server implements a comprehensive error handling strategy:

  • Network error detection and appropriate messaging
  • HTTP status code handling
  • Detailed error messages with status codes
  • Error details logging to console
  • Input validation for all parameters
  • Label validation and synchronization
  • Safe error propagation through MCP protocol
  • Rate limit detection and handling
  • Authentication error handling
  • Invalid query handling
  • Team inheritance validation for subissues
  • User resolution validation
  • Search filter validation

LICENCE

This project is licensed under the MIT License - see the LICENCE file for details.

Last updated: 3/7/2025

Publisher info

cosmix's avatar

cosmix

Athens, Greece
58
followers
28
following
29
repos

More MCP servers built with TypeScript

docbase-mcp-server

MCP Server Implementation for DocBase

By f4401
aapi-mcp-server

Advanced API MCP Server

By Asphere-xyz1
DBX-MCP-Server

MCP Server for Dropbox

By amgadabdelhafez1