mcpField
P
Post Engineer

Post Engineer

ローカル
post-engineer.comソーシャルメディア1今日更新

Post Engineer について

Post Engineer は、Post Engineer アカウントでペルソナを管理し、動画やソーシャル投稿を作成する MCP サーバーです。音声・顔の選択、台本チェック、動画生成、投稿予約のツールを備えています。

主な機能

  1. 01AI ペルソナの作成と更新
  2. 02音声の閲覧・プレビューと顔の確認
  3. 03台本の検証と原稿の採点
  4. 04ペルソナ動画の生成と投稿予約
  5. 05クローン音声とメディアの管理

活用シーン

  1. 01ソーシャル動画用のペルソナ準備
  2. 02動画生成前の台本チェック
  3. 03動画投稿の作成と予約
  4. 04実測済み投稿を基準に原稿を評価

MCP 対応

API キーで Agent を Post Engineer API に接続し、ペルソナ管理、動画生成、アカウント情報、投稿予約・公開のツールを提供します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"ryan-carloso-post-engineer": {
"command": "npx",
"args": [
"-y",
"post-engineer-mcp"
],
"env": {
"POST_ENGINEER_API_KEY": "<POST_ENGINEER_API_KEY>",
"POST_ENGINEER_API_URL": "<POST_ENGINEER_API_URL>"
}
}
}
}
起動コマンドnpx -y post-engineer-mcp
設定が必要な環境変数
POST_ENGINEER_API_KEYシークレットAPI key from https://post-engineer.com/recipes
POST_ENGINEER_API_URLOverride the API base URL (staging or self-hosted). Defaults to production.

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

パッケージ
npmpost-engineer-mcp1.49.0

ツール

41

掲載時のツール一覧 · 今日に更新

パラメーター型必須説明
namestringはいpersona の名前
nichestringいいえコンテンツのニッチ分野
imagesarrayいいえpersona の画像ライブラリ用に、同一人物のローカル画像ファイルを最大 10 個指定します。各動画ではタグに基づき、最も一致する画像が決定論的に選ばれます。
voiceIdstringはい使用する Voice ID(list_voices を参照)
languagestringいいえ言語コード — 現時点では英語のみ(例:en-US、en-GB)
avatarUrlstringはい必須。persona のアバター画像の公開 URL(既存の顔画像 URL には list_faces を使用)。すべての persona に顔があります。「顔なし」は generate_persona_video の options.faceless で動画ごとに選択します。
faceQualityenumいいえレンダリング動画の顔の解像度:ok(480p、動画あたり 2 トークン)または very_good(720p、動画あたり 3 トークン)ok | very_good
videoAspectenumいいえ動画のアスペクト比9:16 | 16:9
videoLayoutenumいいえペルソナフックと動画素材の合成方法:"standard" はアバターで画面を埋め、"react" は画面を上下に分割します(上部はペルソナ、下部は動画素材:実写クリップまたはイラスト)。どちらもレンダリングコストは同じです。standard | react
scriptPromptstringいいえ動画スクリプト向けシステムプロンプトの指示
paragraphNumberintegerいいえ段落数
imagePrimaryIndexintegerいいえ主要なライブラリ画像を示す images[] のインデックス(省略すると主要画像は設定されません)

詳細

Post Engineer MCP サーバー

Post Engineer のパブリック MCP(Model Context Protocol)サーバーです。AI エージェント(Claude、Cursor、Codex、OpenCode)を使って、Post Engineer アカウント上でペルソナの作成、動画の生成、生成状況の確認、投稿のスケジュール設定を直接行えます。

Post Engineer は Apache License, Version 2.0 のもとでオープンソースとして公開されています(リポジトリのルートにある LICENSE を参照してください)。ホスト型プラットフォームを使わずに、プラットフォーム全体を独自の VPS でセルフホストできます( docs/SELF_HOSTING.md を参照してください)。リップシンク(LongCat)は Modal.com 上で動作し、Starter プランには月額 30 ドル分のコンピューティングクレジットが含まれています( modal.com/pricing を参照してください)。私たちは Modal ではありません。この無料クレジットの提供は Modal によるもので、いつでも終了する可能性があります。クレジットを超える利用分は Modal から請求されます。

https://post-engineer.com/ とは?

https://post-engineer.com/ は Post Engineer のウェブプラットフォームです。次のことができます。

  • アカウントを作成してログインする。
  • AI ペルソナ(アバター、音声、言語、ニッチ)を作成する。
  • それらのペルソナを使って動画を生成する。
  • YouTube / Instagram / LinkedIn / Threads のアカウントを連携する。
  • 投稿の自動スケジュールを設定する。
  • https://post-engineer.com/recipes で API キーを生成、管理する。

必要条件

テレメトリー

post-engineer API への各リクエストには、呼び出したツールの名前とサーバーのバージョンが含まれ、製品分析のためにアカウントに記録されます。 スクリプトの内容、メディア、認証情報は送信されません。サーバー自体が分析サービスに接続することはありません。

エージェントがレシピを利用しているかを測定するため、レシピ対応ツール(list_prompts、get_prompt、create_persona、list_personas、 list_social_accounts、get_token_balance、validate_script、 generate_persona_video)のリクエストには、次の情報も含まれます。

ヘッダー値
X-MCP-Session-Idこのサーバーインスタンスのランダムな ID(stdio 接続では 1 つ、ステートレスな HTTP ではリクエストごとに 1 つ)
X-MCP-Transportstdio または http
X-MCP-Nudged-By結果にレシピの案内が表示された最後のツール、または none
X-MCP-Recipes-Knownエージェントがレシピを一覧表示または取得した後は true
X-MCP-Recipe-Fetchedget_prompt が返した最後のレシピスラッグ、または none
X-MCP-Script-Rejectionsこのセッションでローカルバリデーターが拒否したスクリプトの数
X-MCP-Recipeこの呼び出しのレシピスラッグ(get_prompt のスラッグ、generate_persona_video の recipe)

ウェブ API はこれらを mcp_tool_called プロパティとして記録します。ハブのスラッグでないスラッグは unknown として記録されます。

使い方

エージェント(opencode.json、claude_desktop_config.json、.mcp.json、または Cursor の設定)を構成します。

{
  "mcpServers": {
    "post-engineer": {
      "type": "local",
      "command": ["npx", "-y", "post-engineer-mcp@latest"],
      "environment": {
        "POST_ENGINEER_API_KEY": "<MY_API_KEY>"
      }
    }
  }
}

<MY_API_KEY> を https://post-engineer.com/recipes で生成したキーに置き換えてください。リポジトリのクローンやローカルビルドは不要です。

@latest タグは重要です。npx は初回実行時にパッケージをキャッシュし、以降の実行では更新を確認せずにキャッシュしたコピーを再利用します。@latest を指定しないと、サーバー側には存在しない古いバージョン(例:1.12.0 より前のツール)を使い続ける可能性があり、その理由を示すエラーも表示されません。

OpenCode

OpenCode では mcpServers ではなく mcp を使います。ローカル MCP ツールの検出タイムアウトはデフォルトで 5 秒です。初回起動時に npx がパッケージをダウンロードしている間には短すぎる場合があります。タイムアウトを長く設定してください。

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "post-engineer": {
      "type": "local",
      "command": ["npx", "-y", "post-engineer-mcp@latest"],
      "environment": {
        "POST_ENGINEER_API_KEY": "<MY_API_KEY>"
      },
      "timeout": 30000,
      "enabled": true
    }
  }
}

サーバーがすでに構成されている場合は、既存のエントリーに "timeout": 30000 だけを追加して、OpenCode を再起動してください。

ローカル開発

pnpm install
pnpm build
pnpm start

API キーをローカルに設定します(デフォルトでは本番 API を使います。ステージング/セルフホスト環境では POST_ENGINEER_API_URL で上書きしてください)。

export POST_ENGINEER_API_KEY="<MY_API_KEY>"
# optional: export POST_ENGINEER_API_URL=https://staging.example.com

Authorization: Bearer API キーヘッダーは設定したベース URL に送信されるため、POST_ENGINEER_API_URL には信頼できるサーバーだけを指定してください。

ツール

  • list_personas:既存のペルソナを一覧表示します。
  • list_voices:利用可能なペルソナ音声を一覧表示します(ライブカタログ:gender/accent/kindを含む英語のハウス音声65種類と、準備済みのクローン)。各音声には、どのような声かを示すdescriptionがあります。任意のフィルター:gender(female|male)、origin(us|gb|character)、search(名前/説明に含まれる語句で検索。例:"deep calm")。レスポンスにopenrouter:またはelevenlabs:のIDが含まれることはありません。選択肢はハウス音声とあなたのクローンのみです。
  • list_cloned_voices:ユーザーごとのChatterbox音声クローンを一覧表示します(ステータスと、準備完了時のvoice_id)。
  • create_cloned_voice:短い参照録音から音声クローンを登録します。audioUrl(HTTPS URL)またはaudioPath(ローカルの.mp3/.wav/.m4a/.webmファイル、最大20MB)のいずれか一方を指定します。ファイルの読み込み前に検証され、エラーに表示されるのはファイル名のみで、フルパスは表示されません(consent: trueとdenoiseが必須です。trueにすると先に背景ノイズを除去し、falseにすると元の音声を維持します)。
  • get_cloned_voice:IDで音声クローンを1つ取得します。create_cloned_voiceの後、ステータスがready(その時点でvoice_idが設定されます)またはfailedになるまでポーリングします。
  • delete_cloned_voice:IDで音声クローンを削除します。
  • preview_cloned_voice:準備完了したクローンの短いMP3プレビューを合成します(base64音声を返します)。任意のtext(英語、1~300文字)を指定すると、固定サンプルの代わりに指定した文章をクローンに話させます。プレビューは無料で、ユーザーごとに1日10回までです。
  • preview_house_voice:list_voicesのハウス音声の短いMP3プレビューを合成します(base64音声を返します)。任意のtext(英語、1~300文字)を指定すると、固定サンプルの代わりに指定した文章を音声に話させます。プレビューは無料で、ユーザーごとに1日10回までです。
  • list_faces:標準/既定のペルソナの顔を一覧表示します(/api/persona/facesから取得するライブカタログ)。各項目には、id、url、name、gender、age(23などの単一の数値)、ethnicity、hair、description(英語)が含まれるため、エージェントは写真を見ずに選択できます。create_personaのavatarUrlに顔のurlを指定します。
  • create_persona:AIペルソナ(アバター、音声、言語、ニッチ)を作成します。顔は必須で、次のいずれか1つのソースから指定します。avatarUrl(公開画像URLまたはlist_facesのurl)またはavatarPath(ローカルのJPG/PNG/WebPファイル、最大10MB。ペルソナの写真として直接アップロードされるため、サーバーがリンク先をダウンロードする必要はありません)。両方を渡すと、送信前に拒否されます。「顔なし」は動画ごとの設定(generate_persona_videoのoptions.faceless)です。voiceIdには、list_voicesのハウス音声名またはラベル(phonon_zoey、Zoey)、あるいはlist_voicesからコピーしたクローンID/キーを指定します。プロバイダープレフィックス(elevenlabs:/openrouter:)を入力しないでください。不明な音声は送信前に拒否されます。
  • update_persona:既存のペルソナを更新します(指定したフィールドのみ変更されます)。avatarUrlまたはavatarPath(ローカルの写真ファイル。直接アップロード)で顔を差し替えます。両方を指定することはできません。ペルソナを作り直さずにfaceQuality(okは480p/very_goodは720p)を変更できます。今後の動画は新しい画質の料金になり、すでにスケジュール済みの投稿は請求時の画質のままです。
  • get_token_balance:プリペイドのトークンウォレット残高を取得します。トークンを消費する動画を生成する前に確認してください。
  • list_prompts:このサーバーで実行できるレシピプロンプトを一覧表示します。レシピごとにslug、title、description(ニュース、場所の紹介、テーマの紹介、GitHub PR、完全なセットアップ)が1件ずつ含まれます。プロンプト本文は含まれません(低コストで確認できます)。依頼が完成済みの台本ではなくトピックの場合は、まずこれを呼び出し、一致するレシピをget_promptで取得してください。
  • get_prompt:list_promptsのslugでレシピプロンプトを1つ取得します。検証済みフロー全体(台本の制限、メディアの確認、生成呼び出し)を網羅した、そのまま実行できる指示が含まれ、最後にgenerate_persona_videoのrecipeとしてslugを渡すようエージェントに求める行があります。不明なslugを指定すると、有効なslugを示すエラーが返されます。
  • validate_script:トークンを消費せずに、セグメント形式の台本を機械的に検証します。冒頭はフック、最後はCTAで、それぞれ1つずつであること、単語数の制限(合計60~200語、本文は30語以上、CTAは5~20語、TTS前のフックは15~40語)を確認します。単語数とフックの長さ(読み上げ時間8~12秒)を返します。フックのみのTTSエンドポイントがまだないため、フックの実測時間は保留と報告され、推測値は生成されません。任意のfacelessMaterial(broll、svg、images)を指定できます。imagesの場合、各セグメントにmediaがあることも確認します(最大12個)。
  • score_draft:トークンを消費せずに、呼び出し元自身が測定した投稿を基準として下書きを機械的に採点します。0~100のスコアを返し、各ポイントの根拠(フック、長さ、ハッシュタグ、スロップの兆候、リンク、上位テーマとの一致、行動喚起)、採点基準となったデータ(エンゲージメント上位の切り口)、および指定ネットワーク(linkedin、youtube、instagram、bluesky、threads)への公開チェックが含まれます。公開チェックで失敗するのは、下書きが空の場合、またはこのリポジトリに根拠があるネットワーク固有の上限を超えた場合のみです(LinkedInは3000文字、Threadsは500文字、Blueskyは300書記素)。それ以外は警告です。公開チェックに失敗した場合、そのネットワークでスケジュールする前に下書きを修正してください。動画台本(セグメントを改行で結合し、冒頭がフック、最後がCTA)にはkindとしてscriptを渡します。ハッシュタグは採点されず、publishCheckはnullになります。
  • upload_media:動画セグメント用のローカル画像をアップロードし、セグメントのmediaフィールドで使うmediaIdを取得します。JPG/JPEG、PNG、WebPに対応し、最大8MBです(エンジンの写真上限であり、ライブラリの10MB上限ではありません)。拡張子ではなく、実際のコンテンツタイプが検証されます。ファイルは一時的なエンジンアセットとして保存されます(TTLは1時間)。スケジュール枠がかなり先の場合、アセットの有効期限が切れ、セグメントに画像が表示されない可能性があるため、生成の直前にアップロードしてください。mediaIdのみを返します。セグメントのmediaにはoverlay(title、任意のsubtitleとbadge。最大文字数はそれぞれ60、80、30文字)も指定できます。これは実際の場所名、住所、価格を写真の上部に表示する情報カードです。写真は、そのセグメントの音声が流れる秒数の間、動画に重ねて表示され、その上に字幕が載ります。顔なし動画とBロールでは全画面表示(写真全体をぼかした写真の上に重ねるため、黒帯が出ません)、ペルソナの顔が画面にある場合は枠付きパネル(画面の約38%、下端から30 px)として表示され、背後の顔も見えるようになっています。そのため、フックのみのリップシンク動画のフックと、フルリップシンク動画のすべてのセグメントではパネル表示になります。フックのみの動画がBロールに切り替わると、写真は全画面表示になります。リアクトレイアウトではペルソナが上半分を占めるため、パネルは下部に配置されます。カードを描画できない場合は、写真を表示したままタスクの警告とともにカードが省略されます。
  • check_media:LLMを使わず、関連性を判定せずに、セグメント用の公開画像URLを1つ機械的に確認します(画像を見るエージェントが関連性を判断します)。コードを1つだけ返します:ok、blocked_403、not_image、too_small、too_large、timeout、face_detected。ホットリンク制限を回避する偽のUser-AgentやRefererは送信せず、プライベートアドレスから取得することもありません。
  • generate_persona_video:完全な台本からペルソナ動画を1本生成してスケジュールします。生成は常に公開と連動します(1回の呼び出しで生成+スケジュール+自動公開。孤立した動画は作られず、スケジュールだけを行う手順もありません)。台本全体をsegmentsとして送信します(最初はhook、次に本文セグメント、最後はcta。合計60~200語、本文は30語以上、CTAは5~20語、フックは15~40語で、末尾に終端句読点が必要です)。LLMによる台本の拡張は行われません。titleはこの動画のスロットラベルです。personaIdは任意です。顔なし投稿の場合は省略し、その場合はoptions.facelessとoptions.voiceId(またはoptions.audioUrl)に加え、必要に応じてvideoAspect/language/nicheを設定します。options.voiceIdには、list_voicesのハウス音声名またはラベル(phonon_zoey、Zoey)、あるいはlist_voicesのクローンID/キーを指定します。プロバイダープレフィックスを入力しないでください。不明な音声は生成前に拒否されます(トークンは消費されません)。providersとプロバイダーごとのアカウントID(下記のアカウントID表を参照)、timezoneのstartAt+times(またはstartAt/timesを指定せずにmode: 'asap')を渡します。スロットは3時間~30日先である必要があります。idempotencyKeyは自動生成されます。再利用すると、二重生成せずに再試行できます(replayed: true)。任意のrecipeには、台本の作成に使ったレシピslugを指定します。これはX-MCP-Recipeテレメトリーヘッダーとしてのみ送信され、リクエスト本文には含まれません。スロットのtaskIdをget_video_task_progressでポーリングします。動画を何で埋めるかはoptions.facelessMaterialで選択します。broll(実際のストック映像。既定値)、svg(描画したイラスト)、またはimages(セグメントに指定した画像のみ。ストック映像やイラストは使用しません)。imagesの場合、各セグメントにmedia(upload_mediaまたは公開画像のurlから取得。最大12個)が必要で、トークンを消費する前に確認されます。各画像は、そのセグメントの音声が流れる秒数の間、ゆっくりズームしながら全画面表示されます。レンダリング時に画像の読み込みに失敗した場合は、隣接する画像がその秒数をカバーし、タスクには警告が表示されます。画像が1枚も残らない場合は、タスクがimages_do_not_cover_audioで失敗し、トークンが返金されます。画像はユーザーが提供するサードパーティーコンテンツです。使用権を持つ画像のみを使ってください。
  • generate_persona_video_batch:1回の呼び出しでペルソナ動画を2~12本まとめて生成・スケジュールします。1本ずつ生成するより低コストです。ペルソナの顔が映る動画6本ごとに、最も安い動画1本が無料になります。各動画にはgenerate_persona_videoと同じフィールドを使用します(idempotencyKey、experiment、recipeを除く)。動画は同じルートを通じて1本ずつ作成されます(通常料金がそれぞれ請求され、すぐにディスパッチされるため、バッチ内の動画は1つのウォームGPUコンテナで連続してレンダリングされます)。その後、サーバーが無料分をクレジットとして返します(POST /api/videos/batch-discount)。顔なし動画もバッチに含められますが、通常料金がかかり、6本のカウント対象にならず、無料にもなりません。すべての動画は最初の動画から10分以内に作成する必要があり、各動画は1つのバッチにのみ属します。batchKeyでバッチを指定します。同じbatchKeyと同じ順序の動画で再度呼び出すと、作成済み動画が再生され(追加請求なし)、不足分が作成され、割引が再試行されます。割引対象のバッチの動画をキャンセルすると(cancel_schedule)、その動画の返金から、バッチが獲得できなくなった割引分が差し引かれます。
  • get_video_status:生成ステータスを確認し、最終動画URLを取得します。
  • get_video_task_progress:機械可読な進捗情報を得るために、動画タスクを1つポーリングします。{task_id, state, progress, stage, error}を返します。stateが-1(失敗)の場合、errorはエンジンの失敗理由で、それ以外はnullです。generate_persona_videoの後、動画ごとに使用します。進捗だけを確認する場合は、get_video_statusよりこちらを優先してください。
  • cancel_video_task:エンジン上の動画タスクをtaskIdでキャンセル/削除します(get_video_status、get_video_task_progress、get_post、list_postsから取得)。キャンセルできるのは自分のタスクのみです。ペルソナスコープのAPIキーでは、そのペルソナに属するタスクのみキャンセルできます。不明なタスクまたは完了済みタスクを指定するとエラーが返されます。この呼び出しによるトークン返金はありません。
  • list_persona_images:ペルソナの画像ライブラリを一覧表示します(id、tag、description、is_primary)。generate_persona_videoのoptions.imageIdにIDを指定すると、1回の呼び出しですべての動画に特定の画像を使用できます。
  • add_persona_image:ローカルファイルパスからペルソナの画像ライブラリに画像を追加します(JPG/JPEG、PNG、WebP、最大9MB)。任意のtagとdescriptionによって、動画ごとの画像選択が決まります。
  • update_persona_image:ペルソナの画像ライブラリにある画像のtag、description、またはprimaryフラグを更新します。
  • remove_persona_image:ペルソナの画像ライブラリから画像を削除します。
  • publish_video_direct:完成済みの動画ファイルをソーシャルアカウントに直接公開します。生成もスケジュールも行いません(ローカルの.mp4/.mov、最大2GB。YouTubeにはtitle、description、tags、privacyStatusが必要で、その他のサービスにはcaptionが必要です)。
  • list_social_accounts:スケジュールに必要なアカウントIDとともに、接続済みのソーシャルアカウントを一覧表示します。
  • get_persona_publishing_accounts:プロバイダーごとにペルソナの既定の公開アカウントを一覧表示します。generate_persona_videoでアカウントIDが渡されない場合は、これらのアカウントが使われます。明示的に指定したIDが常に優先されます。
  • set_persona_publishing_accounts:プロバイダーごとにペルソナの既定の公開アカウントを置き換えます(アカウントIDはlist_social_accountsから取得します。プロバイダーに[]を設定すると、既定のアカウントはなくなります)。
  • connect_account:ソーシャルアカウントを接続します。youtube/instagram/linkedin/threadsの場合、認証URLが返されます。同じアカウントでPost Engineerにサインイン済みのブラウザーでURLを開いて認証すると、アカウントが自動的に接続されます(list_social_accountsで確認してください)。サインインしていないブラウザーや、別のユーザーとしてサインインしているブラウザーは拒否されます。blueskyの場合は、ハンドルとアプリパスワードで直接接続します。
  • list_schedules:自動化スケジュールを一覧表示します。
  • list_posts:接続済みのすべてのアカウントについて、今後の投稿(スケジュール済み)と過去の投稿(公開済み/失敗)を一覧表示します。fromとto(UTCオフセット付きのISO-8601形式。最大62日)を指定すると、その期間内のすべてのステータスの投稿を1つのslotsリストとして返し、あわせてtruncatedを返します。
  • cancel_schedule:IDでスケジュールをキャンセルします。
  • get_slot:スロットIDで、スケジュール済み投稿の詳細(ステータス、タイトル、スケジュール時刻、進捗、スケジュール、ペルソナ)を取得します。
  • update_slot_title:生成開始前のスケジュール済み投稿のタイトルを編集します。
  • delete_slot:スケジュール済み投稿のスロットを1つ削除します(保留中/待機中または失敗したスロットのみ。スケジュールの最後のスロットは削除できません)。
  • list_video_generations:動画生成履歴を新しい順に一覧表示します(ステータス、エラーコード、トークン返金)。
  • get_video_generation:生成IDで動画生成の詳細を1件取得します。
  • get_post:IDがスロットIDか生成IDかを問わず、投稿の詳細を1件取得します(サーバーが判別し、レスポンスにはkind: "slot"またはkind: "generation"と示されます)。どちらの種類にも、リアルタイムの生成進捗が含まれます。
  • get_post_metrics:24h、7d、28dのwindowについて、動画ごとのパフォーマンススナップショット(視聴回数、いいね、コメント、保存)を新しい順に返します。任意の完全一致フィルター:persona(uuid、またはペルソナなしの投稿には^@none)、account、provider、angle(または^@none)。rowsとtruncatedを返します。YouTubeの行には、自分の動画に関するYouTube Analyticsの視聴維持率も含まれます。engagedViews、stayedToWatchPct(算出値:エンゲージビュー数/視聴回数。ネイティブ指標ではありません)、averageViewPercentage、contentType、provisional(Analyticsデータは約3日間確定せず、28dの行は確定済み)、analyticsStatus(scope_missingは、yt-analytics.readonlyを許可するためにYouTubeを再接続する必要があることを示します)。
  • get_youtube_retention_curve:自分が公開したYouTube動画1本の視聴者維持率曲線を、YouTube Analyticsからリアルタイムで取得します(YouTubeのget_post_metrics行にあるaccount+video)。ratio(動画内の位置を0.01~1.0で示す値)、audienceWatchRatio、relativeRetentionPerformanceのpointsを返します。自分のチャンネルのみが照会されます。ShortsにはYouTube Studioで秒ごとの曲線がありませんが、長尺動画にはあります。
  • create_experiment:1つの台本変数(フック)を対象とするペア形式のA/Bテストを作成します。名前、任意のpersonaId、targetPairs(3~20。既定値は6)、slug形式のvariantId(例:hook-aggressive。「A」/「B」は不可)、name、フック作成時に従うスタイルのdescriptionを持つバリアント2つを指定します。課金はありません。
  • list_experiments:2つのバリアントと目標ペア数を含む、自分の実験を一覧表示します。
  • add_experiment_pair:1ペア分の動画を2本作成します。両方で同じtitle、本文、CTA(フックを除いたsegments)を使い、hooksにはバリアントごとにフックを1つずつ指定します。generate_persona_videoと同様の配信フィールドも指定します。各動画は通常料金の動画です。2本目は1本目からspacingHours(既定値は24)時間後に開始し、ペアごとに順番が交互になります。同じプロバイダーとアカウント、同じタイトル、音声(IDと音声URL)、顔なし設定と顔なし素材、フルリップシンク、動画のアスペクト比とレイアウト、段落番号、顔の画質、言語、ニッチ、CTAテキスト、および本文とCTAのセグメントが同一で、フックが異なる場合を除き、サーバーはペアの2本目を課金前に拒否します(並行処理の競合は挿入後に検出され、返金されます)。固定されたoptions.imageIdは保存されないため、同じimageId(またはどちらもなし)を両方の動画に自分で指定してください。同じ引数で再度呼び出すと、作成済みの動画が再生されます。動画のディスパッチに失敗した場合(そのスロットはfailedとなり、トークンは返金されます)、呼び出しはエラーを返し、そのペア番号は使用済みのままです(単一動画のスケジュールにはスロットが1つしかないため、delete_slotでは削除できません)。その場合は、次の空いているペア番号を使ってください。
  • get_experiment_results:実験の動画をペアごとに返し、プロバイダーごとに、各ペアの視聴回数/いいね/コメント/平均視聴時間、バリアントごとの勝利数、符号検定のpValue、label(pending、indicative(まだ確定ではありません)、clear(目標ペアすべてで結果が決まり、p < 0.05))を返します。windowは24h、7d(既定値)、28dです。
  • list_token_transactions:トークン台帳(購入、生成での消費、返金など、すべてのクレジットとデビット)を新しい順に一覧表示します。
  • get_persona_delete_preview:ペルソナを削除した場合に削除される内容をプレビューします(件数+動画ごとのダウンロードリンク)。読み取り専用です。
  • delete_persona:破壊的操作です。すべてのスケジュール、スロット、動画、画像ライブラリとともにペルソナを削除します。トークンは返金されません。
  • disconnect_account:プロバイダーとアカウントIDを指定して、ソーシャルアカウントの接続を解除します。
generate_persona_video のソーシャルアカウント ID

各プロバイダーの *AccountIds フィールドには、list_social_accounts のプロバイダーアカウント識別子を指定します。recordId ではありません(これは内部データベースの行 ID であり、指定すると拒否されます)。

プロバイダーgenerate_persona_video のフィールド使用する list_social_accounts のフィールド
YouTubeyoutubeAccountIdschannelId
InstagraminstagramAccountIdsigUserId
LinkedInlinkedinAccountIdsproviderAccountId
ThreadsthreadsAccountIdsproviderAccountId
BlueskyblueskyAccountIdsdid(例:did:plc:...)

recordId を渡すと、正しいフィールド名を示すエラーがすぐに返されます。

プロンプト(スラッシュコマンド)

サーバーは、Post Engineer のウェブプラットフォームからプロンプトハブを MCP の プロンプト機能を通じて提供するため、MCP クライアント(Cursor、Claude)ではスラッシュコマンドとして一覧表示されます。各プロンプトに引数はありません。実行すると、エージェントがペルソナ、アカウント、タイミングについて尋ねます。プロンプト一覧と本文は必要に応じてウェブ API(GET /api/prompts、GET /api/prompts/{slug})から取得されるため、ウェブ上でレシピを編集すれば、パッケージの更新なしにすべてのインストールへ反映されます。

  • /daily-news:毎日のニュースを動画にします。その日の GNews のトップ記事からペルソナ動画を 1 本作成し、トークンを消費する前に検証します。
  • /place-spotlight:スポット紹介を動画にします。実在する場所を 1 つ取り上げ、その場所の写真を確認してセグメントメディアとして添付したペルソナ動画を 1 本作成し、トークンを消費する前に検証します。
  • /subject-spotlight:特定の対象の紹介を動画にします。車、製品、ガジェットなど、具体的な対象を 1 つ取り上げ、対象そのものの写真と実際の価格を画面に表示するペルソナ動画を 1 本作成し、トークンを消費する前に検証します。
  • /github-prs:GitHub の PR を動画にします。GitHub のプルリクエストからペルソナ動画を 1 本作成します。
  • /last-30-days:過去 30 日間を動画にします。ニッチな分野で過去 30 日間に起きたことからペルソナ動画を 1 本作成し、トークンを消費する前に検証します。
  • /multi-rede:1 週間に、各ネットワークにつき動画を 1 本作成します。今週は LinkedIn、YouTube、Instagram、Bluesky にそれぞれ動画を 1 本ずつ公開し、各ネットワークに合わせて評価します。
  • /viral-shorts:バズ動画を自分のショート動画にします。ニッチな分野で最も視聴された動画から学び、自分らしい語り口、フック、内容、CTA を盛り込んだ新しい Shorts 用スクリプトを作成します。
  • /full-setup:セットアップ全体を動画にします。アカウントを接続し、ペルソナを作成し、スクリプトを検証して、手順を飛ばさずに最初の動画を公開します。

人がスラッシュコマンドを入力せずに開始したエージェントも、MCP のツールを通じて同じハブを利用できます。list_prompts はレシピ(slug/タイトル/説明)を一覧表示し、get_prompt は slug を指定してレシピの全文を返します。サーバーの初期化時の指示では、トピックに関するリクエストに対して、これらのツールを使うようエージェントに案内します。エージェントがレシピを一覧表示または取得するまでは、create_persona、list_personas、list_social_accounts、get_token_balance の結果の末尾に、list_prompts を案内する短い次のステップのブロックが付加されます。また、validate_script または generate_persona_video でスクリプトが拒否された場合は、レシピを使えば審査に通るスクリプトを作成できることを示すヒントが表示されます。

プロンプトを追加するには、そのテキストを shared/prompt-base/prompt-base.ts に、エントリーをウェブハブ(apps/web/app/recipes/prompts.ts と、その i18n タイトルおよび目的)に追加します。MCP 側の変更は不要です。ウェブハブに掲載されたものがそのまま提供されます。

リンク

コメント

MCP は初めてですか?

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

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