MCPMCP

MCP セットアップ・Tools・安全性

stdio を設定し、capability を発見し、無料で計画し、有料実行は明示確認します。

API / MCP の成熟度

ドキュメントは公開できますが、API/MCP の利用可否はライブの製品マニフェストとアカウント権限で決まります。foundation / experimental は安定性保証ではありません。

Tool権限目的自動 Retry
myeq.capabilities.searchread制作 capability を確認429 / 502 / 503
myeq.production.planplan無料で検査可能な plan を作成しない
myeq.production.preflightreadreadiness と推定コストを検証429 / 502 / 503
myeq.storyboard.applymutate承認済み Storyboard を適用しない
myeq.production.execute_stepspend確認済み plan step を実行しない
myeq.production.executespend確認済み durable production を開始しない
myeq.job.statusreaddurable job progress を取得429 / 502 / 503
myeq.production.ledgerreadowner-scoped execution ledger を取得429 / 502 / 503
myeq.production.verticalsread制作 recipe を一覧表示429 / 502 / 503
myeq.v2v.editspendStudio の V2V gate でソース動画を編集しない
myeq.video.preflight_sceneread課金せずにシーンの正確な FPS と費用を確認429 / 502 / 503
myeq.video.generate_scenespend確認済みシーンを受付可能な FPS で生成しない

一般的な stdio 設定

MCP package を build し、MYEQ_API_KEY と MYEQ_BASE_URL を設定して stable entrypoint を host に指定します。

{
  "mcpServers": {
    "myeq": {
      "command": "node",
      "args": ["/absolute/path/to/myeq-full/mcp/dist/server.js"],
      "env": {
        "MYEQ_API_KEY": "your-key",
        "MYEQ_BASE_URL": "https://myeq.pro"
      }
    }
  }
}

Discovery と Plan から開始

capability を確認し、plan → preflight の後、ユーザー承認がある場合のみ mutate/spend。

{
  "projectId": "project-123",
  "instruction": "Create a 60-second vertical trailer",
  "vertical": "ai_film",
  "sourceLanguage": "en",
  "responseLanguage": "es",
  "dialogueLanguage": "es",
  "visualPromptLanguage": "en"
}

Job identity で再開

後で再接続して job status を読みます。chat や terminal を開いたままにする必要はありません。

Studio・API・MCP の 24 / 30 / 60 FPS

3つのインターフェースは同じ確定済みシーン snapshot と受付判定を使います。指定 FPS は保持され、24 FPS への自動変更はありません。利用可否は承認済み worker とシーンの正確な条件で決まります。

START/END の画像サイズは 704×1280、1280×704、960×960 です。I2V は生成音声または音声なし。A2V は使用権限のある元音声が必要で、選択した開始位置を保持します。この表は ingredients や V2V の高 FPS 対応を意味しません。seed は 0~2147483647 の整数です。 I2V と A2V の END のみの指定は、24 / 30 / 60 FPS で配備済みサービスが明示的に承認した場合に利用できます。END は最終フレームを導き、冒頭はプロンプトから生成されます。start を空にして画像を end に置きます。画素の完全一致や動画の逆再生を保証するものではありません。 A2V には使用権限のある元音声と、少なくとも START または END の画像1枚が必要です。音声だけでは生成できません。

FPS受付対象物理的な制約
24既定値。選択した各モダリティの受付判定が必要長さ・音声・参照は選択した native class に依存
30承認済み I2V / A2V のみ720p・整数 2~10 秒・9:16 / 16:9 / 1:1・I2V/A2V: START または END、両方も可。A2V は元音声も必須
60承認済み I2V / A2V のみ720p・整数 2~10 秒・9:16 / 16:9 / 1:1・I2V/A2V: START または END、両方も可。A2V は元音声も必須

保存・料金確認・1シーンの実行確認

権限のある project を作成または取得し、PATCH expectedVersion でシーンを保存します。同じ snapshot と targetSceneId を /api/v1/production/snapshots/preflight-scene に送り、data.ready・issues・estimatedCredits を確認します。job 作成や credit 予約は行いません。confirm=true と固定 Idempotency-Key を付けて /api/v1/production/snapshots/generate-scene へ送り、返された jobId を確認します。MCP は myeq.video.preflight_scene と myeq.video.generate_scene を使用し、有料送信は自動再試行しません。シーン設定が全体設定より優先されます。対応する確定 sceneContracts を保持してください。

旧 /video/start、/video/create、/video/create-job、/video/preflight は廃止済みです。既定/24 は 410、30/60 は snapshot への移行が必要で 422 を返します。25/48/50 は非対応です。preflight 失敗時に FPS 変更や課金はありません。成功しても空き枠や残高は予約されません。

const base = process.env.MYEQ_BASE_URL || 'https://myeq.pro';
const headers = { Authorization: 'Bearer ' + process.env.MYEQ_API_KEY, 'Content-Type': 'application/json' };
async function api(path, method, body, extra = {}) {
  const response = await fetch(base + path, { method, headers: { ...headers, ...extra },
    ...(body === undefined ? {} : { body: JSON.stringify(body) }) });
  const value = await response.json();
  if (!response.ok) throw new Error(JSON.stringify(value));
  return value;
}
const project = await api('/api/v1/projects', 'POST', { title: '60 FPS', aspectRatio: '9:16', duration: 4 });
const sourceAudioUrl = process.env.SOURCE_AUDIO_URL;
const generationInputs = { videoProvider: 'myeq_v2', videoModelSelection: 'myeq_v2',
  inputModality: sourceAudioUrl ? 'audio_to_video' : 'image_to_video', durationSeconds: 4,
  fps: 60, outputResolution: '720p', includeAudio: Boolean(sourceAudioUrl), seed: 12345,
  ...(sourceAudioUrl ? { sourceAudioUrl, sourceAudioStartTime: 0 } : {}) };
const scene = { id: 'scene-1', prompt: 'A slow camera move. Preserve the subject.',
  settings: { fps: 60, durationSeconds: 4 },
  start: process.env.START_URL ? [{ name: 'START', url: process.env.START_URL }] : [],
  end: process.env.END_URL ? [{ name: 'END', url: process.env.END_URL }] : [], context: [], avatar: [] };
const snapshot = { id: crypto.randomUUID(), version: 1, projectId: project.id,
  ownerId: project.ownerUserId, sourceEditorStateVersion: project.version + 1,
  createdAt: new Date().toISOString(), projectTitle: project.title,
  aspectRatio: '9:16', resolution: '720p', durationSeconds: 4, fps: 60,
  generationInputs, scenes: [scene], avatars: [], assetsSummary: [],
  sourceAudio: sourceAudioUrl ? { url: sourceAudioUrl, durationSeconds: null } : null, provenance: { source: 'ui' } };
await api('/api/v1/projects/' + project.id, 'PATCH', { expectedVersion: project.version,
  editorState: { ...project.editorState, generationInputs,
    sceneStoryboard: { scenes: [scene] }, productionSnapshot: snapshot } });
const input = { snapshot, targetSceneId: scene.id };
const quote = await api('/api/v1/production/snapshots/preflight-scene', 'POST', input);
console.log(quote);
if (quote.data?.ready && process.env.CONFIRM_PAID === 'true') {
  const idempotencyKey = process.env.SAVED_IDEMPOTENCY_KEY;
  if (!idempotencyKey) throw new Error('Persist one stable key before submitting');
  const result = await api('/api/v1/production/snapshots/generate-scene', 'POST',
    { ...input, confirm: true }, { 'Idempotency-Key': idempotencyKey });
  console.log(result);
  const jobId = result.data?.pendingTake?.orchestrationJobId || result.data?.asset?.metadata?.jobId;
  if (jobId) console.log(await api('/api/v1/production/jobs/' + encodeURIComponent(jobId), 'GET'));
}

MCP · 24 / 30 / 60 FPS

// Reuse the full saved snapshot from the API example.
{ name: 'myeq.video.preflight_scene', arguments: { snapshot, targetSceneId: 'scene-1' } }
// Review data.ready, issues and estimatedCredits before confirming.
{ name: 'myeq.video.generate_scene', arguments: {
  snapshot, targetSceneId: 'scene-1', confirm: true,
  idempotencyKey: 'persisted-scene-request-0001'
} }
{ name: 'myeq.job.status', arguments: { jobId: 'returned-orchestration-job-id' } }
Workspace · Project · Asset · Entity · Storyboard · Plan · Job生成済み ≠ 認証済み