Autopo

Run your AI-run company from Claude Code, Codex, Cursor or ChatGPT: inbox, tasks, team, Studio.

我該用這個嗎

品質與安全性

A
說明品質
91%
結構描述完整度
83%
命名品質
92%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

發現項目(11)

  • LOWTool 'list_companies' description lacks action verb在 list_companies 中
  • LOWTool 'get_briefing' description lacks action verb在 get_briefing 中
  • LOWTool 'get_decision' description lacks action verb在 get_decision 中
  • LOWTool 'comment_on_decision' description lacks action verb在 comment_on_decision 中
  • LOWTool 'list_agents' description lacks action verb在 list_agents 中
  • LOWTool 'get_artifact' description lacks action verb在 get_artifact 中
  • LOWTool 'artifact_feedback' description lacks action verb在 artifact_feedback 中
  • LOWTool 'studio_settings' description lacks action verb在 studio_settings 中
  • LOWTool 'list_videos' description lacks action verb在 list_videos 中
  • LOWTool 'import_video_plan' description lacks action verb在 import_video_plan 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~8,771Token(工具定義)
~654 B典型回應大小
顯著的注意力影響(128k 上下文的 6.85%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "mcp": {
      "command": "npx",
      "args": [
        "@autopo/mcp"
      ]
    }
  }
}

可執行的套件

npm@autopo/mcp0.5.0stdio

遠端端點

https://autopoiesis-api-267405155162.us-west1.run.app/mcpstreamable-http

它能做什麼

工具清單

工具(67)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢list_companies

The companies you belong to (id, name, stage, kind). Other tools take `company`: one of these ids.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
🟢founder_home(company)

What needs you, what improved and what is stuck in a company right now: the home screen's digest, the open decisions, running work, delivered work and your requests. Start here for 'what happened'.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢company_overview(company)

The company: its charter, stage, team, budget and gates (GET /companies/{id} and /overview).

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢activity(company, after, limit)

The company's activity feed, newest first (who did what, when). `after`: only events after this ISO time.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "after": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢list_briefings(company, before)

The CEO's board briefings (spoken updates), newest first, with their text.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "before": {
      "type": "string",
      "description": "ISO time: older than this"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢get_briefing(briefing)

One briefing: its sections, the decisions it asked for, and what was said.

輸入結構描述

{
  "type": "object",
  "properties": {
    "briefing": {
      "type": "string"
    }
  },
  "required": [
    "briefing"
  ],
  "additionalProperties": false
}
🟢brief_me_now(company)

Ask the CEO for a fresh briefing since your last one (at most 3 a day). It is written and voiced in the background: read it with get_briefing in a minute.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢list_decisions(company, status, page, page_size)

The Board inbox: cards waiting for you (`status` pending, default), or decided ones. Each card says what the team wants, why, the risk tier and the amount; decide with `decide`.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "status": {
      "type": "string",
      "description": "pending (default), decided, or a comma list"
    },
    "page": {
      "type": "integer",
      "minimum": 1
    },
    "page_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢get_decision(decision)

One inbox card in full: the ask, the agent's case, the options, the work behind it.

輸入結構描述

{
  "type": "object",
  "properties": {
    "decision": {
      "type": "string"
    }
  },
  "required": [
    "decision"
  ],
  "additionalProperties": false
}
🔴decide(decision, choice, note, answer, edited_input)

Decide an inbox card as the founder: approve, reject (a `note` is required) or cancel. For a question card, `answer` is the chosen option's value. `edited_input` approves with a change to what was asked.

輸入結構描述

{
  "type": "object",
  "properties": {
    "decision": {
      "type": "string",
      "description": "the card's id"
    },
    "choice": {
      "type": "string",
      "enum": [
        "approve",
        "reject",
        "cancel"
      ]
    },
    "note": {
      "type": "string"
    },
    "answer": {
      "type": "object"
    },
    "edited_input": {
      "type": "object"
    }
  },
  "required": [
    "decision",
    "choice"
  ],
  "additionalProperties": false
}
⚪comment_on_decision(decision, body)

Ask the team something about a card before deciding; the requesting agent answers.

輸入結構描述

{
  "type": "object",
  "properties": {
    "decision": {
      "type": "string"
    },
    "body": {
      "type": "string"
    }
  },
  "required": [
    "decision",
    "body"
  ],
  "additionalProperties": false
}
🟢list_tasks(company, status, assignee, q, mine, ...)

The work board: tasks by status, assignee role or goal; `q` searches titles; `mine: true` only what you asked for (your requests).

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "status": {
      "type": "string"
    },
    "assignee": {
      "type": "string",
      "description": "a role key, e.g. engineer"
    },
    "q": {
      "type": "string"
    },
    "mine": {
      "type": "boolean"
    },
    "page": {
      "type": "integer",
      "minimum": 1
    },
    "page_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢get_task(task)

One task in full: description, criteria, status, the thread's last comments, its pull requests and deliverables.

輸入結構描述

{
  "type": "object",
  "properties": {
    "task": {
      "type": "string",
      "description": "its id or key (AUTO-12)"
    }
  },
  "required": [
    "task"
  ],
  "additionalProperties": false
}
🟡create_task(company, title, description, assignee, priority, ...)

Give the team work, or make a request of your own (the CEO routes it when no assignee is named): a title, what done looks like, criteria. `assignee` is an agent id (list_agents).

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "title": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "assignee": {
      "type": "string"
    },
    "priority": {
      "type": "string",
      "enum": [
        "low",
        "medium",
        "high",
        "urgent"
      ]
    },
    "acceptance_criteria": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "goal": {
      "type": "string"
    }
  },
  "required": [
    "title"
  ],
  "additionalProperties": false
}
🔴update_task(task, title, description, status, priority, ...)

Change a task: its title, description, status, priority, assignee or criteria. To cancel one, use cancel_task.

輸入結構描述

{
  "type": "object",
  "properties": {
    "task": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "priority": {
      "type": "string"
    },
    "assignee": {
      "type": "string"
    },
    "acceptance_criteria": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "task"
  ],
  "additionalProperties": false
}
🟡comment_on_task(task, body)

Write in a task's thread as the founder: the assignee reads it and answers (a comment wakes them).

輸入結構描述

{
  "type": "object",
  "properties": {
    "task": {
      "type": "string"
    },
    "body": {
      "type": "string"
    }
  },
  "required": [
    "task",
    "body"
  ],
  "additionalProperties": false
}
🔴cancel_task(task, reason, preview)

Cancel a task (and its open subtasks, pending cards and live runs). `preview: true` only says what it would take.

輸入結構描述

{
  "type": "object",
  "properties": {
    "task": {
      "type": "string"
    },
    "reason": {
      "type": "string"
    },
    "preview": {
      "type": "boolean"
    }
  },
  "required": [
    "task"
  ],
  "additionalProperties": false
}
🟢list_agents(company)

The team: every agent with its role, title, state and whether it is on. Chat with one through ask_agent.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    }
  },
  "required": [],
  "additionalProperties": false
}
⚪ask_agent(company, agent, message, production, wait_seconds)

Start a chat with an agent (list_agents) and wait for the answer. `agent` is the agent's id or role key (ceo, cto, creative…). Beside the Studio, pass `production` (a video id) so the Creative Director sees that video. The reply's `actions` are proposals (a task, media to make, a card): apply one with apply_chat_action. `wait_seconds` (default 90, max 600) is how long to wait for the reply.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "agent": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "production": {
      "type": "string"
    },
    "wait_seconds": {
      "type": "integer"
    }
  },
  "required": [
    "agent",
    "message"
  ],
  "additionalProperties": false
}
🟡continue_chat(chat, message, wait_seconds)

Send another message in an existing chat and wait for the reply.

輸入結構描述

{
  "type": "object",
  "properties": {
    "chat": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "wait_seconds": {
      "type": "integer"
    }
  },
  "required": [
    "chat",
    "message"
  ],
  "additionalProperties": false
}
🟢read_chat(chat, last)

A chat's messages, oldest first (the last reply's status says whether it is still answering).

輸入結構描述

{
  "type": "object",
  "properties": {
    "chat": {
      "type": "string"
    },
    "last": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "only the last N messages"
    }
  },
  "required": [
    "chat"
  ],
  "additionalProperties": false
}
🟢list_chats(company, q, agent)

Your chats across the team (pinned first, then recent); `q` searches titles and content.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "q": {
      "type": "string"
    },
    "agent": {
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}
🔴apply_chat_action(action, edits, dismiss)

Apply a proposal an agent made in a chat (a task, a note, media to make, a card): the action's id from the reply's `actions`. `edits` changes fields of its payload first. `dismiss: true` declines it.

輸入結構描述

{
  "type": "object",
  "properties": {
    "action": {
      "type": "string"
    },
    "edits": {
      "type": "object"
    },
    "dismiss": {
      "type": "boolean"
    }
  },
  "required": [
    "action"
  ],
  "additionalProperties": false
}
🟢list_runs(company, status, agent, page, page_size)

Agent runs: `status` active (queued, running), finished, or a comma list; `agent` an agent id.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "status": {
      "type": "string"
    },
    "agent": {
      "type": "string"
    },
    "page": {
      "type": "integer",
      "minimum": 1
    },
    "page_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢get_run(run, after_seq, events)

One run: its status, cost, and its events (tool calls, text) from `after_seq`.

輸入結構描述

{
  "type": "object",
  "properties": {
    "run": {
      "type": "string"
    },
    "after_seq": {
      "type": "integer"
    },
    "events": {
      "type": "boolean",
      "description": "include the events (default true)"
    }
  },
  "required": [
    "run"
  ],
  "additionalProperties": false
}
⚪nudge_run(run, guidance)

Steer a run that is still going: a line of guidance the agent reads at its next step.

輸入結構描述

{
  "type": "object",
  "properties": {
    "run": {
      "type": "string"
    },
    "guidance": {
      "type": "string"
    }
  },
  "required": [
    "run",
    "guidance"
  ],
  "additionalProperties": false
}
🟢list_artifacts(company, type, status, q, starred, ...)

What the team made: documents, research, decks, tables, videos, designs (`type`), delivered work (`kind`), `q` searches, `starred` only yours.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "type": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "q": {
      "type": "string"
    },
    "starred": {
      "type": "boolean"
    },
    "page": {
      "type": "integer",
      "minimum": 1
    },
    "page_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢get_artifact(artifact)

One artifact in full (its body, content, version, who made it).

輸入結構描述

{
  "type": "object",
  "properties": {
    "artifact": {
      "type": "string"
    }
  },
  "required": [
    "artifact"
  ],
  "additionalProperties": false
}
🟡artifact_feedback(artifact, body)

Ask for a revision of an artifact: a task for the agent who made it; the change lands as a new version.

輸入結構描述

{
  "type": "object",
  "properties": {
    "artifact": {
      "type": "string"
    },
    "body": {
      "type": "string"
    }
  },
  "required": [
    "artifact",
    "body"
  ],
  "additionalProperties": false
}
🟢studio_overview(company)

The Studio: every model this company can run (what it is for, price, shapes, availability), the voices, the default models and narrator, providers, the team's allowance, and whether this server can check and render code films (`can_render_code`).

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟡studio_settings(company, default_models, voice)

Change the Studio's defaults: `default_models` by kind (image, video, voice, music: model keys from studio_overview) and the default narrator `voice` (a voice key).

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "default_models": {
      "type": "object"
    },
    "voice": {
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢list_media(company, kind, source, q, starred, ...)

The media library: images, clips, voice lines and music, with filters (`kind` image|video|audio, `source` generated|uploaded|recorded|rendered, `q`, `starred`).

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "kind": {
      "type": "string"
    },
    "source": {
      "type": "string"
    },
    "q": {
      "type": "string"
    },
    "starred": {
      "type": "boolean"
    },
    "purpose": {
      "type": "string"
    },
    "page": {
      "type": "integer",
      "minimum": 1
    },
    "page_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢get_media(media)

One piece of media: its prompt, model, settings, link and state.

輸入結構描述

{
  "type": "object",
  "properties": {
    "media": {
      "type": "string"
    }
  },
  "required": [
    "media"
  ],
  "additionalProperties": false
}
🔴generate_media(company, kind, prompt, model, aspect_ratio, ...)

Make an image, a clip, a voice line or music in the Studio (spends credits): `kind`, a `prompt`, optionally a `model` (studio_overview), `aspect_ratio`, `duration` (seconds, clips), `count` (images), `voice` (a voice key, for kind audio with purpose voice), `purpose` (voice|music for audio), `references` (media ids). Returns the media ids (status queued): read them later with get_media.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "kind": {
      "type": "string",
      "enum": [
        "image",
        "video",
        "audio"
      ]
    },
    "prompt": {
      "type": "string"
    },
    "model": {
      "type": "string"
    },
    "aspect_ratio": {
      "type": "string"
    },
    "duration": {
      "type": "number"
    },
    "count": {
      "type": "integer",
      "minimum": 1,
      "maximum": 4
    },
    "voice": {
      "type": "string"
    },
    "purpose": {
      "type": "string",
      "enum": [
        "voice",
        "music"
      ]
    },
    "references": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "title": {
      "type": "string"
    },
    "production": {
      "type": "string"
    },
    "shot": {
      "type": "string"
    }
  },
  "required": [
    "kind",
    "prompt"
  ],
  "additionalProperties": false
}
🟢list_videos(company)

The Studio's videos (productions): title, status, shape, length.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢get_video(video)

A video's storyboard in full: every shot (picture, line, text, seconds, direction, takes), the style and models it is made with, the presenter, cards, the finished render, and what is missing before it can render. `engine` says how it is cut (ffmpeg: the joiner; remotion: a code film) and `code` where a code film stands (version, checked, errors; get_video_code for the project).

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string"
    }
  },
  "required": [
    "video"
  ],
  "additionalProperties": false
}
🟡create_video(company, title, brief, aspect_ratio, seconds, ...)

Start a video: a title, the brief (who it's for, what it must show, the one thing to feel), the shape (16:9, 9:16, 1:1, 4:5) and the length in seconds. The platform drafts the storyboard from the brief (a little model time, billed like an agent's); then shape it with set_video_shots or ask the Creative Director (ask_agent creative, with `production`). `draft: false` makes an empty video to fill yourself.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "title": {
      "type": "string"
    },
    "brief": {
      "type": "string"
    },
    "aspect_ratio": {
      "type": "string",
      "enum": [
        "16:9",
        "9:16",
        "1:1",
        "4:5"
      ]
    },
    "seconds": {
      "type": "integer",
      "minimum": 10,
      "maximum": 180
    },
    "draft": {
      "type": "boolean"
    },
    "style": {
      "type": "object"
    }
  },
  "required": [
    "title",
    "brief"
  ],
  "additionalProperties": false
}
🟡set_video_shots(video, shots)

Replace a video's storyboard: shots in order, each {visual: generate|footage|title|presenter, prompt, voiceover, on_screen_text, duration_seconds, media?, voice?, direction?, keep_audio?, notes?}. Send a shot's `id` to keep its media, voice and direction (a `direction` sets only the keys it carries; a key set to null is removed); a shot without one is new. A title's line breaks (\n in on_screen_text) are kept on the card.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string"
    },
    "shots": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "maxItems": 60
    }
  },
  "required": [
    "video",
    "shots"
  ],
  "additionalProperties": false
}
🟡update_video(video, title, brief, aspect_ratio, style)

Change a video: title, brief, shape, or its `style`: music, captions, transition (cut|fade), colours, the narrator `voice`, the `look` (palette, light, camera, texture, mood, type, avoid, brand light|balanced|strong), the music cue (`music_prompt`, `music_bpm`, `beat_sync`), and `models` {clip, keyframe, voice, music, speaking}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "brief": {
      "type": "string"
    },
    "aspect_ratio": {
      "type": "string"
    },
    "style": {
      "type": "object"
    }
  },
  "required": [
    "video"
  ],
  "additionalProperties": false
}
🔴make_video_media(video, what, model, voice)

Make what a video still lacks (spends credits): `what` all (clips and voice lines), visuals, voice, or music (composed from the style's music cue). `model` overrides the clip model for this call.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string"
    },
    "what": {
      "type": "string",
      "enum": [
        "all",
        "visuals",
        "voice",
        "music"
      ]
    },
    "model": {
      "type": "string"
    },
    "voice": {
      "type": "string"
    }
  },
  "required": [
    "video"
  ],
  "additionalProperties": false
}
🔴video_keyframes(video, shots)

Make the keyframes first (a still of each generate shot's first frame, cents each) so the look is locked before clips are paid for. `shots`: shot ids, default every shot without one.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string"
    },
    "shots": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "video"
  ],
  "additionalProperties": false
}
⚪critique_video(video, stage)

The critic judges the latest takes (`stage` keyframes or clips) against each shot's direction and puts the best on the shot.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string"
    },
    "stage": {
      "type": "string",
      "enum": [
        "keyframes",
        "clips"
      ]
    }
  },
  "required": [
    "video",
    "stage"
  ],
  "additionalProperties": false
}
🟢render_video(video)

Cut the video into one MP4 (free). get_video says what is missing when it refuses; the render takes a minute or two. A code film (`engine` remotion) renders its last checked version through Remotion, so the check must pass first (check_video_code); the refusal names the film's problem.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string"
    }
  },
  "required": [
    "video"
  ],
  "additionalProperties": false
}
🔴design_video_cards(video, remove)

Make (or re-sync) the cards drawn over a video's shots, one scene per shot, editable in the Studio's design editor. `remove: true` takes them off.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string"
    },
    "remove": {
      "type": "boolean"
    }
  },
  "required": [
    "video"
  ],
  "additionalProperties": false
}
🟢video_plan(video)

A video as a plan (JSON): its shots, presenter, style, media ids. Change it and import it back with import_video_plan.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string"
    }
  },
  "required": [
    "video"
  ],
  "additionalProperties": false
}
⚪import_video_plan(company, plan)

A whole video at once from a plan (the shape video_plan returns): title, brief, aspect_ratio, style, presenter, shots.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "plan": {
      "type": "object"
    }
  },
  "required": [
    "plan"
  ],
  "additionalProperties": false
}
⚪export_video(video)

A link to a zip of the video's plan and every file it names (works for a week).

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string"
    }
  },
  "required": [
    "video"
  ],
  "additionalProperties": false
}
🔴delete_video(video)

Delete a video (its media stay in the library).

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string"
    }
  },
  "required": [
    "video"
  ],
  "additionalProperties": false
}
🔴update_media(media, title, starred, action)

Rename, star or delete a piece of media; `retry` makes a failed generation again; `cancel` stops one.

輸入結構描述

{
  "type": "object",
  "properties": {
    "media": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "starred": {
      "type": "boolean"
    },
    "action": {
      "type": "string",
      "enum": [
        "delete",
        "retry",
        "cancel"
      ]
    }
  },
  "required": [
    "media"
  ],
  "additionalProperties": false
}
🟡convert_video_to_code(video, note)

Cut a video in code: its storyboard compiles to a Remotion project (`engine` remotion, version 1 from the compiler, checked and built where the server has Node). The storyboard, media and direction stay as they are; from here the picture is drawn by the project's scenes, which you edit with write_video_code. On a film that exists it brings src/film.json up to date. Read read_studio_guide {file: 'film-code/SKILL.md'} before editing.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string",
      "description": "the video id (list_videos)"
    },
    "note": {
      "type": "string"
    }
  },
  "required": [
    "video"
  ],
  "additionalProperties": false
}
🟢get_video_code(video, file)

A video's code film (a Remotion project its storyboard compiles to; API contract §91): the version, the head's files (paths), the scenes, the last check (ok, errors with file and line, warnings), the preview link and the latest versions. With `file` (a path, e.g. src/Film.tsx) one file's content and who wrote it. 404 before convert_video_to_code.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string",
      "description": "the video id (list_videos)"
    },
    "file": {
      "type": "string",
      "description": "a path of the head, for its content"
    }
  },
  "required": [
    "video"
  ],
  "additionalProperties": false
}
🟡write_video_code(video, files, note)

Write files of a video's code film: `files` [{path, content}] (content null removes a file; paths under src/ ending .ts, .tsx, .js, .jsx, .css or .json; src/film.json, package.json and tsconfig.json are the compiler's and follow the storyboard). A new version is made and checked at once (tsc, the lint, the scene list, the preview build): `check` says ok, or the errors with file and line. Free. Only `@autopo/film`, react, remotion, `@remotion/*`, zod and the film's own files may be imported; words live in film.json, not in code.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string",
      "description": "the video id (list_videos)"
    },
    "files": {
      "type": "array",
      "minItems": 1,
      "maxItems": 40,
      "items": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "content": {
            "type": [
              "string",
              "null"
            ],
            "description": "the file's text, or null to remove it"
          }
        },
        "required": [
          "path",
          "content"
        ]
      }
    },
    "note": {
      "type": "string",
      "description": "what changed, for the version list"
    }
  },
  "required": [
    "video",
    "files"
  ],
  "additionalProperties": false
}
🟢check_video_code(video)

Check a video's code film again without changing it: tsc, the lint, the scene list and the preview bundle run on the head. `check` has ok, errors (file, line, shot, message), warnings (craft: a card over 7 words, no hook by 2 s…) and the running time. Free.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string",
      "description": "the video id (list_videos)"
    }
  },
  "required": [
    "video"
  ],
  "additionalProperties": false
}
⚪video_frames(video, frames, every_seconds)

Draw stills of a video's code film as Studio images (free; seconds after the first build): `frames` (frame numbers at the film's fps) or `every_seconds`; neither: the middle of every shot. Up to 12 a call. Needs a passing check. Each result has a url and thumb_url to look at before a render.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string",
      "description": "the video id (list_videos)"
    },
    "frames": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0
      },
      "maxItems": 12
    },
    "every_seconds": {
      "type": "number",
      "minimum": 0.5
    }
  },
  "required": [
    "video"
  ],
  "additionalProperties": false
}
🟢video_code_versions(video)

Every version of a video's code film, newest first: number, source (compiler, agent, founder, restore), note, files, who made it and when; `head` is the current one.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string",
      "description": "the video id (list_videos)"
    }
  },
  "required": [
    "video"
  ],
  "additionalProperties": false
}
⚪restore_video_code(video, version)

Bring an earlier version of a video's code film back as a new version (source restore), checked at once.

輸入結構描述

{
  "type": "object",
  "properties": {
    "video": {
      "type": "string",
      "description": "the video id (list_videos)"
    },
    "version": {
      "type": "integer",
      "minimum": 1,
      "description": "a number from video_code_versions"
    }
  },
  "required": [
    "video",
    "version"
  ],
  "additionalProperties": false
}
🟢brand_brain(company)

The brand brain: what the company says about itself, for whom, against whom, in what voice (every writer reads it).

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢list_posts(company, status, account, limit)

Social posts: upcoming, published or failed (`status`), per `account`.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "status": {
      "type": "string"
    },
    "account": {
      "type": "string"
    },
    "limit": {
      "type": "integer"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢social_accounts(company)

The company's social accounts and networks, and what each account may post on its own.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟡check_posts(company, posts)

Run the pre-publish gate on posts you wrote (nothing is posted): each post's review against the brand.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "posts": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  },
  "required": [
    "posts"
  ],
  "additionalProperties": false
}
🔴create_posts(company, posts, schedule_at)

Post as yourself (no card): `posts` [{account, text, media?}], now or at `schedule_at` (ISO).

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "posts": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "schedule_at": {
      "type": "string"
    }
  },
  "required": [
    "posts"
  ],
  "additionalProperties": false
}
🟢marketing_learnings(company, status)

What worked and what didn't: the learnings log, newest first.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "status": {
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢budget(company)

The month's spend against the budget, by agent and kind, and the credits left.

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢ledger(company, kind, agent, page, page_size)

Every charge, newest first (`kind`, `agent` filter).

輸入結構描述

{
  "type": "object",
  "properties": {
    "company": {
      "type": "string",
      "description": "the company id (list_companies); optional when you have one"
    },
    "kind": {
      "type": "string"
    },
    "agent": {
      "type": "string"
    },
    "page": {
      "type": "integer",
      "minimum": 1
    },
    "page_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [],
  "additionalProperties": false
}
🔴api_request(method, path, body, query)

Call any endpoint of the Autopo REST API as yourself: `method`, `path` (starts with /api/, ids filled in), optional JSON `body` and `query`. The contract (read_api_contract) is the manual: use it for anything the other tools don't cover. Writes are real.

輸入結構描述

{
  "type": "object",
  "properties": {
    "method": {
      "type": "string",
      "enum": [
        "GET",
        "POST",
        "PATCH",
        "PUT",
        "DELETE"
      ]
    },
    "path": {
      "type": "string"
    },
    "body": {
      "type": "object"
    },
    "query": {
      "type": "object"
    }
  },
  "required": [
    "method",
    "path"
  ],
  "additionalProperties": false
}
🟢read_api_contract(section, search)

The REST API contract (docs/API_CONTRACT.md): its table of contents with no arguments; a `section` number (e.g. 17 for the Studio) or a `search` word returns the text.

輸入結構描述

{
  "type": "object",
  "properties": {
    "section": {
      "type": "string"
    },
    "search": {
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢read_studio_guide(file)

The Creative Director's own guide to the Studio (how films, images, voice and music are made, which model for which job): the index with no `file`, or one of its files. Under `film-code/` (SKILL.md, references/*) her guide to code films: the Remotion project a video's storyboard compiles to, the kit, the contract, the recipes. Read it before convert_video_to_code, get_video_code, write_video_code, check_video_code, video_frames, video_code_versions and restore_video_code; the resources under autopoiesis://film-kit/ carry kit.md and contract.md on their own. Under `swipe-file/` the swipe file: the SaaS and B2B spots a film's concepts cite, as structured notes.

輸入結構描述

{
  "type": "object",
  "properties": {
    "file": {
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本67 個工具