30秒でClaude Code・Cursor・Zedにll-langのMCPを組み込む

Dev.to / 2026/4/27

💬 オピニオンDeveloper Stack & InfrastructureTools & Practical UsageModels & Research

要点

  • この記事は、LLMにll-langを効果的に扱わせるには、シェル/ターミナルの生出力を解釈させるのではなく、MCPを使うのが最適だと主張しています。
  • ll-langにはビルトインのMCPサーバーが用意されており、`lllc mcp` で起動することで、エディタやエージェントがコンパイラやプロジェクトの機能を“構造化されたツール”として呼び出せるようになります。
  • 設定が完了すると、エージェントは「コンパイルできるか」「特定のエラーコードの意味」「シンボルの定義場所」「ビルド可能なターゲット」などをツールに基づいて質問でき、スクレイピングではなく構造化JSONで回答を得られます。
  • ガイドでは、Claude Code・Cursor・ZedのようなクライアントにMCPサーバーを接続するための設定例や、MCP設定ファイルの典型的な配置、再起動後にサーバーが表示されることの確認方法を示しています。
  • さらに、READMEと`docs/user-guide/09-mcp.md`に記載された既存のMCPツール(約30個)が、AIのコーディングループで使いたいコンパイル/チェック等のIDE風ワークフローを幅広くカバーすると述べています。

30秒でClaude Code、Cursor、またはZedにll-langをワイヤリングする

LLMにll-langを書かせて生産的にしたいなら、「ターミナルを開いて、モデルがシェルの出力を解釈できることを祈る」ような設定ではありません。より良い方法はMCPです。

ll-langにはlllc mcp経由で組み込みのMCPサーバーが同梱されているため、エディタはコンパイラやプロジェクトのツールを構造化されたツールとして呼び出せます。

つまり、エージェントは次のような質問ができます:

  • これ、コンパイルできますか?
  • E005はどういう意味ですか?
  • このシンボルはどこで定義されていますか?
  • どんなターゲットをビルドできますか?

スクレイピングしたターミナルのテキストではなく、構造化されたJSONを返してもらえます。

1. MCPサーバーを追加する

ll-lang READMEとMCPユーザーガイドの現在の設定の形を使います:

{
  "mcpServers": {
    "ll-lang": {
      "command": "lllc",
      "args": ["mcp"]
    }
  }
}

lllcがあなたの$PATHにない場合は、commandをバイナリへの絶対パスに置き換えてください。ローカルリポジトリのチェックアウトでは、好みのインストールパスとしてブートストラップ用ラッパーを指すこともできます。

典型的な場所:

  • Claude Code: ~/.config/claude/mcp.json
  • Cursor: プロジェクトの.cursor/mcp.jsonまたは同等のMCP設定パス
  • Zed: あなたのMCPサーバー設定ファイル

重要なのは「コマンドそのもの」: lllc mcp.
MCPサーバー名はあなたが決めて構いません。READMEでは現在lllcが示されていますが、MCPガイドではll-langになっています。

2. クライアントを再起動して、サーバーが表示されることを確認する

クライアントがMCPサーバーをリロードすると、ll-langは利用可能なツールプロバイダとして表示されるはずです。

その時点で、エージェントはシェルコマンドから挙動を推測するのではなく、ll-langを直接呼び出せます。

3. 取得できるツール

現在のREADMEとdocs/user-guide/09-mcp.mdには30個のツールが記載されています。これらは、AIコーディングのループで実際に欲しいワークフローをカバーしています:

  • コアのコンパイル/チェック: compile_source, check_source, compile_file, check_file
  • 診断と修復: diagnose_source, diagnose_file, explain_error, fix_suggest, apply_fix_preview
  • フォーマットとAST検査: format_source, format_file, parse_source, typed_ast
  • プロジェクトレベルの操作: project_graph, check_project, build_project
  • シンボルのナビゲーション: symbols, definition, references
  • 依存関係のヘルパー: mod_add, mod_tidy, mod_why
  • FFIヘルパー: ffi_inspect, ffi_validate
  • テストヘルパー: test_list, test_run
  • カタログ/メタ: stdlib_search, list_errors, lookup_error, list_targets

これだけあれば、真剣な内側ループは十分です。モデルは単に「コードを書く」だけではありません。プロジェクトを検査し、診断を求め、stdlibを検索し、構造化されたフィードバックでエラーを修復できます。

4. 役に立つ最短のワークフロー

MCPを組み込めば、生産的なループはシンプルです:

  1. モデルに、小さなll-langモジュールを下書きさせる。
  2. check_sourceまたはcheck_fileを呼び出す。
  3. エラーが返ってきたら、lookup_errorまたはexplain_errorを呼び出す。
  4. 修正を適用して、check_sourceを再実行する。
  5. 問題なければ、build_projectまたはcompile_fileを使う。

このループは、次よりもはるかに密です:

write -> シェルコマンドを実行 -> 混ざったstdout/stderrを確認 -> 何が失敗したか推測する

5. この設定が重要な理由

ll-langはLLMによるコード生成のために設計されているため、コンパイラの出力は最終的な関門であるだけでなく、作者体験の一部です。

例:

  • E005 TagViolationは、タグ付きの値が必要なところに、タグなしの値を渡したことをエージェントに伝えます。
  • E004 UnitMismatchは、演算で両立しない単位が出会ったことを伝えます。
  • lookup_errorは、モデルにドキュメントを手作業で探させることなく、エラーコードを短い説明に変換できます。

プロトコルが構造化されているため、モデルは散文やターミナルの書式を解釈しようとするのではなく、正確なフィールドに基づいてルーティングできます。

6. 動作確認のための最小プロンプト

MCPを接続したら、次を試してください:

tag UserIdで小さなll-langモジュールを作り、Str[UserId]を受け取る関数を用意し、そしてコンパイルできるか確認します。失敗したら、ll-langのMCPツールで修正してください。

配線が正しければ、モデルはシェル出力のパースにデフォルトで逃げるのではなく、ll-langのツールを直接使うはずです。

7. インストールとリポジトリリンク

リポジトリ: https://github.com/Neftedollar/ll-lang
ランディングページ: https://neftedollar.com/ll-lang/

READMEからのブートストラップパス:

git clone https://github.com/Neftedollar/ll-lang.git
cd ll-lang
LLLC_BOOTSTRAP_REINSTALL=1 ./tools/check-selfhost-ci.sh

そして、MCP設定をそのまま保持します:

{
  "mcpServers": {
    "ll-lang": {
      "command": "lllc",
      "args": ["mcp"]
    }
  }
}