# Linear Project

Manages Linear projects with strict scope gating and audit logging. Connects read-only GitHub evidence and local Obsidian notes to issues.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI
- Author: Openly-Useful
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/Openly-Useful/linear-project-skills/tree/HEAD/mcp/linear-project-mcp-server
- Updated: 2026-08-23
- HTML: https://affpapa.org/en/nevibecode/mcp/linear-project

## What it does

The server enforces strict allowlists for organizations, teams, and projects before executing Linear operations. Identifiers attach to teams, not projects. Because of that rule, counter resets to 1 succeed only when verifying an empty dedicated team or subteam.

Write operations require `MCP_WRITES_ENABLED=true`, a literal confirmation flag, and an active window under 60 minutes. Optional adapters link external evidence. The GitHub integration runs GET queries against permitted repositories. The Obsidian adapter reads local Markdown notes under 200,000 bytes, sending only titles and URIs to Linear. Without an intact audit path outside the repo, write actions abort immediately.

## Requirements
- Needs: Node.js (commands run via npx)
- Environment variables: `LINEAR_API_KEY`, `LINEAR_ACCESS_TOKEN`, `LINEAR_ALLOWED_ORGANIZATION_ID`, `LINEAR_ALLOWED_TEAM_IDS`, `LINEAR_ALLOWED_PROJECT_IDS`, `LINEAR_ALLOWED_SCOPE_CODES`, `GITHUB_TOKEN`, `GITHUB_ALLOWED_REPOSITORIES`, `OBSIDIAN_VAULT_PATH`, `OBSIDIAN_VAULT_NAME` — keys and tokens: ask the human for the values, never commit them or put them in shared files.
- Works with: Linear

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env LINEAR_API_KEY=<LINEAR_API_KEY> --env LINEAR_ACCESS_TOKEN=<LINEAR_ACCESS_TOKEN> --env LINEAR_ALLOWED_ORGANIZATION_ID=<LINEAR_ALLOWED_ORGANIZATION_ID> --env LINEAR_ALLOWED_TEAM_IDS=<LINEAR_ALLOWED_TEAM_IDS> --env LINEAR_ALLOWED_PROJECT_IDS=<LINEAR_ALLOWED_PROJECT_IDS> --transport stdio linear-project-mcp-server -- npx -y @openly-useful/linear-project-mcp-server
```
Replace <…> with your own values. 9 more environment variables are in the server README

### Codex

**Platform CLI**
```bash
codex mcp add linear-project-mcp-server --env LINEAR_API_KEY=<LINEAR_API_KEY> --env LINEAR_ACCESS_TOKEN=<LINEAR_ACCESS_TOKEN> --env LINEAR_ALLOWED_ORGANIZATION_ID=<LINEAR_ALLOWED_ORGANIZATION_ID> --env LINEAR_ALLOWED_TEAM_IDS=<LINEAR_ALLOWED_TEAM_IDS> --env LINEAR_ALLOWED_PROJECT_IDS=<LINEAR_ALLOWED_PROJECT_IDS> -- npx -y @openly-useful/linear-project-mcp-server
```
Replace <…> with your own values. 9 more environment variables are in the server README

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "linear-project-mcp-server": {
            "command": "npx",
            "args": [
                "-y",
                "@openly-useful/linear-project-mcp-server"
            ],
            "env": {
                "LINEAR_API_KEY": "<LINEAR_API_KEY>",
                "LINEAR_ACCESS_TOKEN": "<LINEAR_ACCESS_TOKEN>",
                "LINEAR_ALLOWED_ORGANIZATION_ID": "<LINEAR_ALLOWED_ORGANIZATION_ID>",
                "LINEAR_ALLOWED_TEAM_IDS": "<LINEAR_ALLOWED_TEAM_IDS>",
                "LINEAR_ALLOWED_PROJECT_IDS": "<LINEAR_ALLOWED_PROJECT_IDS>"
            }
        }
    }
}
```
Replace <…> with your own values. 9 more environment variables are in the server README

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "linear-project-mcp-server": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "@openly-useful/linear-project-mcp-server"
            ],
            "env": {
                "LINEAR_API_KEY": "<LINEAR_API_KEY>",
                "LINEAR_ACCESS_TOKEN": "<LINEAR_ACCESS_TOKEN>",
                "LINEAR_ALLOWED_ORGANIZATION_ID": "<LINEAR_ALLOWED_ORGANIZATION_ID>",
                "LINEAR_ALLOWED_TEAM_IDS": "<LINEAR_ALLOWED_TEAM_IDS>",
                "LINEAR_ALLOWED_PROJECT_IDS": "<LINEAR_ALLOWED_PROJECT_IDS>"
            }
        }
    }
}
```
Replace <…> with your own values. 9 more environment variables are in the server README

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e LINEAR_API_KEY=<LINEAR_API_KEY> -e LINEAR_ACCESS_TOKEN=<LINEAR_ACCESS_TOKEN> -e LINEAR_ALLOWED_ORGANIZATION_ID=<LINEAR_ALLOWED_ORGANIZATION_ID> -e LINEAR_ALLOWED_TEAM_IDS=<LINEAR_ALLOWED_TEAM_IDS> -e LINEAR_ALLOWED_PROJECT_IDS=<LINEAR_ALLOWED_PROJECT_IDS> linear-project-mcp-server npx -y @openly-useful/linear-project-mcp-server
```
Replace <…> with your own values. 9 more environment variables are in the server README

## When to use it
- restrict agent actions to explicit Linear teams and scope codes
- prevent unauthorized mutations using timed 60-minute write windows
- attach GitHub pull request references to Linear tickets
- connect local Obsidian Markdown notes without leaking file bodies

## Example prompts
- Inspect active scopes and allowlists with `linear_project_capabilities`
- Fetch issues under the ACQI scope using `linear_project_list_scoped_issues`
- Attach a local note URI to an issue via `linear_project_link_evidence`

## Similar
- [Reactive Resume](https://affpapa.org/en/nevibecode/mcp/reactive-resume.md) — MCP server · ★ 44908
- [screenpipe](https://affpapa.org/en/nevibecode/mcp/screenpipe.md) — MCP server · ★ 22082
- [Inbox Zero](https://affpapa.org/en/nevibecode/mcp/inbox-zero.md) — MCP server · ★ 12826
- [kaneo](https://affpapa.org/en/nevibecode/mcp/kaneo.md) — MCP server · ★ 9623
- [Mindwtr](https://affpapa.org/en/nevibecode/mcp/mindwtr.md) — MCP server · ★ 2330
- [Azure DevOps (ADO)](https://affpapa.org/en/nevibecode/mcp/azure-devops-ado.md) — MCP server · ★ 2071

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
