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.
- Create, update, and search Linear issues
- Get issues assigned to a user
- Add comments to issues
- Retrieve team information
- Rate-limited API requests to respect Linear's API limits
- Go 1.23 or higher
- Linear API key
Pre-built binaries are available for Linux, macOS, and Windows on the GitHub Releases page.
- Download the appropriate binary for your platform
- Make it executable (Linux/macOS):
chmod +x linear-mcp-go-*
- Run the binary as described in the Usage section
# 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
- Set your Linear API key as an environment variable:
export LINEAR_API_KEY=your_linear_api_key
- Run the server:
# 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
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:
- Checks if the Linear MCP binary is already installed
- Copies the current binary to the installation directory if needed
- Configures the AI assistant to use the Linear MCP server
- Sets up auto-approval for specified tools if requested
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 tools
Currently supported AI assistants:
- Cline (VSCode extension)
By default, the server runs in read-only mode, which means the following tools are disabled:
linear_create_issue
linear_update_issue
linear_add_comment
To enable these tools, use the --write-access=true
flag.
Creates a new Linear issue with specified details.
Parameters:
title
(required): Issue titleteamId
(required): Team IDdescription
: Issue descriptionpriority
: Priority (0-4)status
: Issue status
Updates an existing Linear issue's properties.
Parameters:
id
(required): Issue IDtitle
: New titledescription
: New descriptionpriority
: New priority (0-4)status
: New status
Searches 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
: Filter by priority (1=urgent, 2=high, 3=normal, 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 retrieve
Adds a comment to an existing Linear issue.
Parameters:
issueId
(required): ID of the issue to comment onbody
(required): Comment text in markdown formatcreateAsUser
: Optional custom username to show for the commentdisplayIconUrl
: Optional avatar URL for the comment
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 LINEAR_API_KEY
to be set.
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:
- All pushes to the main branch and pull requests are automatically tested
- When a tag matching the pattern
v*
(e.g.,v1.0.0
) is pushed, a new release is automatically created - Binaries for Linux, macOS, and Windows are built and attached to the release
To create a new release:
- Update the version in
pkg/server/server.go
- Commit the changes
- Create and push a tag matching the version:
git tag v1.0.0
git push origin v1.0.0
The GitHub Actions workflow will automatically create a release with the appropriate binaries.
MIT