**Concise Descriptions:** * **Model Context Protocol server for Linear. (38 chars)** * **Linear MCP server: Provides model context data. (46 chars)** * **Linear's Model Context Protocol (MCP) server.
# Linear MCP Server
A Model Context Protocol (MCP) server implementation that provides access to Linear's issue tracking system through a standardized interface. This server allows you to interact with Linear issues, projects, and updates using the MCP protocol, enabling integration with various AI-powered tools and workflows.
## Key Features
* **Issue Management:**
* Create new issues and subissues with label support.
* Update existing issues with full field modification.
* Delete issues with validation.
* Self-assign issues using the `'me'` keyword.
* Add comments to issues with Markdown support.
* **Project Management:**
* Retrieve a list of Linear projects.
* Retrieve project updates.
* Create new project updates with health status.
* **Advanced Search:** Leverage Linear's powerful filtering capabilities to search issues using custom queries with enhanced metadata.
* **Cycle Filtering:** Filter issues by cycle (current, next, previous, or specific cycle by UUID or number).
* **Relationship Tracking:** Maintain parent/child issue relationships with team inheritance.
* **Type Safety:** Utilizes Linear's official SDK for type-safe operations.
* **Error Handling:** Comprehensive error handling, including rate limit handling and input validation.
* **Data Transformation:** Clean data transformation for optimal AI context.
* **Label Management:** Label management and synchronization.
## Prerequisites
* [Bun](https://bun.sh) runtime (v1.0.0 or higher)
* Linear account with API access
## Environment Variables
The server requires a Linear API key to authenticate with the Linear API. Set the following environment variable:
```bash
LINEAR_API_KEY=your_api_key # Your Linear API token
git clone [repository-url]
cd linear-mcp
bun install
bun run build
To use this MCP server with tools like Cline or Claude Desktop, you need to configure the tool to recognize and use the server. Edit the appropriate configuration file:
macOS:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
~/Library/Application Support/Claude/claude_desktop_config.json
Windows:
%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json
%APPDATA%\Claude Desktop\claude_desktop_config.json
Linux:
~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
Add the following configuration under the mcpServers
object. Replace /absolute/path/to/linear-mcp
with the actual absolute path to your linear-mcp
directory.
{
"mcpServers": {
"linear": {
"command": "node",
"args": ["/absolute/path/to/linear-mcp/build/index.js"],
"env": {
"LINEAR_API_KEY": "your_api_key"
}
}
}
}
Within Cline's MCP settings, restart the MCP server. Restart Claude Desktop to load the new MCP server.
Run the development server:
bun run dev
Build the project:
bun run build
This MCP server exposes the following tools for interacting with Linear. For detailed usage examples, refer to USAGE.md.
create_issue
Create a new Linear issue or subissue.
Input Schema:
{
"teamId": "string", // Required: The ID of the Linear team.
"title": "string", // Required: The title of the issue.
"description": "string", // Optional: The description of the issue.
"parentId": "string", // Optional: The ID of the parent issue (for subissues).
"status": "string", // Optional: The status of the issue.
"priority": "number", // Optional: The priority of the issue (0-4).
"assigneeId": "string | 'me'", // Optional: The ID of the assignee or 'me' for self-assignment.
"labelIds": ["string"] // Optional: An array of label IDs to apply to the issue.
}
update_issue
Update an existing Linear issue.
Input Schema:
{
"issueId": "string", // Required: The ID of the issue to update.
"title": "string", // Optional: The new title of the issue.
"description": "string", // Optional: The new description of the issue.
"status": "string", // Optional: The new status NAME (e.g., "In Progress"). Must be valid for the issue's team.
"priority": "number", // Optional: The new priority (0-4).
"assigneeId": "string | 'me'", // Optional: The new assignee ID or 'me' for self-assignment.
"labelIds": ["string"], // Optional: An array of new label IDs.
"cycleId": "string" // Optional: The ID of the cycle to assign the issue to.
}
get_issue
Get detailed information about a specific Linear issue with optional relationships.
Input Schema:
{
"issueId": "string", // Required: The ID of the issue to retrieve.
"includeRelationships": "boolean" // Optional: Whether to include related issues (e.g., parent, children). Defaults to false.
}
search_issues
Search for Linear issues using a query string and advanced filters. Supports Linear's powerful filtering capabilities.
Input Schema:
{
"query": "string", // Optional: A free-text search query.
"includeRelationships": "boolean", // Optional: Whether to include related issues. Defaults to false.
"filter": { // Optional: Advanced filtering options.
"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'", // Optional: Filter by assignee ID or 'me' for self-assigned.
"createdBy": "string | 'me'" // Optional: Filter by creator ID or 'me' for self-created.
},
"projectId": "string", // Optional: Filter by project ID.
"projectName": "string" // Optional: Filter by project name.
}
Supported Comparators:
eq
, neq
, in
, nin
, contains
, startsWith
, endsWith
(plus case-insensitive variants)eq
, neq
, lt
, lte
, gt
, gte
, in
, nin
eq
, neq
, lt
, `ltecosmix/linear-mcp
January 24, 2025
June 25, 2025
TypeScript