Teams, labels and users are read surfaces with no write tool behind them, which puts a hard floor under what a mistaken call can do. Moving an issue through its workflow goes through linear_updateIssue's stateId, and no tool in the set lists a team's workflow states, so that id has to come from somewhere else. Label work is per issue rather than per set — add and remove take one issueId and one labelId at a time.
A Linear client covering 15 tools over issues, projects, teams, labels and users.
- Issue reads by recency, by identifier or by filter: linear_getIssues for recent ones under a limit, linear_getIssueById by id or identifier such as ABC-123, and linear_searchIssues filtered by query, teamId, projectId, assigneeId and states.
- Issue writes: linear_createIssue with title, description, priority, team, project and assignee, and linear_updateIssue, which additionally takes stateId.
- linear_createComment, which adds a comment to an issue by id.
- Labels moved per issue through linear_addIssueLabel and linear_removeIssueLabel, with linear_getLabels listing what the workspace has.
- Workspace context: linear_getViewer for the authenticated user, plus linear_getOrganization, linear_getUsers, linear_getTeams and linear_getProjects, and linear_createProject with a name, description, state and teamIds.
LINEAR_API_KEY and LINEAR_API_TOKEN, and the Linear organization they belong to.
One command plus a key — npx -y @smithery/cli install @emmett.deen/linear-mcp-server --client claude, then supply credentials
