{
  "ok": true,
  "resource": {
    "id": "RES_053458D23233",
    "resource_type": "mcp_server",
    "canonical_url": "https://registry.modelcontextprotocol.io/v0.1/servers/switch/versions/1.0.0",
    "name": "switch",
    "summary_en": "Generate, manage and explore your Switch AI image and video library, scoped to your account.",
    "summary_zh": "管理并生成 Switch AI 图像与视频库，支持账户内媒体资产的搜索、展示与组织。",
    "description_en": "This MCP server lets you generate, manage, and explore your Switch AI image and video library, scoped to your account. It provides tools to browse models, check spending, list and search assets, and display images inline. Access requires authentication with your Switch account, and all operations are limited to your own content.",
    "description_zh": "该 MCP 服务器允许你生成、管理和浏览 Switch AI 图像与视频库，范围限定在你的账户内。它提供浏览模型、检查消费、列出和搜索资产以及内联显示图像的工具。访问需要 Switch 账户认证，所有操作仅限于你自己的内容。",
    "provider_name": "ai.switchapp",
    "homepage_url": "https://www.switchapp.ai/",
    "endpoint_url": "https://mcp.switchapp.ai/mcp",
    "source_url": "https://registry.modelcontextprotocol.io/v0.1/servers/switch/versions/1.0.0",
    "icon_url": null,
    "cover_image_url": null,
    "capabilities": [
      "media.generate",
      "media.manage",
      "media.search",
      "media.display"
    ],
    "categories": [],
    "industries": [
      "media"
    ],
    "protocols": [
      "mcp"
    ],
    "auth": {
      "type": "unknown"
    },
    "pricing": {
      "model": "unknown"
    },
    "input_schema": {},
    "output_schema": {},
    "metadata": {
      "content_language": "en",
      "translation_status": "luna-reviewed",
      "official_registry": {
        "version": "1.0.0",
        "packages": [],
        "remotes": []
      },
      "review_gate": {
        "passed": true,
        "reasons": [],
        "policy_version": "review-gate-v1",
        "evaluated_at": "2026-09-04T04:18:36.165Z"
      },
      "catalog_profile": {
        "version": "catalog-profile-v1",
        "primary_category": null,
        "integrations": [],
        "use_cases": {
          "en": [
            "Generate AI images and videos using Switch models",
            "Manage and organize your Switch media library",
            "Search and display your generated images"
          ],
          "zh": [
            "使用 Switch 模型生成 AI 图像和视频",
            "管理和组织你的 Switch 媒体库",
            "搜索并展示你生成的图像"
          ]
        },
        "categories": [],
        "industries": [
          "media"
        ],
        "copy": {
          "source_language": "en",
          "summary_zh_state": "present",
          "description_zh_state": "present",
          "description_en_state": "present"
        }
      }
    },
    "latest_version": "1.0.0",
    "status": "listed",
    "health_status": "healthy",
    "source_kind": "imported",
    "source_agent": "registry.modelcontextprotocol.io",
    "trust": {
      "signal": "none",
      "reason": "No suspicious or malicious evidence found.",
      "signals": {
        "yellow": 0,
        "red": 0
      }
    },
    "review_summary": {
      "method_version": "capability-evidence-v3",
      "capability_definition": "strong",
      "contract_completeness": "strong",
      "access_friction": "medium",
      "operational_transparency": "partial",
      "evidence_strength": "protocol_inspected",
      "use_readiness": "guided_use",
      "reviewed_at": "2026-09-04T04:18:37.195Z"
    },
    "experience_count": 0,
    "verified_experience_count": 0,
    "usage_count": 0,
    "success_rate": null,
    "first_seen_at": "2026-09-03T13:54:36.390Z",
    "last_seen_at": "2026-09-04T04:18:36.422Z",
    "published_at": "2026-09-03T13:54:36.390Z",
    "created_at": "2026-09-03T13:54:36.390Z",
    "updated_at": "2026-09-04T04:18:37.195Z",
    "api_url": "https://aiworkshub.io/api/v1/resources/RES_053458D23233",
    "reviews_url": "https://aiworkshub.io/api/v1/resources/RES_053458D23233/reviews",
    "public_url": "https://aiworkshub.io/resources/RES_053458D23233",
    "distribution": {
      "canonical_identity": "https://registry.modelcontextprotocol.io/v0.1/servers/switch/versions/1.0.0",
      "syndicatable": true,
      "origins": [
        {
          "registry_url": "https://registry.modelcontextprotocol.io/",
          "upstream_resource_id": "switch@1.0.0",
          "upstream_record_url": "https://registry.modelcontextprotocol.io/v0.1/servers/switch/versions/1.0.0",
          "relation": "syndicated",
          "metadata": {
            "source": "official-mcp-registry"
          },
          "first_seen_at": "2026-09-03T13:54:36.390Z",
          "last_seen_at": "2026-09-04T04:18:36.422Z"
        }
      ]
    },
    "tools": [
      {
        "name": "apply_cinematic_anamorphic",
        "title_en": "Apply Cinematic Anamorphic",
        "title_zh": "应用电影变形宽银幕风格",
        "description_en": "ARRI Alexa anamorphic widescreen film look. Choose grade: warm golden, cool noir, or moody desaturated. Returns the styled prompt stack for your shot — pair it with generate_image.",
        "description_zh": "ARRI Alexa 变形宽银幕电影感。选择色调：暖金色、冷黑色或情绪化低饱和。返回适合你拍摄的风格化提示词堆栈——与 generate_image 配合使用。",
        "input_schema": {
          "type": "object",
          "properties": {
            "subject": {
              "type": "string",
              "description": "What you want to shoot. E.g. \"a woman walking through a hotel lobby\" or \"morning coffee on the balcony\"."
            },
            "style": {
              "type": "string",
              "enum": [
                "warm_golden",
                "cool_noir",
                "moody_desaturated"
              ],
              "description": "warm_golden = late-afternoon honey. cool_noir = neon-fill desaturated. moody_desaturated = soft window low-contrast."
            }
          },
          "required": [
            "style"
          ]
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "apply_graphic_editorial_portrait",
        "title_en": "Apply Graphic Editorial Portrait",
        "title_zh": "应用平面编辑肖像风格",
        "description_en": "Sharp graphic editorial portrait — premium fashion-magazine grade, hard graphic composition. Classic studio or golden-hour outdoor. Returns the styled prompt stack for your shot — pair it with generate_image.",
        "description_zh": "锐利的平面编辑肖像——高级时尚杂志级别，硬朗的平面构图。经典影棚或黄金时段户外。返回适合你拍摄的风格化提示词堆栈——与 generate_image 配合使用。",
        "input_schema": {
          "type": "object",
          "properties": {
            "subject": {
              "type": "string",
              "description": "What you want to shoot. E.g. \"a woman walking through a hotel lobby\" or \"morning coffee on the balcony\"."
            },
            "style": {
              "type": "string",
              "enum": [
                "classic",
                "golden_hour"
              ],
              "description": "classic = Hasselblad H6D studio. golden_hour = Canon R5 outdoor."
            }
          },
          "required": [
            "style"
          ]
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "apply_high_fashion_editorial",
        "title_en": "Apply High Fashion Editorial",
        "title_zh": "应用高级时尚编辑风格",
        "description_en": "High-fashion magazine cover/editorial energy. Choose a photographer mood: Mario Testino glossy, Steven Klein dark cinematic, Inez & Vinoodh hard-flash, Annie Leibovitz painterly, Tim Walker dreamlike, Peter Lindbergh black-and-white natural, or Cass Bird off-duty. Returns the styled prompt stack for your shot — pair it with generate_image.",
        "description_zh": "高级时尚杂志封面/编辑风格。选择摄影师情绪：Mario Testino 光泽、Steven Klein 暗黑电影感、Inez & Vinoodh 硬闪光、Annie Leibovitz 绘画感、Tim Walker 梦幻、Peter Lindbergh 黑白自然或 Cass Bird 下班风格。返回适合你拍摄的风格化提示词堆栈——与 generate_image 配合使用。",
        "input_schema": {
          "type": "object",
          "properties": {
            "subject": {
              "type": "string",
              "description": "What you want to shoot. E.g. \"a woman walking through a hotel lobby\" or \"morning coffee on the balcony\"."
            },
            "style": {
              "type": "string",
              "enum": [
                "testino_glossy",
                "klein_dark_cinematic",
                "inez_vinoodh_hard_flash",
                "leibovitz_painterly",
                "walker_dreamlike",
                "lindbergh_bw_natural",
                "cass_bird_off_duty"
              ],
              "description": "Photographer attribution drives the lighting + camera + grade stack."
            }
          },
          "required": [
            "style"
          ]
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "apply_iphone_realism",
        "title_en": "Apply Iphone Realism",
        "title_zh": "应用 iPhone 写实风格",
        "description_en": "Phone-shot amateur look — looks like a real person snapped it on their phone. Casual, candid, pore-level real, no professional gloss. Three flavors: digital phone, 35mm film point-and-shoot, or off-duty intimate. Returns the styled prompt stack for your shot — pair it with generate_image.",
        "description_zh": "手机拍摄的业余风格——看起来像真人用手机随手拍的。随意、自然、毛孔级真实，没有专业光泽。三种风格：数码手机、35mm 胶片傻瓜机或下班后的亲密感。返回适合你拍摄的风格化提示词堆栈——与 generate_image 配合使用。",
        "input_schema": {
          "type": "object",
          "properties": {
            "subject": {
              "type": "string",
              "description": "What you want to shoot. E.g. \"a woman walking through a hotel lobby\" or \"morning coffee on the balcony\"."
            },
            "style": {
              "type": "string",
              "enum": [
                "digital_phone",
                "film_pointshoot",
                "off_duty_intimate"
              ],
              "description": "digital_phone = Sony A7IV + 50mm f/1.4 GM phone-style realism. film_pointshoot = Contax T2 35mm Portra 400. off_duty_intimate = Cass Bird natural-window editorial."
            }
          },
          "required": [
            "style"
          ]
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "apply_magic_hour_portrait",
        "title_en": "Apply Magic Hour Portrait",
        "title_zh": "应用黄金时刻肖像风格",
        "description_en": "Golden-hour rim-light editorial portrait. Choose camera: Canon R5 + 85mm f/1.2 or Hasselblad H6D + 80mm. Returns the styled prompt stack for your shot — pair it with generate_image.",
        "description_zh": "黄金时刻轮廓光编辑肖像。选择相机：Canon R5 + 85mm f/1.2 或 Hasselblad H6D + 80mm。返回适合你拍摄的风格化提示词堆栈——与 generate_image 配合使用。",
        "input_schema": {
          "type": "object",
          "properties": {
            "subject": {
              "type": "string",
              "description": "What you want to shoot. E.g. \"a woman walking through a hotel lobby\" or \"morning coffee on the balcony\"."
            },
            "style": {
              "type": "string",
              "enum": [
                "canon_85mm",
                "hasselblad_80mm"
              ],
              "description": "canon_85mm = Canon R5 portrait standard. hasselblad_80mm = medium-format luxury."
            }
          },
          "required": [
            "style"
          ]
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "apply_movie_scene",
        "title_en": "Apply Movie Scene",
        "title_zh": "应用电影场景",
        "description_en": "Put me in a movie — full cinematic film look matching specific film genres. Choose: neon-noir action thriller, 80s finance excess, comic-book superhero blockbuster, video-game key art, or generic action thriller. Returns the styled prompt stack for your shot — pair it with generate_image.",
        "description_zh": "把我放进电影里——匹配特定电影类型的完整电影感。选择：霓虹黑色动作惊悚、80 年代金融奢华、漫画超级英雄大片、电子游戏关键艺术或通用动作惊悚。返回适合你拍摄的风格化提示词堆栈——与 generate_image 配合使用。",
        "input_schema": {
          "type": "object",
          "properties": {
            "subject": {
              "type": "string",
              "description": "What you want to shoot. E.g. \"a woman walking through a hotel lobby\" or \"morning coffee on the balcony\"."
            },
            "style": {
              "type": "string",
              "enum": [
                "neon_noir_action",
                "glamour_finance_excess",
                "superhero_blockbuster",
                "video_game_character",
                "generic_action_thriller"
              ],
              "description": "neon_noir_action = wet streets + neon + anamorphic. glamour_finance_excess = 1980s Wall Street mahogany / gold. superhero_blockbuster = comic-book key art. video_game_character = Unreal-Engine character render. generic_action_thriller = ARRI cinematic."
            }
          },
          "required": [
            "style"
          ]
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "apply_product",
        "title_en": "Apply Product",
        "title_zh": "应用产品摄影风格",
        "description_en": "Product photography. Choose: clean studio hero shot, real-world lifestyle, extreme macro detail, or top-down flat lay. Returns the styled prompt stack for your shot — pair it with generate_image.",
        "description_zh": "产品摄影。选择：干净影棚主视觉、真实生活方式、极端微距细节或俯拍平铺。返回适合你拍摄的风格化提示词堆栈——与 generate_image 配合使用。",
        "input_schema": {
          "type": "object",
          "properties": {
            "subject": {
              "type": "string",
              "description": "What you want to shoot. E.g. \"a woman walking through a hotel lobby\" or \"morning coffee on the balcony\"."
            },
            "style": {
              "type": "string",
              "enum": [
                "clean_studio",
                "lifestyle",
                "macro_detail",
                "flat_lay"
              ],
              "description": "clean_studio = seamless backdrop hero. lifestyle = product in use. macro_detail = extreme close-up texture. flat_lay = top-down catalog."
            }
          },
          "required": [
            "style"
          ]
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "apply_travel",
        "title_en": "Apply Travel",
        "title_zh": "应用旅行风格",
        "description_en": "Luxury travel + hotel editorial. Real architecture is preserved exactly (no inventing buildings). Choose subject: hotel hero, rural property, scenic view, drone aerial, lifestyle moment, or interior. If you attach a reference image of a real property, the architecture lock kicks in automatically. Returns the styled prompt stack for your shot — pair it with generate_image.",
        "description_zh": "奢华旅行+酒店编辑风格。真实建筑会被精确保留（不虚构建筑）。选择主题：酒店主视觉、乡村房产、风景、无人机航拍、生活方式瞬间或室内。如果你附加真实房产的参考图像，建筑锁定会自动生效。返回适合你拍摄的风格化提示词堆栈——与 generate_image 配合使用。",
        "input_schema": {
          "type": "object",
          "properties": {
            "subject": {
              "type": "string",
              "description": "What you want to shoot. E.g. \"a woman walking through a hotel lobby\" or \"morning coffee on the balcony\"."
            },
            "style": {
              "type": "string",
              "enum": [
                "hotel_hero",
                "rural_property",
                "scenic_view",
                "drone_aerial",
                "lifestyle",
                "interior"
              ],
              "description": "hotel_hero = property is the star. rural_property = country estate. scenic_view = pure landscape. drone_aerial = top-down or 45° from above. lifestyle = model + destination. interior = inside the property."
            }
          },
          "required": [
            "style"
          ]
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "apply_wellness",
        "title_en": "Apply Wellness",
        "title_zh": "应用健康风格",
        "description_en": "Wellness / yoga / fitness / lifestyle campaign — warm amber tropical, tropical paradise cinematic, or high-key cyan beach. Returns the styled prompt stack for your shot — pair it with generate_image.",
        "description_zh": "健康/瑜伽/健身/生活方式活动——温暖琥珀热带、热带天堂电影感或高调青色海滩。返回适合你拍摄的风格化提示词堆栈——与 generate_image 配合使用。",
        "input_schema": {
          "type": "object",
          "properties": {
            "subject": {
              "type": "string",
              "description": "What you want to shoot. E.g. \"a woman walking through a hotel lobby\" or \"morning coffee on the balcony\"."
            },
            "style": {
              "type": "string",
              "enum": [
                "warm_amber_tropical",
                "hanalei_cinematic",
                "high_key_cyan_beach"
              ],
              "description": "warm_amber_tropical = warm honey grade with golden haze. hanalei_cinematic = soft golden mist + infinity pool reflection. high_key_cyan_beach = bright daylit cyan ocean."
            }
          },
          "required": [
            "style"
          ]
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "check_balance",
        "title_en": "Check Balance",
        "title_zh": "检查余额",
        "description_en": "Check your daily Switch spending — what you have spent today, your daily limit, and what is remaining. Optionally pass an `estimatedCost` (USD) to also get whether you can afford it.",
        "description_zh": "检查你每日的 Switch 消费情况——今天已花费、每日限额以及剩余额度。可选传入 `estimatedCost`（美元）以了解你是否能负担该费用。",
        "input_schema": {
          "type": "object",
          "properties": {
            "estimatedCost": {
              "type": "number",
              "description": "Optional dollar amount to test against your daily limit."
            }
          }
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "check_job_status",
        "title_en": "Check Job Status",
        "title_zh": "检查任务状态",
        "description_en": "Polling-friendly status check for one of your tasks. Returns a slim shape with `status`, `progressPct`, and `eta` so you can poll without refetching the full payload.",
        "description_zh": "对某个任务进行适合轮询的状态检查。返回包含 `status`、`progressPct` 和 `eta` 的简洁结构，以便你无需重新获取完整数据即可轮询。",
        "input_schema": {
          "type": "object",
          "properties": {
            "taskId": {
              "type": "string",
              "description": "Task id to check."
            }
          },
          "required": [
            "taskId"
          ]
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "explore_models",
        "title_en": "Explore Models",
        "title_zh": "浏览模型",
        "description_en": "Browse the image-generation models available to your Switch account. Returns model id, display name, brand, and credits-per-image so you can pick one before calling generate_image.",
        "description_zh": "浏览你的 Switch 账户可用的图像生成模型。返回模型 ID、显示名称、品牌和每张图像的积分，以便你在调用 generate_image 之前选择模型。",
        "input_schema": {
          "type": "object",
          "properties": {}
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "get_my_active_references",
        "title_en": "Get Active References",
        "title_zh": "获取活动引用",
        "description_en": "Read the user's staged references in Switch Studio. Returns TWO groups: (1) the image-generation reference strip (typed face/body/outfit/scenery/product slots) under `refs`, and (2) the VIDEO-tab references the user staged in the Omni/Image video tabs (the @Image1/@Image2 strip) under `videoReferences`, with usable signed URLs. Call this before generate_image or generate_video whenever the user says \"use my refs\" or refers to images they staged in Studio (including \"the images in my video tab\"). To make a video from the video-tab refs, pass videoReferences.imageUrls into generate_video reference_image_urls (and videoUrls into reference_video_urls) in reference-to-video / omni mode. Refs marked alive:false are dead (stored file gone) and are already excluded from the usable url lists. NOTE: a photo the user just attached in THIS chat is in neither group — for that, call upload_media and use its returned url/asset id directly.",
        "description_zh": "读取用户在 Switch Studio 中暂存的引用。返回两组：(1) 图像生成引用条（类型化的面部/身体/服装/场景/产品槽）在 `refs` 下；(2) 用户在 Omni/Image 视频标签中暂存的视频标签引用（@Image1/@Image2 条）在 `videoReferences` 下，包含可用的签名 URL。每当用户说“使用我的引用”或提到他们在 Studio 中暂存的图像（包括“我的视频标签中的图像”）时，在 generate_image 或 generate_video 之前调用此工具。要从视频标签引用制作视频，请在引用到视频/omni 模式下将 videoReferences.imageUrls 传递给 generate_video 的 reference_image_urls（并将 videoUrls 传递给 reference_video_urls）。标记为 alive:false 的引用已失效（存储文件已消失），已从可用 URL 列表中排除。注意：用户刚刚在此聊天中附加的照片不属于任何一组——对于这种情况，请调用 upload_media 并直接使用其返回的 URL/资产 ID。",
        "input_schema": {
          "type": "object",
          "properties": {}
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "list_generations",
        "title_en": "List Generations",
        "title_zh": "列出生成任务",
        "description_en": "List your recent and active generation tasks. Returns counts per status (pending / running / completed / failed) plus an array of your tasks with id, status, prompts, model, ref counts, scheduledAt, finishedAt.",
        "description_zh": "列出你最近和正在进行的生成任务。返回各状态（待处理/运行中/已完成/失败）的计数，以及包含 id、状态、提示词、模型、引用次数、计划时间和完成时间的任务数组。",
        "input_schema": {
          "type": "object",
          "properties": {
            "status": {
              "description": "\"all\" for everything, or array like [\"pending\",\"running\"]. Default: active + recent."
            },
            "limit": {
              "type": "integer",
              "description": "Default 10. Max 50."
            }
          }
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "safe_to_retry",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "list_my_assets",
        "title_en": "List Assets",
        "title_zh": "列出资产",
        "description_en": "Return asset METADATA only (id, truncated prompt, model, created date), newest first. This does NOT display images and must NOT be used to show pictures — if the user says \"show me / display my last image(s)\", call show_media instead (it renders them; pass count=N for several). Use list_my_assets only when you need ids/metadata for another tool (e.g. move_asset) or a plain text list.",
        "description_zh": "仅返回资产元数据（id、截断的提示词、模型、创建日期），按最新优先。此工具不显示图像，不得用于展示图片——如果用户说“显示/展示我最后的图像”，请调用 show_media（它会渲染图像；如需多张，传入 count=N）。仅当你需要 ID/元数据用于其他工具（如 move_asset）或纯文本列表时，才使用 list_my_assets。",
        "input_schema": {
          "type": "object",
          "properties": {
            "count": {
              "type": "integer",
              "description": "Default 20. Max 50."
            }
          }
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "safe_to_retry",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "list_my_folders",
        "title_en": "List Folders",
        "title_zh": "列出文件夹",
        "description_en": "List the folders in your Switch library (id, name, parent). Use this to find an existing folder before move_asset or create_folder.",
        "description_zh": "列出你的 Switch 库中的文件夹（id、名称、父级）。在 move_asset 或 create_folder 之前使用此工具查找现有文件夹。",
        "input_schema": {
          "type": "object",
          "properties": {}
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "search_my_library",
        "title_en": "Search Library",
        "title_zh": "搜索库",
        "description_en": "Search your library by prompt substring (metadata only — id, prompt, date). Optional folderId scopes to one folder. Only your own assets are returned. This does NOT display images; to show/display results to the user, pass their ids to show_media.",
        "description_zh": "按提示词子串搜索你的库（仅元数据——id、提示词、日期）。可选 folderId 限定到某个文件夹。仅返回你自己的资产。此工具不显示图像；要向用户展示结果，请将其 ID 传递给 show_media。",
        "input_schema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string"
            },
            "folderId": {
              "type": "string"
            },
            "limit": {
              "type": "integer",
              "description": "Default 20."
            }
          },
          "required": [
            "query"
          ]
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "safe_to_retry",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "show_generation",
        "title_en": "Show Generation",
        "title_zh": "显示生成详情",
        "description_en": "Get the full detail of one of your generations by task id — prompts, model, ref counts, saved/failed counts, ETA hint, asset ids.",
        "description_zh": "通过任务 ID 获取某个生成任务的完整详情——提示词、模型、引用次数、保存/失败计数、预计时间提示和资产 ID。",
        "input_schema": {
          "type": "object",
          "properties": {
            "taskId": {
              "type": "string",
              "description": "Task id from generate_image or list_generations."
            }
          },
          "required": [
            "taskId"
          ]
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "safe_to_retry",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "show_media",
        "title_en": "Show Media",
        "title_zh": "显示媒体",
        "description_en": "Display the user's images inline — one or many. Users speak plainly and will NOT know asset ids; never ask for one, resolve it yourself. For \"show me\" or \"show me my last image\" call with NO arguments (shows the most recent image). For \"show me my last 4 images / my last 10 pictures\" pass count=N (returns a clean grid, up to 12). For a specific known image pass assetId. Renders a branded SwitchApp media card with a Download action per result; do not just print URLs. (Videos are not shown here — use list_my_videos and return the newest finished video's view_url, which plays.)",
        "description_zh": "内联显示用户的图像——一张或多张。用户会直接表达，不会知道资产 ID；不要询问，自行解析。对于“显示”或“显示我最后一张图像”，调用时不带参数（显示最近的图像）。对于“显示我最后 4 张图像/最后 10 张图片”，传入 count=N（返回整洁的网格，最多 12 张）。对于特定的已知图像，传入 assetId。为每个结果渲染带品牌标识的 SwitchApp 媒体卡片，并提供下载操作；不要只打印 URL。（视频不在此显示——使用 list_my_videos 并返回最新完成视频的 view_url，该 URL 可播放。）",
        "input_schema": {
          "type": "object",
          "properties": {
            "assetId": {
              "type": "string",
              "description": "Optional. A specific image id (from list_my_assets, search_my_library, or show_generation). Omit to show the most recent image(s)."
            },
            "count": {
              "type": "integer",
              "description": "Optional. How many of the most recent images to show as a grid (default 1, max 12). Use when the user says \"my last N images/pictures\"."
            }
          }
        },
        "output_schema": {
          "type": "object",
          "additionalProperties": true,
          "properties": {
            "_widget": {
              "type": "object",
              "additionalProperties": true
            },
            "asset": {
              "type": "object",
              "additionalProperties": true
            },
            "images": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "suggest_speech_seconds",
        "title_en": "Suggest Speech Seconds",
        "title_zh": "建议语音秒数",
        "description_en": "How many seconds a video clip should be for a spoken line, so the words are never rushed or dragged. Give it the spoken text (or a word_count) and it returns a suggested duration for four delivery energies: slow and dramatic, natural, upbeat, and super charismatic talking-with-your-hands. Fewer seconds is a faster more excited delivery; more seconds is slower and more dramatic. Deterministic, free, no charge. Use it whenever a user asks how long to make a clip for their narration or dialogue, or which duration to pick for a given energy.",
        "description_zh": "一段口播台词对应的视频片段应为多少秒，以确保语速不仓促也不拖沓。提供口播文本（或 word_count），它会为四种表达能量返回建议时长：缓慢戏剧化、自然、欢快和超级有魅力的手舞足蹈式。秒数越少，表达越快越兴奋；秒数越多，表达越慢越戏剧化。确定性、免费、不收费。每当用户询问为旁白或对话制作多长的片段，或为给定能量选择哪个时长时，使用此工具。",
        "input_schema": {
          "type": "object",
          "properties": {
            "text": {
              "type": "string",
              "description": "The spoken words. The tool counts them for you."
            },
            "word_count": {
              "type": "integer",
              "description": "Use instead of text if you already know the number of spoken words."
            }
          }
        },
        "output_schema": {},
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "idempotent",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      }
    ],
    "review_profile": {
      "schema_version": "aiworkshub.resource-review/0.2",
      "method_version": "capability-evidence-v3",
      "review_state": {
        "identity": "verified",
        "source": "verified",
        "connectivity": "verified",
        "contract": "strong",
        "safe_use": "untested",
        "real_use": "unobserved"
      },
      "assessment": {
        "capability_definition": "strong",
        "contract_completeness": "strong",
        "access_friction": "medium",
        "operational_transparency": "partial",
        "evidence_strength": "protocol_inspected",
        "use_readiness": "guided_use"
      },
      "profile": {
        "capabilities": [
          {
            "id": "media.generate",
            "weight": 90,
            "confidence": 90,
            "evidence_ids": [
              "source-record",
              "protocol-tools"
            ]
          },
          {
            "id": "media.manage",
            "weight": 80,
            "confidence": 80,
            "evidence_ids": [
              "source-record",
              "protocol-tools"
            ]
          },
          {
            "id": "media.search",
            "weight": 70,
            "confidence": 80,
            "evidence_ids": [
              "source-record",
              "protocol-tools"
            ]
          },
          {
            "id": "media.display",
            "weight": 60,
            "confidence": 70,
            "evidence_ids": [
              "source-record",
              "protocol-tools"
            ]
          }
        ],
        "domains": [
          {
            "id": "media",
            "weight": 100,
            "confidence": 90,
            "evidence_ids": [
              "source-record",
              "protocol-tools"
            ]
          }
        ],
        "workflow_roles": [
          "generate",
          "retrieve",
          "analyze",
          "deliver"
        ]
      },
      "catalog_profile": {
        "version": "catalog-profile-v1",
        "primary_category": "content-creative",
        "integrations": [
          "Switch"
        ],
        "use_cases": {
          "en": [
            "Generate AI images and videos using Switch models",
            "Manage and organize your Switch media library",
            "Search and display your generated images"
          ],
          "zh": [
            "使用 Switch 模型生成 AI 图像和视频",
            "管理和组织你的 Switch 媒体库",
            "搜索并展示你生成的图像"
          ]
        }
      },
      "capability_units": [
        {
          "id": "tool:explore_models",
          "kind": "mcp_tool",
          "capability_id": "media.generate",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [],
          "produces": [
            "model list"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:check_balance",
          "kind": "mcp_tool",
          "capability_id": "media.manage",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "number"
          ],
          "produces": [
            "balance info"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:list_generations",
          "kind": "mcp_tool",
          "capability_id": "media.manage",
          "effect": "read",
          "open_world": false,
          "idempotency": "safe_to_retry",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string",
            "integer"
          ],
          "produces": [
            "generation list"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:show_generation",
          "kind": "mcp_tool",
          "capability_id": "media.manage",
          "effect": "read",
          "open_world": false,
          "idempotency": "safe_to_retry",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string"
          ],
          "produces": [
            "generation detail"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:check_job_status",
          "kind": "mcp_tool",
          "capability_id": "media.manage",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string"
          ],
          "produces": [
            "job status"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:show_media",
          "kind": "mcp_tool",
          "capability_id": "media.display",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed_envelope_dynamic_result",
          "accepts": [
            "string",
            "integer"
          ],
          "produces": [
            "image display"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:list_my_folders",
          "kind": "mcp_tool",
          "capability_id": "media.manage",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [],
          "produces": [
            "folder list"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:list_my_assets",
          "kind": "mcp_tool",
          "capability_id": "media.manage",
          "effect": "read",
          "open_world": false,
          "idempotency": "safe_to_retry",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "integer"
          ],
          "produces": [
            "asset metadata"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:search_my_library",
          "kind": "mcp_tool",
          "capability_id": "media.search",
          "effect": "read",
          "open_world": false,
          "idempotency": "safe_to_retry",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string",
            "integer"
          ],
          "produces": [
            "search results"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:get_my_active_references",
          "kind": "mcp_tool",
          "capability_id": "media.manage",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [],
          "produces": [
            "reference data"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:suggest_speech_seconds",
          "kind": "mcp_tool",
          "capability_id": "media.generate",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string",
            "integer"
          ],
          "produces": [
            "duration suggestion"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:apply_iphone_realism",
          "kind": "mcp_tool",
          "capability_id": "media.generate",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string"
          ],
          "produces": [
            "prompt stack"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:apply_movie_scene",
          "kind": "mcp_tool",
          "capability_id": "media.generate",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string"
          ],
          "produces": [
            "prompt stack"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:apply_high_fashion_editorial",
          "kind": "mcp_tool",
          "capability_id": "media.generate",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string"
          ],
          "produces": [
            "prompt stack"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:apply_graphic_editorial_portrait",
          "kind": "mcp_tool",
          "capability_id": "media.generate",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string"
          ],
          "produces": [
            "prompt stack"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:apply_travel",
          "kind": "mcp_tool",
          "capability_id": "media.generate",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string"
          ],
          "produces": [
            "prompt stack"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:apply_wellness",
          "kind": "mcp_tool",
          "capability_id": "media.generate",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string"
          ],
          "produces": [
            "prompt stack"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:apply_cinematic_anamorphic",
          "kind": "mcp_tool",
          "capability_id": "media.generate",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string"
          ],
          "produces": [
            "prompt stack"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:apply_magic_hour_portrait",
          "kind": "mcp_tool",
          "capability_id": "media.generate",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string"
          ],
          "produces": [
            "prompt stack"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:apply_product",
          "kind": "mcp_tool",
          "capability_id": "media.generate",
          "effect": "read",
          "open_world": false,
          "idempotency": "idempotent",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "string"
          ],
          "produces": [
            "prompt stack"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        }
      ],
      "access": {},
      "operational_flags": [],
      "trust": {
        "signal": "none",
        "evidence_ids": [],
        "reason": "No suspicious or malicious evidence found."
      },
      "fit": {
        "good_for": [
          "Generating AI images and videos with Switch models",
          "Managing and organizing a personal media library",
          "Searching and displaying generated images"
        ],
        "not_for": [
          "Generating media outside the user's Switch account",
          "Accessing or managing other users' content"
        ]
      },
      "evidence": [
        {
          "id": "source-record",
          "type": "registry_record",
          "source": "https://registry.modelcontextprotocol.io/v0.1/servers/switch/versions/1.0.0",
          "observation": "MCP source record for switch; version 1.0.0.",
          "observed_at": null,
          "payload": {}
        },
        {
          "id": "protocol-tools",
          "type": "protocol_observation",
          "source": "https://mcp.switchapp.ai/mcp#tools/list",
          "observation": "57 tools were returned by MCP discovery; 20 were retained for review.",
          "observed_at": "2026-09-04T03:51:17.601Z",
          "payload": {}
        }
      ],
      "unknowns": [
        "Authentication method not specified",
        "Pricing model not specified",
        "Exact list of image and video generation models not provided in evidence",
        "Whether video generation tools are available is not confirmed by the tool list"
      ],
      "id": "REV_EE8F43E02ADA",
      "resource_id": "RES_053458D23233",
      "evaluator_type": "platform_ai",
      "provider": "deepseek",
      "model": "deepseek-v4-flash",
      "review_scope": "protocol-inspected-mcp",
      "created_at": "2026-09-04T04:18:37.195Z"
    }
  }
}