X

Linear

Information

# 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 * Create a new project update with health status * Update existing issues with full field modification * Delete issue with validation * Self-assign issues using 'me' keyword * Advanced search with Linear's powerful filtering capabilities * Filter issues by cycle (current, next, previous, or specific cycle by UUID or number) * 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](https://bun.sh) runtime (v1.0.0 or higher) - Linear account with API access ## Environment Variables \`\`\`bash LINEAR_API_KEY=your_api_key # Your Linear API token \`\`\` ## Installation & Setup ### 1. Clone the repository: \`\`\`bash git clone [repository-url] cd linear-mcp \`\`\` ### 2. Install dependencies and build: \`\`\`bash 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: \`\`\`json \{ "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: \`\`\`bash bun run dev \`\`\` Build project: \`\`\`bash bun run build \`\`\` ## Available MCP Tools For detailed usage examples of all tools, see [USAGE.md](USAGE.md). ### create_issue Create a new Linear issue or subissue. Input Schema: \`\`\`json \{ "teamId": "string", "title": "string", "description": "string", "parentId": "string", "status": "string", "priority": "number", "assigneeId": "string | 'me'", "labelIds": ["string"] \} \`\`\` ### update_issue Update an existing Linear issue. Input Schema: \`\`\`json \{ "issueId": "string", "title": "string", "description": "string", "status": "string", // Expects status NAME (e.g., "In Progress"). Must be valid for the issue's team. "priority": "number", // Expects 0 (None) to 4 (Low). "assigneeId": "string | 'me'", "labelIds": ["string"], "cycleId": "string" \} \`\`\` ### get_issue Get detailed information about a specific Linear issue with optional relationships. Input Schema: \`\`\`json \{ "issueId": "string", "includeRelationships": "boolean" \} \`\`\` ### search_issues Search for Linear issues using a query string and advanced filters. Supports Linear's powerful filtering capabilities. Input Schema: \`\`\`json \{ "query": "string", "includeRelationships": "boolean", "filter": \{ "title": \{ "contains": "string", "eq": "string", ... \}, "description": \{ "contains": "string", "eq": "string", ... \}, "priority": \{ "gte": "number", "lt": "number", ... \}, "estimate": \{ "eq": "number", "in": ["number"], ... \}, "dueDate": \{ "lt": "string", "gt": "string", ... \}, "createdAt": \{ "gt": "P2W", "lt": "2024-01-01", ... \}, "updatedAt": \{ "gt": "P1M", ... \}, "completedAt": \{ "null": true, ... \}, "assignee": \{ "id": \{ "eq": "string" \}, "name": \{ "contains": "string" \} \}, "creator": \{ "id": \{ "eq": "string" \}, "name": \{ "contains": "string" \} \}, "team": \{ "id": \{ "eq": "string" \}, "key": \{ "eq": "string" \} \}, "state": \{ "type": \{ "eq": "started" \}, "name": \{ "eq": "string" \} \}, "labels": \{ "name": \{ "in": ["string"] \}, "every": \{ "name": \{ "eq": "string" \} \} \}, "project": \{ "id": \{ "eq": "string" \}, "name": \{ "contains": "string" \} \}, "and": [\{ /* filters */ \}], "or": [\{ /* filters */ \}], "assignedTo": "string | 'me'", "createdBy": "string | 'me'" \}, "projectId": "string", "projectName": "string" \} \`\`\` Supported Comparators: - String fields: \`eq\`, \`neq\`, \`in\`, \`nin\`, \`contains\`, \`startsWith\`, \`endsWith\` (plus case-insensitive variants) - Number fields: \`eq\`, \`neq\`, \`lt\`, \`lte\`, \`gt\`, \`gte\`, \`in\`, \`nin\` - Date fields: \`eq\`, \`neq\`, \`lt\`, \`lte\`, \`gt\`, \`gte\` (supports ISO 8601 durations) ### get_teams Get a list of Linear teams with optional name/key filtering. Input Schema: \`\`\`json \{ "nameFilter": "string" \} \`\`\` ### delete_issue Delete an existing Linear issue. Input Schema: \`\`\`json \{ "issueId": "string" \} \`\`\` ### create_comment Create a new comment on a Linear issue. Input Schema: \`\`\`json \{ "issueId": "string", "body": "string" \} \`\`\` ### get_projects Get a list of Linear projects with optional name filtering and pagination. Input Schema: \`\`\`json \{ "nameFilter": "string", "includeArchived": "boolean", "first": "number", "after": "string" \} \`\`\` ### get_project_updates Get project updates for a given project ID with optional filtering parameters. Input Schema: \`\`\`json \{ "projectId": "string", "includeArchived": "boolean", "first": "number", "after": "string", "createdAfter": "string", "createdBefore": "string", "userId": "string | 'me'", "health": "string" \} \`\`\` ### create_project_update Create a new update for a Linear project. Input Schema: \`\`\`json \{ "projectId": "string", "body": "string", "health": "onTrack | atRisk | offTrack", "isDiffHidden": "boolean" \} \`\`\` ## 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: * Comprehensive filtering with Linear's API * Support for all field comparators * Relationship filtering * Logical operators (and, or) * Relative date filtering * Filter by assignee/creator (including self) * Support for specific user IDs * Project filtering by ID or name * Efficient query optimization * Project management features: * Project listing with filtering and pagination * Project update creation with health status tracking * Project update retrieval with filtering options ## 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](LICENCE) file for details.

Prompts

Reviews

Tags

Write Your Review

Detailed Ratings

ALL
Correctness
Helpfulness
Interesting
Upload Pictures and Videos

Name
Size
Type
Download
Last Modified

Upload Files

  • Community

Add Discussion

Upload Pictures and Videos