Provides comprehensive access to Linear's API, allowing for the management of issues, projects, teams, cycles, and labels, as well as searching and filtering tasks within a workspace.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Linear.app Serverlist all high priority issues assigned to me"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Linear.app Server
A Model Context Protocol (MCP) server that enables OpenCode and other MCP clients to interact with Linear.app's API for issue tracking, project management, and workflow automation.
Features
Issue Management: Create, update, list, search, and get detailed issue information
Project & Team Operations: List projects and teams, access workflow states
Cycle Management: Create and manage sprints/cycles
Label Management: Create and organize labels
User Operations: List users and assign issues
Advanced Filtering: Filter issues by status, assignee, project, labels, and more
Type-Safe: Built with TypeScript and Zod validation for robust error handling
Production-Ready: Comprehensive error handling, logging, and rate limit awareness
Installation
Prerequisites
Bun 1.0.0 or higher (or Node.js 18.0.0+)
A Linear.app account and API key
Setup
Clone this repository:
Install dependencies:
Create a
.envfile with your Linear API key:
Edit
.envand add your Linear API key:
How to get your Linear API key:
Go to https://linear.app/settings/api
Click "Create new API key"
Give it a name and copy the key
Paste it into your
.envfileBuild the project:
Usage
With OpenCode
Add this server to your OpenCode configuration:
macOS: ~/Library/Application Support/OpenCode/opencode_config.json
Windows: %APPDATA%/OpenCode/opencode_config.json
Linux: ~/.config/OpenCode/opencode_config.json
After adding the configuration, restart OpenCode.
With Other MCP Clients
The server uses stdio transport and can be integrated with any MCP-compatible client:
Available Tools
Issue Management
linear_list_issues
List Linear issues with optional filters.
Parameters:
teamId(optional): Filter by team IDprojectId(optional): Filter by project IDassigneeId(optional): Filter by assignee user IDstatus(optional): Filter by status (backlog, unstarted, started, completed, canceled, triage, in_progress, done)priority(optional): Filter by priority (0=None, 1=Urgent, 2=High, 3=Medium, 4=Low)label(optional): Filter by label namelimit(optional): Maximum number of issues (1-100, default: 25)includeArchived(optional): Include archived issues (default: false)
Example:
linear_create_issue
Create a new Linear issue.
Parameters:
title(required): Issue titleteamId(required): Team ID where the issue will be createddescription(optional): Issue description in markdownprojectId(optional): Project ID to assign the issue toassigneeId(optional): User ID to assign the issue topriority(optional): Priority (0-4)labelIds(optional): Array of label IDsstateId(optional): Workflow state IDestimate(optional): Estimate in pointsdueDate(optional): Due date (YYYY-MM-DD)parentId(optional): Parent issue ID for sub-issues
Example:
linear_update_issue
Update an existing Linear issue.
Parameters:
issueId(required): Issue ID or identifier (e.g., "ENG-123")title,description,assigneeId,priority,stateId,labelIds,estimate,dueDate,projectId(all optional)
Example:
linear_get_issue
Get detailed information about a specific issue.
Parameters:
issueId(required): Issue ID or identifier (e.g., "ENG-123")
Example:
linear_search_issues
Search issues by text query.
Parameters:
query(required): Search query textteamId(optional): Limit search to specific teamlimit(optional): Maximum results (1-100, default: 25)includeArchived(optional): Include archived issues
Example:
linear_assign_issue
Assign an issue to a user.
Parameters:
issueId(required): Issue ID or identifierassigneeId(required): User ID to assign to
Example:
linear_add_comment
Add a comment to an issue.
Parameters:
issueId(required): Issue ID or identifierbody(required): Comment body in markdown
Example:
Team & Workflow
linear_list_teams
List all teams in your workspace.
Parameters:
includeArchived(optional): Include archived teams (default: false)
Example:
linear_list_workflow_states
List workflow states for a team.
Parameters:
teamId(required): Team ID
Example:
Projects
linear_list_projects
List all projects.
Parameters:
teamId(optional): Filter by team IDincludeArchived(optional): Include archived projects (default: false)
Example:
Cycles (Sprints)
linear_create_cycle
Create a new cycle/sprint.
Parameters:
teamId(required): Team IDname(required): Cycle namedescription(optional): Cycle descriptionstartsAt(required): Start date (YYYY-MM-DD)endsAt(required): End date (YYYY-MM-DD)
Example:
linear_list_cycles
List cycles for a team.
Parameters:
teamId(required): Team IDincludeArchived(optional): Include archived cycles
Example:
Labels
linear_create_label
Create a new label.
Parameters:
name(required): Label nameteamId(required): Team IDcolor(optional): Color in hex format (e.g., "#FF0000")description(optional): Label description
Example:
linear_list_labels
List all labels.
Parameters:
teamId(optional): Filter by team ID
Example:
Users
linear_list_users
List all users in your workspace.
Parameters:
includeDisabled(optional): Include disabled users (default: false)
Example:
Workflow Examples
Creating an Issue with Full Context
First, list teams to get the team ID:
Optionally, list users to assign the issue:
Create the issue:
Managing a Sprint
Create a new cycle:
List issues to find what to include:
Update issues to add them to the sprint and assign:
Tracking Progress
Search for issues in a specific area:
Get detailed information:
Add progress updates:
Development
Scripts
bun run build- Build the TypeScript projectbun run dev- Watch mode for developmentbun start- Start the MCP serverbun run lint- Run ESLintbun run format- Format code with Prettierbun run typecheck- Type check without emitting files
Project Structure
Architecture
The server is built with:
MCP SDK: Handles the Model Context Protocol communication
Linear SDK: Official Linear API client
Zod: Runtime type validation and schema enforcement
TypeScript: Type safety throughout the codebase
Key design decisions:
Type Safety: All inputs are validated with Zod schemas before reaching the Linear API
Error Handling: Comprehensive error handling with meaningful error messages
Modular Design: Tools are organized by domain (issues, projects, cycles, etc.)
Client Wrapper: LinearAPIClient provides a clean abstraction over the Linear SDK with consistent error handling and data formatting
Error Handling
The server provides clear error messages for common issues:
Missing API Key: "LINEAR_API_KEY environment variable is required"
Invalid Parameters: Zod validation errors with specific field information
API Errors: Linear API errors are caught and formatted with context
Not Found: Clear messages when issues, teams, or other resources don't exist
Rate Limiting
Linear's API has rate limits. The server doesn't implement client-side rate limiting, but:
Uses the official Linear SDK which handles some retry logic
Provides clear error messages when rate limits are hit
Consider implementing delays between bulk operations
Troubleshooting
Server won't start
Verify LINEAR_API_KEY is set in your environment
Check that Bun version is 1.0.0 or higher (or Node.js 18.0.0+)
Ensure
bun run buildcompleted successfully
"Invalid API key" error
Verify your API key is correct
Check that the key hasn't been revoked in Linear settings
Ensure there are no extra spaces in the .env file
"Team not found" or similar errors
Use
linear_list_teamsto get valid team IDsUse
linear_list_usersto get valid user IDsUse
linear_list_projectsto get valid project IDsIssue identifiers are case-sensitive (e.g., "ENG-123" not "eng-123")
Changes not appearing in OpenCode
Restart OpenCode after modifying the configuration
Check OpenCode logs for connection errors
Verify the absolute path in the configuration is correct
Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch
Make your changes with proper TypeScript types
Add/update tests if applicable
Run
bun run lintandbun run typecheckSubmit a pull request
License
MIT
Acknowledgments
Built with the Model Context Protocol SDK
Uses the Linear SDK for API access
Inspired by the Linear community and MCP ecosystem
Support
Linear API Documentation: https://developers.linear.app/
MCP Documentation: https://modelcontextprotocol.io/
Report issues: GitHub Issues