/ ディレクトリ / プレイグラウンド / Serena
● コミュニティ oraios ⚡ 即起動

Serena

作者 oraios · oraios/serena

Serena は、言語サーバーを利用したセマンティック検索とシンボリック編集をエージェントにボルト付けします。そのため、名前変更/リファクタリング/参照の検索は実際に巨大なコードベースにわたって機能します。

Serena は「エージェントの IDE」です。 ファイルを grep して祈る代わりに、40 以上の言語に対応する実際の LSP バックエンドを使用して、「この関数はどこで呼び出されますか?」、「型階層は何ですか?」、「使用されている場所でこのシンボルの名前を変更します」などのシンボル レベルの質問に答えます。 その後、エージェントが関数本体の置換、シンボルの安全な削除、または AST ノードに関連するコードの挿入を行うことができるように、シンボリック編集ツールが同梱されます。 メモリ システムはセッション間でコンテキストを保持します。クロードは先週中断したところから再開します。

なぜ使うのか

主な機能

ライブデモ

実際の動作

serena.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "serena": {
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "serena": {
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "serena": {
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "serena": {
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "serena",
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "serena": {
      "command": {
        "path": "uvx",
        "args": [
          "--from",
          "serena-agent",
          "serena",
          "start-mcp-server",
          "--context=claude-desktop"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add serena -- uvx --from serena-agent serena start-mcp-server --context=claude-desktop

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: Serena

100 万行のコードベース全体で関数の呼び出し元をすべて検索します

👤 成熟した大規模なリポジトリで作業するエンジニア ⏱ ~10 min intermediate

使うタイミング: 呼び出し元の完全で正しいリストが必要です。grep は誤検知 (コメント、文字列、他のスコープ内の同様の名前の関数) を発生させ、オーバーロードを見逃します。

前提条件
  • UVがインストールされています — カール -LsSf https://astral.sh/uv/install.sh | しー
  • Serena の LSP がサポートする言語で開かれたプロジェクト — ほとんどの主流言語はそのまま使用できます
フロー
  1. プロジェクトを開く
    Serena で /abs/path/to/repo を開きます。 LSP インデックスが構築されたことを確認します。✓ コピーしました
    → Serena はプロジェクト ルートとロードされた LSP を報告します
  2. シンボル参照の検索
    「PaymentService.chargeCustomer」のすべての呼び出しサイトを見つけます。 オーバーロードとオーバーライドを含め、テストを除外します。✓ コピーしました
    → 正確なファイル:行リスト、コメント/文字列からの誤検知なし
  3. 影響を要約する
    呼び出しサイトをモジュールごとにグループ化します。 グループごとに、呼び出し元が戻り値をどのように処理するかを教えてください。✓ コピーしました
    → フラットなリストではなく、モジュールごとにグループ化された説明

結果: 変更がどのような影響を与えるかは、実際に変更する前に正確にわかります。

注意点
  • 一部の多言語リポジトリには複数の LSP が必要です — 言語がサーバーを共有していない場合は、サブプロジェクトごとに Serena を起動します
組み合わせ: filesystem · github

依存関係を壊さずにパブリック API シンボルの名前を変更する

👤 ライブラリ/フレームワークのメンテナー ⏱ ~15 min intermediate

使うタイミング: ファイルの外部で使用される可能性のある関数またはクラスの名前を変更しようとしています。テキストの置換ではなく、LSP に正確な名前変更が必要です。

前提条件
  • git ツリーをクリーンアップする — git status clean なので、コミットする前に差分を確認できます
フロー
  1. 名前変更の予行演習を行う
    src/api/users.ts の「getUser」の名前を「fetchUserById」に変更します。 Serena のシンボリックな名前変更を使用します。 差分をプレビューします。まだ適用しないでください。✓ コピーしました
    → 影響を受けるすべてのファイルの差分プレビュー
  2. 確認して申し込む
    名前の変更を適用します。 Serena が曖昧であるとフラグを立てたファイルを教えてください。✓ コピーしました
    → 名前の変更が適用され、あいまいさのリスト (存在する場合)
  3. スイートを実行する
    テストを実行し、古い名前を参照するものに焦点を当てて失敗を報告します。✓ コピーしました
    → テストは緑色、または正確な失敗リスト

結果: 名前変更は、パブリック再エクスポート、index.ts バレル、古い JSDoc 参照を含むリポジトリ全体でクリーンです。

注意点
  • 動的アクセス (obj['getUser']) が LSP の名前変更によって捕捉されない — シンボリックな名前変更後、古い名前文字列に対して grep を 1 回実行します。 Serena は静的に解決できなかったものを表面化します
組み合わせ: filesystem · git

周囲のコードを妨げることなく関数本体を置き換えます

👤 大きなファイル内で外科的編集を行うエンジニア ⏱ ~10 min intermediate

使うタイミング: 「calculatePrice」の実装を書き換える必要がありますが、その署名と JSDoc は正確に保持されます。 ファイル全体の再生成は間違ったツールです。

フロー
  1. シンボルをターゲットにする
    src/billing/pricing.ts で、calculatePrice を見つけます。 現在の本文のみを表示します (署名やドキュメントは表示しません)。✓ コピーしました
    → 本文のみのスニペット
  2. 本体を交換する
    本体のみを非課税対応バージョンに置き換えます。 署名と JSDoc をそのまま保持します。✓ コピーしました
    → Serena のボディ交換ツールが使用されます。 差分で署名が変更されていない

結果: 最小限でレビュー可能な差分 — 偶発的な空白や書式設定の変更はありません。

注意点
  • エージェントはフルファイル書き込みに戻ります — 「write_file ではなく、Serena のシンボリック置換を使用する」ことを明示的に指示します。
組み合わせ: filesystem

なじみのないコードベースを 1 時間でオンボーディング

👤 新入社員、請負業者、または OSS 貢献者 ⏱ ~60 min beginner

使うタイミング: 500 ファイルのリポジトリのクローンを作成したばかりなので、貢献する前にメンタル マップが必要です。

フロー
  1. アーキテクチャを取得する
    Serena でこのリポジトリを開きます。 最上位モジュール、そのパブリック エクスポート、およびメイン エントリ ポイントのマップを構築します。 Serena メモリに「arch_overview」として保存します。✓ コピーしました
    → 構造化された概要。 思い出メモを作成しました
  2. ユーザーのリクエストに従う
    ユーザーが POST /orders を押したときに何が起こるかをトレースします。 すべてのファイルを順番に説明します。✓ コピーしました
    → リクエスト → ハンドラー → サービス → リポジトリ トレイル (Serena の参照ルックアップを使用)
  3. 注意点に注意してください
    異常に見えるパターン (カスタム デコレータ、マジック定数) を「注意点」としてメモリに保存します。✓ コピーしました
    → 次回のセッションのために保存された思い出メモ

結果: 次のセッションでは、クロードはすでに地図を知っています。再オンボーディングの費用はかかりません。

組み合わせ: filesystem · github

組み合わせ

他のMCPと組み合わせて10倍の力を

serena + filesystem

Serena によるシンボル認識ナビゲーション + ファイルシステムによる任意の I/O

Serena を使用して認証モジュールを検索し、ファイルシステムを使用してそのフォルダーの新しい README を作成します。✓ コピーしました
serena + github

Serena を使用してローカルでリファクタリングします。 ブランチをプッシュし、GitHub MCP 経由で PR を開きます

Serena で ApiClient → HttpClient の名前を変更し、「refactor(api): rename ApiClient」というタイトルの PR を開きます。✓ コピーしました
serena + git

コミットする前に Serena が生成した diff を確認してください

Serena の名前変更後の git diff を見せてください。 疑わしいものがある場合は、コミットする前にフラグを立ててください。✓ コピーしました
serena + context7

ライブラリ対応リファクタリング — ローカル移動には Serena、v-next API のマッチングには Context7

このファイルを Next.js 15 パターンに移行します。 新しい API には Context7 を使用し、変更をシンボリックに適用するには Serena を使用します。✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
find_symbol name: str, scope?: str LSP 精度を使用して名前でクラス/関数/変数を検索します free (local)
find_references symbol: ref シンボルのすべての呼び出し元/使用法。 grepよりもはるかに優れています free
get_symbols_overview path: str 何を読むかを決める前にファイル/モジュールの概要を確認する free
rename_symbol symbol: ref, new_name: str, dryRun?: bool プロジェクト全体で安全に名前を変更 free
replace_symbol_body symbol: ref, new_body: str シグネチャに触れずに関数/メソッド本体を所定の位置で交換します free
insert_before_symbol / insert_after_symbol symbol: ref, code: str AST ノードにアンカーされたデコレータ、インポート、または兄弟宣言を追加する free
move_file / move_dir src: str, dst: str コードを再配置し、LSP にすべてのインポーターを修正させます free
write_memory / read_memory key: str, value?: str セッション全体でプロジェクトのコンテキスト (アーキテクチャ マップ、注意事項) を保持する free
search_pattern regex: str, path: str ターゲットが名前付きシンボル (文字列リテラル、パターン) ではない場合のフォールバック free

コストと制限

運用コスト

APIクォータ
なし - ローカル LSP
呼び出しあたりのトークン
Small — Serena はファイル全体ではなく、シンボル スコープのスニペットを返します
金額
無料
ヒント
大きなファイルでは read_text_file よりも get_symbols_overview + find_symbol を優先します。消費するトークンが 10 分の 1 になり、より良い信号が得られます。

セキュリティ

権限、シークレット、影響範囲

認証情報の保管: なし - すべてがローカルで実行されます
データ送信先: デフォルトではなし。 Serena はシェル コマンドを実行できます (無効化)。 Claude に書き込みアクセスを許可する前に、ツール リストを確認してください。
絶対に付与しない: Access to directories outside your project

トラブルシューティング

よくあるエラーと対処法

LSP の起動に失敗しました / シンボルが見つかりませんでした

プロジェクトの言語に合わせて言語サーバーがインストールされていることを確認します (例: Python の場合は pyright、TS の場合は typescript- language-server)。 Serena のログには、使用している LSP がリストされます。

確認: Run Serena in verbose mode; confirm LSP handshake succeeded
名前の変更により一部のファイルがスキップされました

通常、ファイルが LSP のワークスペースにないことを意味します。 プロジェクトのルートがサブパッケージではなく、monorepo ルートであることを確認します。

確認: Ask Serena to list its workspace roots
エージェントは Serena ツールではなく生のファイル書き込みにフォールバックします

CLAUDE.md に明示的なルールを追加します。「シンボリック操作の場合は、常に Serena のツールを使用します。 既存の .py/.ts ファイルに write_file を書き込まないでください。

確認: Re-run the task; inspect tool_use calls in the trace
uvx: コマンドが見つかりません

最初に uv をインストールします。curl -LsSf https://astral.sh/uv/install.sh | し、 端末を再度開きます

確認: uvx --version

代替案

Serena 他との比較

代替案代わりに使う場面トレードオフ
JetBrains MCPすでに JetBrains IDE を使用しており、エージェントにリファクタリング ツールを実行させたいと考えています。オープンな IDE プロセスが必要です。 重い
filesystemシンボルを認識する必要はありません。ファイルの読み取り/書き込みだけを行います。セマンティック検索や安全な名前変更はありません
mcp-language-serverSerena のメモリ + シェル層ではなく、より小さな LSP のみのラッパーが必要です高レベルのツールが少ない。 自分でワークフローを作成する

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る