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. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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