linear-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LINEAR_PAT_WORK | No | Personal API key for the 'work' workspace | |
| LINEAR_LABEL_WORK | No | Label for the 'work' workspace (optional) | |
| LINEAR_WORKSPACES | Yes | Comma-separated list of workspace aliases (e.g., personal,work) | |
| LINEAR_PAT_PERSONAL | No | Personal API key for the 'personal' workspace. Additional PAT variables required for each workspace alias (e.g., LINEAR_PAT_<ALIAS>) | |
| LINEAR_MCP_AUDIT_LOG | No | Set to 'false' to disable audit logging | |
| LINEAR_LABEL_PERSONAL | No | Label for the 'personal' workspace (optional) | |
| LINEAR_PRIMARY_WORKSPACE | Yes | The default workspace alias | |
| LINEAR_MCP_AUDIT_LOG_PATH | No | Path to audit log file (default: ~/.claude/linear-mcp/audit.log) | |
| LINEAR_MCP_SKIP_IDEMPOTENCY | No | Set to '1' to skip idempotency check | |
| LINEAR_MCP_DRAFT_TTL_SECONDS | No | Draft expiry time in seconds (default: 3600) | |
| LINEAR_MCP_SKIP_SOURCE_CHECK | No | Set to '1' to skip source first-line check |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_workspacesA | List configured Linear workspaces with PAT prefix + primary status. Returns a dict with |
| healthcheckA | Verify PAT validity for each workspace + report draft store + audit log path. For each workspace, calls the |
| list_teamsA | List teams in a Linear workspace.
|
| get_teamB | Get a Linear team by its UUID. Includes workflow states inline. |
| list_usersC | List users in a Linear workspace.
|
| get_userA | Get a Linear user by ID. Pass For |
| list_projectsB | List projects.
|
| get_projectB | Get a Linear project by UUID. |
| save_projectA | Create or update a Linear project. Pass Dates are ISO-8601 strings ( |
| list_initiativesB | List initiatives in the workspace. Initiatives are Linear's top-level org-wide goals that contain multiple projects. |
| get_initiativeB | Get an initiative by UUID. |
| save_initiativeA | Create or update an initiative. Pass |
| list_issuesC | List issues with common filters.
|
| get_issueA | Get a single issue.
|
| save_issueA | Create or update an issue. Pass |
| bulk_save_issuesA | Apply the same update to multiple issues in one round-trip.
|
| list_cyclesC | List cycles, optionally scoped to one team.
|
| list_milestonesB | List project milestones. |
| get_milestoneC | Get a project milestone by UUID. |
| save_milestoneA | Create or update a project milestone. Pass |
| list_issue_statusesA | List workflow states (issue statuses) per team.
|
| get_issue_statusA | Return the current workflow state for one issue (id or identifier). Convenience tool: the existing get_issue already returns state, but this is the minimal-fields variant for status-driven automations. |
| list_issue_labelsA | List issue labels. |
| create_issue_labelA | Create a new issue label.
|
| list_commentsB | List comments. Scope by |
| save_commentA | Create or update a comment. Pass |
| list_documentsC | List documents in the workspace. |
| get_documentB | Get a document by UUID. |
| save_documentA | Create or update a document. Pass |
| save_status_updateB | Post a status update against a project.
|
| search_issuesA | Full-text search across issues in the workspace. Backed by Linear's |
| search_documentsC | Full-text search across workspace documents (NOT Linear's dev docs). |
| search_projectsC | Full-text search across projects in the workspace. |
| semantic_searchA | Semantic search across the entire workspace. Returns heterogeneous nodes (issues, projects, documents, comments,
initiatives). Each node carries Use this when the search target is conceptual ("payment retry logic") rather than exact-string ("PAY-123"). |
| list_webhooksC | List webhooks configured for the workspace. |
| get_webhookB | Get a webhook by UUID. |
| create_webhookA | Create a webhook subscription.
|
| update_webhookC | Update an existing webhook by UUID. |
| delete_webhookA | Delete a webhook. Destructive — uses draft+confirm. Two-call flow:
Drafts expire after 1 hour (override with
|
| list_notificationsA | List notifications in the viewer's inbox.
|
| get_notificationC | Get one notification by UUID. |
| notifications_unread_countC | Return the count of unread notifications in the inbox. |
| mark_notification_readB | Mark a notification read (or unread by passing |
| mark_all_notifications_readB | Mark every notification in the inbox as read.
|
| archive_notificationA | Archive a notification (removes from inbox; reversible). |
| list_attachmentsC | List attachments on one issue. |
| attachments_for_urlA | Reverse lookup: every attachment record across the workspace pointing at this URL. Useful to find which issue references a given Slack thread / PR / external doc. |
| get_attachmentC | Get one attachment by UUID. |
| link_url_to_issueA | Attach an arbitrary URL to an issue. Linear renders the link in the issue sidebar. Pass |
| delete_attachmentA | Delete an attachment. Destructive — uses draft+confirm. Two-call flow identical to |
| list_issue_relationsC | List issue relations. |
| create_issue_relationA | Create a relation between two issues.
|
| delete_issue_relationA | Delete an issue relation by ID. Non-destructive (no cascade). |
| list_agent_sessionsB | List agent sessions. |
| get_agent_sessionC | Get an agent session by UUID. |
| create_agent_session_on_issueA | Open an agent session attached to an issue.
|
| create_agent_session_on_commentB | Open an agent session attached to a comment (typically a @mention of the agent app user). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| triage-issue | Triage a Linear issue: classify, assign, label, prioritize, link. Use this to standardize how an agent processes an incoming issue. The prompt pulls the issue + recent comments + relations so the agent can suggest concrete next moves rather than vague triage advice. |
| project-status | Draft a weekly project status update from current Linear state. |
| inbox-sweep | Triage today's notification inbox — categorize, propose actions. |
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/adelaidasofia/linear-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server