MCP
developer
Linear
Create, update, and search issues, projects, and teams in Linear.
Requires Growth plan or above.
Connect Linear
Create a personal API key in Linear → Settings → API, then paste it on the Linear card at /dashboard/connections.
Example
List the 20 most recent open issues assigned to the engineering team.
app/api/my-issues/route.ts
import { Leash } from '@leash/sdk/leash'import { NextRequest } from 'next/server'export async function GET(req: NextRequest) {const leash = new Leash({ request: req })const result = await leash.integrations.linear.listIssues({teamId: 'eng',limit: 20,})// result =>// {// issues: [// {// id: 'iss_5b...',// identifier: 'ENG-412',// title: 'Fix stale cache on logout',// state: { name: 'In Progress' },// assignee: { name: 'Alice' },// updatedAt: '2026-05-11T14:00:00.000Z'// },// ...// ],// cursor: 'eyJvZ...'// }return Response.json(result)}
Available methods
listIssues(filter?)— filter byteamId,assigneeId,stateId,limit,cursor.getIssue(id)— fetch a single issue by ID or identifier (e.g.ENG-412).createIssue({ teamId, title, description?, ... })— create an issue.updateIssue(id, patch)— partial update (status, assignee, priority, etc.).addComment(issueId, body)— comment on an issue.listTeams()— every team in the workspace.listProjects(filter?)— workspace projects, optionally scoped to a team.
Common gotchas
- teamId can be a key.
engorENGworks; you don't need the UUID. - listIssues caps at ~100 per page. Paginate via the returned
cursor. - Personal API keys carry your full account scope. Use a dedicated bot account for production agents.
See the Linear API reference for the underlying provider docs.
Other languages: see SDK overview.