When passing string values to tools, send the content directly without escape sequences. For example, use real newlines in markdown content rather than literal backslash-n (\n) characters.
Protocol
Pass100/10020 / 20 pts
Connection, authentication, and protocol compatibility.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Retrieve an issue attachment by ID. Use format=url to get its title and download URL without fetching the file content. Linear upload URLs are signed for five minutes; call again to refresh. External URLs are returned unchanged. Files embedded in comments have no issue attachment ID; use the URLs in list_comments attachments instead. Download and process documents with your own file tools.
The description explains the capability, when to use it, and what to expect.
Inputs63/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
Attachment ID
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
format
Response format. Defaults to content.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_attachment",
"title": "Get attachment",
"description": "Retrieve an issue attachment by ID. Use format=url to get its title and download URL without fetching the file content. Linear upload URLs are signed for five minutes; call again to refresh. External URLs are returned unchanged. Files embedded in comments have no issue attachment ID; use the URLs in list_comments attachments instead. Download and process documents with your own file tools.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Attachment ID"
},
"format": {
"enum": [
"content",
"url"
],
"type": "string",
"description": "Response format. Defaults to content."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Prepare a direct Linear file upload for an existing issue.
Workflow:
1. Call this tool with issue, filename, contentType, and size.
2. Upload raw bytes with PUT to uploadRequest.url outside MCP.
3. All headers in uploadRequest.headers are part of the signed request, so send them verbatim.
4. After PUT succeeds, call create_attachment_from_upload with assetUrl to link it to the issue.
Do not base64-encode or transform the file. Use curl --data-binary @path or fetch(url, { method: 'PUT', body: blob }).
Omitting or modifying any signed header, including casing, will return HTTP 403.
The signed URL must be used within 60 seconds or it will expire.
Upload sequencing:
Prepare, PUT, and finalize one file before calling this tool for another file.
Do not batch multiple prepare_attachment_upload calls before starting the PUTs because earlier signed URLs can expire while later files are prepared.
Example:
curl -X PUT --data-binary @file.png \
-H "content-type: image/png" \
-H "x-goog-content-length-range: N,N" \
-H "cache-control: public, max-age=31536000" \
-H 'Content-Disposition: attachment; filename="file.png"' \
"<uploadRequest.url>"
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
issue
Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues
Clear enough to supply this argument.
filename
Filename for the upload, e.g. screenshot.png
Clear enough to supply this argument.
contentType
MIME type, e.g. image/png or application/pdf
Clear enough to supply this argument.
size
Exact file size in bytes. Must be smaller than 2 GB.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
title
Suggested attachment title for the finalize step
Explain what happens when this optional value is omitted.
subtitle
Suggested attachment subtitle for the finalize step
Explain the meaning of this value, not just its name.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "prepare_attachment_upload",
"title": "Prepare attachment upload",
"description": "Prepare a direct Linear file upload for an existing issue.\n\nWorkflow:\n1. Call this tool with issue, filename, contentType, and size.\n2. Upload raw bytes with PUT to uploadRequest.url outside MCP.\n3. All headers in uploadRequest.headers are part of the signed request, so send them verbatim.\n4. After PUT succeeds, call create_attachment_from_upload with assetUrl to link it to the issue.\n\nDo not base64-encode or transform the file. Use curl --data-binary @path or fetch(url, { method: 'PUT', body: blob }).\nOmitting or modifying any signed header, including casing, will return HTTP 403.\nThe signed URL must be used within 60 seconds or it will expire.\n\nUpload sequencing:\nPrepare, PUT, and finalize one file before calling this tool for another file.\nDo not batch multiple prepare_attachment_upload calls before starting the PUTs because earlier signed URLs can expire while later files are prepared.\n\nExample:\ncurl -X PUT --data-binary @file.png \\\n -H \"content-type: image/png\" \\\n -H \"x-goog-content-length-range: N,N\" \\\n -H \"cache-control: public, max-age=31536000\" \\\n -H 'Content-Disposition: attachment; filename=\"file.png\"' \\\n \"<uploadRequest.url>\"",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"issue",
"filename",
"contentType",
"size"
],
"properties": {
"size": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Exact file size in bytes. Must be smaller than 2 GB.",
"exclusiveMinimum": 0
},
"issue": {
"type": "string",
"description": "Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues"
},
"title": {
"type": "string",
"description": "Suggested attachment title for the finalize step"
},
"filename": {
"type": "string",
"description": "Filename for the upload, e.g. screenshot.png"
},
"subtitle": {
"type": "string",
"description": "Suggested attachment subtitle for the finalize step"
},
"contentType": {
"type": "string",
"description": "MIME type, e.g. image/png or application/pdf"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Link an already-uploaded Linear assetUrl to an existing issue as an attachment.
Use this only after:
1. prepare_attachment_upload returned an assetUrl and uploadRequest.
2. The client successfully PUT raw file bytes to uploadRequest.url.
This tool does not upload file content. It only creates the Linear attachment row.
If the direct upload failed or the signed URL expired, rerun prepare_attachment_upload and upload again.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Explain the meaning of this value, not just its name.
issue
Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues
Clear enough to supply this argument.
assetUrl
Linear upload assetUrl returned by prepare_attachment_upload
Clear enough to supply this argument.
title
Attachment title. Defaults to filename or asset URL
Clear enough to supply this argument.
subtitle
Optional attachment subtitle
Explain the meaning of this value, not just its name.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "create_attachment_from_upload",
"title": "Create attachment from upload",
"description": "Link an already-uploaded Linear assetUrl to an existing issue as an attachment.\n\nUse this only after:\n1. prepare_attachment_upload returned an assetUrl and uploadRequest.\n2. The client successfully PUT raw file bytes to uploadRequest.url.\n\nThis tool does not upload file content. It only creates the Linear attachment row.\nIf the direct upload failed or the signed URL expired, rerun prepare_attachment_upload and upload again.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"issue",
"assetUrl"
],
"properties": {
"issue": {
"type": "string",
"description": "Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues"
},
"title": {
"type": "string",
"description": "Attachment title. Defaults to filename or asset URL"
},
"assetUrl": {
"type": "string",
"format": "uri",
"description": "Linear upload assetUrl returned by prepare_attachment_upload"
},
"subtitle": {
"type": "string",
"description": "Optional attachment subtitle"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
Shorten the title to an action and subject; move usage details into the description.
Description86/100
Deprecated fallback for tiny files only. Accepts base64 file content, verifies SHA-256 checksum, and uploads it through the MCP worker.
Prefer `prepare_attachment_upload` plus direct PUT plus `create_attachment_from_upload`.
CRITICAL: Do not print base64Content and then copy it into this tool call.
Opaque base64 copied through model-visible text is easy to corrupt.
Generate base64Content mechanically from the source bytes and pass it through a programmatic argument construction path whenever available. Before calling this tool, verify the values are consistent:
Unix-like shells:
file="/path/to/file"
base64Content=$(base64 < "$file" | tr -d '\n\r')
sha256=$(shasum -a 256 "$file" | awk '{print $1}')
decodedSha256=$(printf '%s' "$base64Content" | base64 -d | shasum -a 256 | awk '{print $1}')
size=$(wc -c < "$file" | tr -d ' ') # optional; stat can also get file byte size
decodedSize=$(printf '%s' "$base64Content" | base64 -d | wc -c | tr -d ' ')
PowerShell:
$file = 'C:\path\to\file'
$bytes = [IO.File]::ReadAllBytes($file)
$base64Content = [Convert]::ToBase64String($bytes)
$sha256 = (Get-FileHash -Algorithm SHA256 -Path $file).Hash.ToLower()
$size = $bytes.Length # optional
$decoded = [Convert]::FromBase64String($base64Content)
$decodedStream = [IO.MemoryStream]::new($decoded)
$decodedSha256 = (Get-FileHash -Algorithm SHA256 -InputStream $decodedStream).Hash.ToLower()
$decodedSize = $decoded.Length
decodedSha256 must equal sha256. If you pass size, decodedSize must equal size.
Pass `sha256`. Passing `size` is optional, but recommended for clearer mismatch errors.
The description explains the capability, when to use it, and what to expect.
Inputs81/100
Explain what happens when this optional value is omitted.
issue
Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues
Clear enough to supply this argument.
base64Content
Deprecated base64-encoded file content to upload
Clear enough to supply this argument.
filename
Filename for the upload (e.g., 'screenshot.png')
Clear enough to supply this argument.
contentType
MIME type for the upload (e.g., 'image/png', 'application/pdf')
Clear enough to supply this argument.
size
Optional expected decoded file size in bytes. Rejects the upload if it does not match.
Explain what happens when this optional value is omitted.
sha256
Expected SHA-256 hex digest of the decoded file bytes.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
title
Optional title for the attachment
Explain the meaning of this value, not just its name.
subtitle
Optional subtitle for the attachment
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
List comments on a Linear issue, project, initiative, document, project milestone, or project/initiative status update. Provide exactly one of `issueId`, `projectId`, `initiativeId`, `documentId`, `milestoneId`, or `statusUpdateId`. For issues, projects, and initiatives this returns both top-level discussion threads and inline description comments. Inline (anchored) comments carry a non-null `quotedText` set to the snippet of description text they reference. Returned comments include `author` and nullable `onBehalfOf`; when set, `onBehalfOf` identifies the user the agent author acted for. Files uploaded in comment bodies are returned in `attachments` with titles and download URLs, not issue attachment IDs. Signed upload URLs expire after five minutes; call list_comments again to refresh them. Download documents using these URLs and process them with your own file tools.
The description explains the capability, when to use it, and what to expect.
Inputs85/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Max results (default 50, max 250)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
Next page cursor
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
orderBy
Sort: createdAt | updatedAt
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
issueId
Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues (provide exactly one parent)
Clear enough to supply this argument.
projectId
Project name, ID, identifier (e.g., P-ENG-123), or slug (provide exactly one parent)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
initiativeId
Initiative name, ID, identifier (e.g., I-123), or slug (provide exactly one parent)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
documentId
Document ID or slug (provide exactly one parent)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
milestoneId
Milestone UUID (provide exactly one parent). Resolve milestone names via `list_milestones` first.
Clear enough to supply this argument.
statusUpdateId
Status update UUID (provide exactly one parent). Resolve status updates via `get_status_updates` first.
Clear enough to supply this argument.
statusUpdateType
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.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "list_comments",
"title": "List comments",
"description": "List comments on a Linear issue, project, initiative, document, project milestone, or project/initiative status update. Provide exactly one of `issueId`, `projectId`, `initiativeId`, `documentId`, `milestoneId`, or `statusUpdateId`. For issues, projects, and initiatives this returns both top-level discussion threads and inline description comments. Inline (anchored) comments carry a non-null `quotedText` set to the snippet of description text they reference. Returned comments include `author` and nullable `onBehalfOf`; when set, `onBehalfOf` identifies the user the agent author acted for. Files uploaded in comment bodies are returned in `attachments` with titles and download URLs, not issue attachment IDs. Signed upload URLs expire after five minutes; call list_comments again to refresh them. Download documents using these URLs and process them with your own file tools.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "number",
"default": 50,
"maximum": 250,
"description": "Max results (default 50, max 250)"
},
"cursor": {
"type": "string",
"description": "Next page cursor"
},
"issueId": {
"type": "string",
"description": "Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues (provide exactly one parent)"
},
"orderBy": {
"enum": [
"createdAt",
"updatedAt"
],
"type": "string",
"default": "updatedAt",
"description": "Sort: createdAt | updatedAt"
},
"projectId": {
"type": "string",
"description": "Project name, ID, identifier (e.g., P-ENG-123), or slug (provide exactly one parent)"
},
"documentId": {
"type": "string",
"description": "Document ID or slug (provide exactly one parent)"
},
"milestoneId": {
"type": "string",
"description": "Milestone UUID (provide exactly one parent). Resolve milestone names via `list_milestones` first."
},
"initiativeId": {
"type": "string",
"description": "Initiative name, ID, identifier (e.g., I-123), or slug (provide exactly one parent)"
},
"statusUpdateId": {
"type": "string",
"description": "Status update UUID (provide exactly one parent). Resolve status updates via `get_status_updates` first."
},
"statusUpdateType": {
"enum": [
"project",
"initiative"
],
"type": "string",
"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."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Create or update a comment on a Linear issue, project, initiative, document, project milestone, or project/initiative status update. If `id` is provided, updates the existing comment; otherwise creates a new one. To start a new thread, pass `body` and exactly one of `issueId`, `projectId`, `initiativeId`, `documentId`, `milestoneId`, or `statusUpdateId` — comments on issues/projects/initiatives become top-level discussion threads; comments on documents/milestones become description comments. A status update holds a single thread, so a comment on an update that already has one is added to it as a reply. To reply to an existing thread, pass `parentId` and `body`; the reply inherits the parent's thread type, so no entity reference is needed. Parent reference fields are ignored when `id` or `parentId` is provided (`statusUpdateType` is rejected instead).
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
Comment ID. If provided, updates the existing comment
Clear enough to supply this argument.
issueId
Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues (provide exactly one parent)
Clear enough to supply this argument.
projectId
Project name, ID, identifier (e.g., P-ENG-123), or slug (provide exactly one parent)
Clear enough to supply this argument.
initiativeId
Initiative name, ID, identifier (e.g., I-123), or slug (provide exactly one parent)
Clear enough to supply this argument.
documentId
Document ID or slug (provide exactly one parent)
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
milestoneId
Milestone UUID (provide exactly one parent). Resolve milestone names via `list_milestones` first.
Clear enough to supply this argument.
statusUpdateId
Status update UUID (provide exactly one parent). Resolve status updates via `get_status_updates` first.
Clear enough to supply this argument.
statusUpdateType
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.
Clear enough to supply this argument.
parentId
Parent comment ID (for replies, only when creating)
Clear enough to supply this argument.
body
Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "save_comment",
"title": "Save comment",
"description": "Create or update a comment on a Linear issue, project, initiative, document, project milestone, or project/initiative status update. If `id` is provided, updates the existing comment; otherwise creates a new one. To start a new thread, pass `body` and exactly one of `issueId`, `projectId`, `initiativeId`, `documentId`, `milestoneId`, or `statusUpdateId` — comments on issues/projects/initiatives become top-level discussion threads; comments on documents/milestones become description comments. A status update holds a single thread, so a comment on an update that already has one is added to it as a reply. To reply to an existing thread, pass `parentId` and `body`; the reply inherits the parent's thread type, so no entity reference is needed. Parent reference fields are ignored when `id` or `parentId` is provided (`statusUpdateType` is rejected instead).",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"body"
],
"properties": {
"id": {
"type": "string",
"description": "Comment ID. If provided, updates the existing comment"
},
"body": {
"type": "string",
"description": "Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)"
},
"issueId": {
"type": "string",
"description": "Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues (provide exactly one parent)"
},
"parentId": {
"type": "string",
"description": "Parent comment ID (for replies, only when creating)"
},
"projectId": {
"type": "string",
"description": "Project name, ID, identifier (e.g., P-ENG-123), or slug (provide exactly one parent)"
},
"documentId": {
"type": "string",
"description": "Document ID or slug (provide exactly one parent)"
},
"milestoneId": {
"type": "string",
"description": "Milestone UUID (provide exactly one parent). Resolve milestone names via `list_milestones` first."
},
"initiativeId": {
"type": "string",
"description": "Initiative name, ID, identifier (e.g., I-123), or slug (provide exactly one parent)"
},
"statusUpdateId": {
"type": "string",
"description": "Status update UUID (provide exactly one parent). Resolve status updates via `get_status_updates` first."
},
"statusUpdateType": {
"enum": [
"project",
"initiative"
],
"type": "string",
"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."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Delete a Linear comment. Inline description comments (those with non-null `quotedText`) anchor a mark in the editor, so their root cannot be deleted — delete the replies individually or resolve the thread instead.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
Comment ID
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Find saved issue, project, and initiative views accessible to the user, including personal, workspace, and team views. Excludes archived views and views scoped to a project or initiative. Returns view metadata, not the records matching its filters.
The description explains the capability, when to use it, and what to expect.
Inputs71/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Max results (default 50, max 250)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
Next page cursor
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
orderBy
Sort: createdAt | updatedAt
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
Search custom view names
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
type
Entity type displayed by the view
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
team
Team name or ID
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
includeArchived
Include archived items
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
Fields to include in each result. Explicitly requested fields with no value return null. `id` is always included. Omit or pass an empty array for the default response.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Create or update a Linear document. If `id` is provided, edits the existing document; otherwise creates a new one. When creating, `title` is required and exactly one parent (`project`, `issue`, `initiative`, `cycle`, or `team`) must be specified. On update, passing a parent reparents the document. To change parts of the content without resending all of it, pass `patch` instead of `content`.
The description explains the capability, when to use it, and what to expect.
Inputs70/100
22 of 28 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
id
Document ID or slug to update. Omit to create a new document.
Clear enough to supply this argument.
title
Document title (required when creating)
Clear enough to supply this argument.
content
Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)
Clear enough to supply this argument.
patch › items › oneOf › 0 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 0 › old_string
Exact text to replace. Must match the current content exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 0 › new_string
Replacement text. Empty string deletes the match
Clear enough to supply this argument.
patch › items › oneOf › 0 › replace_all
Replace every occurrence instead of requiring a unique match
Clear enough to supply this argument.
patch › items › oneOf › 1 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 1 › anchor
Exact text to insert before. Must match the current content exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 1 › text
Text to insert directly before the anchor. Include separators (e.g. "\n\n")
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 2 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 2 › anchor
Exact text to insert after. Must match the current content exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 2 › text
Text to insert directly after the anchor. Include separators (e.g. "\n\n")
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 3 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 3 › text
Text to insert at the very start of the content
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 4 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 4 › text
Text to insert at the very end of the content
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 5 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 5 › from
Exact text where the range starts (inclusive). Must match exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 5 › to
Exact text where the range ends (exclusive, stays in place). Must match exactly once after `from`
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 5 › new_string
Text replacing the range. Empty string deletes it
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
project
Project name, ID, identifier (e.g., P-ENG-123), or slug
Clear enough to supply this argument.
issue
Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues
Clear enough to supply this argument.
initiative
Initiative name, ID, identifier (e.g., I-123), or slug
Clear enough to supply this argument.
cycle
Cycle name, number, or ID. When passing a name or number, also pass `team` to disambiguate.
Clear enough to supply this argument.
team
Team name or ID. Attaches the document to the team, unless `cycle` is also passed, in which case it disambiguates the cycle.
Clear enough to supply this argument.
icon
Icon name or emoji code (e.g. "Rocket" or ":eagle:"), not a raw Unicode emoji
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "save_document",
"title": "Save document",
"description": "Create or update a Linear document. If `id` is provided, edits the existing document; otherwise creates a new one. When creating, `title` is required and exactly one parent (`project`, `issue`, `initiative`, `cycle`, or `team`) must be specified. On update, passing a parent reparents the document. To change parts of the content without resending all of it, pass `patch` instead of `content`.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "string",
"description": "Document ID or slug to update. Omit to create a new document."
},
"icon": {
"type": "string",
"description": "Icon name or emoji code (e.g. \"Rocket\" or \":eagle:\"), not a raw Unicode emoji"
},
"team": {
"type": "string",
"description": "Team name or ID. Attaches the document to the team, unless `cycle` is also passed, in which case it disambiguates the cycle."
},
"color": {
"type": "string",
"description": "Hex color"
},
"cycle": {
"type": "string",
"description": "Cycle name, number, or ID. When passing a name or number, also pass `team` to disambiguate."
},
"issue": {
"type": "string",
"description": "Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues"
},
"patch": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"op",
"old_string",
"new_string"
],
"properties": {
"op": {
"type": "string",
"const": "replace"
},
"new_string": {
"type": "string",
"description": "Replacement text. Empty string deletes the match"
},
"old_string": {
"type": "string",
"minLength": 1,
"description": "Exact text to replace. Must match the current content exactly once"
},
"replace_all": {
"type": "boolean",
"description": "Replace every occurrence instead of requiring a unique match"
}
}
},
{
"type": "object",
"required": [
"op",
"anchor",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "insert_before"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert directly before the anchor. Include separators (e.g. \"\\n\\n\")"
},
"anchor": {
"type": "string",
"minLength": 1,
"description": "Exact text to insert before. Must match the current content exactly once"
}
}
},
{
"type": "object",
"required": [
"op",
"anchor",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "insert_after"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert directly after the anchor. Include separators (e.g. \"\\n\\n\")"
},
"anchor": {
"type": "string",
"minLength": 1,
"description": "Exact text to insert after. Must match the current content exactly once"
}
}
},
{
"type": "object",
"required": [
"op",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "prepend"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert at the very start of the content"
}
}
},
{
"type": "object",
"required": [
"op",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "append"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert at the very end of the content"
}
}
},
{
"type": "object",
"required": [
"op",
"from",
"to",
"new_string"
],
"properties": {
"op": {
"type": "string",
"const": "replace_range"
},
"to": {
"type": "string",
"minLength": 1,
"description": "Exact text where the range ends (exclusive, stays in place). Must match exactly once after `from`"
},
"from": {
"type": "string",
"minLength": 1,
"description": "Exact text where the range starts (inclusive). Must match exactly once"
},
"new_string": {
"type": "string",
"description": "Text replacing the range. Empty string deletes it"
}
}
}
]
},
"maxItems": 50,
"minItems": 1,
"description": "Partial edits applied to the current content, in order and atomically (one failing operation aborts the whole save). Every anchor string must match the current content exactly once. Only valid on update, in place of the full content/description field"
},
"title": {
"type": "string",
"description": "Document title (required when creating)"
},
"content": {
"type": "string",
"description": "Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)"
},
"project": {
"type": "string",
"description": "Project name, ID, identifier (e.g., P-ENG-123), or slug"
},
"initiative": {
"type": "string",
"description": "Initiative name, ID, identifier (e.g., I-123), or slug"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Extract and fetch images from markdown content. Use this to view screenshots, diagrams, or other images embedded in Linear issues, comments, or documents. Pass the markdown content (e.g., issue description) and receive the images as viewable data.
Describe the returned information so the agent knows whether it will answer the request.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Retrieve detailed information about an issue by ID, including attachments, git branch name, and active Triage Intelligence suggestions when the issue is in triage. A nonempty fields selection overrides the include options; request optional fields directly in fields.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
id
Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues
Clear enough to supply this argument.
fields
Fields to include in each result. Explicitly requested fields with no value return null. `id` is always included. Omit or pass an empty array for the default response.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description75/100
List issues in the user's Linear workspace, including active Triage Intelligence suggestions for issues in triage. For issues assigned to me, use "me" as the assignee. For issues created by me, use "me" as the creator. Use "null" for no assignee.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Max results (default 50, max 250)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
Next page cursor
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
orderBy
Sort: createdAt | updatedAt
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
Search issue title or description. Cannot be combined with customView
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
customView
Saved view ID, URL, slug, or exact name. Use list_custom_views to discover views. Applies saved filters and scope; other filters narrow the results. Uses list ordering, not saved display settings
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
team
Team name or ID
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
state
State type, name, or ID
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cycle
Cycle name, number, or ID
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
label
Label name or ID
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
assignee
User ID, name, email, or "me"
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
creator
User ID, name, email, or "me"
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
delegate
Agent name or ID. When the user asks to delegate to "Linear" or "the Linear agent", this refers to the "Linear" app user specifically
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
project
Project name, ID, identifier (e.g., P-ENG-123), or slug
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
release
Release ID or slug
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
priority
0=None, 1=Urgent, 2=High, 3=Medium, 4=Low
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
parentId
Parent issue ID or identifier (e.g., LIN-123)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
Fields to include in each result. Explicitly requested fields with no value return null. `id` is always included. Omit or pass an empty array for the default response.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
createdAt
Created after: ISO-8601 date/duration (e.g., -P1D)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Create or update a Linear issue. If `id` is provided, updates the existing issue; otherwise creates a new one. When creating, `team` is required, and `title` is required unless `template` is set. Note: use `assignee` (not `assigneeId`) to set the assignee — it accepts a user ID, name, email, or "me".
The description explains the capability, when to use it, and what to expect.
Inputs79/100
42 of 50 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
id
Only for updating an existing issue. Pass the issue ID or identifier (e.g., LIN-123). Do NOT pass this parameter when creating a new issue.
Clear enough to supply this argument.
title
Issue title (required when creating, unless template is set)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
description
Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)
Clear enough to supply this argument.
patch › items › oneOf › 0 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 0 › old_string
Exact text to replace. Must match the current content exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 0 › new_string
Replacement text. Empty string deletes the match
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 0 › replace_all
Replace every occurrence instead of requiring a unique match
Clear enough to supply this argument.
patch › items › oneOf › 1 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 1 › anchor
Exact text to insert before. Must match the current content exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 1 › text
Text to insert directly before the anchor. Include separators (e.g. "\n\n")
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 2 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 2 › anchor
Exact text to insert after. Must match the current content exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 2 › text
Text to insert directly after the anchor. Include separators (e.g. "\n\n")
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 3 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 3 › text
Text to insert at the very start of the content
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 4 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 4 › text
Text to insert at the very end of the content
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 5 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 5 › from
Exact text where the range starts (inclusive). Must match exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 5 › to
Exact text where the range ends (exclusive, stays in place). Must match exactly once after `from`
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 5 › new_string
Text replacing the range. Empty string deletes it
Clear enough to supply this argument.
team
Team name or ID (required when creating)
Clear enough to supply this argument.
template
Template name or ID. Applied on create only. The template fills in the content, fields, and sub-issues server-side. A `description` replaces the template body rather than merging with it, but an empty `description` keeps the template body. Labels merge with the template's own
Clear enough to supply this argument.
cycle
Cycle name, number, or ID. Null to remove
Clear enough to supply this argument.
milestone
Milestone name or ID
Clear enough to supply this argument.
priority
0=None, 1=Urgent, 2=High, 3=Medium, 4=Low
Clear enough to supply this argument.
project
Project name, ID, identifier (e.g., P-ENG-123), or slug. Null to remove
Clear enough to supply this argument.
state
State type, name, or ID
Clear enough to supply this argument.
assignee
User ID, name, email, or "me". Null to remove
Clear enough to supply this argument.
delegate
Agent name or ID. When the user asks to delegate to "Linear" or "the Linear agent", this refers to the "Linear" app user specifically. Null to remove
Clear enough to supply this argument.
labels
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. Cannot be combined with addLabels/removeLabels; prefer those for incremental changes
Clear enough to supply this argument.
addLabels
Label names or IDs as a JSON array of strings (e.g. ["Bug", "Urgent"]) to add. Append-only; existing labels are never removed. Cannot be combined with a team change
Clear enough to supply this argument.
removeLabels
Label names or IDs as a JSON array of strings (e.g. ["Bug", "Urgent"]) to remove. Only valid when updating an existing issue. Cannot be combined with a team change
Clear enough to supply this argument.
dueDate
Due date (ISO format). On update, pass null to remove the due date
Clear enough to supply this argument.
slaBreachesAt
ISO-8601 timestamp when the SLA will breach. On update, pass null to remove the SLA
Clear enough to supply this argument.
slaType
SLA day counting type: "all" or "onlyBusinessDays". Only use with slaBreachesAt; null means unset
Clear enough to supply this argument.
parentId
Parent issue ID or identifier (e.g., LIN-123). Null to remove
Clear enough to supply this argument.
estimate
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.
Clear enough to supply this argument.
links › items › url
Not provided
Missing description. Explain what this value means and how to supply it.
links › items › title
Not provided
Missing description. Explain what this value means and how to supply it.
setReleases
Replace all releases on the issue with these. Cannot be combined with addReleases/removeReleases
Clear enough to supply this argument.
addReleases
Release IDs or slugs to add. Append-only; existing releases are never removed
Clear enough to supply this argument.
removeReleases
Release IDs or slugs to remove. Only valid when updating an existing issue
Clear enough to supply this argument.
blocks
Issue IDs/identifiers this blocks. Append-only; existing relations are never removed
Clear enough to supply this argument.
blockedBy
Issue IDs/identifiers blocking this. Append-only; existing relations are never removed
Clear enough to supply this argument.
relatedTo
Related issue IDs/identifiers. Append-only; existing relations are never removed
Clear enough to supply this argument.
duplicateOf
Duplicate of issue ID/identifier. Null to remove
Clear enough to supply this argument.
removeBlocks
Issue IDs/identifiers to stop blocking
Clear enough to supply this argument.
removeBlockedBy
Issue IDs/identifiers to remove as blockers of this issue
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "save_issue",
"title": "Save issue",
"description": "Create or update a Linear issue. If `id` is provided, updates the existing issue; otherwise creates a new one. When creating, `team` is required, and `title` is required unless `template` is set. Note: use `assignee` (not `assigneeId`) to set the assignee — it accepts a user ID, name, email, or \"me\".",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "string",
"description": "Only for updating an existing issue. Pass the issue ID or identifier (e.g., LIN-123). Do NOT pass this parameter when creating a new issue."
},
"team": {
"type": "string",
"description": "Team name or ID (required when creating)"
},
"cycle": {
"type": [
"string",
"null"
],
"description": "Cycle name, number, or ID. Null to remove"
},
"links": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"title"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"title": {
"type": "string",
"minLength": 1
}
}
},
"description": "Link attachments to add [{url, title}]. Append-only; existing links are never removed"
},
"patch": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"op",
"old_string",
"new_string"
],
"properties": {
"op": {
"type": "string",
"const": "replace"
},
"new_string": {
"type": "string",
"description": "Replacement text. Empty string deletes the match"
},
"old_string": {
"type": "string",
"minLength": 1,
"description": "Exact text to replace. Must match the current content exactly once"
},
"replace_all": {
"type": "boolean",
"description": "Replace every occurrence instead of requiring a unique match"
}
}
},
{
"type": "object",
"required": [
"op",
"anchor",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "insert_before"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert directly before the anchor. Include separators (e.g. \"\\n\\n\")"
},
"anchor": {
"type": "string",
"minLength": 1,
"description": "Exact text to insert before. Must match the current content exactly once"
}
}
},
{
"type": "object",
"required": [
"op",
"anchor",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "insert_after"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert directly after the anchor. Include separators (e.g. \"\\n\\n\")"
},
"anchor": {
"type": "string",
"minLength": 1,
"description": "Exact text to insert after. Must match the current content exactly once"
}
}
},
{
"type": "object",
"required": [
"op",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "prepend"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert at the very start of the content"
}
}
},
{
"type": "object",
"required": [
"op",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "append"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert at the very end of the content"
}
}
},
{
"type": "object",
"required": [
"op",
"from",
"to",
"new_string"
],
"properties": {
"op": {
"type": "string",
"const": "replace_range"
},
"to": {
"type": "string",
"minLength": 1,
"description": "Exact text where the range ends (exclusive, stays in place). Must match exactly once after `from`"
},
"from": {
"type": "string",
"minLength": 1,
"description": "Exact text where the range starts (inclusive). Must match exactly once"
},
"new_string": {
"type": "string",
"description": "Text replacing the range. Empty string deletes it"
}
}
}
]
},
"maxItems": 50,
"minItems": 1,
"description": "Partial edits applied to the current content, in order and atomically (one failing operation aborts the whole save). Every anchor string must match the current content exactly once. Only valid on update, in place of the full content/description field"
},
"state": {
"type": "string",
"description": "State type, name, or ID"
},
"title": {
"type": "string",
"description": "Issue title (required when creating, unless template is set)"
},
"blocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Issue IDs/identifiers this blocks. Append-only; existing relations are never removed"
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "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. Cannot be combined with addLabels/removeLabels; prefer those for incremental changes"
},
"dueDate": {
"type": [
"string",
"null"
],
"description": "Due date (ISO format). On update, pass null to remove the due date"
},
"project": {
"type": [
"string",
"null"
],
"description": "Project name, ID, identifier (e.g., P-ENG-123), or slug. Null to remove"
},
"slaType": {
"anyOf": [
{
"enum": [
"all",
"onlyBusinessDays"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "SLA day counting type: \"all\" or \"onlyBusinessDays\". Only use with slaBreachesAt; null means unset"
},
"assignee": {
"type": [
"string",
"null"
],
"description": "User ID, name, email, or \"me\". Null to remove"
},
"delegate": {
"type": [
"string",
"null"
],
"description": "Agent name or ID. When the user asks to delegate to \"Linear\" or \"the Linear agent\", this refers to the \"Linear\" app user specifically. Null to remove"
},
"estimate": {
"type": [
"number",
"null"
],
"description": "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."
},
"parentId": {
"type": [
"string",
"null"
],
"description": "Parent issue ID or identifier (e.g., LIN-123). Null to remove"
},
"priority": {
"type": "number",
"description": "0=None, 1=Urgent, 2=High, 3=Medium, 4=Low"
},
"template": {
"type": "string",
"description": "Template name or ID. Applied on create only. The template fills in the content, fields, and sub-issues server-side. A `description` replaces the template body rather than merging with it, but an empty `description` keeps the template body. Labels merge with the template's own"
},
"addLabels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Label names or IDs as a JSON array of strings (e.g. [\"Bug\", \"Urgent\"]) to add. Append-only; existing labels are never removed. Cannot be combined with a team change"
},
"blockedBy": {
"type": "array",
"items": {
"type": "string"
},
"description": "Issue IDs/identifiers blocking this. Append-only; existing relations are never removed"
},
"milestone": {
"type": "string",
"description": "Milestone name or ID"
},
"relatedTo": {
"type": "array",
"items": {
"type": "string"
},
"description": "Related issue IDs/identifiers. Append-only; existing relations are never removed"
},
"addReleases": {
"type": "array",
"items": {
"type": "string"
},
"description": "Release IDs or slugs to add. Append-only; existing releases are never removed"
},
"description": {
"type": "string",
"description": "Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)"
},
"duplicateOf": {
"type": [
"string",
"null"
],
"description": "Duplicate of issue ID/identifier. Null to remove"
},
"setReleases": {
"type": "array",
"items": {
"type": "string"
},
"description": "Replace all releases on the issue with these. Cannot be combined with addReleases/removeReleases"
},
"removeBlocks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Issue IDs/identifiers to stop blocking"
},
"removeLabels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Label names or IDs as a JSON array of strings (e.g. [\"Bug\", \"Urgent\"]) to remove. Only valid when updating an existing issue. Cannot be combined with a team change"
},
"slaBreachesAt": {
"anyOf": [
{
"type": "string",
"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": "null"
}
],
"description": "ISO-8601 timestamp when the SLA will breach. On update, pass null to remove the SLA"
},
"removeReleases": {
"type": "array",
"items": {
"type": "string"
},
"description": "Release IDs or slugs to remove. Only valid when updating an existing issue"
},
"removeBlockedBy": {
"type": "array",
"items": {
"type": "string"
},
"description": "Issue IDs/identifiers to remove as blockers of this issue"
},
"removeRelatedTo": {
"type": "array",
"items": {
"type": "string"
},
"description": "Related issue IDs/identifiers to remove"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Create or update a Linear issue label. If `id` is provided, updates the existing label; otherwise creates a new one. When creating, `name` is required.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs84/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
Label name or ID. If provided, updates the existing label
Clear enough to supply this argument.
name
Label name (required when creating)
Clear enough to supply this argument.
description
Label description. Null to clear it
Clear enough to supply this argument.
color
Hex color code
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
teamId
Team UUID (omit for workspace label). When updating, only disambiguates `id` by name; a label's team cannot be changed
Clear enough to supply this argument.
parent
Parent label group name or ID. Null to remove from its group
Clear enough to supply this argument.
isGroup
Whether the label is a group
Explain the meaning of this value, not just its name.
groupType
Selection mode for label groups. Defaults to singleSelect when creating; omit to keep it unchanged when updating
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "save_issue_label",
"title": "Save issue label",
"description": "Create or update a Linear issue label. If `id` is provided, updates the existing label; otherwise creates a new one. When creating, `name` is required.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "string",
"description": "Label name or ID. If provided, updates the existing label"
},
"name": {
"type": "string",
"description": "Label name (required when creating)"
},
"color": {
"type": "string",
"description": "Hex color code"
},
"parent": {
"type": [
"string",
"null"
],
"description": "Parent label group name or ID. Null to remove from its group"
},
"teamId": {
"type": "string",
"description": "Team UUID (omit for workspace label). When updating, only disambiguates `id` by name; a label's team cannot be changed"
},
"isGroup": {
"type": "boolean",
"description": "Whether the label is a group"
},
"groupType": {
"enum": [
"singleSelect",
"multiSelect"
],
"type": "string",
"description": "Selection mode for label groups. Defaults to singleSelect when creating; omit to keep it unchanged when updating"
},
"description": {
"type": [
"string",
"null"
],
"description": "Label description. Null to clear it"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Retire a Linear issue label so it cannot be applied to new issues. The label stays visible on issues that already have it. Retiring a label group also retires its child labels. Undo with `restore_issue_label`.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
Label or label group ID
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "retire_issue_label",
"title": "Retire issue label",
"description": "Retire a Linear issue label so it cannot be applied to new issues. The label stays visible on issues that already have it. Retiring a label group also retires its child labels. Undo with `restore_issue_label`.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Label or label group ID"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Restore a retired Linear issue label, making it available for use on issues again. Restoring a label group also restores every child label, including any that were retired separately.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
Label or label group ID
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "restore_issue_label",
"title": "Restore issue label",
"description": "Restore a retired Linear issue label, making it available for use on issues again. Restoring a label group also restores every child label, including any that were retired separately.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Label or label group ID"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description72/100
List projects in the user's Linear workspace
Describe the concrete operation and its scope instead of restating the tool name.
Inputs89/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Max results (default 50, max 50)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
Next page cursor
Explain the meaning of this value, not just its name.
orderBy
Sort: createdAt | updatedAt
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
customView
Saved view ID, URL, slug, or exact name. Use list_custom_views to discover views. Applies saved filters and scope; other filters narrow the results. Uses list ordering, not saved display settings
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
Search project name
Clear enough to supply this argument.
state
State type, name, or ID
Explain the meaning of this value, not just its name.
initiative
Initiative name, ID, identifier (e.g., I-123), or slug
Clear enough to supply this argument.
team
Team name or ID
Clear enough to supply this argument.
member
User ID, name, email, or "me"
Clear enough to supply this argument.
label
Label name or ID
Clear enough to supply this argument.
createdAt
Created after: ISO-8601 date/duration (e.g., -P1D)
Fields to include in each result. Explicitly requested fields with no value return null. `id` is always included. Omit or pass an empty array for the default response.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
Create or update a Linear project. If `id` is provided, updates the existing project; otherwise creates a new one. When creating, `name` and at least one team (via `addTeams` or `setTeams`) are required. Pass `template` to create the project from a project template. To change parts of the description without resending all of it, pass `patch` instead of `description`. `state` resolves against the project statuses of the lead team, so pass `leadTeam` when creating a multi-team project whose teams use different statuses.
The description explains the capability, when to use it, and what to expect.
Inputs67/100
34 of 42 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
id
Project name, ID, identifier (e.g., P-ENG-123), or slug. If provided, updates the existing project
Clear enough to supply this argument.
name
Project name (required when creating)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
template
Template name or ID. Applied on create only. The template fills in the content, fields, and sub-issues server-side. A `description` replaces the template body rather than merging with it, but an empty `description` keeps the template body. Labels merge with the template's own
Clear enough to supply this argument.
icon
Icon name or emoji code (e.g. "Rocket" or ":eagle:"), not a raw Unicode emoji
Clear enough to supply this argument.
color
Hex color
Explain the meaning of this value, not just its name.
summary
Short summary (max 255 chars)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
description
Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)
Clear enough to supply this argument.
patch › items › oneOf › 0 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 0 › old_string
Exact text to replace. Must match the current content exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 0 › new_string
Replacement text. Empty string deletes the match
Clear enough to supply this argument.
patch › items › oneOf › 0 › replace_all
Replace every occurrence instead of requiring a unique match
Clear enough to supply this argument.
patch › items › oneOf › 1 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 1 › anchor
Exact text to insert before. Must match the current content exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 1 › text
Text to insert directly before the anchor. Include separators (e.g. "\n\n")
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 2 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 2 › anchor
Exact text to insert after. Must match the current content exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 2 › text
Text to insert directly after the anchor. Include separators (e.g. "\n\n")
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 3 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 3 › text
Text to insert at the very start of the content
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 4 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 4 › text
Text to insert at the very end of the content
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 5 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 5 › from
Exact text where the range starts (inclusive). Must match exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 5 › to
Exact text where the range ends (exclusive, stays in place). Must match exactly once after `from`
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 5 › new_string
Text replacing the range. Empty string deletes it
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
state
Project status name, type, or ID. Names resolve within the lead team's project statuses. If the lead team is unknown, standard labels resolve as status types; custom names require a status ID or leadTeam
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
startDate
Start date (ISO format). Pair with startDateResolution to indicate precision (e.g. month, quarter)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
startDateResolution
Start date resolution
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
targetDate
Target date (ISO format). Pair with targetDateResolution to indicate precision (e.g. month, quarter)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
targetDateResolution
Target date resolution
Clear enough to supply this argument.
priority
0=None, 1=Urgent, 2=High, 3=Medium, 4=Low
Clear enough to supply this argument.
addTeams
Team name or ID to add
Clear enough to supply this argument.
removeTeams
Team name or ID to remove
Clear enough to supply this argument.
setTeams
Replace all teams with these. Cannot combine with addTeams/removeTeams
Clear enough to supply this argument.
leadTeam
Team that leads the project. Team name or ID. Overrides the default lead team; added to the project's teams when not among them
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
labels
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
Clear enough to supply this argument.
lead
User ID, name, email, or "me". Null to remove, except on create with a template that names a lead
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
addInitiatives
Initiatives to add. Initiative name, ID, identifier (e.g., I-123), or slug
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
removeInitiatives
Initiatives to remove. Initiative name, ID, identifier (e.g., I-123), or slug
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
setInitiatives
Replace all initiatives with these. Initiative name, ID, identifier (e.g., I-123), or slug. Cannot combine with addInitiatives/removeInitiatives
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
links › items › url
Not provided
Missing description. Explain what this value means and how to supply it.
links › items › title
Not provided
Missing description. Explain what this value means and how to supply it.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "save_project",
"title": "Save project",
"description": "Create or update a Linear project. If `id` is provided, updates the existing project; otherwise creates a new one. When creating, `name` and at least one team (via `addTeams` or `setTeams`) are required. Pass `template` to create the project from a project template. To change parts of the description without resending all of it, pass `patch` instead of `description`. `state` resolves against the project statuses of the lead team, so pass `leadTeam` when creating a multi-team project whose teams use different statuses.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "string",
"description": "Project name, ID, identifier (e.g., P-ENG-123), or slug. If provided, updates the existing project"
},
"icon": {
"type": "string",
"description": "Icon name or emoji code (e.g. \"Rocket\" or \":eagle:\"), not a raw Unicode emoji"
},
"lead": {
"type": [
"string",
"null"
],
"description": "User ID, name, email, or \"me\". Null to remove, except on create with a template that names a lead"
},
"name": {
"type": "string",
"description": "Project name (required when creating)"
},
"color": {
"type": "string",
"description": "Hex color"
},
"links": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"title"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"title": {
"type": "string",
"minLength": 1
}
}
},
"description": "External resource links to add [{url, title}]. Append-only; existing links are never removed"
},
"patch": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"op",
"old_string",
"new_string"
],
"properties": {
"op": {
"type": "string",
"const": "replace"
},
"new_string": {
"type": "string",
"description": "Replacement text. Empty string deletes the match"
},
"old_string": {
"type": "string",
"minLength": 1,
"description": "Exact text to replace. Must match the current content exactly once"
},
"replace_all": {
"type": "boolean",
"description": "Replace every occurrence instead of requiring a unique match"
}
}
},
{
"type": "object",
"required": [
"op",
"anchor",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "insert_before"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert directly before the anchor. Include separators (e.g. \"\\n\\n\")"
},
"anchor": {
"type": "string",
"minLength": 1,
"description": "Exact text to insert before. Must match the current content exactly once"
}
}
},
{
"type": "object",
"required": [
"op",
"anchor",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "insert_after"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert directly after the anchor. Include separators (e.g. \"\\n\\n\")"
},
"anchor": {
"type": "string",
"minLength": 1,
"description": "Exact text to insert after. Must match the current content exactly once"
}
}
},
{
"type": "object",
"required": [
"op",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "prepend"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert at the very start of the content"
}
}
},
{
"type": "object",
"required": [
"op",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "append"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert at the very end of the content"
}
}
},
{
"type": "object",
"required": [
"op",
"from",
"to",
"new_string"
],
"properties": {
"op": {
"type": "string",
"const": "replace_range"
},
"to": {
"type": "string",
"minLength": 1,
"description": "Exact text where the range ends (exclusive, stays in place). Must match exactly once after `from`"
},
"from": {
"type": "string",
"minLength": 1,
"description": "Exact text where the range starts (inclusive). Must match exactly once"
},
"new_string": {
"type": "string",
"description": "Text replacing the range. Empty string deletes it"
}
}
}
]
},
"maxItems": 50,
"minItems": 1,
"description": "Partial edits applied to the current content, in order and atomically (one failing operation aborts the whole save). Every anchor string must match the current content exactly once. Only valid on update, in place of the full content/description field"
},
"state": {
"type": "string",
"description": "Project status name, type, or ID. Names resolve within the lead team's project statuses. If the lead team is unknown, standard labels resolve as status types; custom names require a status ID or leadTeam"
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "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"
},
"summary": {
"type": "string",
"description": "Short summary (max 255 chars)"
},
"addTeams": {
"type": "array",
"items": {
"type": "string"
},
"description": "Team name or ID to add"
},
"leadTeam": {
"type": "string",
"description": "Team that leads the project. Team name or ID. Overrides the default lead team; added to the project's teams when not among them"
},
"priority": {
"type": "integer",
"maximum": 4,
"minimum": 0,
"description": "0=None, 1=Urgent, 2=High, 3=Medium, 4=Low"
},
"setTeams": {
"type": "array",
"items": {
"type": "string"
},
"description": "Replace all teams with these. Cannot combine with addTeams/removeTeams"
},
"template": {
"type": "string",
"description": "Template name or ID. Applied on create only. The template fills in the content, fields, and sub-issues server-side. A `description` replaces the template body rather than merging with it, but an empty `description` keeps the template body. Labels merge with the template's own"
},
"startDate": {
"type": "string",
"description": "Start date (ISO format). Pair with startDateResolution to indicate precision (e.g. month, quarter)"
},
"targetDate": {
"type": "string",
"description": "Target date (ISO format). Pair with targetDateResolution to indicate precision (e.g. month, quarter)"
},
"description": {
"type": "string",
"description": "Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)"
},
"removeTeams": {
"type": "array",
"items": {
"type": "string"
},
"description": "Team name or ID to remove"
},
"addInitiatives": {
"type": "array",
"items": {
"type": "string"
},
"description": "Initiatives to add. Initiative name, ID, identifier (e.g., I-123), or slug"
},
"setInitiatives": {
"type": "array",
"items": {
"type": "string"
},
"description": "Replace all initiatives with these. Initiative name, ID, identifier (e.g., I-123), or slug. Cannot combine with addInitiatives/removeInitiatives"
},
"removeInitiatives": {
"type": "array",
"items": {
"type": "string"
},
"description": "Initiatives to remove. Initiative name, ID, identifier (e.g., I-123), or slug"
},
"startDateResolution": {
"enum": [
"halfYear",
"month",
"quarter",
"year"
],
"type": "string",
"description": "Start date resolution"
},
"targetDateResolution": {
"enum": [
"halfYear",
"month",
"quarter",
"year"
],
"type": "string",
"description": "Target date resolution"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
List available project labels in a Linear workspace or team. Returns workspace labels by default; pass `team` to also include that team's labels. A team-scoped label carries a `team` field; different teams can hold same-named labels, so check it before acting on an ID. A retired label carries `retiredAt` and cannot be applied to new projects.
The description explains the capability, when to use it, and what to expect.
Inputs71/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Max results (default 50, max 250)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
Next page cursor
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
orderBy
Sort: createdAt | updatedAt
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
name
Filter by name
Explain the meaning of this value, not just its name.
team
Team name or ID
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
includeArchived
Include archived items
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
includeGroups
Include label groups in the results, marked with `isGroup`. A group cannot be applied directly; retiring or restoring one cascades to its child labels
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "list_project_labels",
"title": "List project labels",
"description": "List available project labels in a Linear workspace or team. Returns workspace labels by default; pass `team` to also include that team's labels. A team-scoped label carries a `team` field; different teams can hold same-named labels, so check it before acting on an ID. A retired label carries `retiredAt` and cannot be applied to new projects.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"description": "Filter by name"
},
"team": {
"type": "string",
"description": "Team name or ID"
},
"limit": {
"type": "number",
"default": 50,
"maximum": 250,
"description": "Max results (default 50, max 250)"
},
"cursor": {
"type": "string",
"description": "Next page cursor"
},
"orderBy": {
"enum": [
"createdAt",
"updatedAt"
],
"type": "string",
"default": "updatedAt",
"description": "Sort: createdAt | updatedAt"
},
"includeGroups": {
"type": "boolean",
"default": false,
"description": "Include label groups in the results, marked with `isGroup`. A group cannot be applied directly; retiring or restoring one cascades to its child labels"
},
"includeArchived": {
"type": "boolean",
"default": false,
"description": "Include archived items"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Retire a Linear project label so it cannot be applied to new projects. The label stays visible on projects that already have it. Retiring a label group also retires its child labels. Undo with `restore_project_label`.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
Label or label group ID
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "retire_project_label",
"title": "Retire project label",
"description": "Retire a Linear project label so it cannot be applied to new projects. The label stays visible on projects that already have it. Retiring a label group also retires its child labels. Undo with `restore_project_label`.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Label or label group ID"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Restore a retired Linear project label, making it available for use on projects again. Restoring a label group also restores every child label, including any that were retired separately.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
Label or label group ID
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "restore_project_label",
"title": "Restore project label",
"description": "Restore a retired Linear project label, making it available for use on projects again. Restoring a label group also restores every child label, including any that were retired separately.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Label or label group ID"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Create or update a Linear project label. If `id` is provided, updates the existing label; otherwise creates a new one. When creating, `name` is required.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs79/100
Explain the meaning of this value, not just its name.
id
Label name or ID. If provided, updates the existing label
Explain the meaning of this value, not just its name.
name
Label name (required when creating)
Clear enough to supply this argument.
description
Label description. Null to clear it
Clear enough to supply this argument.
color
Hex color code
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
teamId
Team UUID (omit for workspace label). When updating, only disambiguates `id` by name; a label's team cannot be changed
Clear enough to supply this argument.
parent
Parent label group name or ID. Null to remove from its group
Clear enough to supply this argument.
isGroup
Whether the label is a group
Explain the meaning of this value, not just its name.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "save_project_label",
"title": "Save project label",
"description": "Create or update a Linear project label. If `id` is provided, updates the existing label; otherwise creates a new one. When creating, `name` is required.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "string",
"description": "Label name or ID. If provided, updates the existing label"
},
"name": {
"type": "string",
"description": "Label name (required when creating)"
},
"color": {
"type": "string",
"description": "Hex color code"
},
"parent": {
"type": [
"string",
"null"
],
"description": "Parent label group name or ID. Null to remove from its group"
},
"teamId": {
"type": "string",
"description": "Team UUID (omit for workspace label). When updating, only disambiguates `id` by name; a label's team cannot be changed"
},
"isGroup": {
"type": "boolean",
"description": "Whether the label is a group"
},
"description": {
"type": [
"string",
"null"
],
"description": "Label description. Null to clear it"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Create or update a release. If `id` is provided, updates the existing release; otherwise creates a new one. When creating, `name` and `pipeline` are required. Release status is modeled as the release pipeline stage.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs81/100
Explain the meaning of this value, not just its name.
id
Release ID or slug to update. Omit to create a new release.
Clear enough to supply this argument.
name
Release name (required when creating)
Clear enough to supply this argument.
description
Release description
Explain the meaning of this value, not just its name.
version
Version identifier
Explain the meaning of this value, not just its name.
pipeline
Release pipeline ID, slug, or exact name (required when creating)
Clear enough to supply this argument.
stage
Release stage ID, exact name, or lifecycle type within the release pipeline
Clear enough to supply this argument.
startDate
Estimated start date (ISO YYYY-MM-DD, null to remove)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
targetDate
Estimated completion date (ISO YYYY-MM-DD, null to remove)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
createdAt
Import/create timestamp (ISO DateTime)
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
startedAt
Started timestamp (ISO DateTime, null to remove)
Clear enough to supply this argument.
completedAt
Completed timestamp (ISO DateTime, null to remove)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Create or update release notes. If `id` is provided, updates the existing release notes; otherwise creates a new one. When creating, `pipeline` and either `releases` or a release range are required. To change parts of the content without resending all of it, pass `patch` instead of `content`.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs63/100
19 of 25 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
id
Release notes ID or slug to update. Omit to create new release notes.
Clear enough to supply this argument.
pipeline
Release pipeline ID, slug, or exact name (required when creating)
Clear enough to supply this argument.
title
Release notes title
Explain the meaning of this value, not just its name.
content
Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)
Clear enough to supply this argument.
patch › items › oneOf › 0 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 0 › old_string
Exact text to replace. Must match the current content exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 0 › new_string
Replacement text. Empty string deletes the match
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 0 › replace_all
Replace every occurrence instead of requiring a unique match
Clear enough to supply this argument.
patch › items › oneOf › 1 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 1 › anchor
Exact text to insert before. Must match the current content exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 1 › text
Text to insert directly before the anchor. Include separators (e.g. "\n\n")
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 2 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 2 › anchor
Exact text to insert after. Must match the current content exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 2 › text
Text to insert directly after the anchor. Include separators (e.g. "\n\n")
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 3 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 3 › text
Text to insert at the very start of the content
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 4 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 4 › text
Text to insert at the very end of the content
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 5 › op
Not provided
Missing description. Explain what this value means and how to supply it.
patch › items › oneOf › 5 › from
Exact text where the range starts (inclusive). Must match exactly once
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 5 › to
Exact text where the range ends (exclusive, stays in place). Must match exactly once after `from`
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
patch › items › oneOf › 5 › new_string
Text replacing the range. Empty string deletes it
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "save_release_note",
"title": "Save release notes",
"description": "Create or update release notes. If `id` is provided, updates the existing release notes; otherwise creates a new one. When creating, `pipeline` and either `releases` or a release range are required. To change parts of the content without resending all of it, pass `patch` instead of `content`.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "string",
"description": "Release notes ID or slug to update. Omit to create new release notes."
},
"patch": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"op",
"old_string",
"new_string"
],
"properties": {
"op": {
"type": "string",
"const": "replace"
},
"new_string": {
"type": "string",
"description": "Replacement text. Empty string deletes the match"
},
"old_string": {
"type": "string",
"minLength": 1,
"description": "Exact text to replace. Must match the current content exactly once"
},
"replace_all": {
"type": "boolean",
"description": "Replace every occurrence instead of requiring a unique match"
}
}
},
{
"type": "object",
"required": [
"op",
"anchor",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "insert_before"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert directly before the anchor. Include separators (e.g. \"\\n\\n\")"
},
"anchor": {
"type": "string",
"minLength": 1,
"description": "Exact text to insert before. Must match the current content exactly once"
}
}
},
{
"type": "object",
"required": [
"op",
"anchor",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "insert_after"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert directly after the anchor. Include separators (e.g. \"\\n\\n\")"
},
"anchor": {
"type": "string",
"minLength": 1,
"description": "Exact text to insert after. Must match the current content exactly once"
}
}
},
{
"type": "object",
"required": [
"op",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "prepend"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert at the very start of the content"
}
}
},
{
"type": "object",
"required": [
"op",
"text"
],
"properties": {
"op": {
"type": "string",
"const": "append"
},
"text": {
"type": "string",
"minLength": 1,
"description": "Text to insert at the very end of the content"
}
}
},
{
"type": "object",
"required": [
"op",
"from",
"to",
"new_string"
],
"properties": {
"op": {
"type": "string",
"const": "replace_range"
},
"to": {
"type": "string",
"minLength": 1,
"description": "Exact text where the range ends (exclusive, stays in place). Must match exactly once after `from`"
},
"from": {
"type": "string",
"minLength": 1,
"description": "Exact text where the range starts (inclusive). Must match exactly once"
},
"new_string": {
"type": "string",
"description": "Text replacing the range. Empty string deletes it"
}
}
}
]
},
"maxItems": 50,
"minItems": 1,
"description": "Partial edits applied to the current content, in order and atomically (one failing operation aborts the whole save). Every anchor string must match the current content exactly once. Only valid on update, in place of the full content/description field"
},
"title": {
"type": "string",
"description": "Release notes title"
},
"content": {
"type": "string",
"description": "Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)"
},
"pipeline": {
"type": "string",
"description": "Release pipeline ID, slug, or exact name (required when creating)"
},
"releases": {
"type": "array",
"items": {
"type": "string"
},
"description": "Release IDs or slugs to include in the note"
},
"rangeToRelease": {
"type": "string",
"description": "Newest release ID or slug in the note range"
},
"rangeFromRelease": {
"type": "string",
"description": "Oldest release ID or slug in the note range"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "share_issue",
"title": "Share issue",
"description": "Share an issue with a workspace user who cannot otherwise access it. Use this tool only when the user explicitly asks to share the issue.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"issue",
"user"
],
"properties": {
"user": {
"type": "string",
"description": "User ID, name, email, or \"me\" Must be an email address or UUID."
},
"issue": {
"type": "string",
"description": "Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "unshare_issue",
"title": "Unshare issue",
"description": "Remove a workspace user's shared access to an issue. Use this tool only when the user explicitly asks to stop sharing the issue.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"issue",
"user"
],
"properties": {
"user": {
"type": "string",
"description": "User ID, name, email, or \"me\" Must be an email address or UUID."
},
"issue": {
"type": "string",
"description": "Issue ID or identifier (e.g., LIN-123). P-prefixed identifiers (e.g., P-ENG-123) are projects, not issues"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description78/100
Create or update a milestone in a Linear project. If `id` is provided, updates the existing milestone; otherwise creates a new one. When creating, `name` is required.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs70/100
Explain the meaning of this value, not just its name.
project
Project name, ID, identifier (e.g., P-ENG-123), or slug
Clear enough to supply this argument.
id
Milestone name or ID
Explain the meaning of this value, not just its name.
name
Milestone name (required when creating)
Clear enough to supply this argument.
description
Milestone description
Explain the meaning of this value, not just its name.
targetDate
Target completion date (ISO format, null to remove)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Retrieve who is responsible for a team's triage: the person on triage now, what happens when an issue enters triage, and the upcoming shifts of the team's triage rotation. Pass `user` to get only that person's shifts, for example to find when their next triage duty starts, even when it is weeks away.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
team
Team name or ID
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
user
Only return shifts of this user: User ID, name, email, or "me"
Clear enough to supply this argument.
limit
Max upcoming shifts to return (default 10, max 50)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_triage_responsibility",
"title": "Get triage responsibility",
"description": "Retrieve who is responsible for a team's triage: the person on triage now, what happens when an issue enters triage, and the upcoming shifts of the team's triage rotation. Pass `user` to get only that person's shifts, for example to find when their next triage duty starts, even when it is weeks away.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"team"
],
"properties": {
"team": {
"type": "string",
"description": "Team name or ID"
},
"user": {
"type": "string",
"description": "Only return shifts of this user: User ID, name, email, or \"me\""
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Max upcoming shifts to return (default 10, max 50)"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
List the Linear issue, project, and document templates available to the authenticated user. Use this to find the template a team expects, then call get_template for its content.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
type
Filter by template type. Omit to return every type
Clear enough to supply this argument.
team
Team name or ID. Returns that team's templates plus workspace-level ones
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "list_templates",
"title": "List templates",
"description": "List the Linear issue, project, and document templates available to the authenticated user. Use this to find the template a team expects, then call get_template for its content.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"team": {
"type": "string",
"description": "Team name or ID. Returns that team's templates plus workspace-level ones"
},
"type": {
"enum": [
"issue",
"project",
"document"
],
"type": "string",
"description": "Filter by template type. Omit to return every type"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Retrieve a Linear template by ID or name: the content it pre-fills, the ids it applies, its sub-issues, and its form fields. Pass the template to save_issue or save_project to apply it. References come back as ids, so read a name with the matching tool when you need one. A form template collects its answers through a form, so applying one here creates an issue with the form unanswered.
The description explains the capability, when to use it, and what to expect.
Inputs71/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
id
Template ID or name
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_template",
"title": "Get template",
"description": "Retrieve a Linear template by ID or name: the content it pre-fills, the ids it applies, its sub-issues, and its form fields. Pass the template to save_issue or save_project to apply it. References come back as ids, so read a name with the matching tool when you need one. A form template collects its answers through a form, so applying one here creates an issue with the form unanswered.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Template ID or name"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description81/100
Create, reply to, or edit a comment or persisted draft on a Linear diff. Set draft to true to save without submitting. Provide draftId to edit or submit a persisted draft, and commentId only to edit a submitted comment. Submitting an inline draft reuses its saved anchor; submitting a reply draft requires parentId again.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs84/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
urlOrId
Linear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URL
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
commentId
Existing comment ID to edit
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
draftId
Existing persisted draft ID to edit or submit
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
draft
Save as a private persisted draft without submitting
Clear enough to supply this argument.
parentId
Top-level comment ID to reply to; also required when submitting a persisted reply draft
Clear enough to supply this argument.
body
Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
anchor
Optional comment anchor copied from a diff thread or built for a file or diff hunk
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
anchorContent
Exact source text of the anchor's end line; stored with an inline draft so it can be re-anchored after the diff receives new revisions
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "save_diff_comment",
"title": "Save diff comment",
"description": "Create, reply to, or edit a comment or persisted draft on a Linear diff. Set draft to true to save without submitting. Provide draftId to edit or submit a persisted draft, and commentId only to edit a submitted comment. Submitting an inline draft reuses its saved anchor; submitting a reply draft requires parentId again.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"body"
],
"properties": {
"body": {
"type": "string",
"minLength": 1,
"description": "Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences"
},
"draft": {
"type": "boolean",
"default": false,
"description": "Save as a private persisted draft without submitting"
},
"anchor": {
"type": "object",
"description": "Optional comment anchor copied from a diff thread or built for a file or diff hunk",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"draftId": {
"type": "string",
"description": "Existing persisted draft ID to edit or submit"
},
"urlOrId": {
"type": "string",
"minLength": 1,
"description": "Linear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URL"
},
"parentId": {
"type": "string",
"description": "Top-level comment ID to reply to; also required when submitting a persisted reply draft"
},
"commentId": {
"type": "string",
"description": "Existing comment ID to edit"
},
"anchorContent": {
"type": "string",
"description": "Exact source text of the anchor's end line; stored with an inline draft so it can be re-anchored after the diff receives new revisions"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description69/100
Approve a Linear diff, request changes, or submit a review comment
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs83/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
urlOrId
Linear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URL
Clear enough to supply this argument.
decision
Review decision: approved, changesRequested, or commented
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
body
Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. Required when requesting changes or commenting
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Update a Linear diff's title, description, reviewer requests, issue links, or status. Provide at least one update. Combined updates can partially succeed; inspect the result before retrying. Use merge_diff to merge and submit_diff_review to approve or request changes.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
urlOrId
Linear review URL, diff slug, pull request ID, Linear full identifier, or GitHub PR URL
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
title
New diff title
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
description
New description as Markdown; an empty string clears it
Clear enough to supply this argument.
addedReviewRequests › items › anyOf › 0 › user
Workspace user ID, name, email, or "me"
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description78/100
Create or update a project/initiative status update. Omit `id` to create, provide `id` to update.
The description explains the capability, when to use it, and what to expect.
Inputs86/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
type
Type of status update
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
id
Status update ID - if provided, updates this existing update
Clear enough to supply this argument.
project
Project name, ID, identifier (e.g., P-ENG-123), or slug
Clear enough to supply this argument.
initiative
Initiative name, ID, identifier (e.g., I-123), or slug
Clear enough to supply this argument.
body
Content as Markdown. Do not escape the string — use literal newlines and special characters, not escape sequences. To mention a user, use @displayName (e.g., @johndoe)
Clear enough to supply this argument.
health
onTrack | atRisk | offTrack
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
isDiffHidden
Deprecated. Hide diff with previous update (create only)
Explain the meaning of this value, not just its name.
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01List projectsList projects in the user's Linear workspace
02Get projectRetrieve details of a specific project in Linear
03List documents in the user's Linear workspace
04Get issueRetrieve detailed information about an issue by ID, including attachments, git branch name, and active Triage Intelligence suggestions when the issue is in t…
05List issuesList issues in the user's Linear workspace, including active Triage Intelligence suggestions for issues in triage.
Want to run these tasks against your MCP server with us?
Linear setup, tools, quality score, publishing readiness, and alternatives.
How do I add Linear to Claude, ChatGPT, or Cursor?
Add Linear to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.linear.app/mcp.
Is Linear MCP ready for ChatGPT and Claude?
As of October 6, 2026, Linear scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is Linear's MCP tool documentation?
As of October 6, 2026, Linear scores 76/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 68 of 68 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to Linear?
As of October 20, 2026, alternatives to Linear in productivity on the Manufact MCP leaderboard include Autodesk Product Help, BoardWise, FlagStat, Keenable Web Search, and PomoDial.
How can Linear improve its MCP documentation?
list_cycles is the lowest-scoring reviewed tool at 61/100. No output schema is declared. Add one for structured results so clients can interpret returned fields. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.