Skip to main content
Glama
README.md
# issueport

Linear teams, projects, issues and comments as MCP tools, talking to
the Linear GraphQL API. issueport is a clean-room rebuild of the core
subset of the Linear MCP surface, under a new name: fresh code written
from Linear's public API documentation, no copied branding. The
original Linear server is hosted/remote with OAuth; this rebuild is a
GraphQL client for the same upstream API using an API key, and does
not reproduce the hosted OAuth surface.

## Tools (core subset, 12)

`list_issues`, `get_issue`, `create_issue`, `update_issue`,
`search_issues`, `list_teams`, `get_team`, `list_projects`,
`create_project`, `list_comments`, `create_comment`, `archive_issue`.

Not in this subset: cycles, documents, file uploads, webhooks, OAuth
apps, time tracking, triage/custom workflows admin, project
milestones/labels management, attachments, notifications.

Each tool is one GraphQL operation (query or mutation) posted as
`{query, variables}`; a GraphQL `errors` array fails the call with the
first error's message.

## Setup

```bash
export LINEAR_API_KEY=lin_api_...
```

Note: Linear API keys are sent raw as the `Authorization` header
value — not as a Bearer token. Optionally override the endpoint with
`LINEAR_API_URL` (default `https://api.linear.app/graphql`). Without
the key, every tool call fails with an error naming the missing
variable.

## CLI

```bash
npx @reneturcios/issueport get_issue '{"issue_id":"..."}'
npx @reneturcios/issueport mcp        # stdio MCP server
```

Each tool name is a subcommand taking one JSON object argument.

## MCP client config

```json
{
  "mcpServers": {
    "issueport": {
      "command": "npx",
      "args": ["-y", "@reneturcios/issueport", "mcp"],
      "env": { "LINEAR_API_KEY": "lin_api_..." }
    }
  }
}
```

## Docker

```bash
docker run -i -e LINEAR_API_KEY ghcr.io/cloudcorprecords/issueport
```

## Development

```bash
npm install
npm run build
npm test
```

## License

MIT

Maintenance

ActivityMaintained
ResponsivenessNo issues