Overview
Add Linear to any ModuleX agent or workflow. Project-management and issue-tracking integration for Linear via the GraphQL API at api.linear.app/graphql. Covers team discovery, issue CRUD + search, and project list/create.
Categories : Project & Task Management · Task Management · Collaboration · Auth : OAuth2, API Key · Actions : 7
Authentication
OAuth2 Authentication Connect using Linear OAuth (recommended for most use cases) Required Credentials Field Description Required Format Client ID Linear OAuth application Client ID Yes xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxClient Secret Linear OAuth application Client Secret Yes xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OAuth Configuration
Authorization URL : https://linear.app/oauth/authorize
Token URL : https://api.linear.app/oauth/token
Scopes : read, write
API Key Authentication Authenticate using your Linear API key. Generate one from Linear Settings > API > Personal API keys. Required Credentials Field Description Required Format Linear API Key Your Linear personal API key for authentication Yes lin_api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Available Actions
get_teams — Retrieve all teams in your Linear workspace. Use this to discover available teams before creating issues or projects.
Parameters Maximum number of teams to return (Default: 50)
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"count" : {
"default" : 0 ,
"title" : "Count" ,
"type" : "integer"
},
"page_info" : {
"anyOf" : [
{
"additionalProperties" : true ,
"type" : "object"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Page Info"
},
"teams" : {
"items" : {
"additionalProperties" : true ,
"type" : "object"
},
"title" : "Teams" ,
"type" : "array"
}
},
"required" : [
"success"
],
"title" : "GetTeamsOutput" ,
"type" : "object"
}
get_issue — Retrieve a Linear issue by its ID. Returns title, description, state, assignee, team, project, labels, and timestamps.
Parameters The ID of the issue to retrieve
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"issue" : {
"anyOf" : [
{
"additionalProperties" : true ,
"type" : "object"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Issue"
}
},
"required" : [
"success"
],
"title" : "GetIssueOutput" ,
"type" : "object"
}
search_issues — Search Linear issues by team, project, assignee, labels, state, or text query.
Parameters Filter by assignee user ID
Filter by workflow state ID
Substring to match in issue titles
Include archived issues (Default: false)
Field to order by (‘createdAt’ or ‘updatedAt’) (Default: updatedAt)
Maximum number of issues to return (Default: 50)
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"count" : {
"default" : 0 ,
"title" : "Count" ,
"type" : "integer"
},
"page_info" : {
"anyOf" : [
{
"additionalProperties" : true ,
"type" : "object"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Page Info"
},
"issues" : {
"items" : {
"additionalProperties" : true ,
"type" : "object"
},
"title" : "Issues" ,
"type" : "array"
}
},
"required" : [
"success"
],
"title" : "SearchIssuesOutput" ,
"type" : "object"
}
create_issue — Create a new issue in Linear.
Parameters The team’s UUID (the ‘id’ field returned by get_teams) — NOT the short team key like ‘ENG’. Call get_teams first to resolve it.
UUID of the user to assign the issue to
UUID of the project to add the issue to
UUID of the workflow state
Priority level: 0=No priority, 1=Urgent, 2=High, 3=Normal, 4=Low
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"issue" : {
"anyOf" : [
{
"additionalProperties" : true ,
"type" : "object"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Issue"
}
},
"required" : [
"success"
],
"title" : "CreateIssueOutput" ,
"type" : "object"
}
update_issue — Update an existing Linear issue.
Parameters The ID of the issue to update
Move to a different project
Replace labels with these IDs
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"issue" : {
"anyOf" : [
{
"additionalProperties" : true ,
"type" : "object"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Issue"
}
},
"required" : [
"success"
],
"title" : "UpdateIssueOutput" ,
"type" : "object"
}
list_projects — List projects in Linear with optional team filtering and pagination.
Parameters Field to order by (‘createdAt’ or ‘updatedAt’) (Default: updatedAt)
Maximum number of projects to return (Default: 50)
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"count" : {
"default" : 0 ,
"title" : "Count" ,
"type" : "integer"
},
"page_info" : {
"anyOf" : [
{
"additionalProperties" : true ,
"type" : "object"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Page Info"
},
"projects" : {
"items" : {
"additionalProperties" : true ,
"type" : "object"
},
"title" : "Projects" ,
"type" : "array"
}
},
"required" : [
"success"
],
"title" : "ListProjectsOutput" ,
"type" : "object"
}
create_project — Create a new project in Linear.
Parameters The team’s UUID (the ‘id’ field returned by get_teams) — NOT the short team key like ‘ENG’. Call get_teams first to resolve it.
The description of the project
IDs of users to add as members
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"project" : {
"anyOf" : [
{
"additionalProperties" : true ,
"type" : "object"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Project"
}
},
"required" : [
"success"
],
"title" : "CreateProjectOutput" ,
"type" : "object"
}
Limits & Quotas
All tools share a single GraphQL endpoint; failures (HTTP non-200,
GraphQL errors, exceptions) surface as success=False + error.
The search_issues and list_projects actions interpolate filter
values into the GraphQL string verbatim (matching legacy). Inputs
are scoped to internal IDs / label names — not user prose — and
treated as opaque tokens.
Output objects keep their nested GraphQL shape unchanged (state,
team, assignee, creator, labels.nodes for issues; lead, status for
projects).
Links