MCPMCP

MCP Setup, Tools und Sicherheit

Stdio einmal konfigurieren, Fähigkeiten entdecken, kostenlos planen und bezahlte Ausführung explizit bestätigen.

API-/MCP-Reife

Die Dokumentation ist öffentlich teilbar; Verfügbarkeit von API/MCP wird jedoch vom Live-Manifest und Kontozugriff bestimmt. Foundation oder experimental sind keine Stabilitätszusagen.

ToolAutoritätZweckAutomatischer Retry
myeq.capabilities.searchreadProduktionsfähigkeiten entdecken429 / 502 / 503
myeq.production.planplanKostenlosen prüfbaren Plan erstellennie
myeq.production.preflightreadBereitschaft und Kosten prüfen429 / 502 / 503
myeq.storyboard.applymutateFreigegebenes Storyboard anwendennie
myeq.production.execute_stepspendBestätigten Planschritt ausführennie
myeq.production.executespendBestätigte dauerhafte Produktion startennie
myeq.job.statusreadDauerhaften Jobfortschritt lesen429 / 502 / 503
myeq.production.ledgerreadOwner-bezogenes Ausführungs-Ledger lesen429 / 502 / 503
myeq.production.verticalsreadProduktionsrezepte auflisten429 / 502 / 503
myeq.v2v.editspendEin Quellvideo mit den V2V-Gates des Studios bearbeitennie
myeq.video.preflight_scenereadExakte Szenen-FPS und Kosten ohne Ausgaben prüfen429 / 502 / 503
myeq.video.generate_scenespendEine bestätigte Szene mit zugelassenen FPS generierennie

Generische stdio-Konfiguration

MCP-Paket bauen, MYEQ_API_KEY und MYEQ_BASE_URL setzen und den Host auf den stabilen Server-Entrypoint zeigen lassen.

{
  "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"
      }
    }
  }
}

Mit Discovery und Plan starten

Fähigkeiten suchen, Plan erstellen, Preflight ausführen und erst nach Autorisierung mutieren oder ausgeben.

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

Über Job-Identität fortsetzen

Später wieder verbinden und Job-Status lesen; Chat oder Terminal müssen nicht offen bleiben.

24, 30 und 60 FPS in Studio, API und MCP

Alle drei Schnittstellen verwenden denselben bestätigten Szenen-Snapshot und dieselbe Zulassung. Die angeforderten FPS bleiben erhalten; kein automatischer Wechsel zu 24 FPS. Verfügbarkeit hängt vom freigegebenen Worker und der konkreten Szene ab.

START/END-Bildflächen: 704×1280, 1280×704 oder 960×960. I2V erlaubt generiertes oder kein Audio. A2V benötigt autorisiertes Quellaudio und behält dessen gewählten Zeitversatz. Diese Tabelle aktiviert keine hohen FPS für Ingredients oder V2V. Seeds sind Ganzzahlen von 0 bis 2147483647. I2V und A2V erlauben END ohne START bei 24, 30 und 60 FPS nur nach ausdrücklicher Freigabe des bereitgestellten Dienstes. END führt das letzte Bild; der Anfang entsteht aus dem Prompt. start bleibt leer, das Bild bleibt in end. Pixelidentität oder eine Umkehrung des Videos werden nicht zugesagt. A2V benötigt immer autorisiertes Quellaudio und mindestens ein START- oder END-Bild; Audio allein ist nicht zulässig.

FPSZugelassene KlassePhysische Grenzen
24Standard; eigene Zulassung der gewählten ModalitätDauer, Audio und Referenzen hängen von der nativen Klasse ab
30Nur freigegebenes I2V / A2V720p · 2–10 ganze Sekunden · 9:16 / 16:9 / 1:1 · I2V/A2V: START und/oder END; A2V benötigt zusätzlich Quellaudio
60Nur freigegebenes I2V / A2V720p · 2–10 ganze Sekunden · 9:16 / 16:9 / 1:1 · I2V/A2V: START und/oder END; A2V benötigt zusätzlich Quellaudio

Speichern, Kosten prüfen, eine Szene bestätigen

Autorisiertes Projekt erstellen oder lesen, Szene mit PATCH expectedVersion speichern. Denselben Snapshot und targetSceneId an /api/v1/production/snapshots/preflight-scene senden. data.ready, issues und estimatedCredits prüfen; kein Job und keine Kreditreservierung. Mit confirm=true und stabilem Idempotency-Key über /api/v1/production/snapshots/generate-scene generieren, danach jobId abfragen. MCP verwendet myeq.video.preflight_scene und myeq.video.generate_scene mit demselben Snapshot; bezahlte Übermittlung wird nie automatisch wiederholt. Szeneneinstellungen überschreiben Projektstandards; passende bestätigte sceneContracts erhalten.

Die alten /video/start-, /video/create-, /video/create-job- und /video/preflight-Routen sind eingestellt: Standard/24 liefert 410, 30/60 erfordert Snapshot-Migration mit 422. 25/48/50 werden nicht unterstützt. Preflight-Fehler ändern keine FPS und berechnen keine Credits. Eine erfolgreiche Prüfung reserviert weder Verfügbarkeit noch Guthaben.

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 · JobGeneriert ≠ Zertifiziert