src/mcp/

September 2, 2026 · View on GitHub

Generated: 2026-05-18

OVERVIEW

Tier 1 of the three-tier MCP system. Built-ins are created by createBuiltinMcps(disabledMcps, config, options) and include remote MCPs plus the local lsp stdio MCP.

BUILT-IN MCPs

NameTypeEndpoint / CommandEnv VarsTools
websearchremotemcp.exa.ai (default) or mcp.tavily.comEXA_API_KEY (optional), TAVILY_API_KEY (if tavily)Web search
context7remotemcp.context7.com/mcpCONTEXT7_API_KEY (optional)Library documentation
grep_appremotemcp.grep.appNoneGitHub code search
lsplocal (stdio, node/bun)node packages/lsp-tools-mcp/dist/cli.js mcp or bun packages/lsp-tools-mcp/src/cli.ts mcpLSP_TOOLS_MCP_PROJECT_CONFIG, LSP_TOOLS_MCP_USER_CONFIG, LSP_TOOLS_MCP_INSTALL_DECISIONSstatus, diagnostics, goto definition, references, symbols, prepare_rename, rename

VENDORED LSP ARCHITECTURE

  • The local lsp MCP is vendored at packages/lsp-tools-mcp/.
  • packages/lsp-tools-mcp/ consumes extracted packages/lsp-core/ + packages/mcp-stdio-core/; this directory only builds the OpenCode MCP config.
  • Upstream project: https://github.com/code-yeongyu/lsp-tools-mcp
  • OMO resolves the CLI path dynamically in src/mcp/lsp.ts so both src/ and dist/ runtime layouts work.
  • lsp is registered whenever it is not listed in disabled_mcps, even if its CLI artifact has not been built yet. Source checkouts fall back to the Bun source CLI; packaged builds prefer the Node dist CLI.
  • OpenCode supplies exactly three ordered project config paths to the standalone MCP translator: <cwd>/.opencode/lsp.json, <cwd>/.omo/lsp.json, and <cwd>/.omo/lsp-client.json.
  • The user-level inputs are OpenCode config paths: $XDG_CONFIG_HOME/opencode/lsp.json for server config and $XDG_CONFIG_HOME/opencode/lsp-install-decisions.json for install decisions. The MCP context advertises installDecisionTool: true.
  • The shared daemon runtime is configured only through OMO_LSP_DAEMON_DIR, or the paired OMO_LSP_DAEMON_CLI plus OMO_LSP_DAEMON_VERSION override. Source mode runs packages/lsp-daemon/src/cli.ts with Bun and sets the paired override; dist mode resolves the public @code-yeongyu/lsp-daemon/cli export rather than deep-running generated daemon files.

THREE-TIER SYSTEM

TierSourceMechanism
1. Built-insrc/mcp/3 remote HTTP MCPs + 1 local stdio MCP (lsp) via createBuiltinMcps()
2. Claude Code.mcp.json${VAR} expansion via claude-code-mcp-loader
3. Skill-embeddedSKILL.md YAMLManaged by SkillMcpManager (stdio + HTTP)

FILES

FilePurpose
index.tscreateBuiltinMcps() registry for built-in MCPs
types.tsMcpNameSchema: "websearch" | "context7" | "grep_app" | "lsp"
websearch.tsExa/Tavily provider with config
context7.tsContext7 with optional auth header
grep-app.tsGrep.app (no auth)
lsp.tsLocal stdio MCP config for packaged lsp-tools-mcp