Skip to content

feat: mcp-nixosのfaviconをCaddyで直接配信する#1306

Merged
ncaq merged 1 commit into
masterfrom
mcp-nixos-favicon
Jul 3, 2026
Merged

feat: mcp-nixosのfaviconをCaddyで直接配信する#1306
ncaq merged 1 commit into
masterfrom
mcp-nixos-favicon

Conversation

@ncaq

@ncaq ncaq commented Jul 3, 2026

Copy link
Copy Markdown
Owner

mcp-nixos(fastmcp)自体はfaviconを提供しないため、
以前はCloudflareのリダイレクトルールでGitHub上のfaviconに302で誘導していました。
しかしMCPクライアントが使うfaviconリゾルバ(Google s2など)は、
クロスホストへのリダイレクトを追跡しないため効果がなく、
サブドメインにfaviconが無いと判定されて、
親ドメインncaq.netのfaviconにフォールバックしてしまっていました。

そこでmicrovm内にCaddyを前段として追加し、
/favicon.icoとトップページを200で直接配信します。
faviconはmcp-nixosリポジトリのものをコミットをpinしたfetchurlで取得します。
/mcpはループバックの8081で待ち受けるmcp-nixos本体へリバースプロキシします。
ホスト側のseminarでも既にCaddyを使っているため、
一貫性を考えてリバースプロキシにはCaddyを選びました。
なおCaddyのreverse_proxyはtext/event-streamを検出すると、
自動でストリーミングに切り替わるためSSE向けの追加設定は不要です。

対応するCloudflare側のリダイレクトルールの削除は、
infraリポジトリの方で行います。

mcp-nixos(fastmcp)自体はfaviconを提供しないため、
以前はCloudflareのリダイレクトルールでGitHub上のfaviconに302で誘導していました。
しかしMCPクライアントが使うfaviconリゾルバ(Google s2など)は、
クロスホストへのリダイレクトを追跡しないため効果がなく、
サブドメインにfaviconが無いと判定されて、
親ドメイン`ncaq.net`のfaviconにフォールバックしてしまっていました。

そこでmicrovm内にCaddyを前段として追加し、
`/favicon.ico`とトップページを200で直接配信します。
faviconはmcp-nixosリポジトリのものをコミットをpinした`fetchurl`で取得します。
`/mcp`はループバックの8081で待ち受けるmcp-nixos本体へリバースプロキシします。
ホスト側のseminarでも既にCaddyを使っているため、
一貫性を考えてリバースプロキシにはCaddyを選びました。
なおCaddyの`reverse_proxy`はtext/event-streamを検出すると、
自動でストリーミングに切り替わるためSSE向けの追加設定は不要です。

対応するCloudflare側のリダイレクトルールの削除は、
infraリポジトリの方で行います。
@ncaq ncaq added the Type: Feature New Feature label Jul 3, 2026
@ncaq ncaq self-assigned this Jul 3, 2026
@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

nvd diff: seminar (base: master)

Version changes

  • [C.] #1 Caddyfile-formatted <none> -> <none> x2
  • [C.] #2 X-Reload-Triggers-caddy <none> -> <none> x2
  • [C.] #4 unit-caddy.service <none> -> <none> x2

Added packages

  • [A.] #1 mcp-nixos-webroot <none>
    Closure size: 4961 -> 4965 (32 paths added, 28 paths removed, delta +4, disk usage +12.6KiB).

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mcp-nixosのfavicon問題を、Cloudflareのクロスホストリダイレクト(302)からmicroVM内Caddyによる200直接配信へ切り替える変更です。faviconリゾルバがクロスホストリダイレクトを追跡しないという根本原因の分析が的確で、faviconはコミットpin付きfetchurlで再現性を確保し、mcp-nixos本体を127.0.0.1:8081のループバック待ち受けに移して外部露出をCaddy(:8080)経由のみに限定するなど、設計・多層防御ともに丁寧に作られています。SSEの自動フラッシュ挙動やメモリ見積もりの根拠もコメントで説明されており、全体として問題ありません。

ビルド評価では検証できない実機挙動(Caddy経由のSSE疎通、mcp-nixosの環境変数契約)がいくつかあるため、デプロイ後の疎通確認を推奨します。指摘はいずれも任意対応のNOTEレベルのため、APPROVEとします。

Review metadata
  • Reviewed commit: 02218a1
  • PR: #1306
  • kyosei: 3.5.0
  • kyosei-action: 2.2.5
  • Claude Code: 2.1.174
  • Model: claude-opus-4-8
  • Execution: GitHub Actions (run)

Comment thread nixos/host/seminar/mcp-nixos.nix
Comment thread nixos/host/seminar/mcp-nixos.nix
Comment thread nixos/host/seminar/mcp-nixos.nix
Comment thread nixos/host/seminar/mcp-nixos.nix
Comment thread nixos/host/seminar/mcp-nixos.nix
Comment thread nixos/host/seminar/mcp-nixos.nix
@ncaq ncaq merged commit e35189a into master Jul 3, 2026
10 checks passed
@ncaq ncaq deleted the mcp-nixos-favicon branch July 3, 2026 08:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Type: Feature New Feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant