linear mcp
Provides a Model Context Protocol interface for accessing Linear's issue tracking system, enabling users to query and search issues with TypeScript type safety and robust error handling.
Provides a Model Context Protocol interface for accessing Linear's issue tracking system, enabling users to query and search issues with TypeScript type safety and robust error handling.
A Model Context Protocol (MCP) server implementation that provides access to Linear's issue tracking system through a standardized interface.
LINEAR_API_KEY=your_api_key # Your Linear API token
git clone [repository-url]
cd linear-mcp
bun install
bun run build
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%CodeUserglobalStoragesaoudrizwan.claude-devsettingscline_mcp_settings.json
* Claude Desktop: %APPDATA%Claude Desktopclaude_desktop_config.json
Linux:
* Cline: ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
* Claude Desktop: sadly does not 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"
}
}
}
}
Within Cline's MCP settings, restart the MCP server. Restart Claude Desktop to load the new MCP server.
Run development server:
bun run dev
Build project:
bun run build
For detailed usage examples of all tools, see USAGE.md.
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"]
}
Update an existing Linear issue.
Input Schema:
{
"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 detailed information about a specific Linear issue with optional relationships.
Input Schema:
{
"issueId": "string",
"includeRelationships": "boolean"
}
Search for Linear issues using a query string and advanced filters. Supports Linear's powerful filtering capabilities.
Input Schema:
{
"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 a list of Linear teams with optional name/key filtering.
Input Schema:
{
"nameFilter": "string"
}
Delete an existing Linear issue.
Input Schema:
{
"issueId": "string"
}
Create a new comment on a Linear issue.
Input Schema:
{
"issueId": "string",
"body": "string"
}
Get a list of Linear projects with optional name filtering and pagination.
Input Schema:
{
"nameFilter": "string",
"includeArchived": "boolean",
"first": "number",
"after": "string"
}
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"
}
Create a new update for a Linear project.
Input Schema:
{
"projectId": "string",
"body": "string",
"health": "onTrack | atRisk | offTrack",
"isDiffHidden": "boolean"
}
The server implements a comprehensive error handling strategy:
This project is licensed under the MIT License - see the LICENCE file for details.