オフライン環境で安全にSerenaを使う-Docker隔離ネットワークで構築するSerena MCPサーバー

こんにちは!ウィルゲート開発室の清水(@takaaki_w)です。
2025年7月末ごろから話題になったSerenaですが、すでにプライベートや業務でお使いの方もいらっしゃるかと存じます。 今回は、SerenaをDockerの隔離ネットワークで安全に使うためのTIPSをご紹介いたします。

Serenaとは?

ドイツのOraios AIという企業が開発した、無料のオープンソースコーディングエージェントツールキットです。 公式リポジトリのREADMEによると、下記のように記載されています。

Serena は、IDE の機能に似た、シンボルレベルでコードエンティティを抽出し、リレーショナル構造を活用する、必須のセマンティックコード取得および編集ツールを提供します。既存のコーディングエージェントと組み合わせることで、これらのツールは(トークンの)効率を大幅に向上させます。

https://github.com/oraios/serena より引用

ざっくり言うと、Claude Codeなどのコーディングエージェントをより賢くしてくれるツールです。

Serenaの実行方法

上述の公式READMEでは、5つの方法が紹介されています(2026年1月現在)。

  1. uvx
  2. ローカルインストール
  3. Docker
  4. Nix
  5. ストリーミングHTTPモード

最も手軽に使えるのは1です。

SerenaをDocker隔離ネットワークで構築した背景

弊社では「内部挙動を把握していないサードパーティ製のMCPの利用は禁止」と定められており、最低限下記を担保する必要があります。

  1. 通信経路上で漏洩するリスクがないこと
  2. 外部サーバーに情報を送信していないこと(AIの学習に使用されないこと)
  3. プロンプトの構築などがブラックボックス化していないこと

Serenaはオープンソースで3は満たしているため、1と2を担保する必要がありました。
最初は公式をはじめ様々な記事を拝見しましたが、漏洩リスクや情報送信について保証しているものは確認できず、事例もuvxやローカルインストールで利用している記事しか発見できませんでした。また、Devinに公式リポジトリを解析させてセキュリティ要件を満たしているか確認させたりもしましたが、担保には至らなかったので、Docker隔離ネットワークを用いることで1と2を担保することになりました。

SerenaをDocker隔離ネットワークで使用する方法

残念ながら全ての設定情報を公開することはできませんが、ポイントとなる部分をご紹介いたします。 Serena公式のcompose.yamlとDockerfileを適宜変更しながらお使いください。

github.com

github.com

compose.yaml設定

隔離ネットワーク設定

外部通信を遮断する設定を行います。

networks:
    internal: true  # 外部通信遮断(trueで遮断、falseで許可)

標準入出力通信

外部通信を遮断したことでネットワーク通信ができなくなるので、stdio(標準入出力)を選択します。

services:
  serena:
    command: ["--transport", "stdio"]
    stdin_open: true  # 標準入力を開いたままにする

Dockerfile設定

docker build時に言語サーバーをインストール

Serenaは必要になったタイミングで動的に言語サーバーをインストールするので、隔離ネットワーク設定していると言語サーバーがインストールできずにプロジェクトの初期オンボーディングやその後のSereneのコマンド実行に失敗します。そのため、事前に言語サーバーを指定してインストールします。

# ========================================
# TypeScript/JavaScript言語サーバーのインストール
# ========================================
RUN mkdir -p /root/.serena/language_servers/static/TypeScript && \
    cd /root/.serena/language_servers/static/TypeScript && \
    npm install typescript typescript-language-server && \
    # 実行可能ファイルの存在確認
    ls -la node_modules/.bin/typescript-language-server && \
    # Serenaが直接呼び出せるようにシンボリックリンク作成
    ln -sf node_modules/.bin/typescript-language-server ./typescript-language-server

これから/おわりに

SerenaをDocker隔離ネットワーク上で利用できるようになるまでにかなりのTry & Errorを繰り返したので、セキュリティ要件を満たしつつSerenaを活用したい方の一助になれば幸いです。