linear-mcp-lean
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | The port on which the MCP server listens. | 8080 |
| LINEAR_API_KEY | Yes | A Linear Personal API key used to authenticate outbound requests to Linear's GraphQL API. | |
| MCP_BEARER_TOKEN | Yes | The bearer token used by MCP clients to authenticate requests to this server. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_issueA | Retrieve a Linear issue by ID. Default → a minimal flattened field set; full:true → a documented richer superset (assignee, lifecycle timestamps, state type, parent, estimate, dueDate). |
| list_issuesA | List issues as a {issues, hasNextPage, cursor} envelope. Lean rows by default (identifier, title, state, statusType, priority, createdAt, blockedBy, labels, project{id}, projectMilestone{id}, gitBranchName); full:true adds description, url, assignee, milestone name, updatedAt per row. |
| list_projectsA | List projects as lean rows (id, name, status{name,type}) by default; full:true adds description, dates, lead, labels, initiatives. Optional state (lifecycle string), label (project label name), and team filters; includeCompleted:false excludes completed/canceled projects server-side. |
| get_projectA | Get one project. Default → id, name, description, labels[name]; full:true adds status{name,type}, dates, lead, initiatives. |
| list_milestonesA | List a project's milestones (id, name). |
| get_milestoneB | Get one project milestone (id, name, description). |
| list_commentsA | List an issue's comments (id, body, authorName, createdAt). |
| save_issueA | Create (no |
| save_commentA | Add a comment to an issue. Returns only {id, url}. |
| save_projectA | Create (no |
| save_milestoneA | Create (no |
| get_teamA | Get one team by id, key, or name → {id, name, key}. |
| list_teamsA | List teams → [{id, name, key}]. |
| get_userA | Get one user by id, "me", or name → {id, name, displayName, email, active}. |
| list_usersA | List users → [{id, name, displayName, email, active}]. |
| get_attachmentA | Get one attachment → {id, title, subtitle, url, sourceType}. |
| create_attachmentB | Link an external URL to an issue as an attachment → {id, title, url}. |
| create_attachment_from_uploadA | Finalize an upload: link an already-uploaded assetUrl to an issue → {id, title, url}. Call after prepare_attachment_upload + the client-side byte PUT. |
| prepare_attachment_uploadA | Get a presigned direct-upload URL (fileUpload) → {assetUrl, uploadUrl, headers, issue}. PUT raw bytes to uploadUrl with headers verbatim (client-side), then call create_attachment_from_upload. |
| get_documentA | Get one document → {id, title, content, slugId, updatedAt, project{id}}. |
| list_documentsA | List documents as lean rows → [{id, title, slugId, updatedAt}] (no content). |
| save_documentA | Create (no |
| list_issue_labelsA | List issue labels → [{id, name, color, isGroup}]. Optional |
| list_project_labelsA | List project labels → [{id, name, color, isGroup}]. Optional |
| create_issue_labelA | Create an issue label → {id, name, color}. |
| list_issue_statusesA | List workflow states → [{id, name, type, color}]. Optional |
| get_issue_statusA | Get one workflow state → {id, name, type, color}. |
| list_cyclesA | List cycles → [{id, number, name, startsAt, endsAt}]. Optional |
| get_status_updatesB | Get one status update by |
| save_status_updateA | Create (no |
| search_documentationB | Search Linear's help-center documentation. Proxied to the hosted Linear MCP (no public GraphQL backing). |
| extract_imagesA | Extract and fetch images from markdown content. Proxied to the hosted Linear MCP (content helper, no GraphQL backing). |
| get_diffA | Exact lookup for a Linear diff (review URL, PR URL/ID, slug, or full identifier). Proxied to the hosted Linear MCP (no public GraphQL backing). |
| get_diff_threadsC | Exact lookup for diff review threads. Proxied to the hosted Linear MCP (no public GraphQL backing). |
| list_diffsB | List Linear diff pull requests. Proxied to the hosted Linear MCP (no public GraphQL backing). |
| linear_graphqlA | Run an arbitrary GraphQL query or mutation against Linear's API (https://api.linear.app/graphql) and return the raw result. For the rare need neither the lean default nor full:true covers. Example: linear_graphql({query: "query($id:String!){ issue(id:$id){ identifier subscribers{ nodes{ name } } } }", variables: {id: "ENG-123"}}). Bearer-gated like every tool; errors surface, never swallowed. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/wiklob/linear-mcp-lean'
If you have feedback or need assistance with the MCP directory API, please join our Discord server