accueil / serveurs / Médias / io.github.poweredbyGEN/gen-mcp-server
io.github.poweredbyGEN/gen-mcp-server
serveur MCP (Model Context Protocol) · gen 1.0.0+5c6f2faf2f74
Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur.
Est-ce que io.github.poweredbyGEN/gen-mcp-server est sûr ?
Au dernier audit MCP Hub, le serveur MCP « io.github.poweredbyGEN/gen-mcp-server » est classé « Non encore testé ». Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Les 19 outils
- gen_agent_action≈ 4413 tokens
Manage assistants and their profiles. One call carries one or more typed actions: set_profile (flat brand_name | description | competitors | identity_type | goal | target_platforms | shortform | longform | look | personality | persona_inspirations | research_topics | content_themes | monitored) | set_name (name) | set_location (catalog_version + country_code + city_id, sent alone) | set_primary_voice (default_user_voice {voice_id, source}) | set_primary_photo (the agent profile photo: profile_photo_url; null removes) | add_reference_images | remove_reference_images (agent reference images) | add_linked_account | remove_linked_account | complete_profile (description + linked_accounts) | create_agent | update_agent | delete_agent | create_agent_avatar | delete_agent_avatar (agent profile photos, read with gen_discover agent.profile_photos; an avatar with looks and talking characters is gen_characters) | add_agent_inspiration | create_look | connect_agent_elevenlabs | reset_agent_profile. Every settings field is the agent-core AgentCorePatch field of the same name and an unknown field is refused before any call. delete_agent/update_agent/set_name act on the named agent — call this tool first, even when the agent is only loosely named ('the draft agent I made yesterday'); the action names the agent_id field to supply. Do not list agents via gen_discover agent.list first. Setting which platforms the agent posts to — 'make me post on YouTube and TikTok' with no content or schedule to ship — is set_profile target_platforms here, not gen_publish_action. Read settings with gen_discover agent.settings (GET /core) and the location options with gen_discover location.countries / location.cities. Agent sharing is manager/owner-gated (share_agent, set_agent_share_role, revoke_agent_share, transfer_agent_ownership); revoke_agent_share and transfer_agent_ownership return a CONFIRMATION_REQUIRED preview and confirm first, and set_project_share (public | private) needs editor access. The legacy agent tool names are retired; use this dispatcher.
Paramètres, retour & exemple (3)
Paramètresactions· array · requis
One or more typed agent actions: set_profile (brand_name, description, competitors, identity_type, goal, target_platforms, shortform, longform, look, personality, persona_inspirations, research_topics, content_themes, monitored) | set_name (name) | set_location (catalog_version, country_code, city_id; sent alone) | set_primary_voice (default_user_voice {voice_id, source}) | set_primary_photo (the agent profile photo: profile_photo_url) | add_reference_images (agent reference images: content_resource_ids and/or images) | remove_reference_images (ids) | add_linked_account (url, optional display_name) | remove_linked_account (linked_account_id) | complete_profile (description and/or linked_accounts) | create_agent (name, optional description/organization_id) | update_agent (optional name/description) | delete_agent | create_agent_avatar (adds an agent profile photo) | delete_agent_avatar (avatar_id of an agent profile photo) | add_agent_inspiration (url, optional platform) | create_look | connect_agent_elevenlabs (api_key) | reset_agent_profile | share_agent (username_or_email, role viewer|editor|manager) | set_agent_share_role (username_or_email, role viewer|editor|manager) | revoke_agent_share (shared_agent_id) | transfer_agent_ownership (username_or_email) | set_project_share (project_id_or_uuid, permission public|private)agent_id· ? · optionnel
The agent ID that owns the assistant; merged into each action exactly where the legacy tool accepts itconfirm_token· ? · optionnel
Single-use token from a CONFIRMATION_REQUIRED error; repeat the same call with it to complete the destructive action it was issued for. Omit on the first call.
Exemple d'appel{"name": "gen_agent_action", "arguments": {"actions": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_analyze≈ 11408 tokens
Analyze real social data and research the web: collect is the typed collection seam — one synchronous DW /collect call per request, answered as model-visible evidence + a per-target coverage summary + result cards (never a job id, never PENDING). For a request to analyze N videos, use collect with count:N and enrich:"full"; listing or showing posts leaves enrich omitted. Omitted enrich collects post metadata only and does not analyze video footage. Report the collected and actually analyzed counts separately, preserving any admission/exclusion disclosure; never claim collected rows were analyzed videos. With enrich:"full" collect waits on the DW's full-enrichment job (transcript, hooks, visual analysis on every row) and answers GEN's written analysis plus one display card per row (thumbnail, @handle, view/like/comment counts, post date, post URL); the enriched per-video fields stay server-side unless include names them (transcript|hooks|visual_description|description|stats), and a job still running when the budget expires answers a PENDING receipt whose collect_enrichment_status action ({job_id}) polls the completed rows in the same shape. For other research and trends requests, use research_web, trends, hooks, creators, comment_mining or video_analysis directly; these jobs own collection and synthesis, so do not collect separately first. It takes targets [{platform, scope, target}] over scope account|asset|comments|creators|id|search|sounds|url|hashtag|keyword|user|ads and platform tiktok|instagram|youtube|reddit|pinterest|twitter|kick|twitch|meta_ads|tiktok_ads and freshness live (the default) or cache_then_live_deficit (cache_then_live_deficit serves stored rows free and fetches only the missing count live; cache_only is refused; every account target is paired in the same call with the same handle's user scope for that account's latest posts unless options.profile_only=true, and a comments action scoped only by video_ids is served live by collect's comments scope), and it replaces the older social-data branches named below. discover trends (trends) across TikTok, Instagram, YouTube, and Kick; search comments server-side with sentiment (comments); synthesize scoped TikTok, Instagram, or YouTube comment themes and prose as a normalized table card (comment_mining: target is an @creator, a #hashtag — a bare word is read as a hashtag — or a video URL; platform optional, default TikTok), or analyze one video (video_analysis: video_url accepts a social video link or a public HTTPS .mp4/.mov/.webm/.m4v/.mkv file; for analysis-only requests about framing, shots or timing, use video_analysis with include_video_analysis=true. This watches the existing video without creating clips or drafts; include_video_analysis=false requests social metadata only). Both synthesis actions submit one owner-scoped job with an idempotency key and GET-only polling, not inline legacy cards. Read the DW aggregate trend report (report); and run bounded web research findings (research_web; save:true keeps the run as a Research Warehouse brief, save:false/omitted is one-shot). Analyze source videos for requested clips with clip_moments (1–10 social links, public HTTPS video files, GEN assets or numeric GEN video IDs; optional clip count, duration bounds, mode, presentation, aspect ratio, reframe, speed and enrich; one paid request returns per-source clips and failures). User-selected timestamp windows are exact media edits: use the existing media editor with the owned original source; clip_moments must carry source_start_seconds/source_end_seconds and refuses discovery for that selection. Do not replace a failed selected edit with viral discovery. The DW social warehouse is served directly too: search_posts (DEPRECATED — superseded by collect; still served; the GEN-3096 keyword search — the TikTok cached keyword path by default and the cross-platform search when platforms name more than tiktok, with the Common filter set on the entry), analyze_account (DEPRECATED — superseded by collect; still served: one account's profile + followers), transcribe and transcribe_status (DEPRECATED — superseded by collect url/id; still served: social video transcription by platform and its status), upload_by_ids (upload the stored media), comments_online (DEPRECATED — superseded by collect comments; still served: the live comment fetch beside the cached comments read), monitor_status (the DW monitoring read) and aura_user_stats (AURA stats by emails). hooks returns hook_text/pattern rows plus hook_clusters (pattern clusters) and a truthfulness block (returned, thin_result, note), and needs a scoped target: an @handle, #hashtag or keyword (HOOKS_TARGET_REQUIRED otherwise; HOOKS_UNAVAILABLE when the analyst is off). creators runs the same analyze job door and is served here. One call carries one or more typed actions. trends/hooks take query/mode/target/platform plus the reused CommonFilters bundle (no new dialect), an optional relevance_query, and a raw flag — results are analyzed by default and raw=True opts out to unanalyzed rows. comments takes a scope (query | video_ids | creator | hashtag) plus optional sentiment, days and limit; report takes window (1 | 7 | 30) and limit; research_web takes query plus optional mode (news|social|web|all), research-source platforms (x|news|web|reddit), days, limit, reddit_subreddits and save. A single URL reads its page; extract_assets discovers files, import_assets imports them, and asset_urls selects files. mode social is the community sources, X and Reddit. Research tie-break: 'Research X' the user wants kept or followed up is gen_analyze research_web with save:true (kept as a Research Warehouse brief); research_web is one-shot by default and never persists without save:true. research_scrape scrapes any source on the first call with bounded caps: source is a platform (tiktok, instagram, youtube, x/twitter, pinterest, kick, web) or any public URL, and input names the scrape target (keyword | hashtag | username | user URL; x serves user targets only, pinterest user walks take cursor, and a page source takes url/asset_types/limit/query, extract_assets, import_assets and selected asset_urls); web pages return readable text, headings, links and media; import_assets=true imports selected files through the existing owned-asset path. Success returns evidence and billing. apify_scrape runs one caller-named approved provider actor on the first call and bills: actor_id names the actor and input is its own run input, capped by max_items; success returns the dataset rows and billing. web_asset_scrape runs and bills on the first call, discovers public-page media candidates and optionally imports each through gen_asset_action; a valid legacy confirm_token remains accepted. Success returns candidates, imported_count, imported_assets, import_errors, proxy_used and fetcher.analyze_socials (DEPRECATED — superseded by collect; still served; its hidden legacy names social_posts_scrape and general_scrape are deprecated with it) is the one social-scrape write: a social target (platform + mode + target, with optional cursor/from_db/limit/period/sort_by/min_count) is a live social.posts scrape, and a wide scope (platform + one of keyword/hashtag/userPageURL/video_url, with optional days/last_num_videos/scrape_type/from_db/videoMonitoring) is the DW general scrape. analyze_socials serves Twitch and Kick channel/VOD URLs, resolves a Kick or Twitch mode + target to the wide scope it names, and forwards Kick/Twitch keyword and hashtag scopes to the DW general scrape; the DW's own provider path answers the scopes it does not serve. videoMonitoring forwards unchanged. The paid DW writes the read-only discover lane no longer serves live here: import_urls (paid first-call URL-to-S3 import: platform + public videos_urls, capped at 50 URLs per call, writes S3 and bills on the first call; from_db=true and from_db_only=true are refused as stored-only-unavailable before any request) and analyze_socials (subject to provider support); the DW result preserves returned S3 asset paths. sounds (DEPRECATED — superseded by collect sounds; still served) answers the DW sound endpoints by view (sounds_by_niche | sounds_by_creator | rising_sounds | sound_performance | sound_arbitrage | music | trending_sounds | sound_info) and analytics the DW aggregate endpoints (aggregate | sleepers | posting_times; by_demographics is owner-removed); each view takes its own endpoint fields plus the common GEN-3096 filters object. Paid DW writes and research_scrape execute on the first call — confirmation happens in the FE and a stray confirmed/confirm_token argument is accepted and ignored. Analysis runs and bills on the first call. Each result carries a truthfulness block as fields (requested echo, backend run identity and status, billing subject). Spending analysis and research: the run is billed to the envelope agent_id, which is required (no anonymous path). Demographic filters are owner-removed and rejected. Transcribing an audio or video URL into text is gen_generate (transcribe); the transcribe branch here is the DW transcription of stored social video ids into warehouse transcripts. Free-form questions with attachments belong to gen_ask (ask). Reddit is a research source served by the shared research branch, never a DW video collection: 'reddit' is a research platform, a subreddit scope is reddit_subreddits, a one-shot request carries that scope through the same analysis job as X, news and web, and a reddit.com URL carried by collect or research_web is answered as research, not refused. meta_ads and tiktok_ads are paid advertising platforms served by the DW's one ads lane over scope ads|keyword|user|id (scope ads takes a target object with exactly one of query/advertiser_id/ad_id plus optional country and status, and is forwarded verbatim; the alias scopes take a plain string: keyword->query, user->advertiser page id, id->ad id). That lane is what keeps an ad id from ever dispatching organic TikTok/Instagram retrieval. meta_ads serves live and cached ads; tiktok_ads is cache-only, so a live freshness reaches an unsupported coverage entry and never falls back to Meta or organic retrieval. enrich "full" is refused for every ads target: DW full enrichment selects video entities only and can never enrich an ad, so opt in to one creative's analysis with gen_asset_action analyze instead. Ideas, scripts, trends and stats come only from GEN calls: never invent them, call GEN.
Paramètres, retour & exemple (2)
Paramètresactions· array · requis
One or more typed analysis actions: collect (the typed collection seam — targets [{platform, scope, target}] over scope account|asset|comments|creators|id|search|sounds|url|hashtag|keyword|user|ads and platform tiktok|instagram|youtube|reddit|pinterest|twitter|kick|twitch|meta_ads|tiktok_ads (x is an accepted alias for twitter; omit platform for scope asset; it defaults to asset; for scope url, omit it or pass "auto" — the DW resolves the pasted URL's platform itself), optional platform (the default for any target that names none), count (a positive integer, or "all" for every stored row), window {days}, filters GEN-3096 object, sort recent|views|likes|engagement, freshness live (the default) or cache_then_live_deficit (cache_then_live_deficit serves stored rows free and fetches only the missing count live; cache_only is refused), rollups, options {scrape_type}, deadline_ms (the caller's remaining budget; the admitted deadline_ms is computed per caller class), run_id (forwarded as the DW billing run id), enrich "full" (wait for the DW to fully process every row — transcript, hooks, visual analysis — then answer GEN's written analysis plus one display card per row; never caption-only rows), include [transcript|hooks|visual_description|description|stats|hashtags|media_type|video_url] (the per-row fields each row may carry — transcript/hooks/visual_description/description/stats are the enriched per-video fields, hashtags adds the provider's raw hashtag array as provider_hashtags_raw, media_type rides every collected row anyway, and video_url exposes the row's observed canonical first-party hosted media URL (assets.video_url) as a playable link, null when the DW mirrored none; by default the enriched fields stay server-side and only the display cards + written analysis reach the caller)); ONE synchronous DW call answered as model-visible evidence + a per-target coverage summary + result cards (video/post → video_grid, creator/account → creator_grid, sound → song_list, comment → comment_cluster, asset → table) — normally no job id and no PENDING, except a walk that reaches the admitted deadline: that answers a typed PENDING receipt naming its durable job id and idempotency_key (poll it with gen_discover domain=social view=job job_id=..., or retry the same collect with that idempotency_key — the retry resolves to the same job and never charges twice), and enrich "full" which waits and answers a PENDING receipt (collect_enrichment_status {job_id} polls it) when its budget expires; it replaces the older social-data branches below and is the first pick for any social data pull) | collect_enrichment_status (job_id required, include optional — poll one full-enrichment collect job by the job_id its PENDING receipt named, in the same shape as enrich "full"; while the job runs the receipt relays the rows already enriched as partial_rows and says how many are enriched so far) | trends | hooks (query required, mode hashtag|keyword|niche|handle, target, platform tiktok|instagram|youtube|kick, filters CommonFilters bundle, relevance_query, raw, idempotency_key (<=255; reuse it on a retry to replay the same job)) | creators (same shape, mode keyword|handle only) | comments (one of query/video_ids/creator/hashtag, optional sentiment positive|neutral|negative, days, limit, platform tiktok) | report (window 1|7|30, optional limit) | research_web (query required, optional mode news|social|web|all and research-source platforms x|news|web|reddit, reddit_subreddits, days, limit, save, idempotency_key (<=255, save:false only; reuse it on a retry to replay the same job); save:true persists the run as a Research Warehouse brief, save:false/omitted is one-shot; mode social is the community sources, X and Reddit; Reddit research carries its subreddit scope through the same one-shot analysis job as X/news/web, and a reddit.com URL or Reddit collect target is answered as research rather than a DW collection) | video_analysis (video_url: a social link or public HTTPS .mp4/.mov/.webm/.m4v/.mkv file; include_video_analysis=true watches framing, shots and timing without creating clips or drafts; false requests social metadata only) | clip_moments (only when clips are requested; sources: 1–10 social links, public HTTPS video files, GEN asset URLs, or numeric GEN video IDs; optional clip_count 1–10 (omit it and the engine makes one clip per 3 minutes of source, capped at 10 with the cap disclosed; an explicit count wins), positive min_duration_s/max_duration_s/target_final_max_duration_s/playback_speed, mode viral_moments|summarize, presentation source_clip|floating_head|split_screen, output_aspect_ratio 9:16|16:9|1:1, smart_reframe, enrich; each clip returns its persisted idea_id; one paid POST returns per-source clips and is never automatically retried) | layer_analysis (one vidsheet video layer or audio/ingredient media cell: vidsheet_id + cell_id, plus layer_id for a layer; video and audio only, images refused; the layer's own media URL goes to the attributed GENGEMINI boundary as ONE synchronous generateContent call running the approved DW prompt for that media kind, and the answer is projected at 30 fps: scene cuts, dead head/tail spans, suggested trim in/out and a description per segment — no job to poll. Analysis runs and bills on the first call; a valid legacy confirm_token remains accepted) | research_scrape (source: platform tiktok|instagram|youtube|x/twitter|pinterest|kick|web or any public URL, input naming the scrape target — keyword | hashtag | username | user URL on pinterest (x serves user targets only; pinterest user walks take cursor), keyword/hashtag/userPageURL/video_url on tiktok/instagram/youtube/kick, page url/asset_types/limit/query on web — plus max_items (a stray confirm_token is accepted and ignored); success returns the scraped rows and billing) | web_asset_scrape (public-page url, asset_types, limit, query, optional import_assets through gen_asset_action; runs and bills on the first call, optional legacy confirm_token) | import_urls (paid first-call URL-to-S3 import: platform tiktok|instagram|youtube + videos_urls public URLs, capped at 50 per call, writes S3 and bills on the first call; from_db=true/from_db_only=true refuse as stored-only-unavailable) | apify_scrape (billed first-call external-records run: actor_id names one approved provider actor and input is that actor's own run input, capped by max_items; returns the dataset rows and billing) | analyze_socials (DEPRECATED — superseded by collect; still served: paid social write: a social target platform/mode/target for a live social.posts scrape, or a wide scope platform plus one of keyword/hashtag/userPageURL/video_url for the DW general scrape; Twitch and Kick channel/VOD URLs are served, a Kick or Twitch mode + target resolves to that scope, and Kick/Twitch keyword/hashtag scopes forward to the DW, whose own provider path answers the scopes it does not serve; videoMonitoring forwards unchanged) | search_posts (DEPRECATED — superseded by collect; still served: keyword required; optional platforms [] and the Common GEN-3096 filters — days, posted_after, posted_before, min_/max_ engagement and save counts and rates, min_/max_followers, content filters (min_/max_duration, language, country, location_query, is_paid_partnership, media_type, has_music, is_faceless_video, category), transcript_search, visual_search, hook_search, comment_search, sort_by, sort_direction, cursor, limit, sample_limit, from_db) | analyze_account (DEPRECATED — superseded by collect; still served: username required, platform tiktok|instagram|youtube|twitter|x|linkedin; url is the non-TikTok followers lookup target) | transcribe (DEPRECATED — superseded by collect url/id; still served: platform tiktok|instagram|youtube with video_ids — TikTok ids, Instagram post ids, YouTube URLs — and/or hashtags, optional num_posts, from_db, force, mode online|batch defaulting to batch above 20 ids) | transcribe_status (DEPRECATED — superseded by collect url/id; still served: video_ids) | upload_by_ids (video_ids, optional force) | comments_online (DEPRECATED — superseded by collect comments; still served: video_ids, optional count — the live fetch beside the cached social.comments read) | monitor_status (platform + exactly one of username/hashtag) | aura_user_stats (emails + environment) | sounds (DEPRECATED — superseded by collect sounds; still served: view option: sounds_by_niche | sounds_by_creator | rising_sounds | sound_performance | sound_arbitrage | music | trending_sounds | sound_info; each view takes its own endpoint fields — min_videos, creator/username, recent_days/baseline_days/min_recent_videos/min_baseline_videos, platform/audio_id/days/group_by/limit_top_videos, min_niche_videos/min_global_videos/min_lift/metric, genre/mood/theme/tags/limit/offset, periods/Top_k/country, audio_id — plus the common GEN-3096 filters object) | chart (FREE; exactly one of data {labels, series [{name, values}]} charted as given, or source {job_id, group_by, metric, agg count|sum|avg|max} aggregated from a finished analysis job's rows — group_by "day"|"week"|"month" buckets the row's timestamp by UTC date (week = its Monday); optional type bar|line, title; a running job answers PENDING, never an empty chart) | analytics (view option: aggregate | sleepers | posting_times — by_demographics is owner-removed; group_by/metrics/histograms, ratio/min_ratio, timezone/metric/group_by plus the same filters object). Paid DW writes and research_scrape execute on the first call — confirmation happens in the FE and a stray confirmed/confirm_token argument is accepted and ignored; web_asset_scrape runs and bills on the first call; a valid legacy confirm_token remains accepted. Demographic filters are rejected. wait is optional per entry. meta_ads and tiktok_ads are paid advertising platforms served by the DW's one ads lane over scope ads|keyword|user|id (scope ads takes a target object with exactly one of query/advertiser_id/ad_id plus optional country and status, and is forwarded verbatim; the alias scopes take a plain string: keyword->query, user->advertiser page id, id->ad id). That lane is what keeps an ad id from ever dispatching organic TikTok/Instagram retrieval. meta_ads serves live and cached ads; tiktok_ads is cache-only, so a live freshness reaches an unsupported coverage entry and never falls back to Meta or organic retrieval. enrich "full" is refused for every ads target: DW full enrichment selects video entities only and can never enrich an ad, so opt in to one creative's analysis with gen_asset_action analyze instead.agent_id· string · requis
The agent ID that owns the workspace (envelope; the billing subject — the analysis run is billed to this agent, no anonymous path)
Exemple d'appel{"name": "gen_analyze", "arguments": {"actions": [], "agent_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_ask≈ 3120 tokens
Ask GEN anything in plain words: a question, or a build goal for the composer. gen_ask is for durable multi-step work and scheduled or recurring work: GEN plans it, pauses for approval and keeps it in one conversation. For a single action, call that action's typed tool directly. A chat sent without a conversation_id starts one; the result returns conversation_id and request_id, so send that conversation_id on the follow-up. gen_ask accepts any edit of existing media — trim/cut a time range, crop, reframe, extract audio, merge, speed, concat or overlay — run in GEN's compute environment, returning the produced file URL or draft. NOT record lookup: 'what did I ask/say before' is chat history — gen_discover platform.conversations — and when you already hold an id, use gen_discover. One call carries one or more typed actions: ask (question) | chat (message: a multi-step build goal; payment, publishing and other gated steps pause for approval via gen_task_action decide_agent_run). Content ideas are gen_content_action (generate_ideas | expand_idea | set_idea_status) and research is gen_analyze (research_web | report) — neither is served here. Uploaded files are analyzed on request — an image, video, audio, document or spreadsheet attachment — and a YouTube watch/shorts link is analyzed the same way; the answer comes back as text. ask and chat start agent runs and poll to completion by default; wait=false returns the run_id to poll with the gen_discover task.run_status view. A message into an active workflow conversation is refused with REQUEST_ACTIVE; ask/chat mode is refused there with WORKFLOW_INPUT_UNSUPPORTED. Legacy conversations may queue a message; the separate steer action, cancel_pending and stop drive that queue and the live run; reading the queue or the thread is a gen_discover platform.conversations / platform.conversation / platform.conversation_pending view, never a branch here. Do NOT ship posts here: gen_publish_action ships. The legacy ask tool names are retired; use this dispatcher.
Paramètres, retour & exemple (3)
Paramètresactions· array · requis
One or more typed ask actions: ask (question, optional conversation_id/wait/attachments/client_message_id) | chat (message, optional conversation_id/wait/attachments/client_message_id/metadata) | steer (conversation_id + message, or conversation_id + pending_id) | cancel_pending (conversation_id + pending_id) | stop (run_id). Workflow-routed ask/chat mode is refused with WORKFLOW_INPUT_UNSUPPORTED and a new message during active work is refused with REQUEST_ACTIVE; legacy steer calls keep their existing owner. Reading the queue or the thread is a gen_discover view (platform.conversations / platform.conversation / platform.conversation_pending), not a branch here. Content ideas are gen_content_action (generate_ideas | expand_idea | set_idea_status) and research is gen_analyze (research_web | report) — neither is served here.agent_id· ? · optionnel
The agent ID the conversation, ideas and research belong to (envelope; routed per branch)confirm_token· ? · optionnel
Single-use token from a CONFIRMATION_REQUIRED error; repeat the same call with it to complete the destructive action it was issued for. Omit on the first call.
Exemple d'appel{"name": "gen_ask", "arguments": {"actions": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_asset_action≈ 2208 tokens
Manage the agent's asset library: analyze any asset_id or file url with kind video/image/audio (quoted, confirmed DW enrichment; documents are refused until DW supports them; cached repeats are free), poll the job with gen_discover domain=asset view=analysis, or upload a file in two steps (create_direct_upload, then complete_asset_upload with the signed_id), import a public video URL (import_asset_from_url), or delete an asset (delete_asset). Import takes a public HTTPS YouTube, TikTok, Instagram, or Kick video; arbitrary CDN/direct-file URLs are not supported. One call carries one or more typed actions. Deleting an asset is destructive — confirm with the user first. Read-only assets are gen_discover domain=asset (analysis | detail | list | libraries); this family's branch fields are gen_discover domain=asset view=actions (target=<branch action>). run_computer (command, optional profile default|media, secrets, egress_allowlist, run_id): run code in GEN's isolated computer — ffmpeg/ffprobe, Python with Pillow, a shell — to trim, cut, crop, reframe, overlay, merge, extract audio or transcode existing media, or any custom script no other tool covers; write produced files to /workspace/outputs/ and they come back as durable URLs in outputs; network is off unless egress_allowlist names hosts, and hosts other than GEN's asset hosts need a confirm_token round. The legacy asset tool names are retired; use this dispatcher.
Paramètres, retour & exemple (3)
Paramètresactions· array · requis
One or more typed asset actions: analyze (kind, exactly one asset_id or url) | create_direct_upload (filename, byte_size, checksum, content_type) | complete_asset_upload (signed_id, optional folder_id) | import_asset_from_url (url, optional folder_id) | delete_asset (resource_id) | run_computer (command, optional profile, secrets, egress_allowlist, run_id)agent_id· ? · optionnel
The agent ID that owns the asset library (envelope; routed per branch)confirm_token· ? · optionnel
Single-use token from a CONFIRMATION_REQUIRED error; repeat the same call with it to complete the destructive action it was issued for. Omit on the first call.
Exemple d'appel{"name": "gen_asset_action", "arguments": {"actions": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_billing_action≈ 2279 tokens
Open a Stripe payment page for a workspace plan or credit pack with open_checkout (organization_id, credit_plan_id from billing.plans). Use open_checkout when the user asks to open checkout or subscribe to a plan; it creates a payment link and never charges a saved card. Do not use gen_sign_in_link for checkout: Stripe needs no GEN sign-in. prepare_funding_recovery (agent_id) returns the ready, non-charging checkout Rails names for a workspace a funding refusal stopped, reusing one still open. Buy GEN credits on the saved card with buy_credits or create and settle an x402 crypto purchase (create_x402_credit_purchase, settle_x402_credit_purchase). One call carries one or more typed actions. Buying credits spends real money — always confirm the plan and price with the user first. When the user asks to buy/top up/add credits, buy_credits is the first call — do not read billing.plans or billing.balance first; if the plan is not yet chosen the action names the credit_plan_id to supply next. Read owned workspaces' subscription status and Stripe invoice history with list_owned_subscriptions and list_owned_invoices; these never change billing. Credit balance, usage and plans are gen_discover domain=billing views. This family's branch fields are gen_discover domain=billing view=actions (target=<branch action>). The legacy billing tool names are retired; use this dispatcher.
Paramètres, retour & exemple (3)
Paramètresactions· array · requis
Typed billing actions: open_checkout (organization_id, credit_plan_id, optional success_url/cancel_url; creates a Stripe payment page without charging), list_owned_subscriptions (no fields) | list_owned_invoices (organization_id, optional starting_after), both read-only for owned workspaces; or buy_credits, create_x402_credit_purchase, settle_x402_credit_purchase (purchase actions requiring user confirmation)agent_id· ? · optionnel
The agent ID that owns the workspace (envelope; routed per branch)confirm_token· ? · optionnel
Single-use token from a CONFIRMATION_REQUIRED error; repeat the same call with it to complete the destructive action it was issued for. Omit on the first call.
Exemple d'appel{"name": "gen_billing_action", "arguments": {"actions": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_characters≈ 3128 tokens
Characters: one person each, with looks (images of the person) and talking characters (talking videos of the person with their voice, generated from a look or uploaded). For 'create a character', op=create is the first call — do not list characters or read gen_discover agent.profile_photos first (those are the agent profile photos, not characters). Reads (a viewer is enough): list (source my | library | all, default my; query searches names), get (character_id: its looks, each look's talking characters, the uploaded talking characters, the talking characters still generating and the primary voice), get_talking_character (one talking character with its clips). create makes a character from an image content resource (its original look) or a video of a person: the video becomes an uploaded talking character, its first frame the first look (the cover), and its audio is cloned into the character's primary voice. Cloning is a paid job priced before it runs (it needs 30 seconds of speech); clone_voice false skips it. clone_voice true refuses a video without audio or too short; without clone_voice such a video is created without a voice and voice_clone_message says why. create answers look_id, talking_character_id, voice_id (null until the clone finishes, then the character's primary_voice), user_job_ids (poll with gen_discover generation) and voice_clone_status. name defaults to the file name. upload_look adds an image and upload_talking_character adds a video to a character (clone_voice true also clones its voice into that character's primary voice, same rules and answer fields as create; off by default); upload or import the file first with gen_asset_action. create_talking_character makes a talking character from a look, lip-synced so it is saved with its voice: clips is 3 to 10 clips, each {prompt, duration 5 or 10}, and the look is the start and end frame of every clip; aspect_ratio 9:16 | 16:9 | 1:1 sets its shape (default 9:16). script is optional (a default line is used when blank) and voice {voice_id, provider} defaults to the character's primary voice; with neither a voice nor a primary voice the call is refused. edit_talking_character saves a NEW talking character from a generated one and keeps the original: send the full clip list in the new order (reorder by order, delete by leaving a clip out), where {from_position} keeps that clip of the source. A kept clip whose prompt, duration and aspect_ratio are unchanged is reused: no render, no charge; give it a new prompt or duration to regenerate it. A {prompt, duration} item without from_position is a new clip and renders. The source's aspect_ratio applies unless one is sent. Every talking character carries aspect_ratio (9:16 | 16:9 | 1:1, or null when an uploaded video is none of them). Both are paid jobs priced before they run; they answer generation_id to poll with gen_discover generation, and op=get lists the talking character under generating_talking_characters until it is ready. Library characters are read-only: copy_to_mine makes your own copy, and create_talking_character or edit_talking_character on a library character saves into your copy. rename takes character_id and name, plus look_id or talking_character_id to rename that item instead. set_primary_voice sets the voice pre-selected for this character (voice {voice_id, provider}). delete_character, delete_look (its talking characters stay) and delete_talking_character are permanent: the first call answers CONFIRMATION_REQUIRED with would_destroy and confirm_token; repeat the call with confirm_token only after the user agrees. A talking-head video from an existing character is instead gen_vidsheet_action op generate, creation_card_type video_from_avatar (avatar_id = the character_id + video_url + audio_url).
Paramètres, retour & exemple (20)
Paramètresop· ? · optionnel
The character op (list is the default only when no op-specific argument is given)name· ? · optionnel
Name (rename: required; create: optional, default the file name; upload_look, upload_talking_character, create_talking_character, edit_talking_character: optional, Rails picks a default)clips· ? · optionnel
3 to 10 clips in order (create_talking_character, edit_talking_character): each {prompt, duration} with duration 5 or 10 seconds (default 10); on edit, {from_position} keeps that clip of the source talking character, reused free unless its prompt or duration is changedquery· ? · optionnel
Text to search character names for (list)voice· ? · optionnel
set_primary_voice, and the voice create_talking_character / edit_talking_character speak with (default: the character's primary voice): {voice_id, provider} from gen_discover voice.mine or voice.list; name, ownership and billing_source from gen_discover voice.resource are kept when sentscript· ? · optionnel
What the talking character says (create_talking_character, edit_talking_character). Optional: a default line is used when blanksource· string · optionnel · my | library | all
Character pool (list): the agent's own characters (my), the shared character library (library), or both (all)look_id· ? · optionnel
Look ID from op=get (create_talking_character, delete_look; with rename, renames that look)agent_id· string · requis
The selected agent IDready_for· ? · optionnel
list/get only: visual requires attached look or talking media; speaking also requires the saved primary voice. list excludes incomplete identities; get returns an actionable INPUT_NOT_READY refusal. Omit when managing or repairing identities.clone_voice· ? · optionnel
create with a video, upload_talking_character: clone the person's voice from the video's audio into the character's primary voice (a paid job). create: default true, false skips it, true refuses a video without audio or under 30 seconds instead of creating it without a voice; upload_talking_character: default false, true clones with the same refusals. Ignored for imagesaspect_ratio· ? · optionnel
Talking character shape (create_talking_character: default 9:16; edit_talking_character: default the source's)build_inputs· ? · optionnel
validate_cast only: persisted idea inputs, including cast/resolved_input/confirmed. Checks selected character media and voice requirements without starting or billing a build.character_id· ? · optionnel
Character ID (or its public id) from op=list (every op except list and create)voice_gender· ? · optionnel
create with a video, upload_talking_character with clone_voice: the cloned voice's gender label (default female)confirm_token· ? · optionnel
Single-use token from a CONFIRMATION_REQUIRED error; repeat the same call with it to complete the destructive action it was issued for. Omit on the first call.voice_language· ? · optionnel
create with a video, upload_talking_character with clone_voice: the cloned voice's language (default english)idempotency_key· ? · optionnel
Stable retry key (sent as the Idempotency-Key header, max 255 chars). Reuse the same key when retrying this exact create so Rails replays the originally created resource (same id) instead of creating a duplicate. Omit to create unconditionally.content_resource_id· ? · optionnel
Image or video content resource ID (create: an image becomes the original look; a video an uploaded talking character, its first frame a look and its audio a cloned voice; upload_look: an image; upload_talking_character: a video)talking_character_id· ? · optionnel
Talking character ID from op=get (get_talking_character, edit_talking_character, delete_talking_character; with rename, renames that talking character)
Exemple d'appel{"name": "gen_characters", "arguments": {"agent_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_content_action≈ 10582 tokens
Manage an agent's content: its content resource files — create one from an uploaded file (create_content_resource), rename one (update_content_resource), or permanently delete one (delete_content_resource) — and its content ideas. generate_ideas is the content-ideas handshake: its first call answers needs_input (the fields to supply), a proposal (proposal_id + summary + plan) or running; reply with proposal_id + feedback for a new proposal, or proposal_id + confirm:true + count to start the idea job (use the user's final count, or the approved plan count if unchanged) (then poll gen_discover content.idea_job with that returned job_id for the batch's persisted ideas; 'ideas from run X' is gen_discover content.ideas with run_id=<X>, never idea_job). confirm=true without proposal_id is a fresh request, with the same needs_input/proposal/running behavior as omitting confirm; the response explicitly says so. A new batch takes brief/count/video_type/requirements/sheet_rows (optionally grounded in source_content_resource_id, source_analysis_job_id for ideas based on an existing gen_analyze result (a trends/hooks/creators/research_web job id, read with gen_discover domain=analyze view=job), or a target_duration_seconds); a refine takes from_ideas + feedback. Send prompt verbatim, all attachments with roles, content_idea, style, content, reference_video, format and cast when provided. Thread conversation_id on every call, and pass external chat words in conversation_context. Proposals offer exactly confirm or text feedback; needs_input is an error with questions. set_content_preference and remove_content_preference use scope long_term or session (24 hours). content.directions reads prior directions. expand_idea fleshes one saved idea out with idea_id or idea_title; idea_id takes precedence when both are supplied. An authored request ('make a Draft with these scenes') first uses save_idea with the user's brief verbatim, title, video_type_id, duration and canvas. Preserve already-authored scenes and caption lines in scenes (scene_number, time_range, duration, action, dialogue, text_overlays), and spoken words in full_script; captions alone do not imply speech. Then use create_video_from_idea with its returned idea_id and creation_mode=draft for Draft only. This uses the same manifest writer and compiler as saved ideas: never generate a batch of ideas, clone a template manually, or hand-write cell/layer edits to build that Draft. A saved idea's Draft/Full always uses create_video_from_idea with idea_id or idea_title and creation_mode=draft|full, never generic gen_vidsheet_action create_sheet/actions[] create or an invented template_slug. Use idea_title for a named saved idea; MCP resolves a unique match on agent_id and asks one plain question for several matches. Do not ask the user for a UUID. Its attached resources stay with the saved idea. create_video_from_idea uses gen-agentic's deterministic idea-to-Vidsheet compiler, in creation_mode draft | full (the idea card's Draft only / Create full video). Draft requires credits for LLM cost plus markup; no paid subscription is required. Media generation is billed separately; full bills credits for generated media, and omitting creation_mode defaults to billed full. With vidsheet_id the idea is added to that Vidsheet as a new row, or built into an existing row_id of it; otherwise a new Vidsheet is created. recreate_video turns a video into one expanded idea that recreates it shot for shot; reimagine_video turns a recreate idea (or a video) into several new ideas with the same pacing and a different subject; build a row from any of them with create_video_from_idea. recreate_video and reimagine_video return the job ({job_id, status}) and their ideas land in the gen_discover content.ideas view. Read the accepted job with gen_discover domain=content view=idea_job and the original job_id, as for generate_ideas. Every idea read returns next_steps with the exact calls it currently allows. set_idea_status moves it through generated | approve_to_create | ready_for_review | change_idea | change_video | rejected | approved_to_post | posted. One call carries one or more typed actions. Deleting is permanent — confirm the file with the user first. Read-only content access is gen_discover domain=content (resource | list | ideas | idea); this family's branch fields are gen_discover domain=content view=actions (target=<branch action>). The legacy content-resource and content-ideas tool names are retired; use this dispatcher. Ideas, scripts, trends and stats come only from GEN calls: never invent them, call GEN.
Paramètres, retour & exemple (6)
Paramètresactions· array · requis
One or more typed content actions: create_content_resource (signed_id, optional asset_folder_id) | update_content_resource (resource_id, filename) | delete_content_resource (resource_id)no_paid· boolean · optionnel
Refuse paid media generation for this run. Text and LLM work still bills normally.agent_id· ? · optionnel
The agent ID that owns the content resources (envelope; routed per branch)confirm_token· ? · optionnel
Single-use token from a CONFIRMATION_REQUIRED error; repeat the same call with it to complete the destructive action it was issued for. Omit on the first call.spending_run_id· string · optionnel
Stable run or conversation identity required with spending controls. The authenticated run owner shares one policy across workspaces.max_paid_operations· integer · optionnel
Maximum paid media reservations across all workspaces in this authenticated user/run, enforced atomically. Retries reuse their reservation.
Exemple d'appel{"name": "gen_content_action", "arguments": {"actions": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_discover≈ 9178 tokens
READ-ONLY. Versioned stage/job/delivery schemas: domain=contracts view=schemas (optional target model name). NEVER call this before an action and never to look up a target, plan, connection or id first: when the user asks to create/update/delete/publish/buy/top up/generate/clone/pause/resume/revoke/rename/train/transcribe, or asks a watchlist what it found ('what did my watchlist say/find'), call the matching action tool as the FIRST call — gen_generate (create_image/create_video/create_song/create_song_mix/transcribe), gen_vidsheet_action (any sheet edit or creation-card generate: title card, intro, talking-head), gen_characters (list/create characters), gen_ask, or the gen_<noun>_action family (billing, platform, task, agent, voice, watchlist, publish, content, asset). Call the action first even when an id, sample, plan or connection is not yet known: the action returns the missing field or the options. Use gen_discover only for a pure read. EXISTING-VIDSHEET TEXT-LAYER EDIT EXCEPTION: when changing a text layer that already exists on a Vidsheet, read that row's vidsheet.layers view first to bind the exact layer, save with gen_vidsheet_action, then read the same vidsheet.layers view again to verify the exact saved text — the save's own response is not proof of the sheet's current state. Step 3 (Read anything): THE discovery tool — every GEN read is a domain + view here. Every action family's branches are readable the same way: domain=<family domain> view=actions lists them with one line each, and target=<branch action> (for example domain=content view=actions target=reimagine_video) returns that branch's fields — name, type, required, enum values, description and default — from the same model the family validates an entry with, so a cached tools/list never hides a branch's fields. Vidsheet domain (28 views) reads the editable video workspace; the other domains fold the legacy get/list tools: agent (detail | capabilities | core | settings | profile | profile_photos | list | shares | monitoring | execution_access) · asset (analysis | detail | libraries | list) · billing (balance | generation_access | usage | receipt | plans) · content (resource | list | ideas | idea | idea_job | video_job | directions) · location (countries | cities) · media (last_operation | operations | recommended_sounds | sound_library) · platform (me | organization | organizations | conversation | conversations | request_tree | preferences | api_keys | backups | members) · publish (post_status | rules | connect_url | connections | scheduled) · task (job | job_locator | run_status | list) · voice (list | mine | resource | preview_status | sample_status) · watchlist (detail | list) · social (comments | job; user_info/video_info/posts return typed unavailable with a live gen_analyze collect next step) · analyze (job — GET-only owner-scoped status/result for a gen_analyze trends/hooks/creators/research_web job by job_id; collect_enrichment — read the accepted collect enrichment job and its admitted analysis by job_id and agent_id; never resubmit either branch). Each view takes the id it names (resource_id, conversation_id, post_id, job_id, ...) plus that read's optional filters; publish.connect_url is the one non-pure view: the URL it returns STARTS the platform OAuth flow, so surface it to the user as a step. Social comments and job are provider-free DW reads. Social user_info, video_info and posts are not served as read-only data views because their legacy DW routes can refresh providers; they return a typed direction to the explicit live gen_analyze collect action. Social collection (typed, live, billed) is gen_analyze collect, never a view here. comments reads cached TikTok comment rows by video_ids; job reads one DW job status/result by job_id without resubmitting. The paid DW writes are NOT here: import URLs, live social scrapes and the wide general scrape are gen_analyze's import_urls / analyze_socials branches (they write S3 and bill). Vidsheet views: sheet (summary by default, include=["full"] for the whole dump) | rows | row | columns | cell | video (a row's video_settings + layers) | layers | layer | layer_analysis (one target's placement, media properties and the free read; the paid analysis is its own gen_analyze layer_analysis branch, one synchronous attributed model call behind a single-use confirm_token that answers the projected scene cuts, dead head/tail spans and suggested trim in/out in frames at 30 fps directly — no job to poll) | variables | available_variables | operations | last_operation | engine | template | templates | layout_validation | recipe (columns, cells and layer cards/timing by vidsheet_id or template slug) | card_types (keyed by FE card type; produces/container/model filters) | card_schema (one creation card by FE card type, its job type, or the final-video render card) | card_matrix (the full Rails creation-card matrix: cards, models, per-model field rules, limits, talking_loop, song_max_duration_seconds — verbatim) | input_bindings (bind saved-input source_references into a card's fields through the served schema: returns bound_inputs + typed warnings, refuses an incompatible kind before any write) | card_from_job (map a completed job to a card without writing) | actions (the action envelope: every Rails action+target pair with its fields and one worked example, plus named workflows; focus one pair with target="<action>:<kind>", e.g. "update:column"; with a layer_type or audio_library filter it instead asks Rails' live discovery and returns that body — caption/text font: view actions with layer_type=caption lists the allowed styles.fontFamily values, set it with values.settings.styles.fontFamily; song recommendations: view actions with audio_library=recommended returns media with library_reference, put one on a sound layer with update values.card {type: song, inputs: {songTab: recommend, audio: <that media>}}) | generation (poll one generation job by generation_id: pending → processing → completed | failed | stopped; result + output_resources on completion) | generation_estimate (free credit-cost estimate for jobs[] before running them) | running_generations (what this sheet is generating right now: one line per running generation, empty when nothing is running — the read behind a target-less 'stop everything running here') | audio_matches (poll a sound_matching job by job_id; matches in .result.audio_matches when completed). Media views: recommended_sounds (sounds recommended/trending for this agent; optional query, commercial, mood, genre, min_bpm, max_bpm, limit) and sound_library (search the shared catalog by free text: query, mood, tags, commercial, page/per_page; empty query browses) — reach for recommended_sounds when the user asks for trending/recommended sounds. View disambiguation: media.last_operation is the same engine change-set read as vidsheet.last_operation (both take vidsheet_id) — 'is my video/song/generation ready yet?' is media.last_operation, and vidsheet.last_operation is for a sheet edit history. platform.me is only 'who am I / my own profile'. platform.organization is the workspace by organization_id: members and who can access it; platform.organizations lists the workspaces the caller belongs to. Use platform.organization for 'who can see/access X' (its members and visibility). asset.list searches/lists the user's own assets; asset.libraries lists stock/library collections. content.list is its generated content resources (project filter). 'ideas from run X' / 'saved ideas from run X' is content.ideas with run_id=<X> — a run id or its prefix of at least 8 characters — never content.idea_job: content.ideas lists bounded idea summaries (optional status, limit, page) and takes run_id for the ideas from a run; content.idea is one full idea by idea_id; content.idea_job takes only the job_id that generate_ideas returned for a confirmed batch and never a run reference. task.run_status is only the status poll for one agent run's own run_id (the run_id gen_ask/gen_analyze hand back); it never reads a saved run's ideas — a run reference in a content question is content.ideas run_id. billing.usage reports what was spent and the remaining quota this period; billing.generation_access says whether a generation type is allowed for this workspace. billing.receipt is one run's billed charges with each amount and the run total ('what did run X cost' / 'prove the charges for this run', exact run_id required); it reads the bill and never changes it. 'am I out of X this month' / 'how much have I used' is billing.usage, not billing.balance. 'Who can see / who can access X' is platform.organization (workspace visibility), not a vidsheet read. 'What did my watchlist say/find/summarize about X' is gen_watchlist_action query_watchlist (it starts a run and returns a run_id) — never a watchlist discover read; watchlist.list/detail only enumerate saved watchlist records. 'Who is on this workspace and what is their role' is platform.members; 'who has this agent been shared with' is agent.shares. agent.profile_photos lists the agent's own profile photos (the agent profile photo is set with gen_agent_action set_primary_photo) — never characters: a character (a person with looks and talking characters) is gen_characters. 'What is being monitored for this agent, and is anything paused for credits?' is agent.monitoring (each target's source, active vs paused-for-funding, last scrape). Two halves: ingredient cells (columns/rows/row/cell/variables) feed a row; video (video_settings + layers) composes the output. Agent choice: agent.list is the only agent-id lookup — when an agent-scoped view needs an agent and the conversation has not already named one, list the agents and ask the user which to use, never guess. This tool only reads and never edits or generates. Ideas, scripts, trends and stats come only from GEN calls: never invent them, call GEN.
Paramètres, retour & exemple (85)
Paramètresdata· ? · optionnel
Completed job data used to construct the card (card_from_job view)jobs· ? · optionnel
Job specs to price (generation_estimate view): one entry per job, {user_job_type, data} — the same user_job_type and data the run would create (data may be a JSON object string). The served item schema lists the accepted user_job_type values; an entry missing either key is refused by field path, never silently dropped.mode· ? · optionnel
Social listing scope (social.posts view): user | keyword | hashtag (platform-dependent)mood· ? · optionnel
Mood filter (media sound_library and recommended_sounds views)page· ? · optionnel
Page number (templates, sound_library, billing.usage and analyze.job rows views); an integer or a string of digitstags· ? · optionnel
Tag filter (media sound_library view)type· ? · optionnel
Resource type filter (asset.list, content.list views)view· string · optionnel · sheet | rows | row | columns | cell | video | layers | layer
Pick by the user's question: 'what did my watchlist say/find/summarize' = gen_watchlist_action query_watchlist, never a watchlist view here; 'who can see/access X' (even about a sheet) = platform organization (the workspace's members and visibility), never organizations; 'what did I ask/say before' = platform conversations (chat history), never a new gen_ask; 'what happened in this conversation / what did it start' = platform request_tree (the conversation's turns, ideas, builds, DW jobs, Rails jobs and delivery receipts in one tree, every node keeping its owner's own status); 'am I out of X this month' / 'how much have I used' = billing usage; 'is X allowed at all' = billing generation_access; 'what did run X cost / the charges for this run' = billing receipt (run_id); 'is my video/song/generation ready yet?' = media last_operation (vidsheet last_operation = sheet edit history); 'my assets / find my X' = asset list (the user's own files), ALWAYS — never asset libraries (asset libraries is only the folder tree browser, folder_id); 'trending/recommended sounds' = media recommended_sounds (what GEN recommends for this agent), while sound_library searches the shared catalog by text; 'what is being monitored for me / is anything paused for credits' = agent monitoring; 'ideas from run X' / 'saved ideas from run X' = content ideas with run_id — never task run_status (that view polls one agent run's own status) and never content.idea_job (only for a job_id generate_ideas returned); a video build job id (video-create-…) is never content.idea_job, read it with content.video_job; on a family domain (agent, content, generate, ...), actions lists that family's branches and target=<branch action> reads one branch's fields. The full per-domain view lists are in the tool description.after· ? · optionnel
Conversation cursor from a previous platform.conversations page's next_cursorcycle· ? · optionnel
Billing cycle filter (billing.plans view)genre· ? · optionnel
Genre filter (media recommended_sounds view)limit· ? · optionnel
Max rows in the selected view: change sets (operations, 1-100), conversations/messages (platform), or recommended sounds (media.recommended_sounds, 1-20, default 10)model· ? · optionnel
Resolve a model name to its creation card (card_types view)order· ? · optionnel
Sort order (asset.libraries view)query· ? · optionnel
Search text (templates, sound_library, platform.conversations views; omit on sound_library to browse; conversations matches titles, max 200 characters)before· ? · optionnel
Message cursor for platform.conversation: read the page before itcursor· ? · optionnel
Pagination cursor (agent.profile_photos view)domain· string · optionnel · vidsheet | agent | asset | billing | content | location | media | platform
Discovery domain: contracts | vidsheet | agent | asset | billing | content | generate | location | media | platform | publish | task | voice | watchlist | social | analyze | ask (views per domain in the tool description); every family and flat op domain also serves view=actions, its branch schemas (including characters); a watchlist question ('what did my watchlist find') is gen_watchlist_action query_watchlist, never a read herejob_id· ? · optionnel
user_job_id from generate sound_matching (vidsheet audio_matches view), recurring job ID (task.job view), TTS preview user_job_id (voice.preview_status view), a DW asset-enrichment job id (asset.analysis view), a DW job id (social.job view, the poll for a PENDING DW run), a gen-agentic analysis job id (analyze.job view, the poll for a PENDING gen_analyze trends/hooks/creators/research_web job), the job_id generate_ideas returned for a confirmed idea batch (content.idea_job view) or the video build job id create_video returned (content.video_job view, the video-create-… poll: its status, sheet link, QA result and error), the opaque native taskId from an accepted MCP Task handle (task.job_locator view). A run reference is not a job id: 'ideas from run X' is content.ideas with run_id, never content.idea_job.row_id· ? · optionnel
Row ID (row, video views)run_id· ? · optionnel
content.ideas run reference — 'ideas from run X' / 'saved ideas from run X', the ideas from a run: a run id or its prefix of at least 8 characters. Reads that run's saved ideas; omit it to list the agent's newest ideas. For one saved idea use content.idea with idea_id, never this run_id field. On task.run_status it is only an agent run's own id, to poll that run's status — never a saved run's ideas. On billing.receipt it is the exact run whose billed charges to read.search· ? · optionnel
Search text (asset.libraries view)source· ? · optionnel
Voice source filter: public | user_* (voice.list view)status· ? · optionnel
Status filter (content.ideas view)target· ? · optionnel
Social handle, keyword or hashtag (social.user_info, social.posts views); on vidsheet.actions, one action+target pair to focus as "<action>:<kind>" (e.g. "update:column"); on a family domain's actions view, the branch action to read (e.g. reimagine_video under domain=content); on task.job_locator, the original caller idempotency key when the admission reply was lost (omit job_id)cell_id· ? · optionnel
Cell ID (cell, layers, layer, layer_analysis views; optional on layer — the owning cell is resolved from the layer id; on layer_analysis a cell_id without a layer_id addresses an ingredient media cell)from_db· ? · optionnel
Legacy social.posts flag; the read-only view is unavailable because it cannot guarantee zero provider calls. Use gen_analyze collect for live collection.idea_id· ? · optionnel
Saved idea ID: read its title and script with domain=content view=idea idea_id=<the saved idea id>. An idea id is never a run_id or job_id.include· ? · optionnel
Extra sections; ["full"] dumps the whole sheet on the sheet viewmax_bpm· ? · optionnel
Maximum tempo in BPM (media recommended_sounds view)min_bpm· ? · optionnel
Minimum tempo in BPM (media recommended_sounds view)post_id· ? · optionnel
Scheduled/published post ID (publish.post_status view)agent_id· ? · optionnel
The agent ID (envelope; forwarded to every view that scopes by agent). Optional: only the agent-scoped views require it — the vidsheet/media engine views resolve the owning agent from the sheet's engine read (GEN-7151). An agent-scoped view with no agent_id refuses with the caller's agents listed (agent_required): when the user has not already named an agent, read agent.list and ask them which to use — never guess.end_date· ? · optionnel
Range end, ISO date (publish.scheduled view; required there, within a 60-day window with start_date)layer_id· ? · optionnel
Layer ID (layer, layer_analysis views; a layer id is unique on the sheet, so it is enough — pass cell_id to pin the read to one cell)per_page· ? · optionnel
Results per page (sound_library view, default 10)platform· ? · optionnel
Social platform (publish.connect_url view, default youtube)produces· ? · optionnel
Creation card output filter: text | image | video | audio | caption (card_types view)provider· ? · optionnel
Voice provider (voice.resource view): user_voice_resource for the agent's own voices (voice.mine), else the voice library; default platform_eleven_labstemplate· ? · optionnel
Template slug/UUID/ID (template view)voice_id· ? · optionnel
Voice resource ID (voice.resource view)container· ? · optionnel
Creation card attach filter: SpreadsheetCell | VideoLayer (card_types view)folder_id· ? · optionnel
Folder filter (asset.libraries view)min_count· ? · optionnel
Minimum engagement count (Pinterest keyword/hashtag posts)page_size· ? · optionnel
Page size (asset.libraries view)placement· ? · optionnel
The card's layer as authored (input_bindings view): {source_asset_ref, source_clip, content_type}. When the layer places supplied footage, a reference to that same media through a field the card does not serve is satisfied by the placement. Without card_schema, returns placed_inputs: the referenced input ids this card-less layer consumes as its own footage.video_ids· ? · optionnel
Video/post ids (social.video_info, social.comments views; TikTok/Instagram/YouTube/Kick ids or URLs)asset_type· ? · optionnel
Asset type filter (asset.libraries view)audio_lens· ? · optionnel
Audio ranking lens for the vidsheet.actions live discovery, from Rails' own lens set (e.g. scrape ranks creator-scraped audio)audio_mood· ? · optionnel
Filter recommended audio by mood (vidsheet.actions live discovery with audio_library=recommended)commercial· ? · optionnel
Only sounds cleared for commercial use (sound_library and recommended_sounds views)layer_type· ? · optionnel
Layer type to focus the vidsheet.actions view's LIVE discovery on (GEN-8203): caption, text, clip, sound and the other Rails layer types; layer_type=caption returns that layer's settings schema, whose styles.fontFamily enum lists the offered fonts. Omit for the static action guide.project_id· ? · optionnel
Project filter (content.list view)start_date· ? · optionnel
Range start, ISO date (publish.scheduled view; required there, within a 60-day window with end_date)audio_genre· ? · optionnel
Filter recommended audio by genre (vidsheet.actions live discovery with audio_library=recommended)audio_limit· ? · optionnel
Maximum ranked audio results, Rails default 10 (vidsheet.actions live discovery)audio_query· ? · optionnel
Scope recommended audio to an @creator, #hashtag or keyword (vidsheet.actions live discovery with audio_library=recommended)card_inputs· ? · optionnel
The card's current inputs to bind into (input_bindings view); the MCP returns them with every source reference applied.card_schema· ? · optionnel
Creation card to describe (card_schema view): an FE card type such as video-from-talking-avatar, lip-sync or video-from-text, final-video (the final render card — its creation_card_inputs is optional and built from the row's video layers), or its backend job_type; omit to list card typesresource_id· ? · optionnel
Asset or content resource ID (asset.detail, content.resource views)vidsheet_id· ? · optionnel
Vidsheet IDcountry_code· ? · optionnel
Two-letter country code (location.cities view)from_db_only· ? · optionnel
Legacy social.video_info flag; the read-only view is unavailable because no provider-free DW contract is served. Use gen_analyze collect for live collection.watchlist_id· ? · optionnel
Watchlist ID (watchlist.detail view)workspace_id· ? · optionnel
Filter agents by workspace (agent.list view)audio_library· ? · optionnel
Scoped audio library for the vidsheet.actions view's LIVE discovery (GEN-8203): recommended (ranked music for this agent; each media entry carries the signed library_reference a sound layer saves) or trending. Rails validates the value and a bad one passes its 422 through. Omit for the static action guide.audio_max_bpm· ? · optionnel
Maximum tempo in BPM for recommended audio (vidsheet.actions live discovery with audio_library=recommended)audio_min_bpm· ? · optionnel
Minimum tempo in BPM for recommended audio (vidsheet.actions live discovery with audio_library=recommended)generation_id· ? · optionnel
Generation ID to poll (vidsheet generation view) or voice-design sample generation ID (voice.sample_status view)source_inputs· ? · optionnel
The resolved saved input media the references name (input_bindings view): {attachments: [{ref, url, kind, content_resource_id, resource...}]}, the same set gen_content_action built inputs from. The MCP is the only binding owner (GEN-9391).user_job_type· ? · optionnel
Completed job type to map to a Vidsheet creation card (card_from_job view)audio_platform· ? · optionnel
Social platform whose audio usage is ranked (vidsheet.actions live discovery; Rails defaults it to tiktok)include_undone· ? · optionnel
Include undone change sets (operations view)watchlist_name· ? · optionnel
Watchlist display name or its @list mention slug (watchlist.detail view), resolved case-insensitively: an exact name or an equal slug as one candidate set, then a unique prefix; an ambiguous name answers the candidates. Pass this or watchlist_id.conversation_id· ? · optionnel
Conversation ID (platform.conversation, platform.conversation_pending, platform.request_tree, platform.preferences views)idempotency_key· ? · optionnel
Original create-call key with idea_id for content.video_job transport readbackinclude_removed· ? · optionnel
Include removed backups (platform.backups view)organization_id· ? · optionnel
Organization ID (platform.organization view)selecting_model· ? · optionnel
Skip the selected model's acceptance check because the model is not chosen yet (input_bindings view).audio_search_type· ? · optionnel
How to read audio_query: creator | hashtag | keyword (vidsheet.actions live discovery); an @ or # prefix infers itaudio_video_count· ? · optionnel
Maximum cached source videos scanned for creator/scrape ranking, Rails default 50 (vidsheet.actions live discovery)audio_window_days· ? · optionnel
Audio lookback window in days, Rails default 30 (vidsheet.actions live discovery)source_references· ? · optionnel
Saved-input references to bind (input_bindings view): one {input_id, card_type?, field?} per named upload or saved media. Omit to only resolve picker labels.audio_commercial_only· ? · optionnel
Only commercially licensed recommended audio (vidsheet.actions live discovery with audio_library=recommended)with_organization_uuid· ? · optionnel
For agent.detail, 'true'/'false' controls whether the response includes the organization UUID; an organization UUID scopes the read
Exemple d'appel{"name": "gen_discover", "arguments": {"data": "texte", "jobs": "texte", "mode": "texte", "mood": "texte", "page": "texte", "tags": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_feedback≈ 801 tokens
Send feedback about GEN (a bug, an idea, praise) from the user to the GEN team. Call it whenever the user wants to report a problem, complain, suggest something or say thanks. Pass the user's words verbatim in message. The agent, the recent GEN calls of this session and the client are attached automatically; never ask the user for them. Always relay the returned thank-you to the user.
Paramètres, retour & exemple (5)
Paramètresrating· ? · optionnel
An optional satisfaction rating from 1 to 5.message· string · requis
The user's feedback, in their own words.agent_id· ? · optionnel
The agent this feedback is about, when the user names one.category· ? · optionnel
What kind of feedback this is. Defaults to other.conversation_id· ? · optionnel
The conversation the feedback came from, when the client knows it.
Exemple d'appel{"name": "gen_feedback", "arguments": {"message": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_generate≈ 3768 tokens
Create media with GEN: generate an image (create_image), a video clip (create_video), an original song (create_song), a DJ-style song mix (create_song_mix), or transcribe audio or video into text (transcribe). One call carries one or more typed actions. Paid generations spend credits and each result carries generation_id, user_job_id and estimated_credits — poll the gen_discover generation view with generation_id until completed. create_image/create_video/create_song/create_song_mix/transcribe is the first call for those verbs (transcribe = any audio/video→text request, create_video = 'narrate a slideshow / make a video' — a plain narration/render belongs here, while a layered sheet/canvas edit is gen_vidsheet_action, create_song = 'make a song') — do not read gen_discover to find a resource, avatar or job first. Output is a standalone asset in the agent's library, not placed in a Vidsheet cell; to generate into a cell or layer use gen_vidsheet_action op=generate with creation_card_type. Narration/voiceover of a video goes to gen_generate create_video, not a vidsheet cell op, unless the user names a sheet cell. The legacy media tool names are retired; use this dispatcher.
Paramètres, retour & exemple (6)
Paramètresactions· array · requis
One or more typed media actions: create_image (prompt, optional version/aspect_ratio/number_of_images/reference_images/content_resource_ids) | create_video (prompt, optional model/aspect_ratio/resolution/duration/native_audio/reference_images) | create_song (prompt, optional model/duration/style/title/negative_tags/vocal_gender/instrumental/source_audio) | create_song_mix (tracks REQUIRED: at least two of {title|url|asset_id}; optional prompt/transition_style/output_format/auto_order/desired_duration_seconds/generate_missing_count) | transcribe (exactly one of audio_url/video_url/content_resource_id, optional trim window)no_paid· boolean · optionnel
Refuse paid media generation for this run. Text and LLM work still bills normally.agent_id· ? · optionnel
The agent ID that owns the workspace (envelope; routed per branch)confirm_token· ? · optionnel
Single-use token from a CONFIRMATION_REQUIRED error; repeat the same call with it to complete the destructive action it was issued for. Omit on the first call.spending_run_id· string · optionnel
Stable run or conversation identity required with spending controls. The authenticated run owner shares one policy across workspaces.max_paid_operations· integer · optionnel
Maximum paid media reservations across all workspaces in this authenticated user/run, enforced atomically. Retries reuse their reservation.
Exemple d'appel{"name": "gen_generate", "arguments": {"actions": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_generate_report_ideas≈ 2176 tokens
Compose the weekly We Believe report's source-grounded ideas through the one billed content-ideas generator (the same path gen_content_action generate_ideas uses; this tool never calls a model directly). The caller injects the master playbook text, the measured comments and the verified first-party reference corpus with explicit freshness. The playbook text, the selected comment and the relevant verified references and peer evidence ground the one billed generation. This tool selects the unused comments at or above the like floor inside the rolling half-open window, runs one confirmed count=1 generation per selected comment with a stable idempotency key, reads exactly one saved idea back by that run's full run_id, and attaches the caller-known source identity and the approved alignment references. It never trusts a source key or citation the model echoes back. A missing, ambiguous or wrong-cardinality run refuses the whole build and leaves the last-good report untouched, and a credit refusal starts no generation. Ideas, scripts, trends and stats come only from GEN calls: never invent them, call GEN.
Paramètres, retour & exemple (10)
Paramètrescount· integer · requis
How many report ideas to compose (at most one per selected comment)sources· array · requis
Measured Instagram/TikTok comments; each carries its stable source_key, platform, url, text, likes, published_at, aliases and the master-playbook principle it servesagent_id· string · requis
The agent ID the report ideas belong to (envelope; the generation is billed to it)period_end· ? · optionnel
Window end instant (ISO 8601 UTC); defaults to nowreferences· array · requis
Verified first-party We Believe references (official site or @webelieveinedu) with explicit observed_at; each declares the playbook principles it supportsreport_key· string · requis
Stable report run key; one idempotency key per source is derived from it so a retry cannot start a second billed runexcluded_keys· ? · optionnel
Source keys/aliases already used in earlier reportspeer_evidence· ? · optionnel
Verified peer posts with exact metrics; passed to the generator as evidence and attached verbatim, never inferred or topped upplaybook_text· string · requis
The current master playbook's own mission/voice text; every playbook principle must appear in it, and it grounds the idea generator as We Believeplaybook_principles· array · requis
The current master playbook's closed principle names
Exemple d'appel{"name": "gen_generate_report_ideas", "arguments": {"count": 1, "sources": [], "agent_id": "texte", "references": [], "report_key": "texte", "playbook_text": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_platform_action≈ 4069 tokens
Workspace and access admin for an agent: create, rename, or delete an organization (create_organization, update_organization, delete_organization), upgrade its workspace plan (upgrade_workspace), manage its Personal Access Tokens (create_api_key, update_api_key, revoke_api_key, revoke_all_api_keys), set per-conversation session preferences (update_session_preferences), and back up GEN assets to Walrus for Proof of Genesis (create_proof_of_genesis_backup, remove_proof_of_genesis_backup). One call carries one or more typed actions. Deleting an organization, revoking all API keys, and upgrading a workspace are irreversible or spend money — always confirm with the user first. create_organization/update_organization/create_api_key/revoke_api_key act on the named workspace or key — call this tool first even when the id or new value is not yet known, and do not reply with a question before calling; the action names the missing field. Do not inventory organizations or api_keys with gen_discover first. Read-only platform views are gen_discover domain=platform (me | organization | organizations | conversation | conversations | preferences | api_keys | backups | members); this family's branch fields are gen_discover domain=platform view=actions (target=<branch action>). Workspace membership and roles are owner/manager-gated (invite_member, set_member_role, remove_member, leave_workspace); transfer_workspace_ownership, start_seat_checkout and upgrade_workspace return a CONFIRMATION_REQUIRED preview and confirm first. The first sign-in email of an agent-created account is added with request_email_link_code(email) then verify_email_link_code(request_id, code): the API emails a six-digit code, ask the user to read it from their inbox and pass it as a TEXT string, using resend_email_link_code(request_id) if it did not arrive. GEN never reads the inbox and never emits a code. Only an account with no email and no linked identity can link one; an account that already has an email or Google sign-in is refused with reauthentication_required, and that change is made in the browser profile (gen_sign_in_link opens it). The legacy platform tool names are retired; use this dispatcher.
Paramètres, retour & exemple (3)
Paramètresactions· array · requis
One or more typed platform actions: create_api_key (optional name/expires_in) | create_organization (name) | create_proof_of_genesis_backup (asset_url, optional asset_type/visibility/encrypted/encryption_scheme/encryption_key_id/owner_sui_address/source_event/content_type/idempotency_key/metadata) | delete_organization (organization_id) | invite_member (organization_id, username_or_email, optional role viewer|editor|manager) | leave_workspace (organization_id) | remove_member (organization_id, user_id) | remove_proof_of_genesis_backup (backup_id) | revoke_all_api_keys (no fields) | revoke_api_key (token_id) | set_member_role (organization_id, username_or_email, role viewer|editor|manager) | start_seat_checkout (organization_id, return_url) | transfer_workspace_ownership (organization_id, username_or_email) | update_api_key (token_id, name) | update_organization (organization_id, name) | update_session_preferences (conversation_id, preferences) | upgrade_workspace (organization_id, credit_plan_id, return_url) | request_email_link_code (email) | resend_email_link_code (request_id) | verify_email_link_code (request_id, code as TEXT preserving leading zeros)agent_id· ? · optionnel
The agent ID that owns the workspace (envelope; routed into the backup branches)confirm_token· ? · optionnel
Single-use token from a CONFIRMATION_REQUIRED error; repeat the same call with it to complete the destructive action it was issued for. Omit on the first call.
Exemple d'appel{"name": "gen_platform_action", "arguments": {"actions": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_publish_action≈ 4697 tokens
Step 5 (Export & Publish): Ship posts to social platforms — schedule, publish, update, or remove posts. One call carries one or more typed actions: schedule_post_<platform> (media_url and that platform's fields; schedule_type 'now' or 'specific_time' with scheduled_time; a field of another platform is rejected) | publish_content (platform + media_url + description + schedule_type) | update_scheduled_post (post_id + fields) | delete_scheduled_post (post_id) | update_published_post (post_id + at least one of title/description/tags/category_id) | delete_published_post (post_id; removes a post that is ALREADY LIVE and is two-phase — resend with confirm_token) | disconnect_social (platform; disconnects that account and is two-phase — resend with confirm_token). Reconnecting or refreshing an account is gen_discover publish.connect_url only — never disconnect_social first; connecting again replaces the old token. Publishing is irreversible: confirm destination and content with the user first. Do NOT edit videos here — the vidsheet action owns the canvas, and it is never the ship path. publish_content / schedule_post_<platform> / disconnect_social is the first call for those verbs, even when the user says 'all connected socials' or has not attached the post content yet — publishing resolves the connected accounts and the action names any missing media_url/description; 'disconnect my <platform>' is disconnect_social here, never a publish.connections read. Setting which platforms the agent posts to — 'make me post on YouTube and TikTok' with no content or schedule to ship — is gen_agent_action set_profile target_platforms, not schedule_post here. Read gen_discover publish.connections or publish.rules only when the user asks what is connected or what a rule is, not before publishing or disconnecting. Publishing is asynchronous even for 'now' — poll the gen_discover publish.post_status view with the returned post_id. The legacy publish tool names are retired; use this dispatcher. platform: tiktok | instagram | facebook | youtube | x | linkedin. Per-platform scheduling rules (also the gen_discover publish.rules view): tiktok: media required, video/image, 1 item, text <= 2200 chars; requires tiktok_privacy_level, tiktok_disable_comment, tiktok_disable_duet, tiktok_disable_stitch instagram: media required, video/image, up to 10 items, text <= 2200 chars; options via instagram_music (mode, track_url) facebook: media required, video, 1 item, text <= 63206 chars; title <= 255 chars youtube: media required, video, 1 item, text <= 5000 chars; title <= 100 chars; requires title; options via youtube_options (category_id, made_for_kids, notify_subscribers, shorts, tags, visibility) x: text or media, video/image, up to 4 items, text <= 280 chars linkedin: text or media, video/image/document, up to 9 items, text <= 3000 chars; title <= 400 chars; options via linkedin_options (alt_text, carousel, visibility) Update a post that is ALREADY LIVE via update_published_post — fix a typo, retitle, change tags or category. What each platform can still change once published: tiktok: no post-publication edit instagram: no post-publication edit facebook: no post-publication edit youtube: title, description, tags, category_id x: no post-publication edit linkedin: description Sparse: send only the fields you want changed and every other field on the live post is preserved. The reply carries one result per platform: `updated` (with the readback), `unsupported_after_publish` (the network has no edit path — nothing was touched), `reauthorization_required` (the user must reconnect that account) or `failed` with the platform's reason. Delete a post that is ALREADY LIVE via delete_published_post — it is two-phase: the first call previews and returns a CONFIRMATION_REQUIRED confirm_token, and only the exact retry presenting that token deletes. The reply carries one result per platform: `deleted`, `already_deleted` (GEN already removed it), `unsupported_after_publish` (the network has no delete path — nothing was touched), `reauthorization_required` (the user must reconnect that account) or `failed` with the platform's reason. timezone_offset on schedule_post_<platform> is the local UTC offset in hours (e.g. -7 for LA daylight); on publish_content it is minutes.
Paramètres, retour & exemple (3)
Paramètresactions· array · requis
One or more typed publish actions: schedule_post_tiktok (media_url, tiktok_privacy_level, tiktok_disable_comment, tiktok_disable_duet, tiktok_disable_stitch, optional description/thumbnail_url/tiktok_disclose_commercial_content/tiktok_your_brand/tiktok_branded_content) | schedule_post_instagram (media_url, optional description/thumbnail_url/media_urls (2-10 = carousel)/instagram_music) | schedule_post_facebook (media_url, optional description/title/thumbnail_url) | schedule_post_youtube (media_url, title, optional description/thumbnail_url/youtube_options) | schedule_post_x (optional description/media_url/media_urls (up to 4 images)/media_type/thread/reply_to_tweet_id) | schedule_post_linkedin (optional description/media_url/media_urls (up to 9 images)/title/thumbnail_url/linkedin_options); every schedule_post_* branch also takes schedule_type ('now' | 'specific_time'; omitted it defaults to 'now' and publishes immediately), scheduled_time (ISO 8601 UTC), timezone_offset (hours), strict | publish_content (platform, media_url, description, schedule_type, optional title/media_type/scheduled_time/thumbnail_url/timezone_offset) | update_scheduled_post (post_id, fields) | delete_scheduled_post (post_id) | update_published_post (post_id, optional title/description/tags/category_id) | delete_published_post (post_id, two-phase — resend with confirm_token) | disconnect_social (platform, two-phase — resend with confirm_token). Reconnecting or refreshing an account is gen_discover publish.connect_url only — never disconnect_social first; connecting again replaces the old token.agent_id· ? · optionnel
The agent ID that owns the connected accounts (envelope; routed per branch)confirm_token· ? · optionnel
Single-use token from a CONFIRMATION_REQUIRED error; repeat the same call with it to complete the destructive action it was issued for. Omit on the first call.
Exemple d'appel{"name": "gen_publish_action", "arguments": {"actions": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_sign_in_link≈ 764 tokens
Create a one-time GEN sign-in link for the caller's own account so its owner can open GEN in a browser. Requires the self-serve account owner's agent PAT. Use it when the user asks to sign in to GEN, open GEN, or get into the agent-created account from this client. For a plan or credit-pack checkout, use gen_billing_action open_checkout instead; Stripe needs no GEN browser sign-in. Pass the GEN URL they should land on, for example 'https://gen.pro/projects/123?view=editor#clip'; the same path, query and anchor are kept in the link. The link is valid for five minutes and works once, so treat it as a private handoff for the intended user alone: never post it publicly or send it to anyone else, because whoever opens it first signs in as this account. GEN applies its normal browser access checks when the link is opened, and the browser profile popup then offers to add an email address or link a Google account.
Paramètres, retour & exemple (1)
Paramètresurl· string · requis
The GEN URL the signed-in browser should land on, e.g. https://gen.pro/projects/123?view=editor#clip
Exemple d'appel{"name": "gen_sign_in_link", "arguments": {"url": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_task_action≈ 4114 tokens
Run the task control plane: create, update, pause, resume, delete, duplicate, and run-now recurring jobs ('daily tasks' — a schedule plus a saved prompt), manage content-monitoring jobs, and approve or reject a gated agent run (decide_agent_run). One call carries one or more typed actions. pause_recurring_job/resume_recurring_job/delete_recurring_job act on the named job (update_recurring_job too) — call this tool first even when the job is only described ('my weekly report job'): name it by job_id OR by its exact display name (name; current_name on update_recurring_job, where name is the new title). Do not list jobs via gen_discover task.list first. The API resolves the name: several tasks with that name refuse with AMBIGUOUS_TASK_NAME and list candidates, so retry with one job_id; no match is NOT_FOUND. delete_recurring_job is two-phase: the first call only previews and returns a confirm_token; resend the same call with it to delete. Task results carry the API's card (a task_node with name, schedule_text, status, task_id) — show it. create_recurring_job answers reused=true when the task already exists (say it is already set up, do not report a new task) and conflict.fields when the request differed from the existing task (offer update_recurring_job). Hourly is a supported cadence; an unsupported cadence refuses with CADENCE_UNSUPPORTED and a suggested cadence. Read-only task views are gen_discover domain=task (list | job | run_status); this family's branch fields are gen_discover domain=task view=actions (target=<branch action>). The legacy task tool names are retired; use this dispatcher.
Paramètres, retour & exemple (3)
Paramètresactions· array · requis
One or more typed task actions (agent_id rides the envelope, never inside entries): create_recurring_job (job_type, prompt, optional name/schedule/delivery/next_run_at) | ensure_default_recurring_job | update_recurring_job (job_id + optional name/prompt/schedule/delivery/next_run_at) | pause_recurring_job (job_id) | resume_recurring_job (job_id) | delete_recurring_job (job_id) | run_recurring_job_now (job_id) | duplicate_recurring_job (job_id, vidsheet_url, optional name/activate) | create_monitoring_job (platform, search_type, value + optional days/max_results/monitoring/comment_monitoring) | update_monitoring_job (job_id, platform, search_type, value + same optionals) | decide_agent_run (run_id, approved) | list_grants | revoke_grant (grant_id)agent_id· ? · optionnel
The agent ID that owns the jobs (envelope; routed per branch)confirm_token· ? · optionnel
Single-use token from a CONFIRMATION_REQUIRED error; repeat the same call with it to complete the destructive action it was issued for. Omit on the first call.
Exemple d'appel{"name": "gen_task_action", "arguments": {"actions": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_upload_asset≈ 1400 tokens
Upload a file into an agent's owned asset library without sending the bytes through the MCP call. One tool, three phases. phase=request_upload (default) takes agent_id, filename and content_type and returns upload_id, a same-origin signed PUT URL, a ready-to-run curl command and a browser drop_url; the signed capability expires in about 5 minutes and is single use. phase=create_drop returns the same thing framed for a browser when a client cannot run curl or hand over a host file. phase=status takes upload_id and returns the owned asset (id, url, filename, content_type, byte_size, checksum) once the bytes have landed, or an honest pending/unknown/expired/failed state. Claude and other sandboxed clients: put the bytes with the returned curl from the client sandbox. That requires mcp.gen.pro to be allowed in the Organization's Capabilities settings; change no customer setting, and use phase=create_drop if the PUT is blocked. Grok/Muse: there is no assumed laptop or sandbox path — use phase=create_drop. Local CLI: run the returned curl against a file you already have; the server never reads a path you name. ChatGPT and hosts that supply a file parameter: pass `file` with download_url, file_id and optionally mime_type/file_name; the server fetches it from the allow-listed host and returns the owned asset. Native file references are limited to 10 MiB; use create_drop for larger files. If the host gives no downloadable reference (or a 'chat_upload' placeholder), this answers with a create_drop fallback instead of guessing. Never send file bytes, a base64 blob or a local filesystem path through this tool.
Paramètres, retour & exemple (7)
Paramètresfile· ? · optionnel
A host-provided file reference {download_url, file_id, optional mime_type/file_name}, or the host's placeholder string. The server fetches download_url; never a local path.phase· string · optionnel · request_upload | create_drop | status
request_upload: mint a signed PUT URL and curl. create_drop: the same, framed for a browser drop page. status: read the owned asset for an upload_id.agent_id· ? · optionnel
The agent that will own the uploaded asset (required for request_upload, create_drop and a host file reference)filename· ? · optionnel
Original filename including extension (request_upload/create_drop); its extension must match content_typefolder_id· ? · optionnel
Place the completed asset inside this asset folderupload_id· ? · optionnel
The upload_id returned by request_upload/create_drop (status only)content_type· ? · optionnel
MIME type of the file (e.g. image/jpeg, audio/mpeg, video/mp4, application/pdf)
Exemple d'appel{"name": "gen_upload_asset", "arguments": {"file": "texte", "phase": "request_upload", "agent_id": "texte", "filename": "texte", "folder_id": "texte", "upload_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"ok": true, "curl": "texte", "next": "texte", "asset": {}, "error": {}, "phase": "texte", "state": "texte", "status": "texte", "outcome": "texte", "put_url": "texte", "drop_url": "texte", "filename": "texte"}} - gen_vidsheet_action≈ 27578 tokens
Vidsheet: skill://gen/vidsheet-mcp/SKILL.md; host-approved resources/read or prompt vidsheet-mcp. Step 4 (Edit & Generate): the Vidsheet write tool for the editable video workspace. A direct saved idea draft/full uses gen_content_action action=create_video_from_idea; a separately authored scene-form storyboard uses apply_storyboard on one owned row. Generic create_sheet/actions[] create must not receive an idea_id. Discover template_slug with gen_discover vidsheet view=templates. Flat ops: create_sheet, clone_template, create_engine, duplicate_sheet, import_asset, validate_layout, continue_generation, refund_unused_output (service-only; completed output never delivered by an errored build; Rails owns eligibility and refund amount; requires agent_id, generation_id and idempotency_key), stop_generation (the provider may keep rendering and billing after an unconfirmed stop), add_column, set_cell, add_layer, update_layer and generate. apply_storyboard is MCP-only: applies a BuildPlanV1 to an owned row with read-back. Requires agent_id, vidsheet_id, storyboard, idempotency_key and row_id or row_position; recover=true reads without writes. A talking-head video from an existing avatar is the job card video_from_avatar (avatar_id + video_url + audio_url); the FE card video-from-talking-avatar generates a new talking-avatar video from a script and a voice — use video_from_avatar for a talking-head from an avatar, video-from-talking-avatar only when the user gives a script/voice or names that card. duplicate_sheet (name renames the copy) supports target_agent_id cross-agent copies. add_column validates position; set_cell validates media/take/song bindings and refuses job cards; add_layer/update_layer keep layer_row placement; trims send userHasTrimmed=true. Other edits use canonical actions[]; Rails validates with indexed errors. A row's column content (POST DESCRIPTION, IDEA, SCRIPT, any text or media cell) is a cell: update target {kind:'cell', vidsheet_id, row_id, column_id} (or the cell id) with values.value; row targets only take position, row_height and video_settings. Use gen_discover(domain='vidsheet', view='actions') for the full action schema. Card fields come from gen_discover view=card_schema. Creation-card generate accepts FE cards; job cards: sound_matching (overlays or row_id), recommend_song (audio_url — a PAID cover/remix of that one reference track, not a recommendation: for suggested songs read gen_discover view actions audio_library=recommended), song (prompt and duration, default 240), video_from_avatar and source_video_analysis. A whole column generates with the envelope {"action":"generate","target":{"kind":"column","vidsheet_id":..,"id":<column id>}}; Rails quotes the total first, refuses when credits cannot cover it, and returns per-row dispatched/failed/skipped. Prompt preview: creation_card_inputs.<text field>.ai.previewOnly=true; retry with the same idempotency_key while generating. Callers may delete layers, rows, cells and columns in Vidsheets they can edit. UI clients receive Rails' two-phase confirmation preview; headless clients send auto_confirm=true with each delete on its own to complete Rails' content-bound confirmation in one tool call. Export/render the final video = op generate, creation_card_type final-video, target the row's FINAL VIDEO cell; poll with gen_discover generation. This renders the VIDEO, not spreadsheet CSV export (envelope 'export' → Vidsheets::CsvExport). creation_card_inputs is optional; omitted, the row's layers build it. Call generate first for 'generate the intro' / 'talking-head' / 'title card', before reading the sheet — a 'title card' is creation_card_type text. Narration/voiceover of a video goes to gen_generate create_video, not a vidsheet cell op, unless the user names a sheet cell. A draft build or any edit that must not start paid dependent regeneration sends auto_regenerate=false: the batch performs only its writes, and Rails answers auto_regeneration: 'skipped'.
Paramètres, retour & exemple (75)
Paramètresop· ? · optionnel
The write op (named in the tool description). Omit when sending the canonical 'actions' envelope.url· ? · optionnel
File URL to import (import_asset)mode· ? · optionnel
Analysis mode, default recreate (generate source_video_analysis)name· ? · optionnel
Sheet name (create_sheet; duplicate_sheet renames the copy)take· ? · optionnel
The generation job a cell's default take points at (set_cell, add_layer, update_layer): a job id (int or digits) or {id, type} with type UserJob|Job.blank· ? · optionnel
Set true when the user asks for an empty or blank sheet, or names only the columns they want. Skips the onboarding template and default columns/rows; omitted or false preserves default creation. Cannot be combined with template_slug.media· ? · optionnel
The whole typed media object the browser writes (the FE shape; gen_discover card_schema serves it). Send it alone, never with the media_* formsmodel· ? · optionnel
Model override, default suno-v5-beta (generate song, recommend_song)style· ? · optionnel
Musical style/genre/mood (generate song; trimmed, blank omitted)title· ? · optionnel
Column title (add_column); song title (generate song, recommend_song)value· ? · optionnel
Cell value (set_cell)prompt· ? · optionnel
Generation prompt (generate song, recommend_song)reason· ? · optionnel
Reason the output was unused (refund_unused_output); relayed to Rails unchangedrow_id· ? · optionnel
Source row for generate sound_matchingactions· ? · optionnel
Canonical Rails action envelope: a non-empty list of {"action", "target", "values"|"ids"} objects, relayed to Rails verbatim (GEN-6700); pass either this or a flat op, never both. A row's output video format (aspect ratio / resolution) is set only here, with a row update: values.video_settings.aspect_ratio 1:1 | 9:16 | 16:9, values.video_settings.resolution 1080p | 4k (either or both). Example, set a row to 1:1: [{"action": "update", "target": {"kind": "row", "vidsheet_id": 1001, "id": 2002}, "values": {"video_settings": {"aspect_ratio": "1:1"}}}]cell_id· ? · optionnel
Cell ID (set_cell, layers, card owner/target); a global's value_cell_id addresses its value cellidea_id· ? · optionnel
Idea ID (create_engine; requires template_slug)no_paid· boolean · optionnel
Refuse paid media generation for this run. Text and LLM work still bills normally.recover· boolean · optionnel
apply_storyboard: read-only comparison with the owned row after a lost reply; returns Draft without writes, models or jobs.sources· ? · optionnel
target_state: owned content_resource_ids allowed as media sourcesagent_id· ? · optionnel
The agent that owns the vidsheet. Optional when the call names the sheet (vidsheet_id): the owner resolves from the engine read. Required for create_sheet/clone_template/create_engine and a call naming no sheet (GEN-7151)bindings· ? · optionnel
Saved-input bindings for this envelope (MCP-only; never relayed to Rails): one {index, references} per action, where index names that action and references is [{input_id, card_type?, field?}]. The MCP resolves each reference against source_inputs and the served card schema before any write (GEN-9391).duration· ? · optionnel
Duration in seconds 1-480, default 240 (generate song, recommend_song); out of range is rejected, so estimate the seconds you ask forlayer_id· ? · optionnel
Layer ID (update_layer, generate layer, card owner/target)overlays· ? · optionnel
Overlay sources (generate sound_matching)position· ? · optionnel
Column position (add_column), from gen_discover columns; a column never lands right of VIDEO / FINAL VIDEO / STATSsettings· ? · optionnel
Layer settings (add_layer/update_layer); a trim (from, duration_in_frames, video_start_time) also sends userHasTrimmed=true, or the browser recomputes the full clip (GEN-7637)audio_url· ? · optionnel
HTTPS audio URL (generate recommend_song reference — that card makes a PAID cover/remix of this one track; find suggestions with gen_discover view actions audio_library=recommended; avatar lip-sync audio)avatar_id· ? · optionnel
Avatar model ID (generate video_from_avatar)folder_id· ? · optionnel
Asset folder for the import (import_asset)layer_row· ? · optionnel
Timeline row/track for add_layer and update_layer, 0-based (settings.row); layers sharing a row play sequentially. One of the ten tracks 0..9media_key· ? · optionnel
Media key: text | image | video | audio | var (set_cell/import_asset)media_url· ? · optionnel
Media URL (set_cell/add_layer/update_layer media, import_asset)video_url· ? · optionnel
Avatar video URL (generate video_from_avatar)layer_name· ? · optionnel
Layer name (add_layer)layer_type· ? · optionnel
Layer type (add_layer): clip, image, text, caption or sound; audio/voice/music map to sound, video to clip. Give a voice or music layer its sound type and timing before generating into it (GEN-7690)media_name· ? · optionnel
Media name (set_cell/import_asset; song recommend binds the song title)storyboard· ? · optionnel
apply_storyboard: scene-form BuildPlanV1 object, validated and applied to the selected owned row.column_type· ? · optionnel
Column type (add_column)description· ? · optionnel
Column description (add_column)variable_id· ? · optionnel
Global-variable row id from gen_discover view=variables, never the value cell id: generate resolves it to that value cell as the owner (instead of cell_id/layer_id)vidsheet_id· ? · optionnel
Vidsheet ID (every op except create_sheet/clone_template/create_engine)auto_confirm· boolean · optionnel
Approve one headless delete through Rails confirmation; edit access remains required. false keeps the UI preview/token flow.build_run_id· ? · optionnel
Errored build run identity (refund_unused_output); relayed to Rails as audit metadatacaption_text· ? · optionnel
Caption text (update_layer)instrumental· ? · optionnel
Instrumental flag (generate song, recommend_song)row_position· ? · optionnel
apply_storyboard only: one-based displayed row position on the owned Vidsheet, instead of row_idtarget_state· ? · optionnel
apply_storyboard alternative: edit the full gen_discover vidsheet sheet result. Writes only differences from a fresh read, deletes separately, no paid regeneration. Media must be on-sheet or in sources.vocal_gender· ? · optionnel
'm' or 'f' to bias vocal gender (generate song)change_set_id· ? · optionnel
Stable edit-group ID for undo and retryclear_content· ? · optionnel
Clear content flag (set_cell, layers)confirm_token· ? · optionnel
Single-use token from a confirmation_required preview; completes the delete it was issued forcreation_card· ? · optionnel
Creation card payload (add_layer/update_layer)generation_id· ? · optionnel
Generation ID (continue_generation, stop_generation, refund_unused_output)is_commercial· ? · optionnel
Commercial-cleared sounds only (generate sound_matching)negative_tags· ? · optionnel
Styles/instruments to avoid (generate song; trimmed, blank omitted)source_inputs· ? · optionnel
Resolved saved input media for the envelope's per-action source references (MCP-only; never relayed to Rails): {attachments: [{ref, url, kind, content_resource_id, resource...}]}. Each reference binds into its action's card through the served card schema before any write, and an incompatible card/media pair is refused typed with effects zero (GEN-9391).template_slug· ? · optionnel
Template slug (optional on create_sheet; clone_template; create_engine requires it with idea_id); discover valid choices with gen_discover vidsheet view=templatesvideo_type_id· ? · optionnel
apply_storyboard with target_state only: the storyboard's video type id (canonical timeline rows)lip_sync_model· ? · optionnel
Lip-sync model (generate video_from_avatar)media_asset_id· ? · optionnel
Owned ContentResource id of an uploaded/library asset to bind (set_cell); send with media_key image|video|audioremove_silence· ? · optionnel
Remove audio silence (generate video_from_avatar)auto_regenerate· ? · optionnel
false writes this batch without paid dependent regeneration (Rails: skipped); true/omitted keeps automatic regeneration. Use false for drafts.content_idea_id· ? · optionnel
Saved-idea alias: create_sheet refuses it with the gen_content_action create_video_from_idea callidempotency_key· ? · optionnel
Required for refund_unused_output. Reuse on retries to replay the job; omission generates a new key and may charge again. Forwarded to paid creation cards.media_reference· ? · optionnel
A generation's owner as media (set_cell): {type: local_variable|video_layer|global_variable|final_video, value, name?}spending_run_id· string · optionnel
Stable run or conversation identity required with spending controls. The authenticated run owner shares one policy across workspaces.target_agent_id· ? · optionnel
Target agent for cross-agent duplication (duplicate_sheet)remove_background· ? · optionnel
Remove video background (generate video_from_avatar)creation_card_type· string · optionnel · captions | final-video | image-from-text | lip-sync | lip-sync-trim | media | raw-text | recommend_song
Creation card pick. One of the 15 FE card types an FE picker offers (for example video-from-talking-avatar) or an MCP job card (sound_matching | recommend_song | song | video_from_avatar | source_video_analysis); the final render card final-video renders a row's final video into its FINAL VIDEO cell. creation_card_inputs is typed per card.content_resource_id· ? · optionnel
Owned video asset ID to analyze (generate source_video_analysis)creation_card_owner· ? · optionnel
'cell' or 'layer': the owner a generate card pick is addressed at (use when both cell_id and layer_id are given)max_paid_operations· integer · optionnel
Maximum paid media reservations across all workspaces in this authenticated user/run, enforced atomically. Retries reuse their reservation.reference_audio_url· ? · optionnel
HTTPS reference-audio URL for conditioning (generate song)creation_card_inputs· ? · optionnel
Per-card inputs. Send the arm whose card matches creation_card_type; a field the card does not take is refused, never forwarded. The final render card's arm is optional — its composition is built from the row when omitted.
Exemple d'appel{"name": "gen_vidsheet_action", "arguments": {"op": "texte", "url": "texte", "mode": "texte", "name": "texte", "take": "texte", "blank": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_voice_action≈ 2446 tokens
Build a custom voice for an agent: clone one from an audio sample (clone_voice), design one from a scripted prompt flow (generate_voice_script, generate_voice_description, generate_voice_samples, design_voice), audition one with a spoken preview (preview_voice), or remove one you own (delete_voice). One call carries one or more typed actions. Deleting a voice is permanent — confirm which voice first. clone_voice/design_voice is the first call for 'clone/design my voice' — call it even if the user has not attached the sample yet; the action names the missing field to supply next. Do not inventory voices via gen_discover voice.mine first. Output is a standalone asset in the agent's library, not placed in a Vidsheet cell; to generate into a cell or layer use gen_vidsheet_action op=generate with creation_card_type. Read-only voice views are gen_discover domain=voice (list | mine | resource | preview_status | sample_status); this family's branch fields are gen_discover domain=voice view=actions (target=<branch action>). The legacy voice tool names are retired; use this dispatcher.
Paramètres, retour & exemple (3)
Paramètresactions· array · requis
One or more typed voice actions: clone_voice (name, optional audio_url/audio_base64/gender/language/description) | design_voice (generation_id, name, REQUIRED sample audio: audio_base64 (the Rails base64_audio, required for fal voice resources) or audio_url, optional gender/language/description) | delete_voice (voice_id) | preview_voice (voice_id, text) | generate_voice_description (gender, optional voice_description/language/script) | generate_voice_samples (text, optional description) | generate_voice_script (optional language)agent_id· ? · optionnel
The agent ID that owns the voices (envelope; routed into every branch)confirm_token· ? · optionnel
Single-use token from a CONFIRMATION_REQUIRED error; repeat the same call with it to complete the destructive action it was issued for. Omit on the first call.
Exemple d'appel{"name": "gen_voice_action", "arguments": {"actions": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - gen_watchlist_action≈ 4177 tokens
Run one or more watchlist operations in a single call: create, update, pause, resume or delete a watchlist, add or remove a monitoring source, or ask a question about a watchlist (query_watchlist starts an agent run and returns a run_id to poll). One call carries one or more typed actions. Deleting a watchlist or removing a source is destructive — confirm with the user first. delete_watchlist is two-phase like the vidsheet deletes: the first call returns a CONFIRMATION_REQUIRED preview with a single-use confirm_token and deletes nothing; resend the same call with that confirm_token to delete. remove_watchlist_source is two-phase the same way. Every branch that acts on one watchlist takes watchlist_id, or watchlist_name (a display name or its @list mention slug) as an alternative: a case-insensitive exact name or an equal @list mention slug as one candidate set, then a unique prefix. An ambiguous name returns the candidate watchlists and changes nothing. Any question about a watchlist ('what did my watchlist say…', 'summarize it', 'did it find anything') is query_watchlist and is the first call — it starts a run; gen_discover watchlist.list only enumerates saved watchlist records. Listing and fetching watchlists are gen_discover domain=watchlist (list | detail); this family's branch fields are gen_discover domain=watchlist view=actions (target=<branch action>). The legacy watchlist tool names are retired; use this dispatcher.
Paramètres, retour & exemple (3)
Paramètresactions· array · requis
One or more typed watchlist actions: create_watchlist (name, optional sources/project_id/conversation_id/created_by_run_id) | update_watchlist (watchlist_id or watchlist_name, optional name/project_id/rails_project_error) | pause_watchlist (watchlist_id or watchlist_name) | resume_watchlist (watchlist_id or watchlist_name) | delete_watchlist (watchlist_id or watchlist_name; two-phase, resend with confirm_token) | add_watchlist_source (platform, target_type, target_value, watchlist_id or watchlist_name, optional original_display_value) | remove_watchlist_source (watchlist_id or watchlist_name, source_id or platform+target_type+target_value; two-phase, resend with confirm_token) | query_watchlist (question, watchlist_id or watchlist_name, optional days/limit/sort_by/min_engagement_rate/return_all). watchlist_name (a display name or its @list mention slug) resolves case-insensitively: an exact name or an equal slug as one candidate set, then a unique prefix; an ambiguous name returns the candidates and changes nothing. 'what did my watchlist say/find about X' = query_watchlist (it starts a run); gen_discover watchlist list/detail only enumerate saved watchlist records.agent_id· ? · optionnel
The agent ID that owns the watchlists (envelope; routed per branch)confirm_token· ? · optionnel
Single-use token from a CONFIRMATION_REQUIRED error; repeat the same call with it to complete the destructive action it was issued for. Omit on the first call.
Exemple d'appel{"name": "gen_watchlist_action", "arguments": {"actions": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]}
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».