{"_id":"@daht-mad/linear-mcp-plus","_rev":"4-1b294b11d076e50a63c27aed7547a17e","name":"@daht-mad/linear-mcp-plus","dist-tags":{"latest":"1.0.16"},"versions":{"1.0.12":{"name":"@daht-mad/linear-mcp-plus","version":"1.0.12","keywords":["mcp","linear","cursor","claude","ai","model-context-protocol","project-management","smithery"],"author":{"name":"Alexey Elizarov","email":"alex.elizarov1@gmail.com"},"license":"MIT","_id":"@daht-mad/linear-mcp-plus@1.0.12","maintainers":[{"name":"daht-mad","email":"daht.mad.ai@gmail.com"}],"homepage":"https://github.com/tacticlaunch/mcp-linear#readme","bugs":{"url":"https://github.com/tacticlaunch/mcp-linear/issues"},"bin":{"mcp-linear":"dist/index.js"},"dist":{"shasum":"7948bd6f7280a969e0582fb54cd3631d86c579d3","tarball":"https://registry.npmjs.org/@daht-mad/linear-mcp-plus/-/linear-mcp-plus-1.0.12.tgz","fileCount":65,"integrity":"sha512-a6YYGsppbEfFzVhL/McRV+L98DFAjIjpEIY23vlpe1WD/K6bz748TwXSVM3w6JAXjjGchnaZKAapgP+C7xt6OQ==","signatures":[{"sig":"MEQCICwQviK1pJ/YpffJqdvCZxokKFa5VtCjWZjCrRD9OpSQAiBJZMqY0vv4lOriH7cEuZC311AQkJbki8zpP/Ss2bU8Fw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1094063},"main":"dist/index.js","type":"module","engines":{"node":">=20.0.0"},"gitHead":"73841bbda1a7a05f34a68d68ca01e6cc5c56842c","scripts":{"dev":"nodemon --exec node --loader ts-node/esm src/index.ts","lint":"eslint . --ext .ts","test":"jest --passWithNoTests","build":"tsc","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\"","inspect":"npx @modelcontextprotocol/inspector node dist/index.js","prepare":"npm run build","test:watch":"jest --watch","postinstall":"node -e \"try { require('fs').chmodSync('./dist/index.js', '755') } catch (e) {}\""},"_npmUser":{"name":"daht-mad","email":"daht.mad.ai@gmail.com"},"smithery":{"name":"linear","tools":["linear_getViewer","linear_getOrganization","linear_getUsers","linear_getLabels","linear_getTeams","linear_getProjects","linear_createProject","linear_getIssues","linear_getIssueById","linear_searchIssues","linear_createIssue","linear_updateIssue","linear_createComment","linear_addIssueLabel","linear_removeIssueLabel"],"description":"Interact with Linear project management through AI assistants","displayName":"Linear"},"repository":{"url":"git+https://github.com/tacticlaunch/mcp-linear.git","type":"git"},"_npmVersion":"11.6.2","description":"A Model Context Protocol (MCP) server implementation for the Linear GraphQL API that enables AI assistants to interact with Linear project management systems.","directories":{"doc":"docs"},"_nodeVersion":"25.2.1","dependencies":{"zod":"^3.24.2","cors":"^2.8.5","yargs":"^17.7.2","dotenv":"^16.4.7","helmet":"^8.0.0","express":"^4.21.2","graphql":"^16.10.0","@linear/sdk":"^38.0.0","@types/cors":"^2.8.17","@types/express":"^5.0.0","graphql-request":"^7.1.2","@modelcontextprotocol/sdk":"^1.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.21.0","nodemon":"^3.1.9","ts-jest":"^29.2.6","ts-node":"^10.9.2","prettier":"^3.5.2","typescript":"^5.7.3","@types/jest":"^29.5.14","@types/node":"^22.13.5","@types/yargs":"^17.0.33","eslint-config-prettier":"^10.0.2"},"_npmOperationalInternal":{"tmp":"tmp/linear-mcp-plus_1.0.12_1770148547861_0.1524950432207599","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"@daht-mad/linear-mcp-plus","version":"1.0.13","keywords":["mcp","linear","cursor","claude","ai","model-context-protocol","project-management","smithery"],"author":{"name":"Alexey Elizarov","email":"alex.elizarov1@gmail.com"},"license":"MIT","_id":"@daht-mad/linear-mcp-plus@1.0.13","maintainers":[{"name":"daht-mad","email":"daht.mad.ai@gmail.com"}],"homepage":"https://github.com/tacticlaunch/mcp-linear#readme","bugs":{"url":"https://github.com/tacticlaunch/mcp-linear/issues"},"bin":{"mcp-linear":"dist/index.js"},"dist":{"shasum":"c7b810d2e5b61c5de4a002c653336ce951296233","tarball":"https://registry.npmjs.org/@daht-mad/linear-mcp-plus/-/linear-mcp-plus-1.0.13.tgz","fileCount":65,"integrity":"sha512-95dDTeHFd/z1UKQD5/ApzHkaDSL7T6BAd8CUdFCDIh9p/N0xnN9ZQd/tfK/zZ1xok1H7lB3NrWCWFHDLaMl3Hw==","signatures":[{"sig":"MEQCIF4u9MKsjrXvwjADTN6CpjJ9oiGuT+4viyOTAVVJxUQ6AiAZ5EeSpeMWRsmN8N4EsuEZguwKPQyQioojghi0Qw9EeA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1098685},"main":"dist/index.js","type":"module","engines":{"node":">=20.0.0"},"gitHead":"896ab3b8f2bc20b627d3ac3803202c7fe2d52aec","scripts":{"dev":"nodemon --exec node --loader ts-node/esm src/index.ts","lint":"eslint . --ext .ts","test":"jest --passWithNoTests","build":"tsc","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\"","inspect":"npx @modelcontextprotocol/inspector node dist/index.js","prepare":"npm run build","test:watch":"jest --watch","postinstall":"node -e \"try { require('fs').chmodSync('./dist/index.js', '755') } catch (e) {}\""},"_npmUser":{"name":"daht-mad","email":"daht.mad.ai@gmail.com"},"smithery":{"name":"linear","tools":["linear_getViewer","linear_getOrganization","linear_getUsers","linear_getLabels","linear_getTeams","linear_getProjects","linear_createProject","linear_getIssues","linear_getIssueById","linear_searchIssues","linear_createIssue","linear_updateIssue","linear_createComment","linear_addIssueLabel","linear_removeIssueLabel"],"description":"Interact with Linear project management through AI assistants","displayName":"Linear"},"repository":{"url":"git+https://github.com/tacticlaunch/mcp-linear.git","type":"git"},"_npmVersion":"11.6.2","description":"A Model Context Protocol (MCP) server implementation for the Linear GraphQL API that enables AI assistants to interact with Linear project management systems.","directories":{"doc":"docs"},"_nodeVersion":"25.2.1","dependencies":{"zod":"^3.24.2","cors":"^2.8.5","yargs":"^17.7.2","dotenv":"^16.4.7","helmet":"^8.0.0","express":"^4.21.2","graphql":"^16.10.0","@linear/sdk":"^38.0.0","@types/cors":"^2.8.17","@types/express":"^5.0.0","graphql-request":"^7.1.2","@modelcontextprotocol/sdk":"^1.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.21.0","nodemon":"^3.1.9","ts-jest":"^29.2.6","ts-node":"^10.9.2","prettier":"^3.5.2","typescript":"^5.7.3","@types/jest":"^29.5.14","@types/node":"^22.13.5","@types/yargs":"^17.0.33","eslint-config-prettier":"^10.0.2"},"_npmOperationalInternal":{"tmp":"tmp/linear-mcp-plus_1.0.13_1770150413184_0.31758061794486436","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"@daht-mad/linear-mcp-plus","version":"1.0.15","keywords":["mcp","linear","cursor","claude","ai","model-context-protocol","project-management","smithery"],"author":{"name":"Alexey Elizarov","email":"alex.elizarov1@gmail.com"},"license":"MIT","_id":"@daht-mad/linear-mcp-plus@1.0.15","maintainers":[{"name":"daht-mad","email":"daht.mad.ai@gmail.com"}],"homepage":"https://github.com/tacticlaunch/mcp-linear#readme","bugs":{"url":"https://github.com/tacticlaunch/mcp-linear/issues"},"bin":{"mcp-linear":"dist/index.js"},"dist":{"shasum":"59186a5bb868206d27406c609f0000540315ad7d","tarball":"https://registry.npmjs.org/@daht-mad/linear-mcp-plus/-/linear-mcp-plus-1.0.15.tgz","fileCount":65,"integrity":"sha512-bEh12yFnlP4vcAcLcYpeX9hx2NI7CRdePn3KXmEycPU0FucD6iaspcQaMJMl/ow1NDeueEOxIqTrg4xR/II5BA==","signatures":[{"sig":"MEUCIEtZIzTFnkt6A08DLDchzHQxuuXc9fT7s1lfUhVGl8EbAiEAuFMaAI2anV54Ahf5SqR11F5CkzH0BQKxrIoXMvfb1nU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1098909},"main":"dist/index.js","type":"module","engines":{"node":">=20.0.0"},"gitHead":"fda2ea9e920f08f774ace58b9f106e8682315c06","scripts":{"dev":"nodemon --exec node --loader ts-node/esm src/index.ts","lint":"eslint . --ext .ts","test":"jest --passWithNoTests","build":"tsc","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\"","inspect":"npx @modelcontextprotocol/inspector node dist/index.js","prepare":"npm run build","test:watch":"jest --watch","postinstall":"node -e \"try { require('fs').chmodSync('./dist/index.js', '755') } catch (e) {}\""},"_npmUser":{"name":"daht-mad","email":"daht.mad.ai@gmail.com"},"smithery":{"name":"linear","tools":["linear_getViewer","linear_getOrganization","linear_getUsers","linear_getLabels","linear_getTeams","linear_getProjects","linear_createProject","linear_getIssues","linear_getIssueById","linear_searchIssues","linear_createIssue","linear_updateIssue","linear_createComment","linear_addIssueLabel","linear_removeIssueLabel"],"description":"Interact with Linear project management through AI assistants","displayName":"Linear"},"repository":{"url":"git+https://github.com/tacticlaunch/mcp-linear.git","type":"git"},"_npmVersion":"11.6.2","description":"A Model Context Protocol (MCP) server implementation for the Linear GraphQL API that enables AI assistants to interact with Linear project management systems.","directories":{"doc":"docs"},"_nodeVersion":"25.2.1","dependencies":{"zod":"^3.24.2","cors":"^2.8.5","yargs":"^17.7.2","dotenv":"^16.4.7","helmet":"^8.0.0","express":"^4.21.2","graphql":"^16.10.0","@linear/sdk":"^38.0.0","@types/cors":"^2.8.17","@types/express":"^5.0.0","graphql-request":"^7.1.2","@modelcontextprotocol/sdk":"^1.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.21.0","nodemon":"^3.1.9","ts-jest":"^29.2.6","ts-node":"^10.9.2","prettier":"^3.5.2","typescript":"^5.7.3","@types/jest":"^29.5.14","@types/node":"^22.13.5","@types/yargs":"^17.0.33","eslint-config-prettier":"^10.0.2"},"_npmOperationalInternal":{"tmp":"tmp/linear-mcp-plus_1.0.15_1770152933385_0.9445653979178066","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"@daht-mad/linear-mcp-plus","version":"1.0.16","description":"A Model Context Protocol (MCP) server implementation for the Linear GraphQL API that enables AI assistants to interact with Linear project management systems.","main":"dist/index.js","type":"module","bin":{"mcp-linear":"dist/index.js"},"directories":{"doc":"docs"},"scripts":{"start":"node dist/index.js","inspect":"npx @modelcontextprotocol/inspector node dist/index.js","dev":"nodemon --exec node --loader ts-node/esm src/index.ts","build":"tsc","lint":"eslint . --ext .ts","format":"prettier --write \"src/**/*.ts\"","test":"jest --passWithNoTests","test:watch":"jest --watch","prepare":"npm run build","postinstall":"node -e \"try { require('fs').chmodSync('./dist/index.js', '755') } catch (e) {}\""},"smithery":{"name":"linear","displayName":"Linear","description":"Interact with Linear project management through AI assistants","tools":["linear_getViewer","linear_getOrganization","linear_getUsers","linear_getLabels","linear_getTeams","linear_getProjects","linear_createProject","linear_getIssues","linear_getIssueById","linear_searchIssues","linear_createIssue","linear_updateIssue","linear_createComment","linear_addIssueLabel","linear_removeIssueLabel"]},"keywords":["mcp","linear","cursor","claude","ai","model-context-protocol","project-management","smithery"],"author":{"name":"Alexey Elizarov","email":"alex.elizarov1@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/tacticlaunch/mcp-linear.git"},"dependencies":{"@linear/sdk":"^38.0.0","@modelcontextprotocol/sdk":"^1.6.0","@types/cors":"^2.8.17","@types/express":"^5.0.0","cors":"^2.8.5","dotenv":"^16.4.7","express":"^4.21.2","graphql":"^16.10.0","graphql-request":"^7.1.2","helmet":"^8.0.0","yargs":"^17.7.2","zod":"^3.24.2"},"devDependencies":{"@types/jest":"^29.5.14","@types/node":"^22.13.5","@types/yargs":"^17.0.33","eslint":"^9.21.0","eslint-config-prettier":"^10.0.2","jest":"^29.7.0","nodemon":"^3.1.9","prettier":"^3.5.2","ts-jest":"^29.2.6","ts-node":"^10.9.2","typescript":"^5.7.3"},"engines":{"node":">=20.0.0"},"publishConfig":{"access":"public"},"gitHead":"723fa37130cc71c06eb0590c1586c98805914d5a","_id":"@daht-mad/linear-mcp-plus@1.0.16","bugs":{"url":"https://github.com/tacticlaunch/mcp-linear/issues"},"homepage":"https://github.com/tacticlaunch/mcp-linear#readme","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-9NsrWnbATUgITOc2PD/pz767hXVyPV7Sz8rf9xOq5bRuCupodsLDNkxdwATb28+DBmjIihjJZioTw9RbKmyH2g==","shasum":"abe9eb7b7d3d370745fc07f6ea97604d6ab6f590","tarball":"https://registry.npmjs.org/@daht-mad/linear-mcp-plus/-/linear-mcp-plus-1.0.16.tgz","fileCount":66,"unpackedSize":1110079,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBCxAtVkf9WDU1pQxe0dzGkrPtYRE233JgGTIrcCHE5ZAiA8K2ej2tWKYTXuqw+LmNG7au7gJ3CxMPNr9kyXZqIuaw=="}]},"_npmUser":{"name":"daht-mad","email":"daht.mad.ai@gmail.com"},"maintainers":[{"name":"daht-mad","email":"daht.mad.ai@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/linear-mcp-plus_1.0.16_1770173302723_0.20417659692270274"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-03T19:55:47.582Z","modified":"2026-02-04T02:48:23.037Z","1.0.12":"2026-02-03T19:55:48.022Z","1.0.13":"2026-02-03T20:26:53.386Z","1.0.15":"2026-02-03T21:08:53.594Z","1.0.16":"2026-02-04T02:48:22.902Z"},"bugs":{"url":"https://github.com/tacticlaunch/mcp-linear/issues"},"author":{"name":"Alexey Elizarov","email":"alex.elizarov1@gmail.com"},"license":"MIT","homepage":"https://github.com/tacticlaunch/mcp-linear#readme","keywords":["mcp","linear","cursor","claude","ai","model-context-protocol","project-management","smithery"],"repository":{"type":"git","url":"git+https://github.com/tacticlaunch/mcp-linear.git"},"description":"A Model Context Protocol (MCP) server implementation for the Linear GraphQL API that enables AI assistants to interact with Linear project management systems.","maintainers":[{"name":"daht-mad","email":"daht.mad.ai@gmail.com"}],"readme":"# Linear MCP Plus\n\n> Enhanced fork of [@tacticlaunch/mcp-linear](https://github.com/tacticlaunch/mcp-linear) with bug fixes and additional tools.\n\nA Model Context Protocol (MCP) server for the Linear GraphQL API that enables AI assistants to interact with Linear project management systems.\n\n---\n\n## Quick Start\n\n### 1. Get Your Linear API Token\n\n1. Log in to [linear.app](https://linear.app)\n2. Click organization avatar (top-left) → **Settings**\n3. Navigate to **Security & access** → **Personal API Keys**\n4. Click **New API Key**, name it, and copy the token\n\n### 2. Add to Your MCP Config\n\nEdit `~/.mcp.json` (create if it doesn't exist):\n\n```json\n{\n  \"mcpServers\": {\n    \"linear\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@daht-mad/linear-mcp-plus\"],\n      \"env\": {\n        \"LINEAR_API_TOKEN\": \"lin_api_xxxxxxxxxx\"\n      }\n    }\n  }\n}\n```\n\n### 3. Restart Your AI Client\n\nRestart Claude Code, Cursor, or your MCP-compatible client. Done!\n\n```text\n\"Show me my Linear issues\"\n\"Create an issue titled 'Fix bug' in the Frontend team\"\n```\n\n> **Where to store the token?**\n> Always store your token in the `env` section of `.mcp.json`, not in `.zshrc` or `.bashrc`.\n> This keeps tokens scoped to MCP servers and avoids exposing them to all terminal sessions.\n\n---\n\n## Why This Fork Exists\n\n### The Problem\n\nWhile using the original `@tacticlaunch/mcp-linear` with Claude Code for daily project management, I encountered two significant limitations:\n\n**1. The State Bug**\n\nWhen fetching issues via `linear_getIssueById` or `linear_getIssues`, the `state` field always returned an empty object `{}` instead of the actual workflow state data. This meant my AI assistant couldn't tell me whether an issue was \"Todo\", \"In Progress\", or \"Done\" — a pretty fundamental piece of information for project management.\n\n```typescript\n// What I got:\n{ id: \"ABC-123\", title: \"Fix bug\", state: {} }\n\n// What I needed:\n{ id: \"ABC-123\", title: \"Fix bug\", state: { id: \"...\", name: \"In Progress\", type: \"started\" } }\n```\n\nThe root cause was that the Linear SDK uses promise-based relationships for related objects. The `state` field needs to be awaited before accessing its properties, but two methods in the original codebase missed this pattern (while `searchIssues` handled it correctly).\n\n**2. Missing Tools for My Workflow**\n\nI had custom Python and JavaScript scripts for:\n- Creating **project updates** (weekly/sprint status reports with health indicators)\n- Creating **initiative updates** (similar to project updates, but at a higher level)\n- Creating **documents** directly in Linear projects\n- Batch-updating **project leads** across multiple projects\n\nThese scripts worked, but I wanted everything unified in the MCP so my AI assistant could handle it all without switching contexts.\n\n### The Solution\n\nInstead of maintaining separate scripts, I forked the original MCP and:\n\n1. **Fixed the state bug** by applying the correct async/await pattern to `getIssues()` and `getIssueById()` methods\n2. **Added 4 new tools** that cover the missing functionality\n3. **Published as a separate package** so others facing similar issues can benefit\n\n---\n\n## What's New in This Fork\n\n### Bug Fixes\n\n| Issue | Fix |\n|-------|-----|\n| `state` field returns `{}` | Now properly awaits the promise and returns `{ id, name, color, type }` |\n\n### New Tools\n\n| Tool | Description |\n|------|-------------|\n| `linear_projectUpdateCreate` | Create project updates with health status (onTrack, atRisk, offTrack) |\n| `linear_initiativeUpdateCreate` | Create initiative updates with health status |\n| `linear_documentCreate` | Create documents in Linear (optionally linked to a project) |\n| `linear_updateProjectLead` | Assign or remove a project lead |\n\n---\n\n## Installation Options\n\n### Prerequisites\n\n- Node.js >= 20.0.0\n- Linear API Token (see [Quick Start](#quick-start) above)\n\n### Project-Specific Installation\n\nIf you need different Linear workspaces per project, create `.mcp.json` in your project root:\n\n```json\n{\n  \"mcpServers\": {\n    \"linear\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@daht-mad/linear-mcp-plus\"],\n      \"env\": {\n        \"LINEAR_API_TOKEN\": \"<YOUR_PROJECT_SPECIFIC_TOKEN>\"\n      }\n    }\n  }\n}\n```\n\n### Local Development Build\n\n```bash\ngit clone https://github.com/daht-mad/linear-mcp-plus.git\ncd linear-mcp-plus\nnpm install\nnpm run build\n```\n\nThen add to your `~/.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"linear\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/linear-mcp-plus/dist/index.js\"],\n      \"env\": {\n        \"LINEAR_API_TOKEN\": \"<YOUR_TOKEN>\"\n      }\n    }\n  }\n}\n```\n\n### Client-Specific Config Locations\n\n| Client | Global Config Path |\n|--------|---------------------------------------------------------------------|\n| **Claude Code** | `~/.mcp.json` |\n| **Cursor** | `~/.cursor/mcp.json` |\n| **Claude Desktop** | `~/Library/Application Support/Claude/claude_desktop_config.json` |\n\n---\n\n## Available Tools\n\n### Issues\n\n| Tool | Description |\n|------|-------------|\n| `linear_getIssues` | Get recent issues |\n| `linear_getIssueById` | Get issue by ID or identifier (e.g., `ABC-123`) |\n| `linear_searchIssues` | Search issues with filters |\n| `linear_createIssue` | Create a new issue |\n| `linear_updateIssue` | Update an existing issue |\n| `linear_archiveIssue` | Archive an issue |\n| `linear_assignIssue` | Assign issue to a user |\n| `linear_setIssuePriority` | Set issue priority |\n| `linear_addIssueLabel` | Add label to issue |\n| `linear_removeIssueLabel` | Remove label from issue |\n| `linear_createComment` | Add comment to issue |\n| `linear_getComments` | Get issue comments |\n| `linear_getIssueHistory` | Get issue change history |\n| `linear_createIssueRelation` | Create relation between issues |\n| `linear_convertIssueToSubtask` | Convert issue to subtask |\n| `linear_subscribeToIssue` | Subscribe to issue updates |\n| `linear_transferIssue` | Transfer issue to another team |\n| `linear_duplicateIssue` | Duplicate an issue |\n| `linear_addIssueToCycle` | Add issue to a cycle |\n\n### Projects\n\n| Tool | Description |\n|------|-------------|\n| `linear_getProjects` | Get all projects |\n| `linear_getProjectIssues` | Get issues in a project |\n| `linear_createProject` | Create a new project |\n| `linear_updateProject` | Update project details |\n| `linear_addIssueToProject` | Add issue to project |\n| `linear_projectUpdateCreate` | **NEW** - Create project update with health status |\n| `linear_updateProjectLead` | **NEW** - Assign/remove project lead |\n\n### Initiatives\n\n| Tool | Description |\n|------|-------------|\n| `linear_getInitiatives` | Get all initiatives |\n| `linear_getInitiativeById` | Get initiative by ID |\n| `linear_createInitiative` | Create a new initiative |\n| `linear_updateInitiative` | Update initiative details |\n| `linear_archiveInitiative` | Archive an initiative |\n| `linear_deleteInitiative` | Delete an initiative |\n| `linear_getInitiativeProjects` | Get projects in an initiative |\n| `linear_addProjectToInitiative` | Add project to initiative |\n| `linear_removeProjectFromInitiative` | Remove project from initiative |\n| `linear_initiativeUpdateCreate` | **NEW** - Create initiative update with health status |\n\n### Documents\n\n| Tool | Description |\n|------|-------------|\n| `linear_documentCreate` | **NEW** - Create a document (optionally linked to project) |\n\n### Organization\n\n| Tool | Description |\n|------|-------------|\n| `linear_getViewer` | Get current authenticated user |\n| `linear_getOrganization` | Get organization info |\n| `linear_getUsers` | Get all users |\n| `linear_getTeams` | Get all teams |\n| `linear_getLabels` | Get all labels |\n| `linear_getWorkflowStates` | Get workflow states for a team |\n| `linear_getCycles` | Get all cycles |\n| `linear_getActiveCycle` | Get active cycle for a team |\n\n---\n\n## Example Prompts\n\n```\n\"Show me all my Linear issues\"\n\"What's the status of issue FE-123?\"\n\"Create a new issue titled 'Fix login bug' in the Frontend team\"\n\"Add a project update: 'Sprint 5 completed, all features shipped' with health onTrack\"\n\"Create a document titled 'API Design' in the Backend project\"\n\"Assign Alice as the lead for the Mobile App project\"\n\"Create an initiative update for Q1 Goals: 'On track to hit 80% completion'\"\n```\n\n---\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Build\nnpm run build\n\n# Run locally\nnode dist/index.js\n```\n\n---\n\n## Technical Notes\n\n### The State Bug Fix\n\nThe Linear SDK uses lazy-loaded promise-based relationships. When you access `issue.state`, you get a Promise, not the actual state object. The fix:\n\n```typescript\n// Before (buggy):\nreturn { state: issue.state }  // Returns {}\n\n// After (fixed):\nconst stateData = issue.state ? await issue.state : null;\nreturn {\n  state: stateData ? {\n    id: stateData.id,\n    name: stateData.name,\n    color: stateData.color,\n    type: stateData.type,\n  } : null\n}\n```\n\n### New Tools Implementation\n\nThe 4 new tools follow the existing codebase patterns:\n- Tool definitions in `src/tools/definitions/`\n- Type guards in `src/tools/type-guards.ts`\n- Handlers in `src/tools/handlers/`\n- Service methods in `src/services/linear-service.ts`\n\nFor `initiativeUpdateCreate` and `documentCreate`, I used GraphQL `rawRequest` since the Linear SDK doesn't expose these mutations directly.\n\n---\n\n## Credits\n\nThis project is a fork of [@tacticlaunch/mcp-linear](https://github.com/tacticlaunch/mcp-linear).\n\nThanks to the original authors for the excellent foundation.\n\n---\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n","readmeFilename":"README.md"}