mcpField
M
Mcp Icon Visual

Mcp Icon Visual

ローカル
github.com/n0isyメディア・デザイン133 週間前に更新

Mcp Icon Visual について

Mcp Icon Visual は、AI エージェント向けに SVG アイコンの検索、取得、比較、描画を行う MCP サーバーです。画像グリッドを返し、視覚対応モデルが候補を見て判断できます。

主な機能

  1. 01意味に基づくアイコン検索
  2. 02URL、ファイル、Iconify IDからSVGを取得
  3. 03最大16個のアイコンを比較グリッドに描画
  4. 04インラインSVGとローカルファイルの解決

活用シーン

  1. 01検索結果を見比べてアイコンを選択
  2. 02SVGの編集版を並べて確認
  3. 03候補アイコンと既存のプロジェクトスタイルを照合

MCP 対応

search_icons、get_svg、render_grid を MCP ツールとして提供します。stdio で通信し、描画画像を MCP クライアントに返します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"brain-mcp-icon-visual": {
"command": "npx",
"args": [
"-y",
"@br-ai-n/mcp-icon-visual"
]
}
}
}
起動コマンドnpx -y @br-ai-n/mcp-icon-visual

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@br-ai-n/mcp-icon-visual0.1.1

ツール

3

掲載時のツール一覧 · 3 週間前に更新

パラメーター型必須説明
sourcestringはいSVG ソース。次を受け付けます: - 検索結果の URL:"https://mdn.alipayobjects.com/…/original" - Iconify ID:"mdi/cloud"、"lucide/home"、"tabler/database" - 絶対ファイルパス:"/home/user/project/icons/logo.svg" - インライン SVG:"<svg xmlns='…'>…</svg>" ローカルファイルには必ず絶対パスを使用してください。

詳細

mcp-icon-visual

MCP Registry npm License: MIT

AI エージェントが SVG アイコンの検索、取得、比較、レンダリングを行える MCP サーバーです。Rust と rmcp SDK で構築されています。

ローカルファイルシステムへのアクセスとリモートレンダリング API を組み合わせ、インライン文字列、URL、ローカルファイル、Iconify ID など、あらゆるソースから SVG を解決し、視覚的な比較グリッドにレンダリングします。

重要なポイントは、すべてのツールが画像を返すことです。視覚機能を備えた LLM はメタデータを受け取るだけでなく、アイコンを見ることができます。これにより、アイコンの選択は当て推量ではなく、視覚的な対話へと変わります。

'machine learning' の search_icons 結果 — 16 個のアイコンを並べた 4x4 グリッド
search_icons("machine learning") — 4x4 グリッド、セル 0〜15、PNG として返されます

エージェントのパイプライン

これらのツールは、視覚機能を備えた AI エージェントが組み合わせて使えるように設計されています。ここでは、実証済みの 3 つのパターンを紹介します。

1. 視覚検索と選択

エージェントがアイコンを検索し、視覚的に最適なものを選択します。URL を見ずに選ぶ必要はありません。

                          ┌─────────────────────────────┐
                          │        Agent + Vision        │
                          └──────────────┬──────────────┘
                                         │
                        ┌────────────────┼────────────────┐
                        v                v                v
                  search_icons     search_icons     search_icons
                  "cloud"          "upload"          "storage"
                        │                │                │
                        v                v                v
                  ┌──────────┐    ┌──────────┐    ┌──────────┐
                  │ 4x4 grid │    │ 4x4 grid │    │ 4x4 grid │
                  │  (sees)  │    │  (sees)  │    │  (sees)  │
                  └────┬─────┘    └────┬─────┘    └────┬─────┘
                       │               │               │
                       └───────────────┼───────────────┘
                                       v
                              "cells 3, 7, 12 match
                               the project style"
                                       │
                                       v
                               render_grid [3 winners]
                                       │
                                       v
                              ┌──────────────────┐
                              │  final comparison │
                              │   grid (sees)     │──> pick best
                              └──────────────────┘

エージェントは複数回検索を実行し、それぞれのグリッドを見て、セル番号で候補を選んだ後、最終候補を横並びにレンダリングして選択します。プロジェクトのビジュアルスタイルに関するコンテキストをエージェントが持っている場合に、特に効果を発揮します。

2. アイコンの反復編集

エージェントが SVG コードを修正し、render_grid を視覚的な差分として使って、反復を通じた進捗を追跡します。

         get_svg "mdi/cloud"
                │
                v
          ┌───────────┐
          │ raw SVG    │
          │ markup     │
          └─────┬─────┘
                │
       ┌────────┴─────────────────────────────────────┐
       │              Edit Loop                        │
       │                                               │
       │   Agent modifies SVG code                     │
       │        │                                      │
       │        v                                      │
       │   render_grid [original, v1, v2, v3]          │
       │        │                                      │
       │        v                                      │
       │   ┌──────────────────────────────┐            │
       │   │ cell 0: original             │            │
       │   │ cell 1: thicker strokes      │            │
       │   │ cell 2: rounded corners      │            │
       │   │ cell 3: filled variant       │            │
       │   └──────────────┬───────────────┘            │
       │                  │                            │
       │        agent sees all versions                │
       │        decides next edit                      │
       │                  │                            │
       │                  └──── loop ──────────────────┘
       │
       v
  save final SVG to disk

各反復で、エージェントはすべてのバージョン(オリジナルと編集後)をインライン SVG として render_grid に渡します。1 枚の画像で横並びに表示し、反復を続けるか終了するかを判断します。参照用として、オリジナルは常にセル 0 に置かれます。

3. スタイルの一致と一貫性

エージェントが、新しいアイコンを既存プロジェクトのアイコンと同じビジュアルスタイルにします。

  Project icons on disk             Candidate sources
  ─────────────────────             ─────────────────
  /app/icons/nav-home.svg           search_icons "settings"
  /app/icons/nav-search.svg              │
  /app/icons/nav-profile.svg             v
          │                        picks cells 2, 5, 9
          │                              │
          └──────────┬───────────────────┘
                     v
              render_grid [
                /app/icons/nav-home.svg,      ← cell 0: existing
                /app/icons/nav-search.svg,    ← cell 1: existing
                /app/icons/nav-profile.svg,   ← cell 2: existing
                candidate_url_1,              ← cell 3: candidate
                candidate_url_2,              ← cell 4: candidate
                candidate_url_3,              ← cell 5: candidate
                "<svg>...custom edit...</svg>" ← cell 6: agent's edit
              ]
                     │
                     v
              ┌────────────────────────────────┐
              │ grid image:                     │
              │  existing icons  vs  candidates │
              │  (agent sees style match/clash) │
              └────────────────┬───────────────┘
                               │
                      agent judges:
                  "cell 4 matches stroke weight
                   and corner radius of cells 0-2,
                   cell 3 is too thin,
                   cell 5 wrong fill style"
                               │
                               v
                       get_svg cell_4_url
                               │
                               v
                    save to /app/icons/nav-settings.svg

ローカルファイルパスとリモートソースを 1 つのグリッドに混在させることで、エージェントは既存プロジェクトのアイコンと候補を一度に視覚的に比較できます。このグリッドはスタイル監査ツールになります。

パイプラインの組み合わせ

これらのパターンは自然に組み合わせられます。実際のワークフローでは、次のように進められます。

  1. 複数のキーワードで検索する(パイプライン 1)
  2. 上位候補を既存プロジェクトのアイコンと比較する(パイプライン 3)
  3. 最も近い候補を編集し、スタイルの不一致を修正する(パイプライン 2)
  4. 最終的なアイコンを、アイコン一式ともう一度照合する(パイプライン 3)

すべて、視覚機能を備えた 1 つのエージェントが、3 つのツールを使って実行します。

ツール

search_icons

セマンティックアイコン検索です。4x4 の PNG グリッド(512x512、セル 0〜15)と、セル番号と SVG URL の対応表を返します。

パラメーター型デフォルト説明
keywordstring必須セマンティック検索クエリ(例:"cloud computing"、"arrows")
backgroundstring"#FFFFFF"グリッドの背景色。CSS の 16 進数カラー
colorstring | nullnullすべてのアイコンを、この CSS の 16 進数カラーに変更します
get_svg

あらゆるソースから SVG マークアップを取得します。確認または変更に使える完全な SVG 文字列を返します。

パラメーター型説明
sourcestringURL、Iconify ID(mdi/cloud)、絶対ファイルパス、またはインラインの <svg>
render_grid

1~16 個の SVG を 4x4 の比較グリッド(512x512、セル 0~15)にレンダリングします。アイコンのバリエーションを並べて比較したり、検索結果と併せてローカルのアイコンをプレビューしたりするのに便利です。

パラメーター型デフォルト説明
sourcesstring[]必須1~16 個の SVG ソース(URL、Iconify ID、ファイルパス、またはインライン SVG)
backgroundstring"#FFFFFF"グリッドの背景色。CSS の hex

ソースの解決

すべてのツールは、ソースを自動的に分類する統一された解決パイプラインを共有しています。

ソースの種類例解決方法
インライン SVG<svg xmlns="...">...</svg>そのまま返されます
URLhttps://mdn.alipayobjects.com/.../originalAPI 経由で解決されます
ファイルパス/home/user/icons/logo.svgローカルディスクから読み込まれます
Iconify IDmdi/cloud, lucide/homeAPI 経由で解決されます

ファイルパスは、プレフィックス(/、./、~/)または .svg 拡張子によって検出されます。http:///https:// を含まないその他のすべての値は、Iconify ID として扱われます。

グリッド形式

すべてのグリッド出力は、4x4 レイアウト(128x128 セル)の 512x512 PNG 画像で、左から右、上から下に 0~15 の番号が付いています。

┌────┬────┬────┬────┐
│  0 │  1 │  2 │  3 │
├────┼────┼────┼────┤
│  4 │  5 │  6 │  7 │
├────┼────┼────┼────┤
│  8 │  9 │ 10 │ 11 │
├────┼────┼────┼────┤
│ 12 │ 13 │ 14 │ 15 │
└────┴────┴────┴────┘

各セルの左下にセル番号が表示されます。未使用のセルには番号のみが表示されます。

インストール

npx(推奨)

ビルドは不要です。Linux(x64/arm64)、macOS(Intel/Apple Silicon)、Windows(x64)で動作します。

{
  "mcpServers": {
    "icon-visual": {
      "command": "npx",
      "args": ["-y", "@br-ai-n/mcp-icon-visual"]
    }
  }
}
ソースから

Rust(edition 2024)が必要です。

cargo build --release --target x86_64-unknown-linux-musl

リリースプロファイルでは、完全に静的なバイナリが生成されます(musl libc、rustls-tls、LTO、シンボル削除)。

使い方

# Default upstream API
./mcp-icon-visual

# Custom API endpoint
./mcp-icon-visual --api-base http://localhost:3000

サーバーは MCP プロトコルを使用して stdio 経由で通信します。

MCP クライアントの設定

Claude Desktop / Cursor
{
  "mcpServers": {
    "icon-visual": {
      "command": "npx",
      "args": ["-y", "@br-ai-n/mcp-icon-visual"]
    }
  }
}
カスタム API エンドポイント
{
  "mcpServers": {
    "icon-visual": {
      "command": "/path/to/mcp-icon-visual",
      "args": ["--api-base", "http://localhost:3000"]
    }
  }
}

プロジェクト構成

src/
├── main.rs           # Entrypoint, CLI args, stdio transport
├── server.rs         # IconServer + MCP tool routing + response builders
├── api_client.rs     # HTTP client for upstream rendering API
├── resolve.rs        # Source classification and SVG resolution
├── error.rs          # Error types
└── tools/
    ├── mod.rs
    ├── search_icons.rs   # SearchIconsParams
    ├── get_svg.rs        # GetSvgParams
    └── render_grid.rs    # RenderGridParams

テスト

# Unit tests (source classification)
cargo test

# Integration tests (requires network access to icons.buan.me)
cargo test -- --ignored

依存関係

クレート用途
rmcpMCP サーバー SDK(ツールのルーティング、stdio トランスポート)
tokio非同期ランタイム
reqwestHTTP クライアント(rustls-tls、OpenSSL 不使用)
serde / serde_jsonシリアライズ
schemarsツールパラメーター用 JSON Schema の生成
clapCLI 引数の解析
base64Base64 エンコード
tracingロギング
thiserrorエラー導出マクロ

ライセンス

MIT License

Copyright (c) 2025

本ソフトウェアおよび関連ドキュメントファイル(以下「本ソフトウェア」)の複製を取得するすべての人に対し、無償で、本ソフトウェアを制限なく取り扱うことを許可します。これには、本ソフトウェアを使用、複製、変更、結合、公開、配布、サブライセンス、および/または販売する権利が含まれます。また、本ソフトウェアを提供する相手にこれらを許可することも認められます。ただし、以下の条件に従うものとします。

上記の著作権表示および本許諾表示は、本ソフトウェアのすべての複製または実質的な部分に含めるものとします。

本ソフトウェアは「現状のまま」提供され、商品性、特定目的への適合性、および非侵害性に関する保証を含め、明示的または黙示的を問わず、いかなる保証もありません。作者または著作権者は、契約行為、不法行為、その他の行為を問わず、本ソフトウェアまたは本ソフトウェアの使用もしくはその他の取り扱いに起因または関連して発生する、いかなる請求、損害、その他の責任についても責任を負いません。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。