{"name":"11agents Cloud MCP","description":"Centralized project-scoped MCP tools for project sync, data collection, SEO research, AI citation research, Apodex deep research, image generation, and audio generation.","transport":"streamable-http","url":"https://app.11agents.ai/mcp","authorization":{"type":"bearer","header":"Authorization","description":"Use the project token from the 11agents project MCP page."},"tools":["knowledge_sync","database_sync","data_format_define","data_push","plg_overview_report_publish","ads_daily_snapshot_push","ads_channel_sync","email_senders_list","email_messages_list","email_message_get","email_draft_create","email_send","edm_template_create","edm_template_update","edm_campaign_create","edm_recipients_replace","edm_campaign_send","analytics_summary","analytics_funnel","analytics_channels","analytics_events","agent_planning","ahrefs_keyword_research","ahrefs_domain_research","dataforseo_keyword_research","querit_ai_citation_research","crawl4ai_page_fetch","apodex_deep_research","image_prompt_generate","image_generate","image_generate_async","image_job_get","image_job_image_get","fish_audio_tts","radar_top_dramas","radar_data_publish","insight_card_publish","agent_config","skill_list","skill_file_get"],"tool_schemas":[{"name":"knowledge_sync","description":"Pull or push cloud project knowledge for the authenticated project token. Both modes record a sync event and require reviewed admin approval. Chat returns a compact sync summary; use project_search with type=knowledge for keyword lookup. For full knowledge-base organization, create a knowledge deep-organize runtime task instead of reading the full graph in chat.","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["pull","push"],"description":"Required. pull reads from cloud; push writes the provided nodes and edges."},"local_revision":{"type":"string","description":"Optional local revision marker from the caller."},"cloud_revision":{"type":"number","description":"Optional cloud revision previously returned by pull."},"nodes":{"type":"array","items":{"type":"object"},"description":"Required for mode=push. Knowledge graph nodes."},"edges":{"type":"array","items":{"type":"object"},"description":"Required for mode=push. Knowledge graph edges."},"replace":{"type":"boolean","description":"When true, replace the cloud snapshot instead of merging."}},"oneOf":[{"properties":{"mode":{"const":"pull"}},"required":["mode"]},{"properties":{"mode":{"const":"push"}},"required":["mode","nodes","edges"]}]}},{"name":"database_sync","description":"Pull or push the cloud project database snapshot for the authenticated project token. Use mode=pull to read. Use mode=push with snapshot to write rows.","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["pull","push"],"description":"Required. pull reads from cloud; push writes snapshot."},"snapshot":{"type":"object","description":"Required for mode=push. Project database snapshot object."},"metadata":{"type":"object","description":"Optional sync metadata."}},"oneOf":[{"properties":{"mode":{"const":"pull"}},"required":["mode"]},{"properties":{"mode":{"const":"push"}},"required":["mode","snapshot"]}]}},{"name":"data_format_define","description":"Define the locked JSON row schema for one project dataset before pushing rows.","inputSchema":{"type":"object","required":["dataset","schema"],"properties":{"dataset":{"type":"string","description":"Stable dataset key, for example daily_metrics or competitor_mentions."},"schema":{"type":"object","description":"JSON object describing allowed row fields and types."}}}},{"name":"data_push","description":"Push dated rows using the dataset format previously defined for the project.","inputSchema":{"type":"object","required":["dataset","date","rows"],"properties":{"dataset":{"type":"string","description":"Dataset key previously defined with data_format_define."},"date":{"type":"string","description":"Business date for these rows in YYYY-MM-DD format."},"schema_revision":{"type":"number","description":"Optional schema revision expected by the caller."},"rows":{"type":"array","items":{"type":"object"},"description":"Array of JSON row objects matching the dataset schema."},"metadata":{"type":"object","description":"Optional batch metadata."}}}},{"name":"plg_overview_report_publish","description":"Publish one AI operating analysis report for the authenticated project PLG Overview dashboard. Platform code syncs and computes metrics; callers must use the supplied dashboard data and write only the report section.","inputSchema":{"type":"object","required":["period_start","period_end","report"],"properties":{"period_start":{"type":"string","description":"Report start date in YYYY-MM-DD format."},"period_end":{"type":"string","description":"Report end date in YYYY-MM-DD format."},"generated_at":{"type":"string","description":"Optional ISO timestamp for when the agent generated this report."},"source_agent_id":{"type":"string","description":"Optional agents.id UUID that generated the report."},"source":{"type":"object","description":"Non-secret source status metadata. Do not include credentials, tokens, cookies, or API keys."},"report":{"type":"object","description":"AI analysis report with summary, operations, problems, next_steps, and caveats. The platform displays this text alongside program-computed metrics."}}}},{"name":"ads_daily_snapshot_push","description":"Upsert one platform into the authenticated project daily-progress ads snapshot. Renders natively on the ads dashboard 每日进度 tab. Include channel=google|meta|x so refreshing one platform preserves the others. A v2 payload may instead provide channels: {google, meta, x}.","inputSchema":{"type":"object","required":["payload"],"properties":{"payload":{"type":"object","description":"Platform snapshot: { channel: 'google'|'meta'|'x', generated_at, api_ok, source, ad_types, today: {cost, impr, clicks, ctr, cpc, signups}, cum: {cost, conversions}, revenue: {real_usd, paid_users, real_roas}, funnel: [{label, n, pct}], reconciliation: [{ch, spend, revenue, roas}], geos, keywords, week }. Legacy payloads without channel default to google. Multi-platform callers may send {channels:{google:{...},meta:{...},x:{...}}}."}}}},{"name":"ads_channel_sync","description":"Connect and sync one ad channel into the authenticated project only. Supports tenant-isolated X Ads, Google Ads, Meta, TikTok and other registered channels. Credentials remain in the caller/secret store; this tool accepts only non-secret asset ids and aggregate metrics.","inputSchema":{"type":"object","required":["channel"],"properties":{"channel":{"type":"string","enum":["google","meta","tiktok","x","linkedin","asa","googleplay"]},"account_id":{"type":"string","description":"Non-secret external ads account id. When present, connects this channel to the authenticated project."},"business_id":{"type":"string","description":"Meta Business portfolio id. Non-secret; ignored by channels that do not use it."},"dataset_id":{"type":"string","description":"Meta Dataset/Pixel id. Non-secret; used to display event-pipeline health."},"page_id":{"type":"string","description":"Meta Page id used by the ad account. Non-secret."},"campaigns":{"type":"array","items":{"type":"object"},"description":"Campaign snapshots: external_id, name, status, cost, impressions, clicks, conversions, conv_value."},"daily_metrics":{"type":"array","items":{"type":"object"},"description":"Daily rows: date, spend, impressions, clicks, conversions, revenue, gross_profit."},"snapshot":{"type":"object","description":"Optional native Ads daily-progress snapshot for the same project."}}}},{"name":"email_senders_list","description":"List sender identities connected to the authenticated project. Returns safe sender metadata only and never returns credentials.","inputSchema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"email_messages_list","description":"List outbound email activity for the authenticated project without message bodies. Use email_message_get for one full message.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["pending_review","sending","sent","failed"]},"sender_email":{"type":"string","description":"Optional exact project-bound sender email."},"to":{"type":"string","description":"Optional exact recipient email."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Maximum messages to return. Defaults to 20."},"cursor":{"type":"string","description":"Optional message UUID returned as next_cursor by the previous page."}},"additionalProperties":false}},{"name":"email_message_get","description":"Get one outbound email message, including its text or HTML body, from the authenticated project only.","inputSchema":{"type":"object","required":["message_id"],"properties":{"message_id":{"type":"string","description":"Project email message UUID."}},"additionalProperties":false}},{"name":"email_draft_create","description":"Create one email in the authenticated project review outbox using a verified project-bound sender. A project admin must review and send it from Project Integrations.","inputSchema":{"type":"object","required":["sender_email","to","subject"],"properties":{"sender_email":{"type":"string","description":"Exact sender email connected in the current Project Integrations."},"to":{"type":"string","description":"Single recipient email address."},"subject":{"type":"string","description":"Email subject, maximum 998 characters."},"text":{"type":"string","description":"Optional plain-text body."},"html":{"type":"string","description":"Optional HTML body."},"reply_to":{"type":"string","description":"Optional reply-to email address."}},"anyOf":[{"required":["text"]},{"required":["html"]}]}},{"name":"email_send","description":"Send one email immediately through an active sender identity bound to the authenticated project. This is an external side effect and requires admin R2 approval when invoked through project chat.","inputSchema":{"type":"object","required":["sender_email","to","subject"],"properties":{"sender_email":{"type":"string","description":"Exact sender email connected in the current Project Integrations."},"to":{"type":"string","description":"Single recipient email address."},"subject":{"type":"string","description":"Email subject, maximum 998 characters."},"text":{"type":"string","description":"Optional plain-text body."},"html":{"type":"string","description":"Optional HTML body."},"reply_to":{"type":"string","description":"Optional reply-to email address."}},"anyOf":[{"required":["text"]},{"required":["html"]}]}},{"name":"edm_template_create","description":"Create an EDM template for the authenticated project after approval. Use {{click_url}} in html_body/text_body; if the provided click_url appears directly in content, it is stored as {{click_url}} for tracking replacement at send time.","inputSchema":{"type":"object","required":["name","subject","html_body","click_url"],"properties":{"name":{"type":"string","description":"Template name."},"subject":{"type":"string","description":"Email subject."},"html_body":{"type":"string","description":"HTML body. Prefer {{click_url}} for tracked CTA links."},"text_body":{"type":"string","description":"Optional text body. Prefer {{click_url}} for tracked CTA links."},"click_url":{"type":"string","description":"Destination URL behind the tracked {{click_url}} link."},"variables":{"type":"array","items":{"type":"string"},"description":"Optional template variable names. click_url is added automatically."}}}},{"name":"edm_template_update","description":"Update an EDM template owned by the authenticated project after approval. If click_url appears directly in updated content, it is stored as {{click_url}} for tracking replacement at send time.","inputSchema":{"type":"object","required":["template_id"],"properties":{"template_id":{"type":"string","description":"EDM template id owned by the authenticated tenant and project."},"name":{"type":"string","description":"Template name."},"subject":{"type":"string","description":"Email subject."},"html_body":{"type":"string","description":"HTML body. Prefer {{click_url}} for tracked CTA links."},"text_body":{"type":"string","description":"Optional text body. Prefer {{click_url}} for tracked CTA links."},"click_url":{"type":"string","description":"Destination URL behind the tracked {{click_url}} link."},"variables":{"type":"array","items":{"type":"string"},"description":"Optional template variable names. click_url is added automatically when content uses it."}}}},{"name":"edm_campaign_create","description":"Create a draft EDM campaign for the authenticated project after approval. Copies template content at create time. Does not add recipients or send.","inputSchema":{"type":"object","required":["name","template_id"],"properties":{"name":{"type":"string","description":"Campaign name."},"template_id":{"type":"string","description":"EDM template id owned by the authenticated tenant."},"account_id":{"type":"string","description":"Sender account id. Prefer account_ids when using fallback sender chain."},"account_ids":{"type":"array","items":{"type":"string"},"description":"Ordered sender account ids for this campaign."},"from_name":{"type":"string","description":"Optional from display name."}},"anyOf":[{"required":["account_id"]},{"required":["account_ids"]}]}},{"name":"edm_recipients_replace","description":"Replace all non-test recipients on a draft EDM campaign after approval. Does not send.","inputSchema":{"type":"object","required":["campaign_id","recipients"],"properties":{"campaign_id":{"type":"string","description":"EDM campaign id owned by the authenticated tenant and project."},"recipients":{"type":"array","minItems":1,"items":{"type":"object","required":["email"],"properties":{"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"company":{"type":"string"},"job_title":{"type":"string"}}}}}}},{"name":"edm_campaign_send","description":"Queue an approved EDM campaign send job after approval. Requires pending recipients and active sender account. Does not create campaign or recipients.","inputSchema":{"type":"object","required":["campaign_id"],"properties":{"campaign_id":{"type":"string","description":"EDM campaign id owned by the authenticated tenant and project."},"account_id":{"type":"string","description":"Optional active sender account override owned by the authenticated tenant."},"schedule_at":{"type":"string","description":"Optional ISO timestamp. When omitted, queues immediately."},"throttle_ms":{"type":"number","minimum":100,"maximum":60000,"description":"Delay between sends. Defaults to 1000."},"resend_failed":{"type":"boolean","description":"Reset failed recipients before enqueueing."}}}},{"name":"analytics_summary","description":"Read aggregate GA4 analytics summary for projects in the authenticated tenant. Never returns OAuth tokens or raw user-level events.","inputSchema":{"type":"object","properties":{"tenant_id":{"type":"string","description":"Optional tenant id. Must match the authenticated project token tenant."},"project_slug":{"type":"string","description":"Optional project slug. Omit for all GA4-bound projects in the tenant."},"from":{"type":"string","description":"Start date in YYYY-MM-DD format."},"to":{"type":"string","description":"End date in YYYY-MM-DD format."},"days":{"type":"number","minimum":1,"maximum":366,"description":"Date range length when from/to are omitted. Defaults to 30."}}}},{"name":"analytics_funnel","description":"Read aggregate GA4 analytics funnel for one project or all GA4-bound projects in the authenticated tenant. Funnel rates use arrival users as the denominator.","inputSchema":{"type":"object","properties":{"tenant_id":{"type":"string","description":"Optional tenant id. Must match the authenticated project token tenant."},"project_slug":{"type":"string","description":"Optional project slug. Omit for all GA4-bound projects in the tenant."},"from":{"type":"string","description":"Start date in YYYY-MM-DD format."},"to":{"type":"string","description":"End date in YYYY-MM-DD format."},"days":{"type":"number","minimum":1,"maximum":366}}}},{"name":"analytics_channels","description":"Read aggregate GA4 analytics channel distribution by utm_source and utm_medium for the authenticated tenant.","inputSchema":{"type":"object","properties":{"tenant_id":{"type":"string","description":"Optional tenant id. Must match the authenticated project token tenant."},"project_slug":{"type":"string","description":"Optional project slug. Omit for all GA4-bound projects in the tenant."},"from":{"type":"string","description":"Start date in YYYY-MM-DD format."},"to":{"type":"string","description":"End date in YYYY-MM-DD format."},"days":{"type":"number","minimum":1,"maximum":366},"limit":{"type":"number","minimum":1,"maximum":100}}}},{"name":"analytics_events","description":"Read aggregate GA4 analytics event catalog and configured key event labels for the authenticated tenant.","inputSchema":{"type":"object","properties":{"tenant_id":{"type":"string","description":"Optional tenant id. Must match the authenticated project token tenant."},"project_slug":{"type":"string","description":"Optional project slug. Omit for all GA4-bound projects in the tenant."}}}},{"name":"agent_planning","description":"Manage an agent content calendar. For list, import, generate_15_day_strategy, and reset_task_link, agent_id must be the project agents.id UUID. For dispatch_due, omit agent_id and pass optional limit.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list","import","generate_15_day_strategy","dispatch_due","reset_task_link"]},"project_slug":{"type":"string","description":"Project/workspace slug. Required when the MCP bearer token is tenant-scoped instead of project-scoped."},"workspace_slug":{"type":"string","description":"Alias for project_slug."},"agent_id":{"type":"string","description":"Required agents.id UUID for this project. Do not pass runtime_id, agent name, or channel."},"plan_id":{"type":"string","description":"Required for action=reset_task_link. Existing content plan id."},"expected_linked_task_id":{"type":"string","description":"Optional linked issues.id guard for action=reset_task_link."},"idempotency_key":{"type":"string","description":"Optional recovery key for action=dispatch_due. Changes the task idempotency namespace for redispatch after stale task-link recovery."},"reason":{"type":"string","description":"Optional recovery note for action=reset_task_link."},"planning_result":{"type":"object","description":"Required for action=import. Use calendarItems for creates and operations for update/cancel/keep.","properties":{"calendarItems":{"type":"array","items":{"type":"object","required":["title"],"properties":{"title":{"type":"string","description":"Content title."},"content_type":{"type":"string","description":"Content type, for example post, article, video, email, or content."},"planned_date":{"type":"string","description":"Calendar date in YYYY-MM-DD format."},"starts_at":{"type":"string","description":"ISO timestamp for the planned start time."},"time_zone":{"type":"string","description":"Optional IANA timezone used to align planned_date with starts_at."},"status":{"type":"string","enum":["planned","drafting","review","approved","scheduled","cancelled","failed"]},"reviewer":{"type":"string"},"connector_type":{"type":"string"},"scheduled_publish_time":{"type":"string","description":"Optional ISO timestamp for publish scheduling."},"planning_context":{"type":"object"}}}},"operations":{"type":"array","items":{"type":"object","required":["op"],"properties":{"op":{"type":"string","enum":["create","update","cancel","keep"]},"id":{"type":"string","description":"Existing content plan id for update, cancel, or keep."},"plan_id":{"type":"string","description":"Existing content plan id for update, cancel, or keep."},"title":{"type":"string"},"content_type":{"type":"string"},"planned_date":{"type":"string","description":"YYYY-MM-DD."},"starts_at":{"type":"string","description":"ISO timestamp."},"time_zone":{"type":"string"},"status":{"type":"string","enum":["planned","drafting","review","approved","scheduled","cancelled","failed"]},"reviewer":{"type":"string"},"connector_type":{"type":"string"},"scheduled_publish_time":{"type":"string"},"planning_context":{"type":"object"},"reason":{"type":"string"},"expected_linked_task_id":{"type":"string","description":"Optional linked issues.id guard for task-link recovery."}}}}}},"limit":{"type":"number","minimum":1,"maximum":100,"description":"Maximum due plans to dispatch per agent. Defaults to 25."}},"oneOf":[{"properties":{"action":{"const":"list"}},"required":["action","agent_id"]},{"properties":{"action":{"const":"generate_15_day_strategy"}},"required":["action","agent_id"]},{"properties":{"action":{"const":"import"}},"required":["action","agent_id","planning_result"]},{"properties":{"action":{"const":"dispatch_due"}},"required":["action"]},{"properties":{"action":{"const":"reset_task_link"}},"required":["action","agent_id","plan_id"]}]}},{"name":"ahrefs_keyword_research","description":"Research SEO keywords with Ahrefs: metrics, related recommendations, top10 SERP, and DR < 60 opportunity signals. Requires AHREFS_API_KEY on the server.","inputSchema":{"type":"object","required":["keywords"],"properties":{"keywords":{"type":"array","items":{"type":"string"},"minItems":1,"description":"One or more keyword phrases."},"keyword":{"type":"string","description":"Single keyword fallback. Prefer keywords array."},"country":{"type":"string","description":"Two-letter country code. Defaults server-side when omitted."},"limit":{"type":"number","minimum":1,"maximum":50},"include_related":{"type":"boolean"},"include_serp_top10":{"type":"boolean"}}}},{"name":"ahrefs_domain_research","description":"Research domains or URLs with Ahrefs Site Explorer: Domain Rating, organic metrics, backlink stats, live backlinks, organic competitors, best pages by backlinks, broken backlinks, and first-pass backlink builder tables. Requires AHREFS_API_KEY on the server.","inputSchema":{"type":"object","properties":{"target":{"type":"string","description":"Single target domain or URL. Prefer targets array when researching multiple domains."},"targets":{"type":"array","items":{"type":"string"},"minItems":1,"description":"One or more target domains or URLs."},"competitors":{"type":"array","items":{"type":"string"},"description":"Optional competitor domains to research in the same call."},"seed_competitors":{"type":"array","items":{"type":"string"},"description":"Optional bounded competitor domains inferred from project knowledge or product category when Ahrefs organic competitors are empty. Returned rows are marked semantic_seed_competitor."},"fallback_competitors":{"type":"array","items":{"type":"string"},"description":"Alias for seed_competitors."},"country":{"type":"string","description":"Two-letter country code for organic competitor and metrics reports. Defaults to us."},"mode":{"type":"string","enum":["exact","prefix","domain","subdomains"],"description":"Ahrefs target scope. Defaults to subdomains."},"date":{"type":"string","description":"Report date in YYYY-MM-DD format. Defaults to today server-side."},"limit":{"type":"number","minimum":1,"maximum":50,"description":"Default list size for Site Explorer list endpoints. Defaults to 10."},"include_backlink_stats":{"type":"boolean","description":"Include /backlinks-stats. Defaults true."},"include_live_backlinks":{"type":"boolean","description":"Include /all-backlinks with 1_per_domain aggregation for first-pass referring-page prospects. Defaults true."},"include_organic_competitors":{"type":"boolean","description":"Include /organic-competitors. Defaults true."},"include_best_pages_by_backlinks":{"type":"boolean","description":"Include /pages-by-backlinks. Defaults true."},"include_broken_backlinks":{"type":"boolean","description":"Include /broken-backlinks. Defaults true."}},"oneOf":[{"required":["target"]},{"required":["targets"]},{"required":["competitors"]}]}},{"name":"dataforseo_keyword_research","description":"Research SEO keywords with DataForSEO Labs: search volume, CPC, competition, keyword difficulty, search intent, average top-10 backlink profile, keyword ideas, and related keywords. Returns DataForSEO-native metrics that are NOT interchangeable with Ahrefs values. Requires DATAFORSEO_BASIC_AUTH on the server.","inputSchema":{"type":"object","required":["keywords"],"properties":{"keywords":{"type":"array","items":{"type":"string"},"minItems":1,"description":"One or more keyword phrases."},"keyword":{"type":"string","description":"Single keyword fallback. Prefer keywords array."},"country":{"type":"string","description":"Two-letter country code such as us or gb. Mapped to a DataForSEO location code server-side. Defaults to us."},"location_code":{"type":"number","description":"Explicit DataForSEO numeric location code. Takes precedence over country."},"language_code":{"type":"string","description":"Language code such as en or de. Defaults to en."},"limit":{"type":"number","minimum":1,"maximum":1000,"description":"Row cap for keyword ideas and related keywords. Defaults to 50."},"include_ideas":{"type":"boolean","description":"Include keyword_ideas results. Defaults true."},"include_related":{"type":"boolean","description":"Include related_keywords results. Defaults true. Costs one extra request per seed keyword."},"include_serp_info":{"type":"boolean","description":"Include SERP metadata per keyword. Defaults false."},"related_depth":{"type":"number","minimum":0,"maximum":4,"description":"related_keywords crawl depth. Defaults to 2. Higher depth returns far more rows and costs more."}}}},{"name":"querit_ai_citation_research","description":"Research AI citation visibility and citation gaps with Querit. Requires QUERIT_API_KEY on the server.","inputSchema":{"type":"object","required":["queries"],"properties":{"queries":{"type":"array","items":{"type":"string"},"minItems":1,"description":"One or more AI-search queries to evaluate."},"query":{"type":"string","description":"Single query fallback. Prefer queries array."},"brand":{"type":"string","description":"Brand or product name to measure citation visibility for."},"site_url":{"type":"string","description":"Canonical site URL for the brand."},"country":{"type":"string","description":"Two-letter country code."},"language":{"type":"string","description":"Language code such as en or zh."}}}},{"name":"crawl4ai_page_fetch","description":"Fetch a single public web page through the hosted Crawl4AI API and return markdown content plus page metadata. Requires CRAWL4AI_API_URL and optional CRAWL4AI_API_KEY on the server.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"Public http(s) URL to fetch."},"max_chars":{"type":"number","minimum":1000,"maximum":64000,"description":"Maximum markdown characters to return. Defaults to 40000."},"timeout_ms":{"type":"number","minimum":5000,"maximum":180000,"description":"Crawl timeout in milliseconds. Defaults to 60000."},"scan_full_page":{"type":"boolean","description":"Scroll full page before extraction. Defaults true."},"cache_mode":{"type":"string","enum":["bypass","enabled"],"description":"Crawl4AI cache mode. Defaults bypass."}}}},{"name":"apodex_deep_research","description":"Run deep research through Apodex AI for the authenticated project. The caller authenticates only with the 11agents project token; APODEX_AI_API_SECRET is read server-side. Returns markdown plus structured artifact metadata for saving the report.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"Research brief or question. Use this for simple one-turn research requests."},"messages":{"type":"array","minItems":1,"description":"Optional OpenAI-compatible chat messages. Use instead of prompt for multi-message context.","items":{"type":"object","required":["role","content"],"properties":{"role":{"type":"string","enum":["system","user","assistant"]},"content":{"type":"string"}}}},"model":{"type":"string","description":"Apodex model id. Defaults to apodex-1-0-deepresearch."},"artifact_format":{"type":"string","enum":["markdown","json","text"],"description":"Preferred artifact format. Defaults to markdown; markdown is recommended for research reports."},"temperature":{"type":"number","minimum":0,"maximum":2},"max_tokens":{"type":"number","minimum":1}},"oneOf":[{"required":["prompt"]},{"required":["messages"]}]}},{"name":"image_prompt_generate","description":"Generate high-quality image prompts using built-in image-master style templates for GPT Image 2 or Nano Banana Pro.","inputSchema":{"type":"object","required":["brief"],"properties":{"brief":{"type":"string","description":"What image to create, including subject, setting, output purpose, and required text if any."},"use_case":{"type":"string","description":"Optional use case such as product_shot, hero_banner, social_ad, or marketplace_card."},"style":{"type":"string","description":"Optional visual style direction."},"model_preference":{"type":"string","enum":["gpt","nano","auto"],"description":"Use auto unless a specific backend is needed."}}}},{"name":"image_generate","description":"Generate images through the Flatkey image gateway. model=gpt uses GPT Image 2 through /v1/images/generations. model=nano uses the Nano Banana image endpoint. Requires FLATKEY_IMAGE_API_KEY on the server.","inputSchema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string","description":"Final generation prompt. Use image_prompt_generate first when the brief is underspecified."},"model":{"type":"string","enum":["gpt","nano"],"description":"Backend family. Use gpt for GPT Image 2, nano for Nano Banana."},"model_id":{"type":"string","description":"Optional explicit GPT image model id. Defaults to gpt-image-2 when model=gpt."},"nano_model":{"type":"string","enum":["flash","pro","preview"]},"aspect":{"type":"string","description":"Aspect ratio such as 1:1, 4:5, 16:9, or 9:16."},"image_size":{"type":"string","description":"Provider-specific output size."},"size":{"type":"string","description":"Provider-specific output size alias."},"quality":{"type":"string","description":"Provider-specific quality setting."},"n":{"type":"number","minimum":1,"maximum":4,"description":"Number of images to generate."}}}},{"name":"image_generate_async","description":"Start an asynchronous image generation job and return immediately with a job_id. Poll image_job_get with that job_id until status is completed or failed. Uses the same arguments as image_generate.","inputSchema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string","description":"Final generation prompt. Use image_prompt_generate first when the brief is underspecified."},"model":{"type":"string","enum":["gpt","nano"],"description":"Backend family. Use gpt for GPT Image 2, nano for Nano Banana."},"model_id":{"type":"string","description":"Optional explicit GPT image model id. Defaults to gpt-image-2 when model=gpt."},"nano_model":{"type":"string","enum":["flash","pro","preview"]},"aspect":{"type":"string","description":"Aspect ratio such as 1:1, 4:5, 16:9, or 9:16."},"image_size":{"type":"string","description":"Provider-specific output size."},"size":{"type":"string","description":"Provider-specific output size alias."},"quality":{"type":"string","description":"Provider-specific quality setting."},"n":{"type":"number","minimum":1,"maximum":4,"description":"Number of images to generate."}}}},{"name":"image_job_get","description":"Get the lightweight status and artifact metadata of an image job created by image_generate_async. Completed images are stored in S3; call image_job_image_get to retrieve a direct image URL for one image.","inputSchema":{"type":"object","required":["job_id"],"properties":{"job_id":{"type":"string","description":"Job id returned by image_generate_async."}}}},{"name":"image_job_image_get","description":"Fetch one completed image artifact from S3 as a direct URL. Use only after image_job_get reports completed. Returns a public URL when configured, otherwise a short-lived presigned URL.","inputSchema":{"type":"object","required":["job_id"],"properties":{"job_id":{"type":"string","description":"Job id returned by image_generate_async."},"index":{"type":"number","minimum":1,"description":"Image index to fetch. Defaults to 1."}}}},{"name":"fish_audio_tts","description":"Generate spoken audio through Fish Audio from text and either a public voice description or exact Fish Audio voice id. Returns public preview/download links, voice metadata, and speed variants. Requires FISH_AUDIO_TTS_SKILL_API_KEY on the server.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"Text to synthesize."},"voice_description":{"type":"string","description":"Fish Audio public voice search query such as \"warm female narrator\". Required when voice_id is omitted."},"voice_id":{"type":"string","description":"Exact Fish Audio voice id or fish.audio voice URL. When provided, voice search is skipped."},"language":{"type":"string","description":"Optional language filter such as zh, en, or ja. Omit to let the service infer from text."},"gender":{"type":"string","description":"Optional voice search hint such as female or male."},"format":{"type":"string","enum":["mp3","wav"],"description":"Output audio format. Defaults to mp3."}},"oneOf":[{"required":["text","voice_description"]},{"required":["text","voice_id"]}]}},{"name":"radar_top_dramas","description":"Query the latest trending short-drama ranking for a project (e.g. nuvelle). Returns dramas sorted by growth, each with region, 24h growth, total views, how many matrix accounts are promoting it (the strongest signal a publisher is spending on it), material counts, and playable cover/clip/full-drama URLs. Filter by region, genre keyword, minimum promoting accounts, or playable-only.","inputSchema":{"type":"object","properties":{"project_slug":{"type":"string","description":"Project to query, e.g. \"nuvelle\". Defaults to the authenticated project."},"region":{"type":"string","description":"Filter by market: US, BR, ES, JP, etc."},"genre":{"type":"string","description":"Keyword to match in the drama title, e.g. billionaire, mafia, werewolf, revenge."},"min_accounts":{"type":"number","description":"Only dramas promoted by at least this many matrix accounts (>=20 = heavy publisher push)."},"playable_only":{"type":"boolean","description":"Only dramas that have a playable full-drama video URL."},"limit":{"type":"number","minimum":1,"maximum":200,"description":"Max dramas to return (default 50)."}}}},{"name":"radar_data_publish","description":"Publish/refresh the structured short-drama ranking dataset for the authenticated project. Used by the daily pipeline; radar_top_dramas reads what this stores.","inputSchema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","description":"The ranking dataset: { generated_at, sort, stats, genre_efficiency, dramas: [...] }."}}}},{"name":"insight_card_publish","description":"Publish a self-contained HTML analysis report as a card on the project dashboard so teammates can open it. Re-publishing with the same card_key updates that card in place. The HTML must be self-contained (inline CSS/JS, data: URIs for images) — external hosts are blocked by CSP.","inputSchema":{"type":"object","required":["card_key","title","html"],"properties":{"card_key":{"type":"string","description":"Stable identifier for this card, e.g. shortdrama-heat-radar. Re-publishing with the same key replaces the card instead of adding a duplicate."},"title":{"type":"string","description":"Card title shown on the dashboard."},"description":{"type":"string","description":"One or two sentences describing what the report shows."},"surface":{"type":"string","description":"Which dashboard tab the report appears on: 'radar' (market/insight reports, recommended), 'ads', or 'command-center'."},"html":{"type":"string","description":"The complete self-contained HTML document for the report."}}}},{"name":"agent_config","description":"Read or update the authenticated project agent configuration and attached skills from the main DB source of truth. Use action=get to inspect. Use update_agent to change name, description/instructions, goal, runtime binding, environment variables, permissions, triggers, skills, or memory. Use create_skill, update_skill, or delete_skill to manage DB-backed skill bundles attached to the agent. agent_id must be the project agents.id UUID.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["get","update_agent","create_skill","update_skill","delete_skill"],"description":"get is read-only; all other actions mutate the current project."},"project_slug":{"type":"string","description":"Project/workspace slug. Required when the MCP bearer token is tenant-scoped instead of project-scoped."},"workspace_slug":{"type":"string","description":"Alias for project_slug."},"agent_id":{"type":"string","description":"Required agents.id UUID for this project. Do not pass runtime_id, agent name, or channel."},"name":{"type":"string","description":"For update_agent, the agent display name. For skill actions, the skill name."},"description":{"type":"string","description":"For update_agent, alias for agent instructions/role description. For skill actions, the skill description."},"instructions":{"type":"string","description":"Agent role, operating boundaries, and quality bar. Preferred over description when both are supplied."},"goal":{"type":"string","description":"Outcome this agent owns for the project."},"runtime_id":{"type":"string","description":"Runtime instance UUID to bind this agent to."},"runtime_profile":{"type":"string","description":"Runtime profile key stored on project_agent.runtime_profile."},"status":{"type":"string","enum":["active","paused","missing_runtime","error"]},"environment_variables":{"type":"array","items":{"type":"object","required":["key"],"properties":{"key":{"type":"string","description":"Environment variable name."},"value":{"type":"string","description":"Value to store. For secret variables, pass an empty value to preserve the existing value."},"secret":{"type":"boolean","description":"Defaults true."}}},"description":"Replaces/merges project-agent environment variables; empty secret values preserve existing values."},"permissions":{"type":"object","description":"Project-agent permission booleans, e.g. can_comment, can_update_status, can_dispatch_tasks, can_publish."},"triggers":{"type":"object","description":"Project-agent trigger booleans, e.g. on_mention, on_assigned, on_status_todo."},"skills":{"type":"array","items":{"type":"string"},"description":"Named skill list stored on project_agent.skills."},"memory":{"type":"array","items":{"type":"string"},"description":"Project-agent memory files; only .qmd entries are retained by the DB normalizer."},"skill_id":{"type":"string","description":"Skill UUID for update_skill/delete_skill. Template skill ids are accepted for update_skill and are materialized into DB-backed skills."},"id":{"type":"string","description":"Alias for skill_id."},"skill_name":{"type":"string","description":"Skill name selector when skill_id is unavailable."},"content":{"type":"string","description":"Primary SKILL.md content for create_skill/update_skill."},"config":{"type":"object","description":"Skill config JSON."},"files":{"type":"array","items":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":"Relative path within the skill bundle, e.g. SKILL.md or scripts/helper.mjs."},"encoding":{"type":"string","enum":["utf8","base64"],"description":"Defaults to utf8."},"content":{"type":"string","description":"File content. Required when replacing files."}}},"description":"Full replacement file list for create_skill/update_skill. Omit on update_skill to preserve existing files."}},"oneOf":[{"properties":{"action":{"const":"get"}},"required":["action","agent_id"]},{"properties":{"action":{"const":"update_agent"}},"required":["action","agent_id"]},{"properties":{"action":{"const":"create_skill"}},"required":["action","agent_id","name"]},{"properties":{"action":{"const":"update_skill"}},"required":["action","agent_id"]},{"properties":{"action":{"const":"delete_skill"}},"required":["action","agent_id"]}]}},{"name":"skill_list","description":"List all skills for an agent with per-file MD5 hashes. Use before executing a task to check whether local skill files are up to date without transferring content.","inputSchema":{"type":"object","required":["agent_id"],"properties":{"agent_id":{"type":"string","description":"Required agents.id UUID for this project. Do not pass runtime_id, agent name, or channel."}}}},{"name":"skill_file_get","description":"Fetch the content of a single skill file by agent, skill name, and file path. Use after skill_list identifies a MD5 mismatch to sync only the changed file.","inputSchema":{"type":"object","required":["agent_id","skill_name"],"properties":{"agent_id":{"type":"string","description":"Required agents.id UUID for this project. Do not pass runtime_id, agent name, or channel."},"skill_name":{"type":"string","description":"Skill name as returned by skill_list."},"file_path":{"type":"string","description":"Relative file path within the skill directory, e.g. SKILL.md or scripts/helper.sh. Defaults to SKILL.md."}}}}]}