Linear's API is GraphQL-only. wmcp.sh wraps the common operations as MCP tools so your agent can file bugs, comment on issues, move things across columns, and query projects without writing GraphQL. Connect Linear once; the worker injects your OAuth token on every call.
Last updated 2026-05-28 · works with Claude, OpenAI, LangChain, and any MCP client
| Capability | @linear/sdk | Composio Linear | wmcp.sh |
|---|---|---|---|
| Setup time | Install SDK + write GraphQL | Platform + per-customer OAuth | Connect Linear once |
| GraphQL exposure | Full — you write queries | Abstracted via REST-ish methods | Curated MCP tools (no GraphQL knowledge needed) |
| Auth | PAT or OAuth, you store | Platform manages | OAuth vault in wmcp.sh |
| MCP shape | Wrap each query yourself | Auto-mapped | Native MCP tools |
| Webhooks | Yes | Platform → workflow | Out of scope for v0 |
| Cost | Free SDK | Platform tier | Free 100/day + $29/mo Pro |
All MCP-shaped — consumed directly by Claude tool_use, OpenAI function-calling, or LangChain.
| Tool | Type | Returns |
|---|---|---|
issueCreate | Live action | New issue with ID + URL |
issueUpdate | Live action | Updated issue |
issuesByTeam | Live action | Filtered issue list |
issueSearch | Live action | Issues matching query |
commentCreate | Live action | New comment ID |
projectsByTeam | Live action | Project list |
workflowStates | Live action | State machine for a team |
myIssues | Live action | Issues assigned to current user |
from wmcp import WmcpClient
from wmcp.anthropic import to_anthropic_tools, execute_tool_use
from anthropic import Anthropic
client = WmcpClient(api_key="webmcp_live_…")
spec = "https://wmcp.sh/api/v1/curated/linear" # curated tool list, not raw GraphQL
tools = client.tools(spec)
anthropic = Anthropic()
msg = anthropic.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
tools=to_anthropic_tools(tools),
messages=[{"role": "user",
"content": "File a P1 bug in the BACKEND team: '/u/<hash> 500s on cold cache when seen: metadata missing'."}],
)
for block in msg.content:
if block.type == "tool_use":
# Worker injects your connected Linear OAuth token
result = execute_tool_use(client, spec, block.model_dump())
print(result)
read + write — covers all standard CRUD on issues, projects, comments, and labels. Linear doesn't support more granular scoping at the OAuth App level today.teamId in tool args to scope writes to a specific team.Linear's GraphQL + OAuth is a model for shipping an API agents can drive. See the API-side checklist.
Custom adapter + hosted MCP at mcp.yourbrand.com + verified badge. From $499 one-time setup.