Skip to content

Linear Source

What it ingests

Issue activity from Linear — issues and their comments — optionally scoped to specific teams. Linear Team maps onto Corveil's Project entity (the Jira project analog). Linear's own Projects (roadmaps) and Cycles are not first-class v1 entities.

This is GraphQL poll ingest against https://api.linear.app/graphql. Linear also offers an MCP server (https://mcp.linear.app/sse) for agent tool access; that is not ontology ingestion — this source is the sensor.

Credential

References a linear_api_key credential by id. The secret is a Linear personal API key (lin_api_…). Linear is a single cloud API, so there is no site URL beside the key.

bash
curl -sS -X POST https://your-corveil-host/api/credentials \
  -H "Authorization: Bearer <admin>" -H "Content-Type: application/json" \
  -d '{"type":"linear_api_key","name":"acme-linear-key","secret":"lin_api_..."}'

OAuth 2.0 / 3LO is out of scope in v1.

Config fields

KeyRequiredNotes
team_keysnoComma-separated Linear team keys, e.g. ENG, OPS. Blank ingests every team the key can read.

Provider-side setup

  1. Sign in as the Linear account that should own the key.
  2. Create a personal API key at Settings → API (linear.app).
  3. Make sure that account can view the teams you want to ingest.

Wire-up

POST /api/sensors

json
{
  "sensor_type": "linear",
  "name": "Acme Linear",
  "config": {
    "team_keys": "ENG, OPS"
  },
  "credentials": { "api_key": "<linear_api_key credential id>" }
}

Verify

Run Test connection to confirm the key authenticates (viewer / organization query). A bad key fails at save/test, not on the first poll. Once polling, created and updated issues in the selected teams appear as task events; comments appear as conversation events.