mcpField
M
mcp-unifi-applications

mcp-unifi-applications

ローカル
github.com開発ツール402 週間前に更新

mcp-unifi-applications について

mcp-unifi-applicationsは、公式UniFi APIドキュメントを検索可能にする読み取り専用のMCPサーバーです。開発者やコーディングエージェント向けに6つのUniFiアプリを扱い、コントローラーには接続せず、必要なスキーマやガイド、コード例を返します。

主な機能

  1. 01名前、パス、メソッド、説明によるエンドポイント検索
  2. 02エンドポイントとフィールドのスキーマ確認
  3. 03ガイドとレスポンス例の取得
  4. 045言語のコード例の取得
  5. 056つのUniFiアプリへの対応

活用シーン

  1. 01連携に必要なAPI操作の検索
  2. 02リクエストで受け付けるフィールドの確認
  3. 03例を参考にしたAPIリクエストの作成
  4. 04全ドキュメントを読み込まずにUniFi APIガイドを参照

MCP 対応

エンドポイント検索、スキーマ取得、コード例、ガイドなどのドキュメント検索ツールをMCPクライアントに公開します。UniFiコントローラーや稼働中のネットワーク状態にはアクセスしません。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"kallistox-mcp-unifi-applications": {
"command": "uvx",
"args": [
"mcp-unifi-applications"
]
}
}
}
起動コマンドuvx mcp-unifi-applications

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

パッケージ
pypimcp-unifi-applications0.4.1

ツール

10

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

パラメーター型必須説明
appanyいいえ任意の app フィルター(network、protect、site-manager、innerspace、mobility、carrier-fabric)。省略するとすべてを一覧表示します。
methodanyいいえ任意の HTTP メソッドフィルター(GET、POST、PUT、DELETE、PATCH)。

詳細

UniFi MCP Server — クエリ可能な API ドキュメント

CI PyPI Python Glama

公式のUniFi API ドキュメントを AI エージェントからクエリ可能にする Model Context Protocol(MCP)サーバーです。エンドポイントの検索、スキーマの詳細確認、5 つの言語でのコード例に対応しており、Claude Desktop、Claude Code(VS Code / JetBrains)、または MCP 互換の任意のクライアントで利用できます。

Ubiquiti が API ドキュメントを公開しているすべてのアプリケーション、Network、Protect、Site Manager、InnerSpace、Mobility、Carrier Fabricを網羅しています。

読み取り専用で、認証情報は不要です。ドキュメントを提供するだけで、コントローラーには接続しません。JavaScript で描画されるドキュメント SPA を構造化 JSON に変換する Playwright ベースのスクレーパーと、それを提供する Python MCP サーバーが含まれています。

例

「コンテキストなしで、unifi-applications MCP Server を使うだけで、UniFi の Network API を使って Go でネットワークを作成する方法と、管理対象の IPv4 DHCP ゲートウェイ設定でどのようなオプションがあるか教えてもらえますか?」

Claude Code に接続された unifi-applications MCP サーバー

Claude Code に入力されたプロンプト

Claude は、最初はドキュメントがコンテキストにまったくない状態で、サーバーを通じて回答を導き出します。

呼び出し返される内容
search_endpoints("create network")POST /v1/sites/{siteId}/networks
get_endpoint("network/createnetwork")リクエストボディ — management は識別子付きユニオンです
get_field_schema(…, "management[GATEWAY].ipv4Configuration.dhcpConfiguration")DHCP サブツリーのみ
get_example("network/createnetwork", "go")Go で動作するリクエスト

3 つ目の呼び出しこそ、このサーバーが役立つ理由です。返されるのは次の内容だけで、これが埋め込まれている 70 KB のエンドポイントスキーマは含まれません。

# management[GATEWAY].ipv4Configuration.dhcpConfiguration (in requestBody)
- dhcpConfiguration: object (Gateway Managed IPv4 DHCP Configuration) — IPv4 DHCP
  configuration for this network. If omitted or null, DHCP is not working and hosts
  must get an address statically or from another server in this broadcast domain.
  - mode: string (required)
    [RELAY]:
      - dhcpServerIpAddresses: Array of string — DHCP Server IP addresses
    [SERVER]:
      - ipAddressRange: object
        - start: string (required)
        - stop: string (required)
      - leaseTimeSeconds: integer — The lease time in seconds for addresses in this range.
      - dnsServerIpAddressesOverride: Array of string — List of DNS servers assigned to
        client devices by the DHCP server. If none are specified, they will be selected
        automatically.
      - gatewayIpAddressOverride: string — Gateway IP address provided to DHCP clients.
      - domainName: string — Domain name that can be used to access network in the browser.
      - option43Value: string — Custom DHCP option (43) — the value MUST be the UniFi
        Network application's host IP address.
      - pxeConfiguration: object — Pre execution environment configuration for network boot
      … ntpServerIpAddresses, tftpServerAddress, timeOffsetSeconds, wpadUrl,
        winsServerIpAddresses, pingConflictDetectionEnabled

両方の識別子バリアントと、型と説明が付いたすべてのフィールドが含まれています。これが 「どんなオプションがあるのか」 への回答であり、モデルは UniFi のドキュメントを一度も見ていなくても、これをもとに Go のコードを作成します。

クイックスタート

1. インストール
pip install mcp-unifi-applications

スクレイピング済みのドキュメントはパッケージに同梱されているため、スクレイピングも API キーの設定も不要です。収録内容は次のとおりです。

アプリケーションAPI バージョンスクレイピング日ページ数
Networkv10.6.1062026-10-1282
Protectv7.3.702026-10-1281
Site Managerv1.0.02026-09-1012
InnerSpacev1.3.232026-09-1012
Mobilityv1.0.02026-09-109
Carrier Fabricv1.0.02026-09-1014
ソースからインストールする場合
git clone https://github.com/KallistoX/mcp-unifi-applications.git
cd mcp-unifi-applications
python -m venv .venv
source .venv/bin/activate  # or: source .venv/bin/activate.fish
pip install .
2. クライアントに登録する

Claude Code(VS Code / JetBrains) — プロジェクトのルートに .mcp.json を追加します(追加後、ウィンドウを再読み込みしてください)。

{
  "mcpServers": {
    "unifi-docs": {
      "type": "stdio",
      "command": "mcp-unifi-applications"
    }
  }
}

Claude Desktop — ~/.config/Claude/claude_desktop_config.json(Linux)または ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)に追加します。

{
  "mcpServers": {
    "unifi-docs": {
      "command": "mcp-unifi-applications"
    }
  }
}

コマンドがクライアントの PATH にない場合 — Claude Desktop はシェルの PATH を引き継がないことがよくあります — 代わりに絶対パスを指定してください。例:/path/to/.venv/bin/mcp-unifi-applications。

他の UniFi MCP サーバーとの違い

ほとんどの UniFi MCP サーバーはコントロールプレーンです。コントローラーに対して認証し、デバイス、クライアント、ファイアウォールルールなど、稼働中の状態を読み取ったり変更したりするツールを公開します。これに対して、こちらはナレッジプレーンです。ネットワークを見ることはありません。

コントロールプレーンのサーバーこのサーバー
コントローラーの認証情報が必要はいいいえ
稼働中のネットワーク状態に触れるはいいいえ
「このエンドポイントは何を受け付けますか?」に回答まれそれが主な役割です
ハードウェアを導入する前に役立ついいえはい

両者は競合するのではなく、相互に補完します。UniFi API を使った開発には、こちらをコントロールプレーンのサーバーと組み合わせてください。こちらがモデルに API の構造を伝え、もう一方が API を呼び出します。

OpenAPI 仕様をモデルに渡すだけではだめですか?

Ubiquiti は仕様を公開しています。developer.ui.com/<app>/v<version>/openapi.json です。優れた仕様ですが、エージェントにとって最も必要な情報が含まれていません。Network v10.4.57 の場合(44 パス、73 オペレーション、379 スキーマ):

  • コード例は 0 件です。 x-codeSamples はどこにもありません。このサーバーは、エンドポイントごとに curl、Go、Node.js、Python、Ansible の 5 種類の例を、それぞれローカル版とリモート版で提供します。
  • レスポンス例は 0 件です。 このサーバーは、すべてのエンドポイントのレンダリング済みレスポンス例を提供します。
  • ガイドページがありません。 フィルタリング構文、エラー処理、利用開始方法などは、レンダリング済みドキュメントにしかありません。

また、409 KB の仕様書はコンテキストウィンドウに有効活用できる形で収まりません。get_field_schema は 70 KB のエンドポイントスキーマではなく、1 つのフィールドのサブツリー(management[GATEWAY].dhcpV4)を返します。そのため、モデルは必要な情報だけを取得できます。

対応アプリケーション

アプリケーションURLローカル/リモート備考
Networkdeveloper.ui.com/network両方デフォルトのアプリ
Protectdeveloper.ui.com/protect両方
Site Managerdeveloper.ui.com/site-managerリモートのみローカル/リモートの切り替えなし
InnerSpacedeveloper.ui.com/innerspace両方早期アクセス版。バージョンラベルは v1.3.23 (EA) と表示されます
Mobilitydeveloper.ui.com/mobilityリモートのみサイドバーから mobility.ui.com へリンクします
Carrier Fabricdeveloper.ui.com/carrier-fabricリモートのみSubscriber API

すべてのアプリケーションで、バージョンのドロップダウン、エンドポイントページ、ガイドページを備えた同じドキュメント SPA 構造を共有しています。そのため、アプリケーションの追加は scrape.mjs の APPS オブジェクトにエントリーを 1 つ追加するだけです。サーバーが新しいアプリケーションのディレクトリを自動で検出します。

利用可能なツール

ツール説明
list_endpointsすべての API エンドポイントを一覧表示します。HTTP メソッドまたはアプリケーションで絞り込むこともできます
search_endpoints名前、パス、メソッド、説明からあいまい検索します(アプリケーションで絞り込み可能)
get_endpointエンドポイントの完全なスキーマを返します(要約または生の JSON)
get_endpoint_groupリソースのすべての CRUD オペレーションを返します(例:「networks」)
get_examplecurl、Go、Node.js、Python、Ansible のコード例を返します(ローカル/リモート)
get_response_sampleエンドポイントの JSON レスポンス例を返します
find_fieldすべてのエンドポイントスキーマからフィールド名を検索します
get_field_schema特定のフィールドのサブツリーを取得します(例:management[GATEWAY].dhcpV4)
get_guideAPI ガイドページを返します(フィルタリング構文、エラー処理、利用開始方法)
get_docs_info読み込み済みのドキュメントを表示します。アプリケーションごとの API バージョン、スクレイピング日、エンドポイント数、ガイド数が含まれます

複数の結果を返すツールでは、任意の app パラメーター(network、protect、site-manager、innerspace、mobility、carrier-fabric)を指定して、アプリケーションで絞り込めます。

環境変数

変数デフォルト説明
DOCS_DIRインストール済みパッケージ内の docs/ ディレクトリスクレイピング済みの JSON ドキュメントを含むディレクトリです。アプリケーションごとに 1 つのサブディレクトリ(network/、protect/ など)が必要です。チェックアウトの最新のスクレイピング結果を参照するように設定できます。

ドキュメントの再スクレイピング

週次ワークフローの実行前に新しい API バージョンを取得する場合、またはアプリケーションを追加する場合にのみ必要です。

Docker コマンド(Playwright/Chromium が必要)
# Build the scraper image
docker build -t unifi-scraper .

# Scrape Network API docs (default, latest version)
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs

# Scrape Protect API docs
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs --app protect

# Scrape Site Manager API docs
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs --app site-manager

# Scrape InnerSpace API docs
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs --app innerspace

# Scrape Mobility or Carrier Fabric API docs
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs --app mobility
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs --app carrier-fabric

# Scrape a specific API version
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs --app network --version v9.5.21

# List available API versions for an app
docker run --rm unifi-scraper node scrape.mjs --app protect --list-versions

# Scrape specific pages only
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs createnetwork filtering

# Force re-scrape (overwrite existing files)
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs --force

スクレイパー CLI

オプションと引数
node scrape.mjs [options] [slug...]

Options:
  --app <name>      Application: network (default), protect, site-manager, innerspace, mobility, carrier-fabric.
  --version <ver>   API version to scrape (e.g. v10.1.84). Default: latest.
  --list-versions   Print available versions and exit.
  --force           Re-scrape even if output file exists.

Arguments:
  [slug...]         Scrape only these pages. Omit to scrape all pages.

スラッグはドキュメント URL の最後のパス要素です: https://developer.ui.com/network/v10.1.84/createnetwork -> createnetwork

出力は <output>/<app>/ に書き込まれます。スクレイピングしたデータがサーバーの読み込み先に保存されるよう、パッケージのドキュメントディレクトリ(src/mcp_unifi_applications/docs/)をマウントしてください。

全ページのスキャンは再開可能です。スクレイピング済みのページはスキップされます。再スクレイピングするには --force を使用してください。

プロジェクト構成

リポジトリの構成
mcp-unifi-applications/
├── scrape.mjs          # Playwright scraper (runs in Docker)
├── lib/
│   └── parse.mjs       # Scraper parsing logic, kept out of the browser so it is testable
├── Dockerfile          # Scraper container image
├── pyproject.toml      # Python project config
├── server.json         # MCP registry manifest
├── CHANGELOG.md        # Keep a Changelog
├── ROADMAP.md          # What is planned, what is not, and why
├── glama.json          # Glama maintainer declaration
├── src/
│   └── mcp_unifi_applications/
│       ├── server.py   # MCP server (Python, stdio transport)
│       └── docs/       # Scraped JSON, shipped with the package
│           ├── network/
│           ├── protect/
│           ├── site-manager/
│           ├── innerspace/
│           ├── mobility/
│           └── carrier-fabric/
├── scripts/
│   └── update_readme_versions.py   # Regenerates the README version table (run on main by CI)
└── tests/
    ├── test_mcp_server.py    # pytest
    └── scrape-parse.test.mjs # node --test

出力形式

スクレイパーが書き込み、サーバーが読み込むデータについて説明します。

エンドポイントページ、ガイドページ、再帰的なフィールドオブジェクト
エンドポイントページ
{
  "h1": "Create Network",
  "method": "POST",
  "path": "/v1/sites/{siteId}/networks",
  "description": "Create a new network on a site.",
  "pathParameters": [ "...fields" ],
  "requestBody": [ "...fields" ],
  "responses": [{ "statuses": ["201"], "fields": [ "...fields" ] }],
  "examples": {
    "local": { "curl": "...", "go": "...", "nodejs": "...", "python": "...", "ansible": "..." },
    "remote": { "curl": "...", "go": "...", "nodejs": "...", "python": "...", "ansible": "..." }
  },
  "responseSample": "{ ... }",
  "sourceUrl": "https://developer.ui.com/network/v10.1.84/createnetwork"
}
ガイドページ
{
  "h1": "Filtering",
  "type": "guide",
  "content": "Markdown content...",
  "sourceUrl": "https://developer.ui.com/network/v10.1.84/filtering"
}
フィールドオブジェクト(再帰的)
{
  "name": "management",
  "required": true,
  "type": "string",
  "description": null,
  "discriminator": [
    { "value": "UNMANAGED", "selected": true, "schema": [ "...sibling fields" ] },
    { "value": "GATEWAY", "selected": false, "schema": [ "...sibling fields" ] }
  ],
  "children": [ "...child fields for object types" ]
}
  • discriminator.schema には、そのオプションが有効なときに表示される兄弟フィールドが格納されます(ディスクリミネーターフィールド自体は含まれません)。
  • ネストは再帰的です。バリアント内のディスクリミネーターも完全に展開されます。
  • children には、静的に展開されたオブジェクトフィールドが格納されます。

免責事項

このプロジェクトは Ubiquiti Inc. と提携、承認、または後援関係にありません。このツールがスクレイピングして提供する API ドキュメントのコンテンツは Ubiquiti Inc. の所有物であり、同社の公開 開発者ポータル から取得しています。「UniFi」は Ubiquiti Inc. の商標です。

ライセンス

MIT

コメント

MCP は初めてですか?

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

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