Linear
Server Details
MCP server for Linear project management and issue tracking
Glama couldn't complete the latest health check. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.
If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.
- Status
- Unhealthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP
- URL
TDQS
Scored across 35 tools
Each tool targets a distinct entity or action. Even closely related tools like create_attachment and create_attachment_from_upload are clearly differentiated by their role in the upload workflow, and all descriptions provide unambiguous guidance.
All tools follow a consistent verb_noun pattern in snake_case. Verbs are uniformly used: create, delete, get, list, save, prepare, extract, search. The save prefix elegantly covers both create and update operations.
At 35 tools, the set is comprehensive but appropriate for a full-featured project management API covering issues, projects, milestones, documents, comments, attachments, cycles, diffs, users, and labels. Every tool serves a distinct purpose, though the count is slightly high.
The tool set lacks delete operations for several key entities including issues, projects, milestones, documents, and labels. While creation, reading, and updating are well-covered, the absence of deletion capabilities for these objects creates significant gaps for workflows that require cleanup.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
get_diff_threads1 field changed- changed
Input schema / properties / threadId / descriptionPrevious value: -"Optional top-level thread/comment ID to return"New value: +"Optional Linear comment UUID (a thread's `id`, not its `externalThreadId`) to return"
6 tool updates
- Added
delete_diff_comment - Added
merge_diff - Added
resolve_diff_thread - Added
save_diff_comment - Changed
save_issue5 fields changed- added
Input schema / properties / dueDate / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / dueDate / descriptionPrevious value: -"Due date (ISO format)"New value: +"Due date (ISO format). On update, pass null to remove the due date" - removed
Input schema / properties / dueDate / typeRemoved value: -"string" - added
Input schema / properties / slaBreachesAtAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "ISO-8601 timestamp when the SLA will breach. On update, pass null to remove the SLA" +} - added
Input schema / properties / slaTypeAdded value: +{ + "description": "SLA day counting type: \"all\" or \"onlyBusinessDays\". Only use with slaBreachesAt", + "enum": [ + "all", + "onlyBusinessDays" + ], + "type": "string" +}
- Added
submit_diff_review
2 tool updates
- Changed
list_comments2 fields changed- added
Input schema / properties / statusUpdateIdAdded value: +{ + "description": "Status update UUID (provide exactly one parent). Resolve status updates via `get_status_updates` first.", + "type": "string" +} - added
Input schema / properties / statusUpdateTypeAdded value: +{ + "description": "Type of status update named by `statusUpdateId`, as returned by `get_status_updates`. Only valid together with `statusUpdateId`; omit to check both project and initiative status updates.", + "enum": [ + "project", + "initiative" + ], + "type": "string" +}
- Changed
save_comment2 fields changed- added
Input schema / properties / statusUpdateIdAdded value: +{ + "description": "Status update UUID (provide exactly one parent). Resolve status updates via `get_status_updates` first.", + "type": "string" +} - added
Input schema / properties / statusUpdateTypeAdded value: +{ + "description": "Type of status update named by `statusUpdateId`, as returned by `get_status_updates`. Only valid together with `statusUpdateId`; omit to check both project and initiative status updates.", + "enum": [ + "project", + "initiative" + ], + "type": "string" +}
2 tool updates
- Changed
save_issue1 field changed- changed
Input schema / properties / labels / descriptionPrevious value: -"Label names or IDs"New value: +"Label names or IDs as a JSON array of strings (e.g. [\"Bug\", \"Urgent\"]). Replaces the full label set; existing labels not included are removed. Omit to leave labels unchanged"
- Changed
save_project1 field changed- changed
Input schema / properties / labels / descriptionPrevious value: -"Label names or IDs"New value: +"Label names or IDs as a JSON array of strings (e.g. [\"Bug\", \"Urgent\"]). Replaces the full label set; existing labels not included are removed. Omit to leave labels unchanged"
1 tool update
- Changed
create_attachment3 fields changed- added
Input schema / properties / sha256Added value: +{ + "description": "Expected SHA-256 hex digest of the decoded file bytes.", + "pattern": "^[a-fA-F0-9]{64}$", + "type": "string" +} - added
Input schema / properties / sizeAdded value: +{ + "description": "Optional expected decoded file size in bytes. Rejects the upload if it does not match.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "issue", - "base64Content", - "filename", - "contentType" -]New value: +[ + "issue", + "base64Content", + "filename", + "contentType", + "sha256" +]
1 tool update
- Changed
save_issue3 fields changed- added
Input schema / properties / project / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / project / descriptionPrevious value: -"Project name, ID, or slug"New value: +"Project name, ID, or slug. Null to remove" - removed
Input schema / properties / project / typeRemoved value: -"string"
1 tool update
- Changed
save_issue2 fields changed- removed
Input schema / properties / releasesRemoved value: -{ - "description": "Release IDs or slugs to set on the issue. Cannot be combined with addReleases/removeReleases", - "items": { - "type": "string" - }, - "type": "array" -} - added
Input schema / properties / setReleasesAdded value: +{ + "description": "Replace all releases on the issue with these. Cannot be combined with addReleases/removeReleases", + "items": { + "type": "string" + }, + "type": "array" +}
2 tool updates
- Added
get_agent_skill - Added
list_agent_skills
9 tool updates
- Added
get_release - Added
get_release_note - Changed
list_issues1 field changed- added
Input schema / properties / releaseAdded value: +{ + "description": "Release ID or slug", + "type": "string" +}
- Added
list_release_notes - Added
list_release_pipelines - Added
list_releases - Changed
save_issue3 fields changed- added
Input schema / properties / addReleasesAdded value: +{ + "description": "Release IDs or slugs to add. Append-only; existing releases are never removed", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / releasesAdded value: +{ + "description": "Release IDs or slugs to set on the issue. Cannot be combined with addReleases/removeReleases", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / removeReleasesAdded value: +{ + "description": "Release IDs or slugs to remove. Only valid when updating an existing issue", + "items": { + "type": "string" + }, + "type": "array" +}
- Added
save_release - Added
save_release_note
1 tool update
- Changed
save_status_update1 field changed- changed
Input schema / properties / isDiffHidden / descriptionPrevious value: -"Deprecated. Hide diff with previous update"New value: +"Deprecated. Hide diff with previous update (create only)"
1 tool update
- Changed
save_issue3 fields changed- added
Input schema / properties / estimate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - changed
Input schema / properties / estimate / descriptionPrevious value: -"Issue estimate value"New value: +"Issue estimate value. On create, pass null or omit for no estimate. On update, pass null to clear the estimate; omitting leaves it unchanged. 0 is a real estimate only on teams that allow zero estimates." - removed
Input schema / properties / estimate / typeRemoved value: -"number"
3 tool updates
- Added
delete_status_update - Added
get_status_updates - Added
save_status_update
2 tool updates
- Changed
list_documents1 field changed- added
Input schema / properties / teamIdAdded value: +{ + "description": "Filter by team ID", + "type": "string" +}
- Changed
save_document1 field changed- changed
Input schema / properties / team / descriptionPrevious value: -"Team name or ID. Only used to resolve `cycle`."New value: +"Team name or ID. Attaches the document to the team, unless `cycle` is also passed, in which case it disambiguates the cycle."
2 tool updates
- Changed
save_document1 field changed- changed
Input schema / properties / icon / descriptionPrevious value: -"Icon emoji"New value: +"Icon name or emoji code (e.g. \"Rocket\" or \":eagle:\"), not a raw Unicode emoji"
- Changed
save_project1 field changed- changed
Input schema / properties / icon / descriptionPrevious value: -"Icon emoji (e.g., :eagle:)"New value: +"Icon name or emoji code (e.g. \"Rocket\" or \":eagle:\"), not a raw Unicode emoji"
1 tool update
- Changed
save_issue3 fields changed- added
Input schema / properties / cycle / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / cycle / descriptionPrevious value: -"Cycle name, number, or ID"New value: +"Cycle name, number, or ID. Null to remove" - removed
Input schema / properties / cycle / typeRemoved value: -"string"
2 tool updates
- Changed
list_comments6 fields changed- added
Input schema / properties / documentIdAdded value: +{ + "description": "Document ID or slug (provide exactly one parent)", + "type": "string" +} - added
Input schema / properties / initiativeIdAdded value: +{ + "description": "Initiative name or ID (provide exactly one parent)", + "type": "string" +} - changed
Input schema / properties / issueId / descriptionPrevious value: -"Issue ID or identifier (e.g., LIN-123)"New value: +"Issue ID or identifier (e.g., LIN-123) (provide exactly one parent)" - added
Input schema / properties / milestoneIdAdded value: +{ + "description": "Milestone UUID (provide exactly one parent). Resolve milestone names via `list_milestones` first.", + "type": "string" +} - added
Input schema / properties / projectIdAdded value: +{ + "description": "Project name, ID, or slug (provide exactly one parent)", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "issueId" -]
- Changed
save_comment5 fields changed- added
Input schema / properties / documentIdAdded value: +{ + "description": "Document ID or slug (provide exactly one parent)", + "type": "string" +} - added
Input schema / properties / initiativeIdAdded value: +{ + "description": "Initiative name or ID (provide exactly one parent)", + "type": "string" +} - changed
Input schema / properties / issueId / descriptionPrevious value: -"Issue ID or identifier (e.g., LIN-123) (required when creating)"New value: +"Issue ID or identifier (e.g., LIN-123) (provide exactly one parent)" - added
Input schema / properties / milestoneIdAdded value: +{ + "description": "Milestone UUID (provide exactly one parent). Resolve milestone names via `list_milestones` first.", + "type": "string" +} - added
Input schema / properties / projectIdAdded value: +{ + "description": "Project name, ID, or slug (provide exactly one parent)", + "type": "string" +}
3 tool updates
- Changed
create_attachment1 field changed- changed
Input schema / properties / base64Content / descriptionPrevious value: -"Base64-encoded file content to upload"New value: +"Deprecated base64-encoded file content to upload"
- Added
create_attachment_from_upload - Added
prepare_attachment_upload
Related MCP Connectors
Linear MCP — wraps the Linear GraphQL API (OAuth)
An MCP server that provides access to Testiny projects, test cases and test runs
MCP server for Product Management
- SupabaseOAuthcom.supabase
MCP server for interacting with the Supabase platform
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that integrates with Linear's API, enabling users to manage issues, projects, teams, and comments through natural language. It supports creating, updating, deleting, and searching issues, as well as project and team management.251,397 npmMIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Linear that enables creating, searching, updating, and commenting on issues, as well as accessing issues, teams, and user data. Integrates with Claude Desktop and other MCP clients.MIT
- AlicenseBqualityFmaintenanceMCP server for accessing and managing Linear resources like issues, projects, and comments with full CRUD operations and search.2157 npm1MIT
- AlicenseNot gradedqualityDmaintenanceMCP server providing tools to manage Linear projects and issues, including creation, listing, viewing details, and deletion, as well as team and user info retrieval.210 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.