結論から言うと、OpenCode の LSP はコードを理解する言語サーバーを coding agent に接続する仕組みです。診断、定義、参照、シンボルなどの言語情報をセッションで使えるようになります。LSP は MCP でも formatter でもありません。公式スキーマを確認し、拡張子とコマンドを合わせ、低リスクの作業で検証してください。
OpenCode の LSP とは と検索する人は、略語だけでなく、何が変わるのか、診断が出ない理由、設定場所、無効化されたサーバーの直し方を知りたいはずです。このガイドではその判断をまとめ、インストール、Provider、MCP の話とは分けて説明します。
2026年8月10日に確認した OpenCode 公式 LSP ページのタイトルは LSP Servers です。lsp 設定、command と extensions、初期化オプション、全体の無効化、個別サーバーの無効化、カスタムサーバーの例が掲載されています。具体的なコマンドは各サーバーの公式ドキュメントで確認してください。

OpenCode の LSP とは?言語コンテキストを追加する層
LSP は Language Server Protocol の略です。言語サーバーはプロジェクトの横で動き、診断、シンボル、定義、参照、ホバー情報などを提供します。OpenCode はファイルを単なるテキストとして扱うのではなく、その情報をセッションで利用できます。
実用上のメリットはコンテキストの精度です。TypeScript サーバーが import の関係を理解していれば、agent は型エラーや rename をより具体的に検討できます。ただし、サーバーが起動しない、プロジェクトを読み込めない、言語パッケージに固有設定が必要ということもあります。LSP はテストや diff の確認を置き換えません。
理解の仕方
OpenCode は利用者、LSP サーバーは言語の専門家、リポジトリは事実の基準と考えてください。権限やモデルを変える前に、失敗している層を確認します。
| 層 | 提供するもの | 置き換えられないもの |
|---|---|---|
| LSP | 言語診断、シンボル、定義、参照 | テスト、formatter、レビュー |
| MCP | 外部ツールとデータ | 言語サーバー |
| Formatter | スタイルと整形 | 意味的な診断 |
| Provider/モデル | 推論と生成 | プロジェクトの toolchain |
OpenCode が LSP サーバーを選ぶ仕組み
LSP の項目には実行可能なコマンドと、ファイル拡張子との対応が必要です。コマンドがサーバーを起動し、拡張子の一覧が対象ファイルを示します。実行ファイル、引数、導入方法はサーバーのドキュメントに従い、パッケージ名を推測しないでください。
まず小さなリポジトリで一つの言語を試します。対象拡張子のファイルを開き、プロセスが起動することを確認し、読み取り専用の質問をします。拡張子が一致しないと、サーバーが正常でも OpenCode がファイルに接続できません。

| 確認点 | 確認できる証拠 | 最初に見る場所 |
|---|---|---|
| Command | 引数付きで実行できる | PATH、runtime、パッケージ、stderr |
| Extension | ファイルが項目に一致する | サーバーが記載する拡張子 |
| Workspace | 正しいプロジェクトが開く | Git root と設定 |
| Result | 診断やシンボルが返る | ログと OpenCode 設定 |
最小限の lsp 設定から始める
リポジトリ全体で共有する LSP の決定は、レビューできるプロジェクト設定に置きます。個人の実験は、コマンド、拡張子、プロジェクトの root が分かるまでグローバル設定に残します。設定の範囲と Schema は既存の JSONC ガイドを参照し、このページではサーバーの動作に集中します。
大きな一覧より小さな項目の方が切り分けやすくなります。名前を分かりやすくし、command 配列を明示し、対応する拡張子だけを書きます。初期化オプションは基本プロセスが動いてから追加します。JSON が正しくても実行ファイルや workspace が違う可能性があります。
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"command": ["typescript-language-server", "--stdio"],
"extensions": [".ts", ".tsx"]
}
}
}Schema の形を示す例です。実行ファイルと拡張子は公式のサーバー資料で確認してください。
LSP サーバーを有効化・無効化・カスタマイズする
現在の公式ドキュメントでは、lsp を省略するとすべての LSP サーバーが無効になります。他の設定で有効になったサーバーを全て止めるには lsp: false、一つだけ止めるには disabled: true を使います。遅い、出力が多い、リポジトリに合わない場合に役立ちます。
カスタムサーバーは、通常の設定にない言語や拡張子を扱うためのものです。最初に command と extensions を定義し、初期化は公式資料にある場合だけ追加します。一度に一つだけ変更し、動作した設定を rollback 用に残してください。
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"],
"initialization": { "preferences": { "mode": "strict" } }
}
}
}カスタムコマンドは placeholder です。公式の値に置き換え、秘密情報を Git に入れないでください。
低リスクの作業で OpenCode LSP を確認する
最初から大きなモジュールを書き換えないでください。Git の状態が分かるリポジトリでファイルを一つ開き、シンボル、定義、診断を読み取り専用で尋ねます。エディター、compiler、信頼できるサーバーの結果と比較できる内容にします。
読み取りが成功したら、小さく戻せる変更を一つ行い diff を確認します。OS、command、拡張子、root、テスト用 prompt を記録しておくと、次回も同じ条件で再現できます。
- 確認ブランチと作業ツリーを確認する。
- 一致設定した拡張子のファイルを開く。
- 読み取りシンボル、定義、参照、診断を尋ねる。
- 編集小さく戻せる変更をして diff を見る。
- 記録command、モデル、サーバー、rollback を残す。
opencode lsps are disabled と診断が出ない問題を直す
LSP が無効だと表示されたら、再インストールの前に設定の優先順位を確認します。別のファイルが lsp: false を指定している、プロジェクトにサーバー名がない、個別の disabled が有効という可能性があります。実際のプロジェクトフォルダーと最終的に効く設定を比べます。
有効なのに診断が出ない場合は command と拡張子を確認します。同じ shell で起動し、runtime と PATH、lockfile、compiler 設定、workspace root を調べます。最初だけ遅いなら大きなリポジトリの index 作成かもしれません。
権限は狭く保ちます。LSP に必要なのはプロセスとプロジェクトの文脈であり、広い shell、MCP の追加、auto approval ではありません。層が変わったら権限と MCP のガイドを参照します。

| 症状 | 可能性が高い層 | 最初の修正 |
|---|---|---|
| 全て無効 | 優先順位または lsp: false | 最終設定を見つける |
| 一つだけ無効 | サーバーの flag | 名前と disabled を確認 |
| 診断がない | 拡張子またはプロセス | 拡張子を合わせ command を実行 |
| 最初だけ遅い | index または workspace | 小さい repo とログを試す |
| エディターでは動く | root または設定が違う | editor、Git、OpenCode の root を比較 |
LSP、MCP、formatter、VS Code は別の層
LSP はリポジトリ内の言語インテリジェンス、MCP は外部ツールやデータ、formatter はスタイル、テストは実行できる証拠を担当します。VS Code が診断を表示していても、OpenCode が同じサーバーや root を使っているとは限りません。
症状に合ったページを使います。MCP はローカルとリモートのツールサーバー、VS Code はエディターと terminal、permissions は承認範囲を扱います。この切り分けで OpenCode の LSP の意図を保てます。
opencode.jsonc 設定ガイド:設定範囲と Schema を確認する。
OpenCode の VS Code 利用:エディターの文脈と terminal を比べる。
OpenCode の権限:プロセスとリポジトリの権限を狭くする。
OpenCode MCP:外部ツールと LSP を分ける。
OpenCode LSP よくある質問
OpenCode の LSP とは?
Language Server Protocol の層で、言語サーバーの診断、シンボル、定義、参照を OpenCode が使えるようにします。
OpenCode で LSP を有効にするには?
対応する command と拡張子を lsp に追加し、読み取り専用の質問で command と root を確認します。
OpenCode の LSP サーバーが無効なのはなぜ?
現在の公式ドキュメントでは lsp を省略すると全て無効です。lsp: false や disabled: true も確認してください。
LSP は MCP の代わりになりますか?
いいえ。LSP は言語情報、MCP は外部ツールとデータを扱います。設定と権限の境界も別です。
カスタム LSP サーバーを追加できますか?
できます。lsp に command と extensions を書き、公式資料にある場合だけ初期化を追加し、小さな repo で試します。
VS Code では動くのに OpenCode では動かないのはなぜ?
root、command、拡張子、runtime、設定ファイルが違う可能性があります。入力を比較してください。
確認した公式ソース
OpenCode LSP 参考資料
公式 LSP ページを2026年8月10日に確認しました。command、拡張子、設定項目は変わる可能性があります。