{"schemaVersion":"1.0","id":"applistingagent","name":"App Listing Agent","description":"Agent-native App Store Connect and Google Play launch operations.","homepage":"https://applistingagent.com","documentation":"https://applistingagent.com/agents","endpoints":{"mcp":"https://applistingagent.com/api/mcp","capabilities":"https://applistingagent.com/.well-known/applistingagent-capabilities","health":"https://applistingagent.com/api/health"},"authentication":{"methods":["oauth_2_1","api_key","firebase_id_token"],"pairing":"https://applistingagent.com/onboarding","oauth":true},"safety":{"publishRequiresApproval":true,"credentialsAcceptedInChat":false,"projectScopedAuthority":true,"internalToolsExcluded":true,"untrustedContentIsData":true},"capabilities":[{"name":"get_onboarding_status","category":"onboarding","requiredScope":"read","risk":"read","approval":"none","cost":"none","readOnly":true,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Get Onboarding Status","description":"Returns the connected account's projects, store connection status, approval policy, onboarding progress and the suggested next step.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID selected during agent authorization"}}},"annotations":{"title":"Get Onboarding Status","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"list_importable_apps","category":"onboarding","requiredScope":"read","risk":"read","approval":"none","cost":"none","readOnly":true,"openWorld":true,"untrustedData":true,"destructive":false,"title":"List Importable Apps","description":"Lists the apps available through the saved App Store Connect account. Missing credentials are configured through a secure browser connection flow, not in chat.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"List Importable Apps","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"create_onboarding_project","category":"onboarding","requiredScope":"write","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Create Onboarding Project","description":"Creates or imports one iOS or Android project. An app that already has a store-console record, even if unpublished, is imported as existing; an app without one is created as a local pre-store project. A request ID makes retries idempotent.","inputSchema":{"type":"object","properties":{"requestId":{"type":"string","description":"Stable unique request ID used to make retries idempotent"},"name":{"type":"string","description":"Customer-facing app/project name"},"storeType":{"type":"string","enum":["ios","android"],"description":"Target store platform"},"storeRecordStatus":{"type":"string","enum":["existing","not_created"],"description":"Whether the app already exists in App Store Connect/Play Console, even if unpublished"},"appStoreAppId":{"type":"string","description":"Numeric App Store app ID for iOS"},"playStorePackage":{"type":"string","description":"Google Play package name for Android"},"primaryLocale":{"type":"string","description":"Primary locale, default en-US"}},"required":["requestId","name","storeType","storeRecordStatus"]},"annotations":{"title":"Create Onboarding Project","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"attach_onboarding_store_record","category":"onboarding","requiredScope":"write","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Attach Onboarding Store Record","description":"Links an existing App Store Connect or Google Play Console record to a local pre-store project. Repeating the same identifier is idempotent.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"Existing App Listing Agent pre-store project ID"},"appStoreAppId":{"type":"string","description":"Numeric App Store app ID for an iOS project"},"playStorePackage":{"type":"string","description":"Google Play package name for an Android project"}},"required":["projectId"]},"annotations":{"title":"Attach Onboarding Store Record","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"start_store_connection","category":"onboarding","requiredScope":"read","risk":"read","approval":"none","cost":"none","readOnly":true,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Get Store Connection Link","description":"Returns a secure browser link for connecting App Store Connect or Google Play credentials, plus the current connection state. Credentials are entered in the browser, not in chat.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"Get Store Connection Link","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"set_agent_policy","category":"onboarding","requiredScope":"write","risk":"write","approval":"always","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Set Approval Policy","description":"Changes the account's approval policy (read only, drafts with approval, or publishing with approval). The change takes effect only after the account owner approves it in App Listing Agent.","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["read_only","draft_with_approval","publish_with_approval"],"description":"Operating mode: read_only, draft_with_approval or publish_with_approval"}},"required":["mode"]},"annotations":{"title":"Set Approval Policy","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"run_store_readiness_audit","category":"onboarding","requiredScope":"write","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":true,"destructive":false,"title":"Run Store Readiness Audit","description":"Checks a project's store listing for launch blockers and returns each blocker, whether draft work can continue, the approval boundary and a suggested next step. It does not change listing content or publish anything.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID; defaults to the first onboarding project"}}},"annotations":{"title":"Run Store Readiness Audit","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"render_readiness_workspace","category":"onboarding","requiredScope":"read","risk":"read","approval":"none","cost":"none","readOnly":true,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Show Readiness Report","description":"Displays an interactive readiness report from the fields returned by a readiness audit (project, ready, blockers, approvalBoundary, nextAction). Displaying the report does not run an audit or change any data.","inputSchema":{"type":"object","properties":{"project":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"storeType":{"type":"string","enum":["ios","android"]},"storeRecordStatus":{"type":"string"},"syncStatus":{"type":"string"}},"required":["id","name","storeType"]},"ready":{"type":"boolean"},"blockers":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"deferrable":{"type":"boolean","description":"True when local draft work can continue before this blocker is resolved"}},"required":["code","message"]}},"approvalBoundary":{"type":"string"},"nextAction":{"type":"string"}},"required":["project","ready","blockers","approvalBoundary","nextAction"]},"annotations":{"title":"Show Readiness Report","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"complete_onboarding","category":"onboarding","requiredScope":"write","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Complete Onboarding","description":"Marks onboarding complete once an approval policy is set and the first readiness audit has run.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"Complete Onboarding","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"translate_metadata","category":"metadata","requiredScope":"translate","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Translate Metadata","description":"Translates supplied store listing fields into one or more non-English locales using AI and caches the result. By default it returns the translations without saving them (metadataSaved=false). With saveToLocaleDraft=true it also saves the translated fields to each locale draft in App Listing Agent, leaving other fields unchanged. It does not publish to a store. Uses plan allowance.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"store":{"type":"string","enum":["appstore","playstore"],"description":"Target store"},"locales":{"type":"array","items":{"type":"string"},"description":"Target locales to translate to"},"force":{"type":"boolean","description":"Force re-translation even if cached","default":false},"saveToLocaleDraft":{"type":"boolean","description":"When true, also saves the translated fields to each target locale draft in App Listing Agent. Other fields in those locales are unchanged. Nothing is published to a store.","default":false},"metadata":{"type":"object","properties":{"title":{"type":"string","description":"App name/title (both stores, max 30 chars)"},"subtitle":{"type":"string","description":"App Store only — max 30 chars"},"description":{"type":"string","description":"App Store only — max 4000 chars"},"keywords":{"type":"string","description":"App Store only — comma-separated, max 100 chars"},"whatsNew":{"type":"string","description":"App Store only — release notes, max 4000 chars"},"promotionalText":{"type":"string","description":"App Store only — promotional text, max 170 chars"},"shortDescription":{"type":"string","description":"Play Store only — max 80 chars"},"fullDescription":{"type":"string","description":"Play Store only — max 4000 chars"}},"description":"Metadata fields to translate. Only send fields relevant to the target store."}},"required":["projectId","store","locales","metadata"]},"annotations":{"title":"Translate Metadata","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"update_metadata","category":"metadata","requiredScope":"write","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Update Metadata","description":"Saves listing fields for one locale, including English, as a local draft in App Listing Agent. Only supplied fields change. App Store fields: title, subtitle, description, keywords, whatsNew, promotionalText. Google Play fields: title, shortDescription, fullDescription. Over-length values are rejected, not truncated. It does not publish to a store.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"store":{"type":"string","enum":["appstore","playstore"],"description":"Target store"},"locale":{"type":"string","description":"Locale to update (e.g., en-US, fr-FR, de-DE)"},"metadata":{"type":"object","properties":{"title":{"type":"string","maxLength":30,"description":"App name/title (both stores, max 30 chars)"},"subtitle":{"type":"string","maxLength":30,"description":"App Store only — max 30 chars"},"description":{"type":"string","maxLength":4000,"description":"App Store only — max 4000 chars"},"keywords":{"type":"string","maxLength":100,"description":"App Store only — comma-separated, max 100 chars"},"whatsNew":{"type":"string","maxLength":4000,"description":"App Store only — release notes, max 4000 chars"},"promotionalText":{"type":"string","maxLength":170,"description":"App Store only — max 170 chars"},"shortDescription":{"type":"string","maxLength":80,"description":"Play Store only — max 80 chars"},"fullDescription":{"type":"string","maxLength":4000,"description":"Play Store only — max 4000 chars"}},"description":"Metadata fields to update. Only send fields relevant to the target store."}},"required":["projectId","store","locale","metadata"]},"annotations":{"title":"Update Metadata","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"read_metadata","category":"metadata","requiredScope":"read","risk":"read","approval":"none","cost":"none","readOnly":true,"openWorld":true,"untrustedData":true,"destructive":false,"title":"Read Metadata","description":"Returns the locally saved listing fields for a project: the primary locale by default, or a specific locale or all locales.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"locale":{"type":"string","description":"Optional: specific locale to read (e.g., en-US, fr-FR). Overrides primaryOnly."},"primaryOnly":{"type":"boolean","description":"Only return the primary locale. Defaults to true. Set to false to return all locales.","default":true}},"required":["projectId"]},"annotations":{"title":"Read Metadata","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"check_metadata_compliance","category":"metadata","requiredScope":"write","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":true,"destructive":false,"title":"Check Metadata Compliance","description":"Uses AI to check a locale's listing text and legal-document prerequisites against App Store or Google Play review guidelines. Returns issues grouped by severity with guideline references. It does not change the listing, and results do not guarantee store approval. Uses plan allowance.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"locale":{"type":"string","description":"Locale to check (e.g., en-US, fr-FR). Defaults to the project's primary locale."},"storeType":{"type":"string","enum":["ios","android"],"description":"Which store's guidelines to check against. Defaults to ios.","default":"ios"}},"required":["projectId"]},"annotations":{"title":"Check Metadata Compliance","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"upload_appstore_metadata","category":"metadata","requiredScope":"publish","risk":"publish","approval":"always","cost":"store-operation","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":true,"title":"Upload App Store Metadata","description":"Uploads saved listing fields for the chosen locales to App Store Connect. dryRun=true returns a preview without uploading. A live upload requires store credentials, publish permission and the account owner's approval of the exact change in App Listing Agent.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"locales":{"type":"array","items":{"type":"string"},"description":"Locales to upload"},"dryRun":{"type":"boolean","description":"When true, returns a preview of the upload without sending anything to the store.","default":true},"translations":{"type":"object","description":"Optional translations to upload (uses cached if not provided)"}},"required":["projectId","locales"]},"annotations":{"title":"Upload App Store Metadata","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"upload_playstore_metadata","category":"metadata","requiredScope":"publish","risk":"publish","approval":"always","cost":"store-operation","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":true,"title":"Upload Google Play Metadata","description":"Uploads saved listing fields for the chosen locales to Google Play Console. dryRun=true returns a preview without uploading. A live upload requires store credentials, publish permission and the account owner's approval of the exact change in App Listing Agent.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"locales":{"type":"array","items":{"type":"string"},"description":"Locales to upload (iOS locales auto-converted to Android)"},"dryRun":{"type":"boolean","description":"When true, returns a preview of the upload without sending anything to the store.","default":true},"translations":{"type":"object","description":"Optional translations to upload (uses cached if not provided)"}},"required":["projectId","locales"]},"annotations":{"title":"Upload Google Play Metadata","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"sync_stores","category":"metadata","requiredScope":"publish","risk":"publish","approval":"always","cost":"store-operation","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":true,"title":"Upload Metadata To Both Stores","description":"Uploads saved listing fields to both App Store Connect and Google Play Console in one operation. dryRun=true returns both previews without uploading. A live upload requires credentials for both stores, publish permission and the account owner's approval.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"locales":{"type":"array","items":{"type":"string"},"description":"Locales to upload"},"dryRun":{"type":"boolean","description":"When true, returns a preview of the upload without sending anything to the store.","default":true}},"required":["projectId","locales"]},"annotations":{"title":"Upload Metadata To Both Stores","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"generate_screenshot","category":"screenshots","requiredScope":"screenshots","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Generate Screenshot","description":"Uses AI to create one marketing screenshot from a raw app screenshot and saves it to the project. It does not upload to a store. Uses plan allowance.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"rawImageUrl":{"type":"string","description":"URL of the raw app screenshot"},"headline":{"type":"string","description":"Marketing headline text (max 50 chars)"},"subtitle":{"type":"string","description":"Optional supporting marketing text beneath the headline (keep short, about 55-60 chars max)."},"styleSource":{"type":"object","oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"category"},"category":{"type":"string","enum":["kids","productivity","fitness","social","finance","utility","entertainment","education","lifestyle","health"]},"customColors":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"}}}},"required":["type","category"]},{"type":"object","properties":{"type":{"type":"string","const":"reference"},"referenceImageUrl":{"type":"string"}},"required":["type","referenceImageUrl"]},{"type":"object","properties":{"type":{"type":"string","const":"custom"},"style":{"type":"object","properties":{"gradientColors":{"type":"object","properties":{"primary":{"type":"string","description":"Primary gradient color (hex)"},"secondary":{"type":"string","description":"Secondary gradient color (hex)"}},"required":["primary","secondary"]},"fontStyle":{"type":"string","description":"Font description (e.g. \"bold sans-serif in white\")"},"styleDescription":{"type":"string","description":"Overall style description"},"decorativeElements":{"type":"array","items":{"type":"string"},"description":"Decorative elements (e.g. [\"motion curves\", \"energy waves\"])"}},"required":["gradientColors","fontStyle","styleDescription","decorativeElements"]}},"required":["type","style"]}],"description":"Style source - app category template, reference image, or custom style config"},"anchorImageUrl":{"type":"string","description":"Optional: previously generated screenshot to use as style anchor"},"provider":{"type":"string","enum":["gemini","kie"],"description":"Optional image generation service. The default service is used when omitted."},"model":{"type":"string","description":"Optional model identifier for the selected image service."},"resizeToSizes":{"type":"array","items":{"type":"string","enum":["6.9","6.5","6.3","6.1","5.5","ipad-13","ipad-12.9","ipad-11","watch-ultra-3","watch-ultra","watch-10","watch-7","watch-4","watch-3"]},"description":"Optional: resize to specific App Store sizes"}},"required":["projectId","rawImageUrl","headline","styleSource"]},"annotations":{"title":"Generate Screenshot","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"generate_screenshot_set","category":"screenshots","requiredScope":"screenshots","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Generate Screenshot Set","description":"Uses AI to create a set of marketing screenshots with a shared visual style from several raw app screenshots and saves them to the project. Runs as a background job and returns a job ID. It does not upload to a store. Uses plan allowance.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"screenshots":{"type":"array","items":{"type":"object","properties":{"rawImageUrl":{"type":"string"},"headline":{"type":"string"},"subtitle":{"type":"string","description":"Optional supporting marketing text beneath the headline."}},"required":["rawImageUrl","headline"]},"description":"Array of screenshots to generate (max 10)"},"styleSource":{"type":"object","oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"category"},"category":{"type":"string","enum":["kids","productivity","fitness","social","finance","utility","entertainment","education","lifestyle","health"]},"customColors":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"}}},"anchorIndex":{"type":"number","description":"Which screenshot to generate first as anchor (default: 0)"}},"required":["type","category"]},{"type":"object","properties":{"type":{"type":"string","const":"reference"},"referenceImageUrl":{"type":"string"}},"required":["type","referenceImageUrl"]},{"type":"object","properties":{"type":{"type":"string","const":"custom"},"style":{"type":"object","properties":{"gradientColors":{"type":"object","properties":{"primary":{"type":"string","description":"Primary gradient color (hex)"},"secondary":{"type":"string","description":"Secondary gradient color (hex)"}},"required":["primary","secondary"]},"fontStyle":{"type":"string","description":"Font description (e.g. \"bold sans-serif in white\")"},"styleDescription":{"type":"string","description":"Overall style description"},"decorativeElements":{"type":"array","items":{"type":"string"},"description":"Decorative elements (e.g. [\"seedlings\", \"leaves\"])"}},"required":["gradientColors","fontStyle","styleDescription","decorativeElements"]}},"required":["type","style"]}],"description":"Style source - category template, reference image, or custom style config"},"deviceFrame":{"type":"string","enum":["iphone","android","generic","none"],"description":"Device frame style. \"iphone\" (default): iPhone mockup. \"android\": Pixel-style mockup. \"generic\": brand-neutral device shape (works for both stores). \"none\": no device frame, just app UI on background."},"provider":{"type":"string","enum":["gemini","kie"],"description":"Optional image generation service. The default service is used when omitted."},"model":{"type":"string","description":"Optional model identifier for the selected image service."},"resizeToSizes":{"type":"array","items":{"type":"string","enum":["6.9","6.5","6.3","6.1","5.5","ipad-13","ipad-12.9","ipad-11","watch-ultra-3","watch-ultra","watch-10","watch-7","watch-4","watch-3"]},"description":"Optional: resize to specific App Store sizes"}},"required":["projectId","screenshots","styleSource"]},"annotations":{"title":"Generate Screenshot Set","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"generate_screenshots_from_plan","category":"screenshots","requiredScope":"screenshots","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Generate Screenshots From Plan","description":"Uses AI to create a set of marketing screenshots from raw app screenshots, following a supplied headline and emphasis plan for each image, and saves them to the project. Runs as a background job and returns a job ID. It does not upload to a store. Uses plan allowance.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"screenshots":{"type":"array","items":{"type":"object","properties":{"rawImageUrl":{"type":"string","description":"URL of the raw app screenshot"},"headline":{"type":"string","description":"Marketing headline text (max 50 chars)"},"subtitle":{"type":"string","description":"Optional supporting marketing text beneath the headline (keep short, about 55-60 chars max)."},"enhancement":{"type":"object","properties":{"focusArea":{"type":"string","description":"UI element to emphasize (e.g. \"the streak counter card\")"},"visualTechnique":{"type":"string","enum":["none","pop-out","floating-element"],"description":"pop-out: 3D depth effect. floating-element: pull element outside device frame. none: no emphasis."},"contextualNote":{"type":"string","description":"Why this element connects to the headline"},"enhancementPrompt":{"type":"string","description":"Specific instruction for the image generator"}},"description":"Optional: pre-defined visual emphasis (skips AI analysis)"}},"required":["rawImageUrl","headline"]},"description":"Raw screenshots with headlines and optional enhancements (max 10)"},"styleSource":{"type":"object","oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"category"},"category":{"type":"string","enum":["kids","productivity","fitness","social","finance","utility","entertainment","education","lifestyle","health"]},"customColors":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"}}}},"required":["type","category"]},{"type":"object","properties":{"type":{"type":"string","const":"reference"},"referenceImageUrl":{"type":"string"}},"required":["type","referenceImageUrl"]},{"type":"object","properties":{"type":{"type":"string","const":"custom"},"style":{"type":"object","properties":{"gradientColors":{"type":"object","properties":{"primary":{"type":"string","description":"Primary gradient color (hex)"},"secondary":{"type":"string","description":"Secondary gradient color (hex)"}},"required":["primary","secondary"]},"fontStyle":{"type":"string","description":"Font description (e.g. \"bold sans-serif in white\")"},"styleDescription":{"type":"string","description":"Overall style description (e.g. \"Energetic fitness aesthetic with motion elements\")"},"decorativeElements":{"type":"array","items":{"type":"string"},"description":"Decorative elements (e.g. [\"motion curves\", \"energy waves\"])"}},"required":["gradientColors","fontStyle","styleDescription","decorativeElements"]}},"required":["type","style"]}],"description":"Style source - category template, reference image, or custom style config"},"appContext":{"type":"object","properties":{"name":{"type":"string","description":"App name for context"},"description":{"type":"string","description":"App description for context"}},"description":"Optional app context used as generation input"},"deviceFrame":{"type":"string","enum":["iphone","android","generic","none"],"description":"Device frame style. \"iphone\" (default): iPhone mockup. \"android\": Pixel-style mockup. \"generic\": brand-neutral device shape (works for both stores). \"none\": no device frame, just app UI on background."},"provider":{"type":"string","enum":["gemini","kie"],"description":"Optional image generation service. The default service is used when omitted."},"model":{"type":"string","description":"Optional model identifier for the selected image service."},"resizeToSizes":{"type":"array","items":{"type":"string","enum":["6.9","6.5","6.3","6.1","5.5","ipad-13","ipad-12.9","ipad-11","watch-ultra-3","watch-ultra","watch-10","watch-7","watch-4","watch-3"]},"description":"Optional: resize to specific App Store sizes"}},"required":["projectId","screenshots","styleSource"]},"annotations":{"title":"Generate Screenshots From Plan","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"check_screenshot_job","category":"screenshots","requiredScope":"screenshots","risk":"read","approval":"none","cost":"none","readOnly":true,"openWorld":true,"untrustedData":true,"destructive":false,"title":"Get Screenshot Job Status","description":"Returns the status and results of a screenshot generation job by job ID. It does not start or cancel work.","inputSchema":{"type":"object","properties":{"jobId":{"type":"string","description":"The job ID returned by the screenshot generation tool"}},"required":["jobId"]},"annotations":{"title":"Get Screenshot Job Status","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"translate_screenshots","category":"screenshots","requiredScope":"translate","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Translate Screenshots","description":"Uses AI to create localized copies of a project's existing marketing screenshots with translated headline text for the chosen locales. Runs as a background job and returns a job ID. It does not upload to a store. Uses plan allowance.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"targetLocales":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Target locales to translate to (e.g. [\"de-DE\", \"fr-FR\", \"ja\", \"es-ES\"])"},"displayTypes":{"type":"array","items":{"type":"string"},"description":"Optional: specific display types to translate (e.g. [\"APP_IPHONE_69\"]). If omitted, translates all device sizes that have screenshots."},"screenshotIds":{"type":"array","items":{"type":"string"},"description":"Optional: specific screenshot IDs to translate. If omitted, translates all screenshots in each set."},"translateInAppText":{"type":"boolean","description":"Whether to also translate visible in-app UI text within the screenshots (default: false)"},"preserveInPhoneUI":{"type":"boolean","description":"If true, keep phone/app UI text exactly as-is and translate only marketing text outside the device. Overrides translateInAppText unless translationMode is ui_full."},"translateMarketingOnly":{"type":"boolean","description":"Alias for preserving in-phone UI while translating only the App Store marketing copy."},"translationInstructions":{"type":"string","description":"Optional custom guidance appended to the provider prompt, e.g. \"Use short natural Spanish, avoid clipping, preserve phone UI.\""},"translationMode":{"type":"string","enum":["literal","marketing_short","transcreate","ui_full"],"description":"Translation preset. literal = faithful translation, marketing_short = concise App Store copy, transcreate = natural localized rewrite, ui_full = translate marketing and in-app UI text."},"textLengthPolicy":{"type":"object","description":"Optional text fit constraints for generated localized screenshots.","properties":{"headlineMaxChars":{"type":"number","description":"Maximum headline characters."},"subtitleMaxChars":{"type":"number","description":"Maximum subtitle characters."},"allowLineBreaks":{"type":"boolean","description":"Whether line breaks are allowed to satisfy length/fit constraints."},"shrinkFontLimitPercent":{"type":"number","description":"Maximum font shrink percentage allowed before rephrasing or line breaking."}}},"provider":{"type":"string","enum":["kie","fal","openai"],"description":"Optional image translation service. The default service is used when omitted."},"model":{"type":"string","description":"Optional model identifier for the selected image service."},"perScreenshotInstructions":{"type":"object","description":"Optional screenshot-specific guidance keyed by screenshot id or 1-based screenshot number like \"02\". Values can be a string or an object with headline/subtitle/instructions/headlineMaxChars/subtitleMaxChars.","additionalProperties":{"anyOf":[{"type":"string"},{"type":"object","properties":{"headline":{"type":"string"},"subtitle":{"type":"string"},"instructions":{"type":"string"},"headlineMaxChars":{"type":"number"},"subtitleMaxChars":{"type":"number"}}}]}}},"required":["projectId","targetLocales"]},"annotations":{"title":"Translate Screenshots","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"translate_custom_page_screenshots","category":"screenshots","requiredScope":"translate","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Translate Custom Page Screenshots","description":"Uses AI to create localized copies of the screenshots on one Custom Product Page locale for other locales of that page. Runs as a background job and returns a job ID. It does not upload to a store. Uses plan allowance.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"pageId":{"type":"string","description":"The custom product page ID"},"sourceLocale":{"type":"string","description":"Source CPP localization locale, e.g. \"en-US\". Screenshots are read from this locale."},"targetLocales":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Target locales to generate translated screenshots for (e.g. [\"de-DE\", \"fr-FR\", \"ja\"])."},"displayTypes":{"type":"array","items":{"type":"string"},"description":"Optional: specific App Store display types to translate (e.g. [\"APP_IPHONE_69\"]). If omitted, translates all display types attached to the source CPP localization."},"screenshotIds":{"type":"array","items":{"type":"string"},"description":"Optional: specific CPP screenshot IDs to translate. If omitted, translates all screenshots matching the selected display types."},"translateInAppText":{"type":"boolean","description":"Whether to also translate visible in-app UI text within the screenshots (default: false)."},"preserveInPhoneUI":{"type":"boolean","description":"If true, keep phone/app UI text exactly as-is and translate only marketing text outside the device. Overrides translateInAppText unless translationMode is ui_full."},"translateMarketingOnly":{"type":"boolean","description":"Alias for preserving in-phone UI while translating only the App Store marketing copy."},"translationInstructions":{"type":"string","description":"Optional custom guidance appended to the provider prompt, e.g. \"Use short natural Spanish, avoid clipping, preserve phone UI.\""},"translationMode":{"type":"string","enum":["literal","marketing_short","transcreate","ui_full"],"description":"Translation preset. literal = faithful translation, marketing_short = concise App Store copy, transcreate = natural localized rewrite, ui_full = translate marketing and in-app UI text."},"textLengthPolicy":{"type":"object","description":"Optional text fit constraints for generated localized screenshots.","properties":{"headlineMaxChars":{"type":"number","description":"Maximum headline characters."},"subtitleMaxChars":{"type":"number","description":"Maximum subtitle characters."},"allowLineBreaks":{"type":"boolean","description":"Whether line breaks are allowed to satisfy length/fit constraints."},"shrinkFontLimitPercent":{"type":"number","description":"Maximum font shrink percentage allowed before rephrasing or line breaking."}}},"provider":{"type":"string","enum":["kie","fal","openai"],"description":"Optional image translation service. The default service is used when omitted."},"model":{"type":"string","description":"Optional model identifier for the selected image service."},"perScreenshotInstructions":{"type":"object","description":"Optional screenshot-specific guidance keyed by CPP screenshot id or 1-based screenshot number like \"02\". Values can be a string or an object with headline/subtitle/instructions/headlineMaxChars/subtitleMaxChars.","additionalProperties":{"anyOf":[{"type":"string"},{"type":"object","properties":{"headline":{"type":"string"},"subtitle":{"type":"string"},"instructions":{"type":"string"},"headlineMaxChars":{"type":"number"},"subtitleMaxChars":{"type":"number"}}}]}}},"required":["projectId","pageId","sourceLocale","targetLocales"]},"annotations":{"title":"Translate Custom Page Screenshots","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"check_screenshot_translation_job","category":"screenshots","requiredScope":"screenshots","risk":"read","approval":"none","cost":"none","readOnly":true,"openWorld":true,"untrustedData":true,"destructive":false,"title":"Get Screenshot Translation Job Status","description":"Returns the status and results of a screenshot translation job by job ID, including any continuation job. It does not start or cancel work.","inputSchema":{"type":"object","properties":{"jobId":{"type":"string","description":"The screenshot translation job ID"}},"required":["jobId"]},"annotations":{"title":"Get Screenshot Translation Job Status","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"get_screenshots","category":"screenshots","requiredScope":"read","risk":"read","approval":"none","cost":"none","readOnly":true,"openWorld":true,"untrustedData":true,"destructive":false,"title":"Get Screenshots","description":"Returns a project's saved screenshot sets with image URLs, headlines and translated locales, and displays them to the user in an image gallery. Image contents are not described in the result. It does not create, edit or publish images.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"displayType":{"type":"string","description":"Optional: specific display type to get (e.g. \"APP_IPHONE_69\"). If omitted, returns all display types."},"locale":{"type":"string","description":"Optional: get translated screenshots for this locale. If omitted, returns primary screenshots."},"includeTranslatedLocales":{"type":"boolean","description":"If true, also lists which locales have translated versions available (default: false)"}},"required":["projectId"]},"annotations":{"title":"Get Screenshots","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"upload_screenshot_asset","category":"screenshots","requiredScope":"screenshots","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Upload Screenshot Asset","description":"Stores a raw app screenshot or style reference image in App Listing Agent and returns its URL for later screenshot work. The stored URL is publicly accessible. It does not generate artwork or publish to a store.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"filename":{"type":"string","description":"Filename to use in storage, e.g. \"sl-snore-event-list.png\"."},"category":{"type":"string","enum":["raw","reference","temp"],"description":"Storage category. Use raw for simulator captures, reference for existing style screenshots, temp for short-lived helper assets. Defaults to raw."},"sourceUrl":{"type":"string","description":"Public URL to fetch and upload. Provide exactly one of sourceUrl, dataUrl, or imageDataBase64."},"dataUrl":{"type":"string","description":"Data URL in the form data:image/png;base64,... Provide exactly one of sourceUrl, dataUrl, or imageDataBase64."},"imageDataBase64":{"type":"string","description":"Raw base64 image bytes. Provide contentType when using this field. Provide exactly one of sourceUrl, dataUrl, or imageDataBase64."},"contentType":{"type":"string","description":"Content type for imageDataBase64 inputs, defaults to image/png."}},"required":["projectId","filename"]},"annotations":{"title":"Upload Screenshot Asset","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"edit_screenshot","category":"screenshots","requiredScope":"screenshots","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Edit Screenshot","description":"Uses AI to change one saved screenshot as described (for example text, layout, colours, background or device frame), optionally guided by reference images, and replaces that screenshot in the project. It does not upload to a store. Uses plan allowance.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"displayType":{"type":"string","description":"Display type (e.g. \"APP_IPHONE_69\")"},"screenshotId":{"type":"string","description":"The screenshot ID within the set"},"locale":{"type":"string","description":"Optional: locale of a translated screenshot to edit. If omitted, edits the primary screenshot."},"prompt":{"type":"string","description":"What to change — describe the edit in detail (e.g. \"Fix the text overflow on the headline\", \"Make the background gradient darker\", \"Center the device mockup\")"},"referenceImageUrls":{"type":"array","items":{"type":"string"},"maxItems":4,"description":"Optional: reference image URLs for the AI to use as context (e.g. the base language screenshot, a style reference, etc.)"}},"required":["projectId","displayType","screenshotId","prompt"]},"annotations":{"title":"Edit Screenshot","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"import_screenshots","category":"screenshots","requiredScope":"screenshots","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Import Screenshots","description":"Saves finished marketing screenshots as a project screenshot set for one device size. Image URLs are downloaded and stored; previously stored images are also accepted. It does not upload to a store.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"deviceSize":{"type":"string","enum":["6.9","6.5","6.3","6.1","5.5","ipad-13","ipad-12.9","ipad-11","watch-ultra-3","watch-ultra","watch-10","watch-7","watch-4","watch-3","play-phone","play-tablet","play-feature-graphic"],"description":"Target device size. iOS: 6.9 = iPhone 16 Pro Max (required), ipad-13 = iPad Pro M4. Apple Watch: watch-10 = 416×496 Series 10/11, watch-7 = 396×484, watch-4 = 368×448. Android: play-phone = 1080×1920, play-tablet = 1920×1200, play-feature-graphic = 1024×500 landscape banner."},"screenshots":{"type":"array","items":{"type":"object","properties":{"imageUrl":{"type":"string","description":"URL of the finished marketing screenshot image"},"headline":{"type":"string","description":"Marketing headline text for this screenshot (can be empty)"}},"required":["imageUrl"]},"minItems":1,"maxItems":10,"description":"Array of screenshots to import, in display order"}},"required":["projectId","deviceSize","screenshots"]},"annotations":{"title":"Import Screenshots","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"generate_feature_graphic","category":"screenshots","requiredScope":"screenshots","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Generate Feature Graphic","description":"Uses AI to create a 1024×500 Google Play feature graphic for an Android project from a headline and app details, and saves it to the project. It does not upload to Google Play. Uses plan allowance.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID of an Android project"},"headline":{"type":"string","description":"Main marketing headline/tagline for the banner (short, punchy, max ~50 chars)"},"rawImageUrl":{"type":"string","description":"Optional: URL of a raw app screenshot to incorporate as a visual element in the banner. If omitted, generates a standalone branded graphic."},"locale":{"type":"string","description":"Target locale (default: project primary locale)"},"appName":{"type":"string","description":"App name for branding (auto-detected from project if omitted)"},"appDescription":{"type":"string","description":"Short app description for context (auto-detected from project if omitted)"},"styleSource":{"type":"object","description":"Style source: { type: \"category\", category: \"...\" } or { type: \"reference\", referenceImageUrl: \"...\" } or { type: \"custom\", style: { gradientColors: { primary, secondary }, fontStyle, styleDescription, decorativeElements? } }","properties":{"type":{"type":"string","enum":["category","reference","custom"]},"category":{"type":"string","description":"App category (for category style)"},"referenceImageUrl":{"type":"string","description":"Reference image URL (for reference style)"},"style":{"type":"object","description":"Custom style config (for custom style)","properties":{"gradientColors":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"}},"required":["primary","secondary"]},"fontStyle":{"type":"string"},"styleDescription":{"type":"string"},"decorativeElements":{"type":"array","items":{"type":"string"}}},"required":["gradientColors","fontStyle","styleDescription"]}},"required":["type"]}},"required":["projectId","headline","styleSource"]},"annotations":{"title":"Generate Feature Graphic","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"pull_play_store_graphics","category":"screenshots","requiredScope":"screenshots","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":true,"untrustedData":true,"destructive":false,"title":"Import Google Play Graphics","description":"Copies an Android project's existing phone screenshots, tablet screenshots and feature graphic from Google Play into App Listing Agent. It does not change the Google Play listing.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The Android project ID"},"displayTypes":{"type":"array","items":{"type":"string","enum":["PLAY_PHONE","PLAY_TABLET","PLAY_FEATURE_GRAPHIC"]},"description":"Which image types to pull. Defaults to all types if not specified."},"locales":{"type":"array","items":{"type":"string"},"description":"Optional: specific locales to pull. Defaults to all locales with images."}},"required":["projectId"]},"annotations":{"title":"Import Google Play Graphics","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"suggest_headlines","category":"screenshots","requiredScope":"screenshots","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Suggest Headlines","description":"Uses AI to suggest marketing headline text for an existing screenshot based on the app's listing. It does not create or change an image. Uses plan allowance.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"screenshotUrl":{"type":"string","description":"URL of the screenshot to analyze"},"appMetadata":{"type":"object","properties":{"title":{"type":"string"},"subtitle":{"type":"string"},"description":{"type":"string"},"keywords":{"type":"string"}},"required":["title"],"description":"App metadata for context"},"appCategory":{"type":"string","enum":["kids","productivity","fitness","social","finance","utility","entertainment","education","lifestyle","health"],"description":"Optional app category"},"numberOfSuggestions":{"type":"number","minimum":1,"maximum":5,"default":3}},"required":["projectId","screenshotUrl","appMetadata"]},"annotations":{"title":"Suggest Headlines","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"list_locales","category":"utilities","requiredScope":"read","risk":"read","approval":"none","cost":"none","readOnly":true,"openWorld":false,"untrustedData":false,"destructive":false,"title":"List Locales","description":"Lists the locale codes supported by the App Store or Google Play.","inputSchema":{"type":"object","properties":{"store":{"type":"string","enum":["appstore","playstore"],"description":"Which store to list locales for"}},"required":["store"]},"annotations":{"title":"List Locales","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"validate_config","category":"utilities","requiredScope":"read","risk":"read","approval":"none","cost":"none","readOnly":true,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Check Project Configuration","description":"Checks whether a project has the store identifiers, credentials and base listing fields needed for store operations, and lists anything missing. It does not change the project.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID to validate"}},"required":["projectId"]},"annotations":{"title":"Check Project Configuration","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"generate_icon","category":"icons","requiredScope":"screenshots","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Generate Icon","description":"Uses AI to create an app icon from a description, the app's listing, a reference image or its current App Store icon, and saves iOS and Android sizes to the project. It does not upload to a store. Uses plan allowance.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"source":{"type":"object","oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"prompt"},"prompt":{"type":"string","description":"Direct prompt for icon generation (10-500 chars)"}},"required":["type","prompt"]},{"type":"object","properties":{"type":{"type":"string","const":"metadata"},"appMetadata":{"type":"object","properties":{"title":{"type":"string"},"category":{"type":"string","enum":["kids","productivity","fitness","social","finance","utility","entertainment","education","lifestyle","health"]},"subtitle":{"type":"string"},"description":{"type":"string"}},"required":["title"]}},"required":["type","appMetadata"]},{"type":"object","properties":{"type":{"type":"string","const":"reference"},"referenceImageUrl":{"type":"string"},"prompt":{"type":"string"}},"required":["type","referenceImageUrl"]},{"type":"object","properties":{"type":{"type":"string","const":"appstore"},"appId":{"type":"string","description":"Numeric App Store app ID"}},"required":["type","appId"]}],"description":"Icon source - prompt, app metadata, reference image, or App Store app ID"},"style":{"type":"string","enum":["flat","3d","minimalist","gradient","cute","mascot","glassmorphism","neon","duotone","clay","watercolor","sketch","pixel","isometric","metallic","geometric","line","retro"],"description":"Icon style (flat, 3d, minimalist, cute, gradient)"},"colors":{"type":"object","properties":{"primary":{"type":"string","description":"Primary hex color (e.g., #FF5733)"},"secondary":{"type":"string","description":"Secondary hex color"}}},"background":{"type":"string","enum":["solid","gradient"],"description":"Background style"}},"required":["projectId","source"]},"annotations":{"title":"Generate Icon","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"generate_icon_variations","category":"icons","requiredScope":"screenshots","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Generate Icon Variations","description":"Uses AI to create four style variations (flat, 3D, minimalist, gradient) of an app icon concept and saves them to the project. It does not upload to a store. Uses plan allowance.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"prompt":{"type":"string","description":"Prompt describing the icon concept (10-500 chars)"},"colors":{"type":"object","properties":{"primary":{"type":"string","description":"Primary hex color"},"secondary":{"type":"string","description":"Secondary hex color"}}}},"required":["projectId","prompt"]},"annotations":{"title":"Generate Icon Variations","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"fetch_appstore_icon","category":"icons","requiredScope":"write","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":true,"untrustedData":true,"destructive":false,"title":"Import App Store Icon","description":"Copies an app's current icon from its public App Store page and returns iOS (1024×1024) and Android (512×512) versions. It does not create new artwork.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"appId":{"type":"string","description":"Numeric App Store app ID"}},"required":["projectId","appId"]},"annotations":{"title":"Import App Store Icon","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"resize_icon","category":"icons","requiredScope":"screenshots","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Resize Icon","description":"Creates iOS (1024×1024) and Android (512×512) versions of an existing icon image and returns their URLs. It does not create new artwork.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"imageUrl":{"type":"string","description":"URL of the icon image to resize"}},"required":["projectId","imageUrl"]},"annotations":{"title":"Resize Icon","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"update_legal_document","category":"legal","requiredScope":"publish","risk":"publish","approval":"always","cost":"none","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":true,"title":"Update Legal Document","description":"Publishes or replaces the app's hosted privacy policy or terms of service at a public URL. This is a public change, not a draft: it requires publish permission and the account owner's approval of the exact text in App Listing Agent. It does not update App Store Connect.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"type":{"type":"string","enum":["privacy_policy","terms_of_service"],"description":"Type of legal document"},"content":{"type":"string","description":"Markdown content of the legal document"}},"required":["projectId","type","content"]},"annotations":{"title":"Update Legal Document","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"read_legal_documents","category":"legal","requiredScope":"read","risk":"read","approval":"none","cost":"none","readOnly":true,"openWorld":true,"untrustedData":true,"destructive":false,"title":"Read Legal Documents","description":"Returns the project's privacy policy and terms of service, whether each is published, and their public URLs.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"}},"required":["projectId"]},"annotations":{"title":"Read Legal Documents","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"push_legal_to_appstore","category":"legal","requiredScope":"publish","risk":"publish","approval":"always","cost":"store-operation","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":true,"title":"Set App Store Privacy Policy Url","description":"Sets the App Store Connect privacy policy URL, for every localization, to the app's already published hosted privacy policy. Requires a linked App Store app, store credentials, publish permission and the account owner's approval. Terms of service are not supported.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"type":{"type":"string","enum":["privacy_policy"],"description":"Which legal document to push. Only privacy_policy is supported.","default":"privacy_policy"}},"required":["projectId"]},"annotations":{"title":"Set App Store Privacy Policy Url","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"list_custom_product_pages","category":"custom-pages","requiredScope":"read","risk":"read","approval":"none","cost":"none","readOnly":true,"openWorld":true,"untrustedData":true,"destructive":false,"title":"List Custom Product Pages","description":"Lists a project's iOS Custom Product Pages saved in App Listing Agent, with their locales and screenshots.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"}},"required":["projectId"]},"annotations":{"title":"List Custom Product Pages","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"create_custom_product_page","category":"custom-pages","requiredScope":"write","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Create Custom Product Page","description":"Creates a draft iOS Custom Product Page in App Listing Agent. It is not created in App Store Connect until the pages are synced.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"name":{"type":"string","description":"Reference name for the custom product page (max 64 chars)"},"localizations":{"type":"array","description":"Optional initial localizations","items":{"type":"object","properties":{"locale":{"type":"string","description":"Locale code (e.g., en-US)"},"promotionalText":{"type":"string","description":"Promotional text (max 170 chars)"}},"required":["locale"]}}},"required":["projectId","name"]},"annotations":{"title":"Create Custom Product Page","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"update_custom_product_page","category":"custom-pages","requiredScope":"write","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Update Custom Product Page","description":"Renames a draft iOS Custom Product Page in App Listing Agent.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"pageId":{"type":"string","description":"The custom product page ID"},"name":{"type":"string","description":"New reference name (max 64 chars)"}},"required":["projectId","pageId"]},"annotations":{"title":"Update Custom Product Page","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"update_cpp_localization","category":"custom-pages","requiredScope":"write","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Update Custom Product Page Localization","description":"Creates or updates the promotional text for one locale of a draft iOS Custom Product Page in App Listing Agent.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"pageId":{"type":"string","description":"The custom product page ID"},"locale":{"type":"string","description":"Locale code (e.g., en-US)"},"promotionalText":{"type":"string","description":"Promotional text (max 170 chars)"}},"required":["projectId","pageId","locale"]},"annotations":{"title":"Update Custom Product Page Localization","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"sync_custom_product_pages","category":"custom-pages","requiredScope":"publish","risk":"publish","approval":"always","cost":"store-operation","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":true,"title":"Sync Custom Product Pages","description":"Transfers iOS Custom Product Pages between App Listing Agent and App Store Connect. direction=pull imports pages from App Store Connect. direction=push creates or updates pages, localizations and screenshots in App Store Connect; confirmed=false returns a preview, and a live push requires the account owner's approval. A screenshot push makes each page's screenshots match the local draft, removing ones that are not in it.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"direction":{"type":"string","enum":["pull","push"],"description":"Pull from or push to App Store Connect"},"pageIds":{"type":"array","items":{"type":"string"},"description":"Optional custom product page IDs to push"},"locales":{"type":"array","items":{"type":"string"},"description":"Optional locale codes to push for each page (useful for chunking large localized CPP screenshot pushes)"},"pushAll":{"type":"boolean","description":"Push all pending local CPP changes (default behavior when no pageIds are provided)"},"force":{"type":"boolean","description":"Push all CPP pages even when marked synced"},"confirmed":{"type":"boolean","description":"Required for push direction to mutate ASC. Set false to preview."}},"required":["projectId","direction"]},"annotations":{"title":"Sync Custom Product Pages","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"upload_cpp_screenshot","category":"custom-pages","requiredScope":"screenshots","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Add Custom Product Page Screenshot","description":"Adds an already stored image to one locale of a draft iOS Custom Product Page. It is not sent to App Store Connect until the pages are synced.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"pageId":{"type":"string","description":"The custom product page ID"},"locale":{"type":"string","description":"Locale code"},"displayType":{"type":"string","description":"Screenshot display type (e.g., APP_IPHONE_69)"},"imageUrl":{"type":"string","description":"Public URL of the uploaded image"},"imageKey":{"type":"string","description":"Optional App Listing Agent storage key"},"fileName":{"type":"string","description":"Original file name"},"fileSize":{"type":"number","description":"Optional file size in bytes"}},"required":["projectId","pageId","locale","displayType","imageUrl","fileName"]},"annotations":{"title":"Add Custom Product Page Screenshot","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"list_custom_store_listings","category":"custom-pages","requiredScope":"read","risk":"read","approval":"none","cost":"none","readOnly":true,"openWorld":true,"untrustedData":true,"destructive":false,"title":"List Custom Store Listings","description":"Lists a project's Android Custom Store Listings saved in App Listing Agent, with their targeting, locales and assets.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"}},"required":["projectId"]},"annotations":{"title":"List Custom Store Listings","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"create_custom_store_listing","category":"custom-pages","requiredScope":"write","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Create Custom Store Listing","description":"Creates a draft Android Custom Store Listing in App Listing Agent. It is not created in Google Play until the listings are synced.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"name":{"type":"string","description":"Internal name for the listing"},"targetingType":{"type":"string","enum":["COUNTRY","PRE_REGISTRATION","INSTALL_STATE"],"description":"Targeting type","default":"COUNTRY"},"targetingCountries":{"type":"array","items":{"type":"string"},"description":"Country codes for COUNTRY targeting"},"localizations":{"type":"array","description":"Optional initial localizations","items":{"type":"object","properties":{"locale":{"type":"string","description":"Locale code (e.g., en-US)"},"title":{"type":"string","description":"Title (max 30 chars)"},"shortDescription":{"type":"string","description":"Short description (max 80 chars)"},"fullDescription":{"type":"string","description":"Full description (max 4000 chars)"}},"required":["locale","title"]}}},"required":["projectId","name"]},"annotations":{"title":"Create Custom Store Listing","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"update_custom_store_listing","category":"custom-pages","requiredScope":"write","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Update Custom Store Listing","description":"Changes the name or country targeting of a draft Android Custom Store Listing in App Listing Agent.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"listingId":{"type":"string","description":"The custom store listing ID"},"name":{"type":"string","description":"New internal name"},"targetingType":{"type":"string","enum":["COUNTRY","PRE_REGISTRATION","INSTALL_STATE"],"description":"Targeting type"},"targetingCountries":{"type":"array","items":{"type":"string"},"description":"Country codes"}},"required":["projectId","listingId"]},"annotations":{"title":"Update Custom Store Listing","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"update_csl_localization","category":"custom-pages","requiredScope":"write","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Update Custom Store Listing Localization","description":"Updates the title, short description or full description for one locale of a draft Android Custom Store Listing in App Listing Agent.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"listingId":{"type":"string","description":"The custom store listing ID"},"locale":{"type":"string","description":"Locale code"},"title":{"type":"string","description":"Title (max 30 chars)"},"shortDescription":{"type":"string","description":"Short description (max 80 chars)"},"fullDescription":{"type":"string","description":"Full description (max 4000 chars)"}},"required":["projectId","listingId","locale"]},"annotations":{"title":"Update Custom Store Listing Localization","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"sync_custom_store_listings","category":"custom-pages","requiredScope":"publish","risk":"publish","approval":"always","cost":"store-operation","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":true,"title":"Sync Custom Store Listings","description":"Transfers Android Custom Store Listings between App Listing Agent and Google Play. direction=pull imports listings from Google Play. direction=push with confirmed=true sends local changes to Google Play and requires the account owner's approval.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"direction":{"type":"string","enum":["pull","push"],"description":"Pull from or push to Play Store"},"confirmed":{"type":"boolean","description":"Required for push direction. Set to true to confirm push."}},"required":["projectId","direction"]},"annotations":{"title":"Sync Custom Store Listings","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"upload_csl_screenshot","category":"custom-pages","requiredScope":"screenshots","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Add Custom Store Listing Screenshot","description":"Adds an already stored screenshot to one locale of a draft Android Custom Store Listing. It is not sent to Google Play until the listings are synced.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"listingId":{"type":"string","description":"The custom store listing ID"},"locale":{"type":"string","description":"Locale code"},"imageType":{"type":"string","enum":["phone","7inch","10inch"],"description":"Screenshot type"},"imageUrl":{"type":"string","description":"Public URL of the uploaded image"},"imageKey":{"type":"string","description":"App Listing Agent storage key"},"fileName":{"type":"string","description":"Original file name"},"fileSize":{"type":"number","description":"File size in bytes"}},"required":["projectId","listingId","locale","imageType","imageUrl","imageKey","fileName","fileSize"]},"annotations":{"title":"Add Custom Store Listing Screenshot","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"upload_csl_icon","category":"custom-pages","requiredScope":"screenshots","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Set Custom Store Listing Icon","description":"Sets an already stored icon on one locale of a draft Android Custom Store Listing. It is not sent to Google Play until the listings are synced.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"listingId":{"type":"string","description":"The custom store listing ID"},"locale":{"type":"string","description":"Locale code"},"imageUrl":{"type":"string","description":"Public URL of the uploaded icon"},"imageKey":{"type":"string","description":"App Listing Agent storage key"}},"required":["projectId","listingId","locale","imageUrl","imageKey"]},"annotations":{"title":"Set Custom Store Listing Icon","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"upload_csl_feature_graphic","category":"custom-pages","requiredScope":"screenshots","risk":"write","approval":"policy","cost":"none","readOnly":false,"openWorld":false,"untrustedData":false,"destructive":false,"title":"Set Custom Store Listing Feature Graphic","description":"Sets an already stored feature graphic on one locale of a draft Android Custom Store Listing. It is not sent to Google Play until the listings are synced.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"listingId":{"type":"string","description":"The custom store listing ID"},"locale":{"type":"string","description":"Locale code"},"imageUrl":{"type":"string","description":"Public URL of the uploaded feature graphic"},"imageKey":{"type":"string","description":"App Listing Agent storage key"}},"required":["projectId","listingId","locale","imageUrl","imageKey"]},"annotations":{"title":"Set Custom Store Listing Feature Graphic","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"generate_custom_page_content","category":"campaign-content","requiredScope":"write","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Write Custom Page Text","description":"Uses AI to write promotional text for an iOS Custom Product Page, or title and descriptions for an Android Custom Store Listing, and returns it. It does not create images or publish to a store. Uses plan allowance.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"pageId":{"type":"string","description":"The custom page or listing ID"},"locale":{"type":"string","description":"Target locale for content generation"},"targetAudience":{"type":"string","description":"Description of the target audience (e.g., \"fitness beginners\", \"power users\")"},"keywords":{"type":"array","items":{"type":"string"},"description":"Keywords to emphasize in the generated content"},"tone":{"type":"string","enum":["professional","casual","urgent","playful","informative"],"description":"Writing tone"}},"required":["projectId","pageId","locale"]},"annotations":{"title":"Write Custom Page Text","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]},{"name":"translate_custom_page_content","category":"campaign-content","requiredScope":"translate","risk":"draft","approval":"policy","cost":"metered-ai","readOnly":false,"openWorld":true,"untrustedData":false,"destructive":false,"title":"Translate Custom Page Text","description":"Uses AI to translate a Custom Product Page or Custom Store Listing's text from a source locale into target locales. With apply=true it saves the translations to those draft locales. It does not publish to a store. Uses plan allowance.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"pageId":{"type":"string","description":"The custom page or listing ID"},"sourceLocale":{"type":"string","description":"Source locale to translate from"},"targetLocales":{"type":"array","items":{"type":"string"},"description":"Target locales to translate to"},"apply":{"type":"boolean","description":"If true, saves the translations to the draft locales. Default false."}},"required":["projectId","pageId","sourceLocale","targetLocales"]},"annotations":{"title":"Translate Custom Page Text","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["openid","email","offline_access"]}]}]}