| name | lisa-linear-access |
| description | Vendor-neutral access layer for… |
| allowed-tools | ["Bash","Read","Skill"] |
Linear Access: $ARGUMENTS
Single chokepoint for Linear operations. Caller skills (linear-*) MUST go
through this skill. They MUST NOT call mcp__linear-server__* tools directly or
curl https://api.linear.app/graphql themselves.
Invocation Contract
operation: list-teams [query:<KEY>]
operation: get-team id:<ID>
operation: list-projects [team:<KEY>] [label:<NAME>] [state:<arr>]
operation: get-project id:<ID>
operation: save-project payload:{...}
operation: list-issues [team:<ID>] [project:<ID>] [label:<NAME>] [state_type:<arr>]
operation: get-issue id:<ID>
operation: save-issue payload:{...}
operation: list-comments issue_id:<ID>
operation: save-comment issue_id:<ID> body:"..."
operation: list-issue-labels [team:<ID>]
operation: create-issue-label payload:{...}
operation: list-project-labels
operation: create-project-label payload:{...}
operation: list-documents project_id:<ID>
operation: get-document id:<ID>
Return parsed JSON in a <result> block. On failure, prefix the message with
Error: and include the failing operation name.
Substrate Selection
Read config:
WORKSPACE=$(jq -r '.linear.workspace // empty' .lisa.config.json 2>/dev/null)
TEAM_KEY=$(jq -r '.linear.teamKey // empty' .lisa.config.json 2>/dev/null)
Probe in order:
- Linear MCP, if
mcp__linear-server__list_teams is available and can list the
configured workspace/team.
LINEAR_API_KEY with Linear GraphQL (https://api.linear.app/graphql).
The Linear GraphQL docs support personal API keys for scripts and authenticate
with an Authorization: <API_KEY> header. Treat LINEAR_API_KEY as the
headless substrate. If neither tier works, fail with:
Error: no Linear access substrate available. Authenticate the Linear MCP or set LINEAR_API_KEY.
GraphQL Adapter
All GraphQL calls use:
linear_graphql() {
local query="$1"
local variables="${2:-{}}"
[ -n "$LINEAR_API_KEY" ] || {
echo "Error: LINEAR_API_KEY is not set." >&2
return 1
}
jq -n --arg query "$query" --argjson variables "$variables" \
'{query:$query, variables:$variables}' |
curl -sS -X POST "https://api.linear.app/graphql" \
-H "Content-Type: application/json" \
-H "Authorization: '"$LINEAR_API_KEY"'" \
--data-binary @-
}
Map operation names to Linear GraphQL queries/mutations in this access skill.
Consumers pass business-shaped arguments only; they do not embed GraphQL.
Invariants
- MCP is preferred when it is present and already authenticated.
- GraphQL fallback runs only when
LINEAR_API_KEY is present.
- Missing MCP plus missing token is a hard failure naming
LINEAR_API_KEY.
- Mutations send only the fields being changed, matching existing Linear skill
guidance that
save_* style updates should not clobber unrelated fields.