OhMyLinearMCP - unified Linear MCP (local-fast reads + official fallback/writes) on macOS
Project description
Oh My Linear MCP
Ask your agent for list_issues and watch 30k+ tokens disappear into deeply nested metadata.
oh-my-linear exists to stop that.
It reads from Linear.app's local IndexedDB cache first, returns compact shapes fast, and only goes to official Linear MCP when it actually has to.
"Show me Frontend issues"
Official-only path: big payload, high token burn
oh-my-linear path: focused fields (identifier/title/priority/state/assignee/dueDate)
Same question. Smaller context bill.
How It Works
Linear desktop app (Electron) already syncs your workspace to local IndexedDB.
oh-my-linear opens that cache and routes tools with one rule set:
- Try refreshing local cache only when stale.
- Read locally first.
- Fallback to official only if local path is unsupported/unavailable.
- Compose one visible tool surface at startup:
- local read tools stay local
- shared local read tools synchronize their runtime-visible descriptions to the official MCP wording for discoverability/search parity
- official tools whose names do not collide with local read tools are discovered once and exposed as passthrough tools
- read-name collisions stay owned by the local path
Routing Policy (0.6.4)
Read path:
refresh_cache()is conditional:- refresh when TTL expired, or
- refresh when local DB/blob mtime is newer than loaded cache
- refresh failure does not immediately force official fallback
- stale local cache is still used when present
- official fallback happens when:
- local cache is empty on cold start, or
- handler raises
LocalFallbackRequested(unsupported query/tool shape)
Write path:
- official passthrough tool names discovered at startup (e.g.
create_issue,update_issue) -> official Linear MCP direct call_linear_tool_raw(name, args)remains as explicit raw passthrough
Install
Requirements:
- macOS
- Linear.app installed and opened at least once
- Node.js (
npx) for default official stdio bridge
Project setup helper (writes/updates <project>/.mcp.json):
uvx oh-my-linear install --project /path/to/project --name oh-my-linear --client claude
Claude Code:
claude mcp add oh-my-linear -- uvx oh-my-linear
Codex:
codex mcp add oh-my-linear -- uvx oh-my-linear
Exposed Tool Surface
oh-my-linear exposes one composed MCP surface:
visible_tools(oh-my-linear)
= local_read_tools
+ official_tools_except_local_read_name_collisions
+ call_linear_tool_raw
Startup discovery:
oh-my-linearcalls downstream officiallist_tools()once during startup- shared local read tools keep local execution, but adopt the exact official description text at startup
- this keeps search/tool-selection wording consistent even when the call stays local
- local read tool names win on collisions such as
list_issues - the remaining official tools are registered as passthrough tools on
oh-my-linear
Local-first reads:
list_issues, get_issue, list_teams, list_projects, get_team, get_project, list_users, get_user, list_issue_statuses, get_issue_status, list_comments, list_issue_labels, list_initiatives, get_initiative, list_cycles, list_documents, get_document, list_milestones, get_milestone, get_status_updates, list_project_updates
Official bridge:
- Official tools whose names do not collide with local read tools are discovered from Linear MCP at startup and re-exposed on
oh-my-linear(same tool names/descriptions, excluding local read collisions) call_linear_tool_raw(name, args)remains as the raw fallback/escape hatch- If startup discovery fails, local read tools still load and
call_linear_tool_rawremains available, but mirrored official tools may be missing until restart and shared local descriptions fall back to their built-in wording
Migration Notes
Removed tool endpoints:
list_official_toolsreconnect_officialrefresh_cacheget_cache_healthreauthofficial_call_tool
Replacement:
- prefer composed official passthrough tools directly (e.g.
create_issue,update_issue, ...) - use
call_linear_tool_raw(name, args)for explicit passthrough
CLI entrypoints:
- primary:
oh-my-linear - compatibility aliases:
oh-my-linearmcp,linear-mcp-fast - default behavior (
oh-my-linear): run MCP server (serve) - helper command:
oh-my-linear install --project /path/to/project --name oh-my-linear --client claude
Configuration
Official transport:
LINEAR_OFFICIAL_MCP_TRANSPORT(stdiodefault, orhttp)LINEAR_OFFICIAL_MCP_COMMAND(npxdefault)LINEAR_OFFICIAL_MCP_ARGS(-y mcp-remote https://mcp.linear.app/mcpdefault)LINEAR_OFFICIAL_MCP_ENV(JSON env for stdio child)LINEAR_OFFICIAL_MCP_CWD(working directory for stdio child)LINEAR_OFFICIAL_MCP_URL(https://mcp.linear.app/mcpdefault for http transport)LINEAR_OFFICIAL_MCP_HEADERS(JSON headers for http transport)
Local refresh policy:
LINEAR_FAST_REFRESH_TTL_SECONDS(default10)LINEAR_FAST_ACCOUNT_EMAILS(optional account scope filter)LINEAR_FAST_USER_ACCOUNT_IDS(optional account scope filter)
OAuth retry suppression:
LINEAR_OFFICIAL_AUTH_RETRY_COOLDOWN_SECONDS(default300)
Troubleshooting
OAuth page keeps opening:
- Check official URL is not localhost by mistake.
- Confirm auth session is valid.
- Avoid tight retry loops from clients.
- Keep cooldown enabled (
LINEAR_OFFICIAL_AUTH_RETRY_COOLDOWN_SECONDS).
Local data seems stale:
- Open Linear.app to force sync.
- Lower
LINEAR_FAST_REFRESH_TTL_SECONDSif you want more aggressive refresh.
npx: command not found:
- install Node.js, or switch to
LINEAR_OFFICIAL_MCP_TRANSPORT=http.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oh_my_linear-0.6.4.tar.gz.
File metadata
- Download URL: oh_my_linear-0.6.4.tar.gz
- Upload date:
- Size: 131.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e618d37f8071cf5f68ea273b63f21b5be0e4d9bd1b4488771fe807658d2568bd
|
|
| MD5 |
7be87f05b002a91f191554fc916328eb
|
|
| BLAKE2b-256 |
95ecfd63025d84670082d9417b72a1db31ab02d35a1682692498d5079263cab2
|
File details
Details for the file oh_my_linear-0.6.4-py3-none-any.whl.
File metadata
- Download URL: oh_my_linear-0.6.4-py3-none-any.whl
- Upload date:
- Size: 132.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40ec84245cfafc2f355212ccb14ead1eb0872bc5f155c6b346c1fc050fe2156c
|
|
| MD5 |
b994d50ae8b6b6f6fec376d0c4774dac
|
|
| BLAKE2b-256 |
4e487e2537a112b503f5c15ecd3ff7e624208be133e2e3d69cd03281538126b2
|