{"id":18495,"library":"linear-mcp-server","title":"Linear MCP Server","description":"A Model Context Protocol (MCP) server for the Linear API, enabling LLMs to interact with Linear issues, teams, and users. Version 0.1.0 provides tools for creating, updating, searching issues, adding comments, and accessing resources via MCP. It requires a Linear API key and is installed as a client configuration for Claude Desktop. Key differentiators: direct MCP integration for AI agents, supports markdown descriptions, flexible issue search with filters, and resource URIs for context access.","status":"active","version":"0.1.0","language":"javascript","source_language":"en","source_url":"https://github.com/modelcontextprotocol/linear-server","tags":["javascript","linear","mcp","model context protocol","api","server"],"install":[{"cmd":"npm install linear-mcp-server","lang":"bash","label":"npm"},{"cmd":"yarn add linear-mcp-server","lang":"bash","label":"yarn"},{"cmd":"pnpm add linear-mcp-server","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Core MCP protocol implementation required for server functionality","package":"@modelcontextprotocol/sdk","optional":false},{"reason":"GraphQL client for Linear API interactions","package":"linear-client","optional":false}],"imports":[{"note":"Direct path to server module required; ESM-only since v0.1.0","wrong":"import { Server } from '@modelcontextprotocol/sdk'","symbol":"server","correct":"import { Server } from '@modelcontextprotocol/sdk/server/index.js'"},{"note":"Package is ESM-only in v0.1.0; no CJS support","wrong":"const LinearClient = require('linear-client')","symbol":"LinearClient","correct":"import { LinearClient } from 'linear-client'"},{"note":"Type import from SDK; path required for tree-shaking","wrong":"import { CallToolResult } from '@modelcontextprotocol/sdk'","symbol":"CallToolResult","correct":"import { CallToolResult } from '@modelcontextprotocol/sdk/types.js'"}],"quickstart":{"code":"import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { LinearClient } from 'linear-client';\nimport { CallToolRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema } from '@modelcontextprotocol/sdk/types.js';\n\nconst server = new Server({\n  name: 'linear-mcp-server',\n  version: '0.1.0',\n});\n\nconst linearClient = new LinearClient(process.env.LINEAR_API_KEY ?? '');\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n  const { name, arguments: args } = request.params;\n  try {\n    switch (name) {\n      case 'linear_create_issue': {\n        const issue = await linearClient.issue.create({\n          teamId: args.teamId,\n          title: args.title,\n          description: args.description,\n          priority: args.priority ?? 0,\n        });\n        return { content: [{ type: 'text', text: JSON.stringify(issue) }] };\n      }\n      case 'linear_search_issues': {\n        const issues = await linearClient.issues.search(args.query ?? '', { limit: args.limit ?? 10 });\n        return { content: [{ type: 'text', text: JSON.stringify(issues.nodes) }] };\n      }\n      default:\n        throw new Error(`Unknown tool: ${name}`);\n    }\n  } catch (error) {\n    return { isError: true, content: [{ type: 'text', text: error.message }] };\n  }\n});\n\nserver.setRequestHandler(ListResourcesRequestSchema, async () => ({\n  resources: [\n    { uri: 'linear-issue:///{issueId}', name: 'Linear Issue' },\n    { uri: 'linear-team:///{teamId}/issues', name: 'Team Issues' },\n  ],\n}));\n\nserver.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n  const uri = request.params.uri;\n  const match = uri.match(/linear-(issue|team):\\/\\/(.+)/);\n  if (!match) throw new Error(`Invalid resource URI: ${uri}`);\n  const [, type, id] = match;\n  if (type === 'issue') {\n    const issue = await linearClient.issue(id);\n    return { contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(issue) }] };\n  }\n  throw new Error('Resource not found');\n});\n\nconst transport = new StdioServerTransport();\nawait server.connect(transport);","lang":"typescript","description":"Show how to set up and run a Linear MCP server with Stdio transport, handling tool calls and resource reads."},"warnings":[{"fix":"Pin to exact version in package.json and monitor releases for breaking changes.","message":"The package is at v0.1.0; breaking changes can occur at any time without major version bump.","severity":"breaking","affected_versions":">=0.1.0 <1.0.0"},{"fix":"Check SDK documentation for updated import paths.","message":"Import paths may change as the MCP SDK evolves. Current paths are specific to version 0.1.0.","severity":"deprecated","affected_versions":"0.1.0"},{"fix":"Ensure LINEAR_API_KEY is set in Claude Desktop config or process environment.","message":"The LINEAR_API_KEY must be set in environment variables; using a placeholder will cause authentication failures.","severity":"gotcha","affected_versions":">=0.1.0"},{"fix":"Map MCP tool names to Linear SDK method names carefully.","message":"Tool names use snake_case (e.g., 'linear_create_issue') but the Linear SDK may use camelCase. Inconsistent naming can cause mismatches.","severity":"gotcha","affected_versions":">=0.1.0"}],"env_vars":null,"last_verified":"2026-04-25T00:00:00.000Z","next_check":"2026-07-24T00:00:00.000Z","problems":[{"fix":"Set the environment variable before running the server (e.g., export LINEAR_API_KEY=your_key or add to Claude config).","cause":"The required environment variable LINEAR_API_KEY is missing when the server starts.","error":"Error: LINEAR_API_KEY is not set"},{"fix":"Verify the team ID from Linear's settings (https://linear.app/YOUR-TEAM/settings/api) and ensure it's a valid UUID.","cause":"The teamId provided to linear_create_issue does not exist or is invalid.","error":"Error: Team not found"},{"fix":"Add null/undefined checks before accessing properties like .nodes on search results.","cause":"The result of a Linear API call might be undefined when no data is returned.","error":"Error: Cannot read properties of undefined (reading 'map')"},{"fix":"Ensure Node.js 16+ is installed (use node --version to check).","cause":"The MCP SDK's StdioServerTransport requires Node.js 16+; older versions may not support it fully.","error":"Error: Unsupported transport type"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}