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 by teamId, 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. eng or ENG works; 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.