mcpField
Z
ZennoPoster: browser in ProjectMaker

ZennoPoster: browser in ProjectMaker

ローカル
zennolab.github.ioブラウザ自動化71 週間前に更新

ZennoPoster: browser in ProjectMaker について

ZennoPoster ProjectMakerのブラウザーを操作するMCPサーバーです。エディターのブラウザーでページを開き、要素を操作したいLLMクライアント向けです。

主な機能

  1. 01ブラウザーページを開く
  2. 02要素の読み取りとクリック
  3. 03スクリーンショットの取得
  4. 04HTTPまたはstdio接続
  5. 05APIキーと権限範囲の設定

活用シーン

  1. 01ProjectMakerのブラウザーでページを開く
  2. 02ページ要素を調べる
  3. 03エディターのブラウザーで操作箇所をクリック
  4. 04ブラウザー画面を撮影

MCP 対応

MCPクライアントにProjectMakerのブラウザー操作を提供し、設定したApiKeyで製品のPublicApiに接続します。HTTPとstdioに対応します。

設定

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

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
mcpbMCP.Instance-instance-pm-v0.4.0-win-x64.mcpb

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

English | Русский

ZennoPoster と ZennoDroid の MCP サーバーを独自の LLM クライアントに接続する

MCP サーバーは、GitHub Releases を通じて共有リポジトリ https://github.com/ZennoLab/zennoposter-mcp/releases で、自己完結型の win-x64 バイナリとして公開されています。各サーバーには独自のリリース系列(独自のタグプレフィックス)があります。

  • ProjectMaker(エディター) — タグ mcp-projectmaker-v*、アーカイブ MCP.ProjectMaker-v*-win-x64.zip
  • Instance(ブラウザー制御、デュアルマウント) — タグ mcp-instance-v*、アーカイブ MCP.Instance-v*-win-x64.zip
  • ZennoPoster(タスクランナー) — タグ mcp-zennoposter-v*、アーカイブ MCP.ZennoPoster-v*-win-x64.zip
  • Android(ZennoDroid デバイス) — タグ mcp-android-v*、アーカイブ MCP.Android-v*-win-x64.zip

PublicApi のドキュメント(Redoc で表示される OpenAPI コントラクト、インテグレーターガイド、 エラーコード、バージョニングポリシー)は https://zennolab.github.io/zennoposter-mcp/ にあります(各ページはこのリポジトリの docs/ フォルダーから公開されています)。

これらのサーバーは ZennoPoster 7.9.3 以降 および ZennoDroid 2.6.1 以降 と通信します。 MCP.Instance は ZennoPoster 専用、MCP.Android は ZennoDroid 専用です。MCP.ProjectMaker と MCP.ZennoPoster は両方に対応しています。 各製品とコントラクトのバージョンに対応するサーバーのバージョンについては、こちらをご覧ください。 **https://zennolab.github.io/zennoposter-mcp/compatibility.html**。

各サーバーの Cursor と VS Code 用インストールボタン、および Claude Code コマンド: **https://zennolab.github.io/zennoposter-mcp/install.html**。

モデル:独自のキーを使う独自の MCP インスタンス

製品自体が、組み込み AI チャット用の内部 MCP サーバーを起動します。これらは内部ポート帯 6107–6113 で実行され(ZennoDroid ではすべて +10 ずれます)、ホストから最小権限のサービスキーを受け取り、受信リクエストの Authorization ヘッダーを無視します。これは内部インフラストラクチャであり、外部からの接続はサポートされていません(権限はユーザーのキーではなく、サービスキーで定義されます)。また、これらのポートを使用中にしてはいけません。このポート帯のいずれかを別のプロセスが使用していると、組み込みサーバーを起動できません(製品はエラーをログに記録しますが、AI スタックはそのサーバーなしで動作することになります)。

これらの内部サーバーには独自のコンソールがないため、製品はサーバーの出力をすべて自身のログにコピーし、各行にプロセス名(MCP.ProjectMaker、Orchestrator、…)をプレフィックスとして付けます。通常の起動メッセージには Debug タグが付いており、ログには一切記録されません。サーバー自体が警告または失敗を報告した場合、およびサーバーが予期せず終了した場合の終了コードのみが実際に記録されます。組み込みチャットのサーバーが停止した場合は、ここを確認してください。

これらの内部サーバーは、製品が自身の AI プロセスにのみ渡すマシンごとのシークレットも必要とします。そのため、ポートに到達できるだけでは使用できません。シークレットなしの呼び出しは 401 で拒否され、拒否は製品のログに ingress refused として記録されます。組み込みチャット独自の 6113 の API も同様です。独自のクライアントからこれらのポートを呼び出している場合は、以下の説明に従って、代わりにパブリックポート帯で独自のコピーを実行してください。

独自の LLM クライアントでは、パブリックパッケージから MCP サーバーの別のコピーを実行します。このコピーはパブリックポート(以下の表を参照)で待ち受け、同じ製品の PublicApi と通信しますが、使用するのはご自身の ApiKey です。キーの発行時に選択したスコープ/ティアが適用されます。2 つのコピーは互いに干渉することなく、並行して実行できます。

ZennoDroid では、両製品に対応する 2 つのサーバーは +10 高いポートで待ち受けます。MCP.ProjectMaker は 6217、MCP.ZennoPoster は 6220 です。これは、製品が内部ポート帯に適用するのと同じずれです。これにより、両方の製品がインストールされたマシンでも、両方のセットを同時に実行できます。MCP.Android は ZennoDroid 専用で、6211 を引き続き使用します。ZennoPoster ではこのポートは使用されません。 既定のポート。製品ごとに 1 つの表です。サーバーは、exe と同じ場所にある appsettings.json からリッスンポートと BaseUrl を取得します。¹ が付いたポートには 既定値がなく、手順 3 の例のように、対応する BaseUrl(および Target)とともに コマンドラインで渡します。

ZennoPoster

サーバーポート接続先(PublicApi)設定内のキー
MCP.ProjectMaker6207ProjectMaker :5299ProjectMaker:ApiKey
MCP.Instance、Target=projectmaker(エディターのブラウザー)6208ProjectMaker :5299Instance:ApiKey
MCP.Instance、Target=zennoposter(タスクのブラウザー)6209 ¹ZennoPoster :5300Instance:ApiKey
MCP.ZennoPoster6210ZennoPoster :5300ZennoPoster:ApiKey

ZennoDroid

サーバーポート接続先(PublicApi)設定内のキー
MCP.ProjectMaker6217 ¹ProjectMaker :5309ProjectMaker:ApiKey
MCP.ZennoPoster6220 ¹ZennoPoster :5310ZennoPoster:ApiKey
MCP.Android、Target=projectmaker(エディターのデバイス)6211ProjectMaker :5309Android:ApiKey
MCP.Android、Target=zennoposter(タスクのデバイス)6212 ¹ZennoPoster :5310Android:ApiKey

¹ 組み込みの既定値はありません。明示的に設定してください(--urls と対応する BaseUrl を指定します。コマンドは手順 3 にあります)。

すべて、標準の ASP.NET Core 構成を使って上書きできます。exe と同じ場所にある appsettings.json、環境変数(ASPNETCORE_URLS、 ProjectMaker__ApiKey、…)、またはコマンドライン引数(--urls、 --ProjectMaker:ApiKey=…、…)を使用できます。引数は環境変数より優先され、 環境変数は appsettings.json より優先されます。

1. 必要なサーバーをダウンロードする

リリースページで、タグのプレフィックスを確認して必要なサーバーの最新リリースを見つけ、 *-win-x64.zip をダウンロードして任意のフォルダーに展開します。 各アーカイブには、単体で実行できる .exe と appsettings.json が含まれています。.NET ランタイムを別途インストールする必要はありません。Claude Desktop では、代わりに同じリリースの .mcpb バンドルを使用してください。詳しくは Claude Desktop:.mcpb バンドルからインストールするを参照してください。

2. ApiKey を発行する

ProjectMaker で、Settings → Api-Keys → Add new API key を選択します。同じ名前のダイアログが開きます。

  1. Label を設定します(一覧でキーを区別するための任意の名前です)。
  2. Max tier を選択します(タスクに必要な最低限のティアを選択してください。読み取り専用なら T0、変更を伴う操作にはそれより上のティアを選択します)。
  3. 必要な Scopes にチェックを入れます(既定でチェックされているのは *:read のみです。必要に応じてほかのスコープを追加してください)。
  4. Generate API Key を押します。生のキーが表示されるのは 1 回だけです。すぐに安全な場所へコピーしてください。

スコープとティアについて詳しくは、security-model.mdを参照してください。

3. サーバーをキーとともに実行する

キーはMCP サーバー自身の設定で指定します(MCP クライアントのヘッダーではありません。サーバーはループバックからの接続のみを受け付け、受信リクエストの Authorization ヘッダーを読み取りません)。上の表でポート番号に¹が付いていないサーバーは、実行ファイルと同じ場所にある appsettings.json の ApiKey からキーを取得でき、引数なしで起動します。¹が付いているポートは、対応する BaseUrl(および Target)とともに、必ずコマンドラインで設定します。以下のように、環境変数または引数でキーを渡すこともできます。お使いの製品のブロックから、必要なサーバーだけを実行してください。

ZennoPoster

# ProjectMaker (editor): 6207 -> :5299
.\ZennoLab.AI.MCP.ProjectMaker.exe --ProjectMaker:ApiKey=zp_xxx

# Instance for the editor (PM browser): 6208 -> :5299
.\ZennoLab.AI.MCP.Instance.exe --Instance:ApiKey=zp_xxx

# Instance for the runner — a SECOND copy of the same exe: the port and the Target/BaseUrl pair are set explicitly
.\ZennoLab.AI.MCP.Instance.exe --urls http://localhost:6209 `
  --Instance:Target=zennoposter --Instance:BaseUrl=http://localhost:5300/api/v1 `
  --Instance:ApiKey=zp_xxx

# ZennoPoster (runner tasks/sessions): 6210 -> :5300
.\ZennoLab.AI.MCP.ZennoPoster.exe --ZennoPoster:ApiKey=zp_xxx

ZennoDroid

# ProjectMaker (editor): 6217 -> :5309
.\ZennoLab.AI.MCP.ProjectMaker.exe --urls http://localhost:6217 `
  --ProjectMaker:BaseUrl=http://localhost:5309/api/v1 --ProjectMaker:ApiKey=zp_xxx

# ZennoDroid (runner tasks/sessions): 6220 -> :5310
.\ZennoLab.AI.MCP.ZennoPoster.exe --urls http://localhost:6220 `
  --ZennoPoster:BaseUrl=http://localhost:5310/api/v1 --ZennoPoster:ApiKey=zp_xxx

# Android (the device attached to ProjectMaker): 6211 -> :5309
.\ZennoLab.AI.MCP.Android.exe --Android:ApiKey=zp_xxx

# Android for the runner — a SECOND copy of the same exe, for the devices of running tasks:
# the port and the Target/BaseUrl pair are set explicitly
.\ZennoLab.AI.MCP.Android.exe --urls http://localhost:6212 `
  --Android:Target=zennoposter --Android:BaseUrl=http://localhost:5310/api/v1 `
  --Android:ApiKey=zp_xxx

MCP.Android を2つ起動するのは、ZennoPoster で MCP.Instance を2つ起動する理由と同じです。Android ドメインは、ProjectMaker の PublicApi(エディターで表示されるデバイス)と、ランナーの PublicApi(タスクが操作するデバイス)の両方から提供されます。MCP.Instance と同様に、Target(エディターのデバイスには projectmaker、ランナーには zennoposter)を指定します。これにより、初期化時にサーバーが AI に渡す指示が選択されます(ID を0のままにできる単一のデバイス、または list_devices から取得するIDを持つワーカースレッドごとのデバイス)。どちらの場合もツールセットは同じです。Target と BaseUrl は、MCP.Instance とまったく同じように、必ずペアで設定します(下の注記を参照)。Target は MCP.Android 0.4.0 で追加されました。それ以前のバージョンとの違いは --urls と BaseUrl だけです。

MCP.Instance と MCP.Android の2つのコピーに関する重要な注記:これらのサーバーでは、Target(AI に提供する指示の対象が ProjectMaker のエディターかランナーか)と BaseUrl(HTTP リクエストの実際の送信先)は、必ずペアで設定します。コード上では両者は連動していません(Target=projectmaker → PM PublicApi の :5299 を指す BaseUrl、Target=zennoposter → ZP PublicApi の :5300 を指す BaseUrl。ZennoDroid では :5309 と :5310)。起動時にサーバーは、ターゲットホストの /capabilities を使った可能な範囲でのチェックを行い、不一致があれば警告をログに記録します。ただし、起動時にターゲットホストへ接続できない場合、チェックは何も通知せずスキップされます。その場合、不一致は検出されず、リクエストの送信先とは別のホストについての指示が AI に渡されます。

stdio:クライアントのサブプロセスとしてサーバーを実行する

ポートで待ち受けるだけでなく、すべてのサーバーは自身の stdin と stdout を通じて MCP をやり取りできます。実行ファイルを --stdio 付きで起動すると、起動したクライアントが接続を所有します。ポートを選ぶ必要はなく、マシン上のほかのものからサーバーに接続することはできません。また、複数のクライアントがそれぞれ独自のコピーを実行できます。このモードは MCPB バンドルと Claude Desktop で使われており、Claude Code と MCP Inspector もサポートしています。このモードは、サーバーバージョン 0.5.0(ProjectMaker、ZennoPoster、Android)および 0.3.0(Instance)から利用できます。

stdout に出力されるのは JSON-RPC のみで、すべてのログ行は stderr に出力されます。キーは通常どおり設定から読み取られます。サブプロセスとして実行する場合は環境変数 <Section>__ApiKey(ProjectMaker__ApiKey、Instance__ApiKey、ZennoPoster__ApiKey、Android__ApiKey)を使います。--<Section>:ApiKey= 引数と、実行ファイルと同じ場所にある appsettings.json も使用できます。Instance と Android の各コピーでは、同じ方法で Target と BaseUrl のペアを指定します(Instance__Target、Instance__BaseUrl など)。

# Claude Code: -e stores the value in the server's own config entry, not in the launch command
# line - without it the key only reaches the server in this one session, from this one shell.
$env:ProjectMaker__ApiKey = "<your key>"
claude mcp add projectmaker --transport stdio -e "ProjectMaker__ApiKey=$env:ProjectMaker__ApiKey" -- "C:\mcp\ZennoLab.AI.MCP.ProjectMaker.exe" --stdio

mcpServers 設定を読み取るクライアント(Claude Desktop、Cursor)向けの同じ設定項目:

{
  "mcpServers": {
    "projectmaker": {
      "command": "C:\\mcp\\ZennoLab.AI.MCP.ProjectMaker.exe",
      "args": ["--stdio"],
      "env": { "ProjectMaker__ApiKey": "<your key>" }
    },
    "instance-zp": {
      "command": "C:\\mcp\\ZennoLab.AI.MCP.Instance.exe",
      "args": ["--stdio"],
      "env": {
        "Instance__ApiKey": "<your key>",
        "Instance__Target": "zennoposter",
        "Instance__BaseUrl": "http://localhost:5300/api/v1"
      }
    }
  }
}

クライアントが stdin を閉じると、プロセスは終了します。--stdio を指定しない場合は何も変わりません。上記のとおり、サーバーはポートで待ち受け、製品に組み込まれた AI チャットは引き続き HTTP を使用します。

Claude Desktop:.mcpb バンドルからインストール

サーバーの各リリースには、上記の表にあるクライアント名ごとに1つ、MCPB バンドルも含まれています。ファイル名は MCP.<server>-<client name>-v<version>-win-x64.mcpb です(例:MCP.Instance-instance-zp-v0.3.0-win-x64.mcpb)。バンドルは zip 内の exe と同じもので、適切な Target と BaseUrl が設定された stdio 用です。Claude Desktop が自ら起動するため、キーの入力だけで済みます。

バンドルサーバー対応対象
projectmakerMCP.ProjectMakerZennoPoster ProjectMaker、:5299
instance-pmMCP.InstanceZennoPoster ProjectMaker のブラウザー、:5299
instance-zpMCP.Instance実行中の ZennoPoster タスクのブラウザー、:5300
zennoposterMCP.ZennoPosterZennoPoster のタスク、:5300
projectmaker-droidMCP.ProjectMakerZennoDroid ProjectMaker、:5309
zennodroidMCP.ZennoPosterZennoDroid のタスク、:5310
android-pmMCP.AndroidZennoDroid ProjectMaker に接続されたデバイス、:5309
android-zdMCP.Android実行中の ZennoDroid タスクのデバイス、:5310
  1. 対象サーバーのリリースから必要なバンドルをダウンロードします。
  2. Claude Desktop で Settings → Extensions を開き、.mcpb ファイルをウィンドウにドラッグします。
  3. 手順2で発行された ApiKey を入力します。このフィールドは必須です。キーがないとインストールは完了しません。Claude Desktop はキーを独自の設定に保存します。バンドル自体にはキーが含まれません。
  4. バンドルの対応製品を起動します。サーバーのツールがチャットに表示されます。

キーを変更するには、Settings → Extensions で拡張機能を開き、そこで変更します。バンドルはポートをリッスンしないため、zip から起動した同じサーバーのコピーとポートが競合することはありません。

4. LLM クライアントを設定する

VS Code の .vscode/mcp.json 形式の設定例です。Cursor、Claude Code、その他のクライアント向けの同じエントリーとワンクリックインストールボタンは、インストールページにあります。

ZennoPoster

{
  "servers": {
    "projectmaker": {
      "type": "http",
      "url": "http://localhost:6207"
    },
    "instance-pm": {
      "type": "http",
      "url": "http://localhost:6208"
    },
    "instance-zp": {
      "type": "http",
      "url": "http://localhost:6209"
    },
    "zennoposter": {
      "type": "http",
      "url": "http://localhost:6210"
    }
  }
}

ZennoDroid — ZennoPoster とは名前が異なるため、両方の製品を1つのクライアントで設定できます。

{
  "servers": {
    "projectmaker-droid": {
      "type": "http",
      "url": "http://localhost:6217"
    },
    "zennodroid": {
      "type": "http",
      "url": "http://localhost:6220"
    },
    "android-pm": {
      "type": "http",
      "url": "http://localhost:6211"
    },
    "android-zd": {
      "type": "http",
      "url": "http://localhost:6212"
    }
  }
}

この接続経路では認証は不要です。MCP サーバーはループバックでのみリッスンし、権限はサーバー自体の起動に使用したキー(手順3)で定義されます。

5. 接続を確認する

MCP クライアントでサーバーのツール一覧を表示し、キーが必要な読み取り専用ツールを呼び出します。

サーバーツール
MCP.ProjectMakerget_product_version
MCP.ZennoPostertasks_list
MCP.Instanceブラウザーを開いた状態で get_all_tabs
MCP.Androidlist_devices

ping はキーを確認せずに応答するため、サーバーが実行中であることしか確認できません。 MCP.ProjectMaker と MCP.ZennoPoster の capabilities は、キーで許可される内容、つまり currentScopes と currentMaxTier を表示します。currentScopes が空の場合、キーが受け入れられなかったか、スコープが付与されていません。

キーが無効であるか、スコープ/ティアが不足している場合、呼び出しは構造化エラー(unauthorized/forbidden。後者には required/current フィールドが含まれます)で失敗します。MCP.Android は 0.4.0 以降、このエラーを返します。それ以前のバージョンでは、呼び出しが失敗したことだけが報告されます。

クライアントの識別:X-ZP-Client ヘッダー

PublicApi へのすべての HTTP 呼び出しには、呼び出し元のクライアントを識別するために X-ZP-Client ヘッダーを含めることができます。値は name/version 形式です。

X-ZP-Client: mcp-zennoposter/0.6.0

公式の MCP サイドカーは、それぞれ自動的にこのヘッダーを設定します。

サイドカー値
MCP.ProjectMakermcp-projectmaker/<version>
MCP.Instancemcp-instance/<version>
MCP.ZennoPostermcp-zennoposter/<version>
MCP.Androidmcp-android/<version>

サードパーティのインテグレーター向け: 製品名を示す、安定した小文字の識別子を選んでください。たとえば、acme-bot/1.0 です。他のインテグレーターと衝突する汎用的な名前(client、test、my-app)は避けてください。このヘッダーの値は自由形式で、登録手続きはありません。

ヘッダーなしで到着した呼び出し(直接実行された HTTP スクリプト、curl、このヘッダーを設定しないカスタムクライアント)は、組み込みのクライアント名 direct-http として記録されます。

このヘッダーは集計分析のみに使用されます。収集されるデータと収集されないデータの詳細は、data-collection.md をご覧ください。ルーティング、認可、レート制限には影響しません。

ポートの変更

各サーバーには 2 つのポートがあります。LLM クライアントからの接続を待ち受けるポートと、呼び出し先の製品 API ポートです。

待ち受けポート。 次の 3 つのいずれかを設定します。引数が環境変数より優先され、環境変数がファイルより優先されます。

.\ZennoLab.AI.MCP.ProjectMaker.exe --urls http://localhost:7207

$env:ASPNETCORE_URLS = "http://localhost:7207"
.\ZennoLab.AI.MCP.ProjectMaker.exe

または、exe と同じ場所にある appsettings.json に "Urls": "http://localhost:7207" を設定します。待ち受けポートを変更したら、ステップ 4 のクライアント設定で対応する URL も更新してください。

6107~6113(ZennoDroid では 6117~6123)は使用しないでください。これらは製品の組み込みサーバー用であり、そのいずれかのポートを別のプロセスが使用すると、組み込みサーバーを起動できません。

製品 API ポート。 そのサーバー独自のセクションで BaseUrl を設定します。たとえば、--ProjectMaker:BaseUrl=http://localhost:<port>/api/v1 のような引数、ProjectMaker__BaseUrl のような環境変数、または exe と同じ場所にある appsettings.json の BaseUrl を使用します。ステップ 3 の ZennoDroid コマンドは、この設定を行います。

セクション名はサーバー名に対応します:ProjectMaker、Instance、ZennoPoster、Android。MCP.ProjectMaker と MCP.ZennoPoster のバージョン 0.3.0 以前では、それぞれ NeuroBot と ZennoPosterApi が使用されていました。これらの名前は後続バージョンでも引き続き使用できますが、サーバーは起動時に警告をログに記録します。

ライセンス

このリポジトリ内のファイル(ドキュメントと OpenAPI 仕様)は、MIT ライセンスの下でライセンスされています。Releases ページにある MCP サーバーのバイナリはプロプライエタリです。利用条件はTERMS.mdに記載されています。

コメント

MCP は初めてですか?

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

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