mcp-server-linear
Version:
An MCP server for interacting with Linear's API, providing tools for managing issues, projects, and teams
180 lines (179 loc) • 4.16 kB
TypeScript
/**
* Project operation types
* These types define the structure for project-related operations in Linear
*/
/**
* Input for creating a new project
* @example
* ```typescript
* const projectInput: ProjectInput = {
* name: "Q1 Planning",
* description: "Q1 2025 Planning Project",
* teamIds: ["team-id-1", "team-id-2"], // Required: Array of team IDs this project belongs to
* state: "started" // Optional: Project state
* };
* ```
*/
export interface ProjectInput {
/** The name of the project */
name: string;
/** Optional description of the project */
description?: string;
/**
* Array of team IDs this project belongs to
* @required
* Note: Linear API requires teamIds (array) not teamId (single value)
*/
teamIds: string[];
/** Optional project state */
state?: string;
}
export interface ProjectResponse {
projectCreate: {
success: boolean;
project: {
id: string;
name: string;
url: string;
};
lastSyncId: number;
};
issueBatchCreate?: {
success: boolean;
issues: Array<{
id: string;
identifier: string;
title: string;
url: string;
}>;
lastSyncId: number;
};
}
/**
* Filter for project milestone collections
*/
export interface ProjectMilestoneCollectionFilter {
every?: ProjectMilestoneFilter;
some?: ProjectMilestoneFilter;
none?: ProjectMilestoneFilter;
}
export interface ProjectMilestone {
id: string;
name: string;
description?: string;
targetDate?: string;
progress: number;
sortOrder: number;
archivedAt?: string;
createdAt: string;
updatedAt: string;
currentProgress: Record<string, any>;
progressHistory: Record<string, any>;
descriptionState?: string;
documentContent?: {
content: string;
};
project: {
id: string;
name: string;
};
issues?: {
nodes: Array<{
id: string;
identifier: string;
title: string;
}>;
};
}
export interface ProjectMilestoneConnection {
nodes: ProjectMilestone[];
pageInfo: {
hasNextPage: boolean;
endCursor?: string;
};
}
/**
* Filter for project milestone
*/
export interface ProjectMilestoneFilter {
id?: {
eq?: string;
in?: string[];
};
name?: {
eq?: string;
contains?: string;
};
targetDate?: {
eq?: string;
lt?: string;
gt?: string;
};
completed?: {
eq?: boolean;
};
createdAt?: {
gt?: string;
lt?: string;
};
updatedAt?: {
gt?: string;
lt?: string;
};
}
/**
* Filter for project updates collection
*/
export interface ProjectUpdatesCollectionFilter {
every?: ProjectUpdateFilter;
some?: ProjectUpdateFilter;
none?: ProjectUpdateFilter;
}
/**
* Filter for project update
*/
export interface ProjectUpdateFilter {
id?: string;
}
/**
* Filter for project status
*/
export interface ProjectStatusFilter {
eq?: string;
in?: string[];
neq?: string;
nin?: string[];
}
/**
* Project filtering options
*/
export interface ProjectFilter {
projectMilestones?: ProjectMilestoneCollectionFilter;
projectUpdates?: ProjectUpdatesCollectionFilter;
nextProjectMilestone?: ProjectMilestoneFilter;
completedProjectMilestones?: ProjectMilestoneCollectionFilter;
and?: ProjectFilter[];
or?: ProjectFilter[];
status?: ProjectStatusFilter;
}
export interface SearchProjectsResponse {
projects: {
nodes: Array<{
id: string;
name: string;
description?: string;
url: string;
state: string;
teams: {
nodes: Array<{
id: string;
name: string;
}>;
};
projectMilestones?: ProjectMilestoneConnection;
}>;
};
}
export interface GetProjectMilestonesResponse {
projectMilestones: ProjectMilestoneConnection;
}