Handles Linear's GraphQL API complexity limits by automatically splitting complex queries into multiple simpler ones and assembling results transparently.
Bridges with Linear's GraphQL API, providing full CRUD operations for issues, comments, projects, cycles, teams, and users. Features include smart content chunking, human-readable identifiers, markdown export, and real-time updates via webhooks and SSE.
Enables exporting Linear issues with all comments in clean markdown format and handles markdown content when creating or updating issues and comments.
Requires Node.js 18+ as runtime environment for the server.
Utilizes Pino for structured JSON logging to enhance observability of server operations and troubleshooting.
Provides metrics for monitoring server performance, including RPC requests, latency, rate limiting, and active connections, accessible at the /metrics endpoint.
Leverages TypeScript with Linear's official SDK for full type safety across all API operations.
Legible Linear MCP
A high-performance HTTP service that bridges Claude Code (or any MCP client) with Linear's GraphQL API.
Built to make accessing Linear more comfortable for LLMs
📋 Prerequisites
- Node.js 18+
- Linear API key (Get one here)
- Optional: Linear webhook secret for webhook validation
🛠️ Installation
- Clone the repository:
- Install dependencies:
- Add to ~/.claude.json
Linear API keys can be created by going to Workspace Settings > Security & Access > "New API key"
Core Capabilities
- JSON-RPC 2.0 API: Full CRUD operations on Linear entities (issues, comments, projects, cycles, teams, users)
- Smart Content Chunking: Automatically splits large content across multiple comments - never truncates data
- Human-Readable Identifiers: Use team keys (TEAM), issue identifiers (TEAM-123), project names, and user emails instead of UUIDs
- Markdown Export: Get full issue content with all comments in clean markdown format
- Server-Sent Events (SSE): Real-time push updates with automatic heartbeat (15s)
- Webhook Integration: Receive and broadcast Linear webhook events as MCP notifications
Reliability & Performance
- Rate Limiting: Automatic exponential backoff respecting Linear's 1,500 req/hr limit
- Query Complexity Management: Automatically handles Linear's 10,000 complexity limit by splitting queries
- Error Recovery: Comprehensive error handling with detailed JSON-RPC error responses
- Observability: Prometheus metrics and structured JSON logging with Pino
Available RPC Methods
Issues
linear.issues.list
- List issues with pagination (accepts team key: "TEAM")linear.issues.get
- Get issue by identifier (e.g., "TEAM-123")linear.issues.create
- Create issue (accepts team key, state name, label names)linear.issues.update
- Update issue (accepts issue identifier)linear.issues.delete
- Archive an issue (accepts issue identifier)linear.issues.markdown
- Get full issue as markdown (includes all comments)
Comments
linear.comments.list
- List comments with positions (accepts issue identifier)linear.comments.create
- Create comment with position tracking (accepts issue identifier)
Projects
linear.projects.list
- List all projects (no UUIDs in response)linear.projects.get
- Get project details (accepts project name)linear.projects.create
- Create new project (accepts team keys)linear.projects.update
- Update project (accepts project name)
Teams, Cycles, Users
linear.teams.list
- List all teams (returns team keys, no UUIDs)linear.teams.get
- Get team details (accepts team key)linear.cycles.list
- List cycles for a team (accepts team key)linear.users.get
- Get user details (accepts email address)linear.users.list
- List workspace userslinear.users.me
- Get authenticated userlinear.capabilities
- Get server capabilities and features
💡 Usage Examples
Get Issue as Markdown
Create Issue with Human-Readable Identifiers
Subscribe to Real-time Updates
List Issues with Human-Readable Filters
🔗 Related Links
🐛 Troubleshooting
"Field membership argument userId required"
The server handles this automatically by using raw GraphQL queries for affected endpoints.
"Query too complex"
The server automatically splits complex queries. If you still see this error, please file an issue.
SSE Connection Drops
The server sends heartbeats every 15 seconds. Check your proxy/firewall timeout settings.
Rate Limiting
The server implements exponential backoff. If you're hitting limits frequently, consider reducing request frequency or batch operations.
This server cannot be installed
remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
A high-performance HTTP service that bridges Claude Code or other MCP clients with Linear's GraphQL API, enabling natural language interaction with Linear issues, comments, projects, and other entities without dealing with UUIDs.
Related MCP Servers
- AsecurityAlicenseAqualityAn MCP server implementation that integrates Claude with Salesforce, enabling natural language interactions with Salesforce data and metadata for querying, modifying, and managing objects and records.Last updated -761575TypeScriptMIT License
- -securityAlicense-qualityA Model Context Protocol server that allows Claude to interact with Linear's API for managing teams, issues, projects, and cycles.Last updated -162TypeScriptMIT License
- AsecurityAlicenseAqualityAn MCP server implementation that integrates Claude with Salesforce, enabling natural language interactions with Salesforce data and metadata for querying, modifying, and managing objects and records.Last updated -738312TypeScriptMIT License
- -securityAlicense-qualityA MCP server that exposes GraphQL schema information to LLMs like Claude. This server allows an LLM to explore and understand large GraphQL schemas through a set of specialized tools, without needing to load the whole schema into the contextLast updated -1238JavaScriptMIT License