{"type":"mcp_server","name":"linear-mcp","description":"**Concise Descriptions:**\n\n* **Model Context Protocol server for Linear. (38 chars)**\n* **Linear MCP server: Provides model context data. (46 chars)**\n* **Linear's Model Context Protocol (MCP) server.","category":"AI","language":"TypeScript","stars":30,"forks":9,"owner":"cosmix","github_url":"https://github.com/cosmix/linear-mcp","homepage":null,"setup":"## Setup\n\nThis section details how to install and configure the Linear MCP Server.\n\n### Prerequisites\n\n*   [Bun](https://bun.sh) runtime (v1.0.0 or higher)\n*   Linear account with API access\n\n### 1. Clone the Repository\n\nClone the repository to your local machine:\n\n```bash\ngit clone [repository-url]\ncd linear-mcp\n```\n\nReplace `[repository-url]` with the actual URL of the repository.\n\n### 2. Install Dependencies and Build\n\nInstall the necessary dependencies and build the project using Bun:\n\n```bash\nbun install\nbun run build\n```\n\n### 3. Configure Environment Variables\n\nThe server requires a Linear API key.  Set the `LINEAR_API_KEY` environment variable.  It is recommended to set this globally for your system, or within your shell's configuration file (e.g., `.bashrc`, `.zshrc`).  Alternatively, you can set it directly in the configuration file in the next step, but this is less secure.\n\n```bash\nexport LINEAR_API_KEY=your_api_key\n```\n\nReplace `your_api_key` with your actual Linear API token.\n\n### 4. Configure the MCP Server\n\nEdit the appropriate configuration file based on your operating system and the MCP client you are using:\n\n**macOS:**\n\n*   Cline: `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`\n*   Claude Desktop: `~/Library/Application Support/Claude/claude_desktop_config.json`\n\n**Windows:**\n\n*   Cline: `%APPDATA%\\Code\\User\\globalStorage\\saoudrizwan.claude-dev\\settings\\cline_mcp_settings.json`\n*   Claude Desktop: `%APPDATA%\\Claude Desktop\\claude_desktop_config.json`\n\n**Linux:**\n\n*   Cline: `~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`\n*   Claude Desktop: _(Currently not supported)_\n\nAdd the following configuration under the `mcpServers` object.  **Important:** Replace `/absolute/path/to/linear-mcp/build/index.js` with the *actual* absolute path to the `index.js` file in your `build` directory.\n\n```json\n{\n  \"mcpServers\": {\n    \"linear\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/linear-mcp/build/index.js\"],\n      \"env\": {\n        \"LINEAR_API_KEY\": \"your_api_key\"  //Consider removing this if LINEAR_API_KEY is set globally\n      }\n    }\n  }\n}\n```\n\n**Note:** If you have already set the `LINEAR_API_KEY` environment variable globally, you can omit the `env` section in the configuration file.  This is generally the preferred approach for security reasons.\n\n### 5. Restart the MCP Server\n\nRestart the MCP server within your client.\n\n*   **Cline:** Restart the MCP server within Cline's MCP settings.\n*   **Claude Desktop:** Restart Claude Desktop to load the new MCP server configuration.","tools":"## Available Tools\n\nThis Linear MCP server provides the following tools for interacting with Linear's issue tracking system:\n\n*   **`create_issue`**: Creates a new Linear issue or subissue.\n\n    *   **Functionality:** Allows creating new issues within a specified team, optionally as a subissue of an existing issue. Supports setting the title, description, status, priority, assignee, and labels.\n    *   **Input Schema:**\n        ```json\n        {\n          \"teamId\": \"string\",\n          \"title\": \"string\",\n          \"description\": \"string\",\n          \"parentId\": \"string\",\n          \"status\": \"string\",\n          \"priority\": \"number\",\n          \"assigneeId\": \"string | 'me'\",\n          \"labelIds\": [\"string\"]\n        }\n        ```\n    *   **Example:**\n        ```json\n        {\n          \"teamId\": \"TEAM-123\",\n          \"title\": \"Fix critical bug\",\n          \"description\": \"Users are unable to login.\",\n          \"status\": \"To Do\",\n          \"priority\": 1,\n          \"assigneeId\": \"me\",\n          \"labelIds\": [\"bug\", \"urgent\"]\n        }\n        ```\n\n*   **`update_issue`**: Updates an existing Linear issue.\n\n    *   **Functionality:** Modifies the fields of an existing issue, including title, description, status, priority, assignee, labels, and cycle.  The `status` field expects the status *name* (e.g., \"In Progress\"), not the ID. The `priority` field expects a number from 0 (None) to 4 (Low).\n    *   **Input Schema:**\n        ```json\n        {\n          \"issueId\": \"string\",\n          \"title\": \"string\",\n          \"description\": \"string\",\n          \"status\": \"string\",\n          \"priority\": \"number\",\n          \"assigneeId\": \"string | 'me'\",\n          \"labelIds\": [\"string\"],\n          \"cycleId\": \"string\"\n        }\n        ```\n    *   **Example:**\n        ```json\n        {\n          \"issueId\": \"ISSUE-456\",\n          \"status\": \"In Progress\",\n          \"priority\": 2,\n          \"assigneeId\": \"USER-789\"\n        }\n        ```\n\n*   **`get_issue`**: Retrieves detailed information about a specific Linear issue.\n\n    *   **Functionality:** Fetches issue details by ID, with the option to include related entities (e.g., comments, attachments).\n    *   **Input Schema:**\n        ```json\n        {\n          \"issueId\": \"string\",\n          \"includeRelationships\": \"boolean\"\n        }\n        ```\n    *   **Example:**\n        ```json\n        {\n          \"issueId\": \"ISSUE-123\",\n          \"includeRelationships\": true\n        }\n        ```\n\n*   **`search_issues`**: Searches for Linear issues using a query string and advanced filters.\n\n    *   **Functionality:** Enables searching for issues based on various criteria, including text queries, field-based filters, and logical operators. Leverages Linear's powerful filtering capabilities.\n    *   **Input Schema:**\n        ```json\n        {\n          \"query\": \"string\",\n          \"includeRelationships\": \"boolean\",\n          \"filter\": {\n            \"title\": { \"contains\": \"string\", \"eq\": \"string\" },\n            \"description\": { \"contains\": \"string\" },\n            \"priority\": { \"gte\": \"number\", \"lt\": \"number\" },\n            \"estimate\": { \"eq\": \"number\", \"in\": [\"number\"] },\n            \"dueDate\": { \"lt\": \"string\", \"gt\": \"string\" },\n            \"createdAt\": { \"gt\": \"P2W\", \"lt\": \"2024-01-01\" },\n            \"updatedAt\": { \"gt\": \"P1M\" },\n            \"completedAt\": { \"null\": true },\n            \"assignee\": { \"id\": { \"eq\": \"string\" }, \"name\": { \"contains\": \"string\" } },\n            \"creator\": { \"id\": { \"eq\": \"string\" }, \"name\": { \"contains\": \"string\" } },\n            \"team\": { \"id\": { \"eq\": \"string\" }, \"key\": { \"eq\": \"string\" } },\n            \"state\": { \"type\": { \"eq\": \"started\" }, \"name\": { \"eq\": \"string\" } },\n            \"labels\": { \"name\": { \"in\": [\"string\"] }, \"every\": { \"name\": { \"eq\": \"string\" } } },\n            \"project\": { \"id\": { \"eq\": \"string\" }, \"name\": { \"contains\": \"string\" } },\n            \"and\": [{ /* filters */ }],\n            \"or\": [{ /* filters */ }],\n            \"assignedTo\": \"string | 'me'\",\n            \"createdBy\": \"string | 'me'\"\n          },\n          \"projectId\": \"string\",\n          \"projectName\": \"string\"\n        }\n        ```\n    *   **Example:**\n        ```json\n        {\n          \"query\": \"performance\",\n          \"filter\": {\n            \"priority\": { \"gte\": 2 },\n            \"status\": { \"eq\": \"In Progress\" }\n          }\n        }\n        ```\n\n*   **`get_teams`**: Retrieves a list of Linear teams.\n\n    *   **Functionality:** Returns a list of teams, optionally filtered by name.\n    *   **Input Schema:**\n        ```json\n        {\n          \"nameFilter\": \"string\"\n        }\n        ```\n    *   **Example:**\n        ```json\n        {\n          \"nameFilter\": \"Frontend\"\n        }\n        ```\n\n*   **`delete_issue`**: Deletes an existing Linear issue.\n\n    *   **Functionality:** Removes an issue from Linear.\n    *   **Input Schema:**\n        ```json\n        {\n          \"issueId\": \"string\"\n        }\n        ```\n    *   **Example:**\n        ```json\n        {\n          \"issueId\": \"ISSUE-789\"\n        }\n        ```\n\n*   **`create_comment`**: Creates a new comment on a Linear issue.\n\n    *   **Functionality:** Adds a comment to a specified issue. Supports markdown formatting in the comment body.\n    *   **Input Schema:**\n        ```json\n        {\n          \"issueId\": \"string\",\n          \"body\": \"string\"\n        }\n        ```\n    *   **Example:**\n        ```json\n        {\n          \"issueId\": \"ISSUE-123\",\n          \"body\": \"This issue requires further investigation.  See [internal documentation](https://example.com).\"\n        }\n        ```\n\n*   **`get_projects`**: Retrieves a list of Linear projects.\n\n    *   **Functionality:** Returns a list of projects, optionally filtered by name and supporting pagination.\n    *   **Input Schema:**\n        ```json\n        {\n          \"nameFilter\": \"string\",\n          \"includeArchived\": \"boolean\",\n          \"first\": \"number\",\n          \"after\": \"string\"\n        }\n        ```\n    *   **Example:**\n        ```json\n        {\n          \"nameFilter\": \"Website\",\n          \"includeArchived\": false,\n          \"first\": 10\n        }\n        ```\n\n*   **`get_project_updates`**: Retrieves project updates for a given project.\n\n    *   **Functionality:** Fetches updates for a specific project, with filtering options for archived status, creation date, user, and health status.\n    *   **Input Schema:**\n        ```json\n        {\n          \"projectId\": \"string\",\n          \"includeArchived\": \"boolean\",\n          \"first\": \"number\",\n          \"after\": \"string\",\n          \"createdAfter\": \"string\",\n          \"createdBefore\": \"string\",\n          \"userId\": \"string | 'me'\",\n          \"health\": \"string\"\n        }\n        ```\n    *   **Example:**\n        ```json\n        {\n          \"projectId\": \"PROJECT-456\",\n          \"createdAfter\": \"2024-01-01\",\n          \"health\": \"onTrack\"\n        }\n        ```\n\n*   **`create_project_update`**: Creates a new update for a Linear project.\n\n    *   **Functionality:** Adds a new update to a project, including a body, health status, and an option to hide the diff.\n    *   **Input Schema:**\n        ```json\n        {\n          \"projectId\": \"string\",\n          \"body\": \"string\",\n          \"health\": \"onTrack | atRisk | offTrack\",\n          \"isDiffHidden\": \"boolean\"\n        }\n        ```\n    *   **Example:**\n        ```json\n        {\n          \"projectId\": \"PROJECT-123\",\n          \"body\": \"Progress is on track.  All major milestones have been completed.\",\n          \"health\": \"on","faq":null,"created_at":"2025-01-24T09:43:11+00:00","updated_at":"2025-06-25T05:33:26+00:00","source_url":"https://model-context-protocol.com/servers/linear-mcp","related_articles":[]}