Linear
STDIOLinear API交互服务器,支持任务管理
Linear API交互服务器,支持任务管理
A Model Context Protocol (MCP) server for Linear, written in Go. This server provides tools for interacting with the Linear API through the MCP protocol.
Pre-built binaries are available for Linux, macOS, and Windows on the GitHub Releases page.
chmod +x linear-mcp-go-*
# Download linux binary for the latest release
RELEASE=$(curl -s https://api.github.com/repos/geropl/linear-mcp-go/releases/latest)
DOWNLOAD_URL=$(echo $RELEASE | jq -r '.assets[] | select(.name | contains("linux")) | .browser_download_url')
curl -L -o ./linear-mcp-go $DOWNLOAD_URL
chmod +x ./linear-mcp-go
# Setup the mcp server (.gitpod.yml, dotfiles repo, etc.)
./linear-mcp-go setup --tool=cline
To check the version of the Linear MCP server:
./linear-mcp-go version
This will display the version, git commit, and build date information.
export LINEAR_API_KEY=your_linear_api_key
# Run in read-only mode (default) ./linear-mcp-go serve # Run with write access enabled ./linear-mcp-go serve --write-access
The server will start and listen for MCP requests on stdin/stdout.
The setup command automates the installation and configuration process for various AI assistants:
# Set your Linear API key as an environment variable # Only exception: Ona does not require this for setup! export LINEAR_API_KEY=your_linear_api_key # Set up for Cline (default) ./linear-mcp-go setup # Set up with write access enabled ./linear-mcp-go setup --write-access # Set up with auto-approval for read-only tools ./linear-mcp-go setup --auto-approve=allow-read-only # Set up with specific tools auto-approved ./linear-mcp-go setup --auto-approve=linear_get_issue,linear_search_issues # Set up with write access and auto-approval for read-only tools ./linear-mcp-go setup --write-access --auto-approve=allow-read-only # Set up for a different tool (only "cline" supported for now) ./linear-mcp-go setup --tool=cline
This command:
The --auto-approve flag can be used to specify which tools should be auto-approved in the Cline configuration:
--auto-approve=allow-read-only: Auto-approves all read-only tools (linear_search_issues, linear_get_user_issues, linear_get_issue, linear_get_teams)--auto-approve=tool1,tool2,...: Auto-approves the specified comma-separated list of toolsCurrently supported AI assistants:
By default, the server runs in read-only mode, which means the following tools are disabled:
linear_create_issuelinear_update_issuelinear_add_commentlinear_reply_to_commentlinear_update_issue_commentTo enable these tools, use the --write-access=true flag.
Creates a new Linear issue with specified details. Supports creating parent-child relationships (sub-issues) and assigning labels.
Parameters:
title (required): Issue titleteam (required): Team identifier (key, UUID or name)description: Issue descriptionpriority: Priority. Accepts: 0/'no priority', 1/'urgent', 2/'high', 3/'medium', 4/'low'status: Issue statusmakeSubissueOf: Create a sub-issue by specifying the parent issue ID or identifier (e.g., 'TEAM-123'). This establishes a parent-child relationship in Linear.labels: Optional comma-separated list of label IDs or names to assignproject: Optional project identifier (ID, name, or slug) to assign the issue toExample: Creating a sub-issue
{ "title": "Implement login form validation", "team": "ENG", "makeSubissueOf": "ENG-42", "description": "Add client-side validation for the login form" }
Updates an existing Linear issue's properties.
Parameters:
id (required): Issue IDtitle: New titledescription: New descriptionpriority: Priority. Accepts: 0/'no priority', 1/'urgent', 2/'high', 3/'medium', 4/'low'status: New statusSearches Linear issues using flexible criteria.
Parameters:
query: Optional text to search in title and descriptionteamId: Filter by team IDstatus: Filter by status name (e.g., 'In Progress', 'Done')assigneeId: Filter by assignee's user IDlabels: Filter by label names (comma-separated)priority: Priority. Accepts: 0/'no priority', 1/'urgent', 2/'high', 3/'medium', 4/'low'estimate: Filter by estimate pointsincludeArchived: Include archived issues in results (default: false)limit: Max results to return (default: 10)Retrieves issues assigned to a specific user or the authenticated user.
Parameters:
userId: Optional user ID. If not provided, returns authenticated user's issuesincludeArchived: Include archived issues in resultslimit: Maximum number of issues to return (default: 50)Retrieves a single Linear issue by its ID.
Parameters:
issueId (required): ID of the issue to retrieveAdds a comment to an existing Linear issue. Supports replying to existing comments by passing a comment identifier in the thread parameter.
Parameters:
issue (required): ID or identifier (e.g., 'TEAM-123') of the issue to comment onbody (required): Comment text in markdown formatthread: Optional comment identifier to reply to. Accepts: full Linear comment URL, UUID, shorthand (comment-abc123), or hash (abc123). Creates a threaded reply instead of a top-level comment.createAsUser: Optional custom username to show for the commentURL Support: You can pass a full Linear comment URL (e.g., https://linear.app/.../issue/TEST-10/...#comment-abc123) directly to the thread parameter. The tool automatically resolves URLs to UUIDs before calling the API.
Convenience tool for replying to an existing comment. Automatically resolves the issue from the comment, so you only need to provide the comment identifier and reply text.
Parameters:
thread (required): Comment to reply to. Accepts: full Linear comment URL, UUID, shorthand (comment-abc123), or hash (abc123)body (required): Reply text in markdown formatcreateAsUser: Optional custom username to show for the replyWhy use this tool? When you have a comment URL or ID and want to reply, this tool is simpler than linear_add_comment because you don't need to specify the issue separately. The tool automatically looks up the issue from the comment.
Retrieves comments for a Linear issue with support for pagination and thread navigation.
Parameters:
issue (required): ID or identifier (e.g., 'TEAM-123') of the issue to retrieve comments forthread: Optional UUID of a parent comment to retrieve its replies. If not provided, returns top-level commentslimit: Maximum number of comments to return (default: 10)after: Cursor for pagination, to get comments after this pointUse Cases:
thread parameterlinear_add_comment, this is less necessary)Updates an existing comment on a Linear issue.
Parameters:
comment (required): Comment identifier to update. Accepts: full Linear comment URL, UUID, shorthand (comment-abc123), or hash (abc123)body (required): New comment text in markdown formatURL Support: Like other comment tools, this accepts full Linear comment URLs and automatically resolves them to UUIDs.
Retrieves Linear teams with an optional name filter.
Parameters:
name: Optional team name filter. Returns teams whose names contain this string.Tests are implemented using go-vcr, and executed against https://linear.app/linear-mcp-go-test.
Using the existing recordings (cassettes):
go test -v ./...
Requires TEST_LINEAR_API_KEY to be set for the test workspace.
go test -v -record=true ./...
This will update all tests that don't alter remote state.
go test -v -recordWrites=true ./...
This will re-run all tests, including some that might alter the outcome of other tests cases, which might require further manual work to adjust.
go test -v -golden=true ./...
Updates all .golden fields.
The project uses GitHub Actions for automated testing and releases. The version is managed through the ServerVersion constant in pkg/server/server.go.
v* (e.g., v1.0.0) is pushed, a new release is automatically createdImportant: Version tags should only be created against the main branch after all changes have been merged.
Update the version: Modify the ServerVersion constant in pkg/server/server.go
// ServerVersion is the version of the MCP server ServerVersion = "1.13.0"
Create a PR: Submit the version update as a pull request to ensure it goes through review and testing
Merge to main: Once the PR is approved and merged to the main branch
Create and push the release tag:
# Ensure you're on the latest main branch git checkout main git pull origin main # Create and push the tag (must match the version in server.go) git tag v1.13.0 git push origin v1.13.0
Automated release: The GitHub Actions workflow will automatically:
The version command displays:
ServerVersion constant in pkg/server/server.goFor development builds, git commit and build date will show "unknown".
MIT