Skip to main content
Glama
scoutos

Linear MCP Server

by scoutos

Linear MCP Server

A Node.js implementation of an MCP server for Linear integration.

About

This MCP (Model Context Protocol) server provides a standardized interface for AI models to interact with Linear issue tracking functionality.

Key Features

  • Standard MCP protocol implementation for Linear using the official MCP SDK

  • Support for searching issues, reading details, updating, and commenting

Related MCP server: Linear MCP Server

Getting Started

Prerequisites

  • Node.js (v18 or later)

  • Linear API key

Installation

  1. Clone the repository

  2. Install dependencies

npm install
  1. Create a .env file in the root directory with your Linear API key

LINEAR_API_KEY=your_linear_api_key_here

Running the Server

Start the server:

npm start

For development with file watching:

just dev

For development with debug logging:

just debug

Or set environment variables manually:

LOG_LEVEL=DEBUG NODE_ENV=development node src/index.js

Logs will be written to the logs/mcp-linear.log file to avoid interfering with the STDIO transport.

Using with MCP Inspector

The server runs in stdio mode, which means you can connect to it with the MCP Inspector.

  1. Start the server in one terminal:

npm start
  1. Visit the web-based inspector at: https://inspector.modelcontextprotocol.ai

  2. Select "stdio" as the transport type

  3. Enter the following command:

node /path/to/mcp-linear/src/index.js
  1. Click "Connect" to connect to your running server

Usage with Claude Desktop

Add the following to your Claude Desktop configuration file (typically at ~/.config/Claude Desktop/claude_desktop_config.json):

{
  "mcp": {
    "servers": [
      {
        "name": "Linear",
        "command": "node /path/to/mcp-linear/src/index.js",
        "env": {
          "LINEAR_API_KEY": "your_linear_api_key_here"
        }
      }
    ]
  }
}

Usage with Cursor

For Cursor, add the following to your settings:

{
  "ai.mcp.servers": [
    {
      "name": "Linear",
      "command": "node /path/to/mcp-linear/src/index.js",
      "env": {
        "LINEAR_API_KEY": "your_linear_api_key_here"
      }
    }
  ]
}

Testing Your Integration

To verify your setup:

  1. Configure the MCP server in your Claude Desktop or Cursor settings

  2. Restart your application

  3. Ask: "Search for Linear issues containing 'bug'"

  4. The assistant should detect and use the Linear MCP server to retrieve results

Project Structure

/
├── src/                     # Source code
│   ├── effects/             # Effects implementation
│   │   ├── linear/          # Linear API effects
│   │   │   └── types/       # Linear type definitions
│   │   └── logging/         # Logging effects for safe logging with STDIO
│   ├── tools/               # MCP tools implementation
│   │   ├── types/           # Tool type definitions
│   │   └── utils/           # Tool utility functions
│   ├── utils/               # Utility modules
│   │   └── config/          # Configuration utilities
│   └── index.js             # Main entry point
├── docs/                    # Documentation
│   └── llm_context/         # Documentation for LLMs
├── logs/                    # Log files (created at runtime)
└── package.json             # Project configuration

Available Tools

The MCP server exposes the following tools:

  • list_issues - List Linear issues (also called tickets) with various filtering options (assignee, status, etc.)

  • get_issue - Get detailed information about a specific Linear issue by ID

  • list_members - List Linear team members with optional filtering by name

  • list_projects - List Linear projects with optional filtering by team, name, and archive status

  • get_project - Get detailed information about a specific Linear project including issues, members and more

  • list_teams - List Linear teams with details about their members, projects, and issues

  • add_comment - Add a comment to a specific Linear issue

  • create_issue - Create a new issue in Linear with customizable title, description, priority, and assignee

For backward compatibility, the following tool aliases are also available:

  • list_tickets - Alias for list_issues

  • get_ticket - Alias for get_issue

Troubleshooting

If you're having issues with the Linear MCP server:

  1. Check your Linear API key: Make sure you've set a valid Linear API key in your .env file or environment variables. Linear API keys should start with "linapi".

  2. Enable debug logging:

    a. When starting the MCP server:

    just debug
    # or
    LOG_LEVEL=DEBUG NODE_ENV=development node src/index.js

    b. In your client configuration (Claude Desktop, Cursor, etc.):

    "env": {
      "LINEAR_API_KEY": "your_linear_api_key_here",
      "LOG_LEVEL": "DEBUG"
    }

    c. When calling tools directly, add the debug parameter:

    {
      "debug": true
    }
  3. Check log files: Examine logs in the logs/mcp-linear.log file for detailed error information.

  4. Verify Linear API access: Make sure your Linear API key has appropriate permissions and that you can access the Linear API directly.

Architecture

The application follows an effects-based architecture:

  • Effects: Side-effecting operations are isolated in the effects directory:

    • linear: Provides access to Linear API using the official Linear SDK

    • logging: Safe logging that doesn't interfere with STDIO transport

  • Tools: MCP tool implementations that use effects for side-effects:

    • Each tool follows a consistent pattern with input validation using Zod

    • Tools are exposed through the MCP protocol via the server

    • Each tool can access the Linear client through the linear effect

  • Utils: Utility modules for configuration and common functionality

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Available Tools

8 tools
add_commentB

Add a comment to a specific Linear ticket. This tool is useful for providing feedback, status updates, or additional information on existing tickets.

ParametersJSON Schema
NameRequiredDescriptionDefault
commentYesThe comment text to add to the ticket
debugNoDebug mode to show extra diagnostics
ticketIdYesThe ID of the Linear ticket to comment on

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states the tool 'adds a comment' (implying a write/mutation operation) but doesn't disclose behavioral traits like authentication requirements, rate limits, error handling, or whether comments are editable/deletable. This is inadequate for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized (two sentences) and front-loaded with the core purpose. The second sentence adds useful context without being redundant. It could be slightly more concise by merging ideas, but it's efficient overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a mutation tool (adding comments) with no annotations, no output schema, and 3 parameters, the description is incomplete. It doesn't cover error cases, response format, or side effects, leaving significant gaps for an AI agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters (ticketId, comment, debug). The description adds no additional meaning beyond what's in the schema (e.g., no examples, format details, or constraints). Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add a comment') and target resource ('to a specific Linear ticket'), distinguishing it from sibling tools like create_issue or get_issue. However, it doesn't explicitly differentiate from hypothetical comment-related siblings (none exist in the provided list), so it's not a perfect 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides implied usage context ('useful for providing feedback, status updates, or additional information on existing tickets'), which suggests when to use it. However, it lacks explicit guidance on when not to use it (e.g., vs. updating ticket fields directly) or alternatives, and doesn't mention prerequisites like needing write permissions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_issueB

Create a new issue in Linear. This tool is useful for adding new tasks, bugs, or feature requests to your Linear workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
assigneeIdNoThe ID of the user to assign the issue to
debugNoDebug mode to show extra diagnostics
descriptionNoThe detailed description of the issue
priorityNoThe priority of the issue (0-4)
projectIdNoThe ID of the project to associate with the issue
stateIdNoThe ID of the state to set for the issue
teamIdYesThe ID of the Linear team where the issue will be created
titleYesThe title of the issue to create

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Create a new issue,' which implies a write operation, but doesn't disclose permissions required, whether it's idempotent, rate limits, or what happens on failure. For a mutation tool with zero annotation coverage, this is a significant gap in behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and followed by a usage hint. It avoids redundancy and wastes no words, though it could be slightly more structured by explicitly separating purpose from guidelines.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (8 parameters, 2 required), no annotations, and no output schema, the description is moderately complete. It covers the basic purpose but lacks details on behavioral traits, error handling, and output format. For a creation tool with no structured safety or output information, it should do more to compensate, but it's not entirely inadequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 8 parameters with clear descriptions. The description adds no parameter-specific information beyond the general purpose. According to the rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in the description, which applies here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create a new issue') and resource ('in Linear'), with specific examples of what can be created ('tasks, bugs, or feature requests'). It distinguishes from siblings like 'add_comment' or 'get_issue' by focusing on creation rather than modification or retrieval. However, it doesn't explicitly differentiate from other creation-related tools if they existed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating 'This tool is useful for adding new tasks, bugs, or feature requests,' which suggests when to use it. However, it doesn't provide explicit guidance on when to choose this over alternatives like 'list_issues' for viewing or 'add_comment' for updating, nor does it mention prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_issueC

Get detailed information about a specific Linear issue (also called a ticket), including comments if requested.

ParametersJSON Schema
NameRequiredDescriptionDefault
debugNo
includeCommentsNo
issueIdYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions retrieving 'detailed information' and comments, but fails to address critical aspects like whether this is a read-only operation (implied but not stated), error handling for invalid issue IDs, rate limits, authentication needs, or what 'detailed information' includes beyond comments. This leaves significant gaps for an agent to understand the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose. It avoids unnecessary words, though it could be slightly more structured by explicitly separating purpose from parameter guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (3 parameters, no output schema, no annotations), the description is incomplete. It doesn't explain what 'detailed information' entails, how to handle the issueId format, the purpose of the debug parameter, or the response structure. For a tool with undocumented parameters and no annotations, this leaves the agent with insufficient context to use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema provides no parameter descriptions. The description only mentions 'comments if requested,' which loosely relates to the includeComments parameter but doesn't explain its purpose, default behavior, or the other parameters (issueId and debug). It adds minimal value beyond the bare schema, failing to compensate for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('detailed information about a specific Linear issue'), distinguishing it from siblings like list_issues (which lists multiple issues) and create_issue (which creates new issues). However, it doesn't explicitly differentiate from get_project or other get_* tools beyond the resource name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by specifying 'a specific Linear issue' and mentioning comments, suggesting this tool is for retrieving details of a known issue rather than listing or creating. However, it lacks explicit guidance on when to use this versus alternatives like list_issues or when not to use it (e.g., for bulk operations).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_projectB

Get detailed information about a Linear project including team, lead, issues, and members. Use this to see comprehensive details of a specific project.

ParametersJSON Schema
NameRequiredDescriptionDefault
debugNoDebug mode to show extra diagnostics
includeCommentsNoWhether to include comments on issues in the project
includeIssuesNoWhether to include issues in the project details
includeMembersNoWhether to include member details in the project
limitNoMaximum number of issues/members to include in details
projectIdYesThe ID of the Linear project to retrieve

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions retrieving 'detailed information' and 'comprehensive details,' but lacks behavioral context like whether this is a read-only operation, if it requires authentication, rate limits, or what happens if the projectId is invalid. For a tool with no annotations, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences that are front-loaded with the core purpose. Every word earns its place, with no redundancy or fluff. It efficiently communicates the tool's intent without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and a tool that retrieves project details with 6 parameters, the description is incomplete. It doesn't explain the return format, error handling, or behavioral constraints. For a data retrieval tool with moderate complexity, the description should provide more context to be fully helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so the schema fully documents all 6 parameters. The description adds no specific parameter information beyond implying 'detailed information' about a project. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, with no extra value from the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get detailed information about a Linear project including team, lead, issues, and members.' It specifies the verb ('Get') and resource ('Linear project'), and lists key data fields. However, it doesn't explicitly differentiate from siblings like 'list_projects' (which likely lists multiple projects vs. getting details of one).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some guidance: 'Use this to see comprehensive details of a specific project,' implying it's for detailed views of individual projects. It doesn't explicitly state when NOT to use it or name alternatives (e.g., 'list_projects' for overviews), leaving usage context implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_issuesC

List Linear issues (also called tickets) with filtering by assignee, status, and project. Use this to browse and find issues in your Linear workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
assignedToMeNo
assigneeNo
debugNo
limitNo
projectNo
sortByNocreatedAt
sortDirectionNoDESC
statusNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral disclosure. It mentions filtering but doesn't cover pagination (implied by 'limit' parameter), rate limits, authentication needs, or what happens with large result sets. For a list tool with 8 parameters, this leaves significant gaps in understanding how the tool behaves operationally.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise with two sentences that front-load the core functionality. Every sentence contributes value: the first states purpose and key filters, the second provides usage intent. No wasted words, though it could be slightly more structured for clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 parameters, no annotations, no output schema), the description is incomplete. It lacks details on return format, error handling, pagination behavior, and doesn't fully explain parameter usage. For a list tool with filtering and sorting capabilities, this leaves the agent with insufficient context to use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate but only mentions three parameters (assignee, status, project) out of eight. It doesn't explain 'assignedToMe', 'debug', 'limit', 'sortBy', or 'sortDirection', leaving most parameters undocumented. The description adds some meaning for the three mentioned but fails to cover the majority.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('List') and resource ('Linear issues/tickets'), and mentions filtering capabilities. It distinguishes the tool's purpose from siblings like 'get_issue' (single issue) and 'create_issue' (write operation). However, it doesn't explicitly differentiate from 'list_projects' or 'list_teams' in terms of resource type, which keeps it from a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides implied usage context ('to browse and find issues in your Linear workspace'), which suggests this is for exploration rather than specific retrieval. It doesn't explicitly state when to use this vs. alternatives like 'get_issue' for single issues or mention any exclusions, leaving some ambiguity for the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_membersC

List Linear team members with optional filtering by name. This tool is useful for finding member details including usernames, display names, and emails.

ParametersJSON Schema
NameRequiredDescriptionDefault
debugNo
limitNo
nameFilterNo
teamIdNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool lists members with filtering and is useful for finding details, but doesn't cover critical behaviors like pagination (implied by 'limit' parameter), authentication requirements, rate limits, error handling, or whether it's read-only (though implied by 'list'). For a tool with 4 parameters and no annotation coverage, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, with two sentences that directly state the purpose and utility. There's no wasted text, and it efficiently communicates core information. However, it could be slightly more structured by explicitly separating purpose from usage, but this is minor.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (4 parameters, no annotations, no output schema), the description is incomplete. It lacks details on parameter meanings, behavioral traits (e.g., pagination, auth), and output format. While it states the purpose clearly, it doesn't provide enough context for an agent to reliably use the tool without additional inference or errors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It only mentions 'optional filtering by name,' which corresponds to the 'nameFilter' parameter, but ignores 'teamId,' 'limit,' and 'debug.' This adds minimal value beyond the schema, failing to fully address the coverage gap. With 0% coverage, a baseline of 3 is not met due to incomplete parameter explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'List Linear team members with optional filtering by name.' It specifies the verb ('List'), resource ('Linear team members'), and scope ('optional filtering by name'), which is specific and actionable. However, it doesn't explicitly differentiate from sibling tools like 'list_teams' or 'list_issues', which would be needed for a score of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides minimal guidance: 'This tool is useful for finding member details including usernames, display names, and emails.' It implies usage for retrieving member information but lacks explicit when-to-use scenarios, prerequisites, or alternatives (e.g., when to use 'list_teams' instead). No exclusions or comparisons to sibling tools are mentioned, leaving gaps in usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsB

List Linear projects with optional filtering by team, name, and archive status. Shows project details including status, lead, progress, and dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
debugNo
fuzzyMatchNo
includeArchivedNo
includeThroughIssuesNo
limitNo
nameFilterNo
projectIdNo
stateNo
teamIdNo

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions 'optional filtering' and output details, but lacks critical behavioral traits like pagination (implied by 'limit' param but not described), rate limits, authentication requirements, or whether it's read-only. The description doesn't contradict annotations, but is insufficient for a mutation-free tool with 9 parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the core action and key features. Every word earns its place, with no redundancy or fluff, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 9 parameters with 0% schema coverage, no annotations, and no output schema, the description is incomplete. It covers basic purpose and some filtering but misses behavioral context, parameter details, and output format. For a list tool with many options, this leaves significant gaps for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It mentions filtering by 'team, name, and archive status', which partially covers 3 of 9 parameters (teamId, nameFilter, includeArchived), but omits details on others like 'state', 'limit', 'fuzzyMatch', 'debug', 'projectId', and 'includeThroughIssues'. The description adds some meaning but leaves most parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('List') and resource ('Linear projects'), and specifies optional filtering criteria (team, name, archive status) and output details (status, lead, progress, dates). It distinguishes from siblings like 'get_project' by indicating it lists multiple projects with filtering, though it doesn't explicitly contrast with 'list_issues' or 'list_teams'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving multiple projects with filtering, but doesn't explicitly state when to use this vs. alternatives like 'get_project' (for a single project) or other list tools. No guidance on prerequisites, exclusions, or specific scenarios is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_teamsA

List Linear teams with details about their members, projects, and issues. Use this to get a high-level view of all teams in your Linear workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
debugNoDebug mode to show extra diagnostics
includeMembersNoInclude sparse member listing for each team
includeProjectsNoInclude sparse project listing for each team
limitNoMaximum number of teams to return
nameFilterNoFilter teams by name (partial match)

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. While it mentions what data is included (members, projects, issues), it doesn't describe important behavioral aspects like whether this is a read-only operation, if it requires authentication, rate limits, pagination behavior (beyond the limit parameter), or what the output format looks like. For a list operation with no annotation coverage, this leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences that efficiently convey the tool's purpose and usage. Every word earns its place, with no redundant information. The structure is front-loaded with the core functionality followed by the usage context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there's no output schema and no annotations, the description should do more to explain what the tool returns and its behavioral characteristics. While it adequately describes the purpose and high-level usage, it lacks details about output format, error conditions, and operational constraints that would be important for an agent to use this tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so all parameters are documented in the schema. The description doesn't add any parameter-specific information beyond what's in the schema (like explaining how nameFilter works or when to use debug mode). With complete schema coverage, the baseline score of 3 is appropriate since the description doesn't enhance parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('List') and resource ('Linear teams'), specifies the scope ('with details about their members, projects, and issues'), and distinguishes this tool from siblings like list_issues and list_projects by focusing on teams as the primary entity. It provides a high-level view purpose that differentiates it from more specific sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool ('to get a high-level view of all teams'), which provides clear context. However, it doesn't specify when NOT to use it or mention alternatives among the sibling tools (like whether list_members or list_projects might be better for specific needs), so it falls short of the highest score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 8 tool updatesv1.0.0
    • First observedadd_comment
    • First observedcreate_issue
    • First observedget_issue
    • First observedget_project
    • First observedlist_issues
    • First observedlist_members
    • First observedlist_projects
    • First observedlist_teams

TDQS

A3.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose targeting specific resources and actions in Linear, such as adding comments, creating issues, getting issues/projects, and listing issues/members/projects/teams. There is no overlap or ambiguity between tools, making it easy for an agent to select the correct one based on the task.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., add_comment, create_issue, get_issue, list_issues), with verbs like 'add', 'create', 'get', and 'list' applied uniformly to appropriate nouns. There are no deviations or mixed conventions, ensuring predictable and readable naming throughout.

Tool Count5/5

With 8 tools, this server is well-scoped for managing Linear issues, projects, teams, and members. Each tool earns its place by covering essential operations like CRUD for issues and listing for resources, without being too sparse or bloated, making it efficient for typical workflows.

Completeness4/5

The tool set provides strong coverage for core Linear operations, including creating and retrieving issues, adding comments, and listing issues, members, projects, and teams. However, minor gaps exist, such as missing update or delete operations for issues and projects, which agents might need to work around for full lifecycle management.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol server that integrates with Linear, enabling AI assistants to create, update, search, and comment on issues for project management and issue tracking.
    5
    6
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides access to Linear's issue tracking system through a standardized Model Context Protocol interface, allowing users to create, update, search, and manage issues, projects, and comments via natural language.
    288
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/scoutos/mcp-linear'

If you have feedback or need assistance with the MCP directory API, please join our Discord server