{"version":"2026-05-01","service":"SlideMaster","mcp_endpoint":"https://mcp.slidemaster.tw/mcp","status_url":"https://slidemaster.tw/mcp/status.json","public_api_base_url":"https://api.slidemaster.tw/api/v1/public","agent_intent_modes":[{"id":"structured_output","name":"Structured output","use_when":"Use when the user explicitly asks for a course outline, lecture notes, learning activities, questions, narration scripts, slide structure, JSON-like planning output, or editable PPTX/PDF exports.","primary_tools":["generate_outline","youtube_to_outline","extract_lecture_notes","design_course_experience","deepen_activity","generate_questions","batch_generate_scripts","export_pptx","export_pdf"],"guardrails":["Do not render slides, synthesize TTS, or generate video unless the user explicitly asks for media generation.","If the user only needs a plan, outline, notes, questions, or editable structure, return structured content first and avoid unnecessary credit-consuming operations.","Ask for or infer audience, language, slide count, and teaching goal when needed."]},{"id":"visual_rendering","name":"Visual rendering","use_when":"Use when the user explicitly asks for rendered slide images, visual redesign, visual style matching, AI-generated slides, or a narrated video.","primary_tools":["analyze_style_image","render_slides","topic_to_video","check_status","export_project"],"guardrails":["Estimate cost before rendering large projects or running the full media pipeline.","Poll check_status after asynchronous rendering, TTS, or video operations."]},{"id":"intelligent_layout","name":"Intelligent layout","use_when":"Use when the user explicitly asks for template-based layout, brand-safe editable PPTX, safe areas, or structured content placed into a layout system.","primary_tools":["template_auto_layout","generate_outline","create_project","export_pptx"],"availability":"roadmap","guardrails":["Do not present roadmap layout tools as callable public MCP tools until they are available.","Prefer structured_output tools when the user only needs outline or content structure."]}],"security_model":{"auth_required":true,"destructive_actions_require_confirmation":true,"expensive_operations_should_estimate_cost_first":true,"async_operations_require_polling":true,"structured_output_must_not_trigger_media_without_explicit_request":true},"tools":[{"name":"generate_outline","display_name":"Generate outline","category":"content_creation","availability":"public_mcp","description":"Generate a structured slide outline from a topic.","when_to_use":"Use before rendering slides when the user has a topic but no slide structure.","cost":"Free or low-cost planning operation; call estimate_cost before rendering media.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /outlines/generate","next_steps":["create_project","render_slides"]},{"name":"create_project","display_name":"Create project","category":"content_creation","availability":"public_mcp","description":"Create a new empty SlideMaster project.","when_to_use":"Use when the user wants a new slide, course, or video project.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /projects","next_steps":["render_slides","upload_init"]},{"name":"upload_init","display_name":"Initialize upload","category":"file_ingestion","availability":"public_mcp","description":"Create a project and get a signed upload URL for PPTX/PDF files.","when_to_use":"Use when a user wants to transform an existing deck or document.","cost":"No media generation cost; parsing may be asynchronous.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /upload/init","next_steps":["upload_complete","check_status"]},{"name":"upload_complete","display_name":"Complete upload","category":"file_ingestion","availability":"public_mcp","description":"Confirm a completed file upload and start server-side processing.","when_to_use":"Use after the file has been uploaded to the signed URL.","cost":"No media generation cost.","async":true,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /upload/complete","polling":"Poll check_status until parsing is complete.","next_steps":["check_status","list_slides"]},{"name":"analyze_style_image","display_name":"Analyze style image","category":"content_creation","availability":"public_mcp","description":"Analyze a style reference image and return a reusable visual style guide.","when_to_use":"Use when the user wants new slides to match a visual reference.","cost":"May consume credits depending on account policy.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /style/analyze","next_steps":["render_slides"]},{"name":"render_slides","display_name":"Render slides","category":"content_creation","availability":"public_mcp","description":"Generate AI slide images from slide titles and visual descriptions.","when_to_use":"Use when a project has an outline or slide specifications ready for visual generation.","cost":"Credits per slide vary by image size; call estimate_cost first for larger projects.","async":true,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /slides/render","polling":"Poll check_status every 5-10 seconds.","next_steps":["check_status","batch_generate_scripts","export_pptx","export_pdf"]},{"name":"generate_script","display_name":"Generate script","category":"audio_video","availability":"public_mcp","description":"Generate narration for a single slide.","when_to_use":"Use for targeted regeneration or when only one slide needs narration.","cost":"No TTS cost until audio is generated.","async":true,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /scripts/generate","polling":"Poll check_status for script generation progress.","next_steps":["generate_tts"]},{"name":"batch_generate_scripts","display_name":"Batch generate scripts","category":"audio_video","availability":"public_mcp","description":"Generate narration scripts for all slides in a project.","when_to_use":"Use before TTS when the project needs full narration.","cost":"No TTS cost until audio is generated.","async":true,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /scripts/batch-generate","polling":"Poll check_status until scripts are ready.","next_steps":["generate_tts"]},{"name":"generate_tts","display_name":"Generate TTS","category":"audio_video","availability":"public_mcp","description":"Generate text-to-speech audio for one slide or an entire project.","when_to_use":"Use after scripts exist and a voice has been selected.","cost":"Credits per slide; call estimate_cost for larger projects.","async":true,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /tts/generate","polling":"Poll check_status until audio generation is complete.","next_steps":["generate_video"]},{"name":"generate_video","display_name":"Generate video","category":"audio_video","availability":"public_mcp","description":"Compose rendered slides and audio into an MP4 video.","when_to_use":"Use after slide images and audio are ready.","cost":"Project-level video generation credits.","async":true,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /video/generate","polling":"Poll check_status until video_completed.","next_steps":["export_project","export_evercam"]},{"name":"topic_to_video","display_name":"Topic to video","category":"content_creation","availability":"public_mcp","description":"One-click pipeline from topic to slides, scripts, TTS, and optional video.","when_to_use":"Use when the user wants a complete project from a topic with minimal manual control.","cost":"Can consume render, TTS, and video credits; use dry_run or estimate_cost first.","async":true,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /pipelines/topic-to-video","polling":"Poll check_status until the requested assets are complete.","next_steps":["check_status","export_project"]},{"name":"list_projects","display_name":"List projects","category":"project_management","availability":"public_mcp","description":"List recent projects for the authenticated user.","when_to_use":"Use when the user refers to an existing project without an id.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"GET /projects"},{"name":"get_project_context","display_name":"Get project context","category":"project_management","availability":"public_mcp","description":"Get project metadata, slides, scripts, audio status, and recommended next action.","when_to_use":"Use before continuing or modifying an existing project.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"GET /projects/{id}"},{"name":"update_project","display_name":"Update project","category":"project_management","availability":"public_mcp","description":"Update project title, description, language, or TTS settings.","when_to_use":"Use when the user changes project metadata or voice settings.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"PATCH /projects/{id}"},{"name":"delete_project","display_name":"Delete project","category":"project_management","availability":"public_mcp","description":"Permanently delete a project and its assets.","when_to_use":"Use only after explicit user confirmation.","cost":"No media generation cost.","async":false,"destructive":true,"requires_confirmation":true,"rest_endpoint":"DELETE /projects/{id}"},{"name":"list_slides","display_name":"List slides","category":"project_management","availability":"public_mcp","description":"List slides in a project with titles, scripts, and render/audio status.","when_to_use":"Use to inspect a project before editing slides or narration.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"GET /projects/{id}/slides"},{"name":"update_slide","display_name":"Update slide","category":"project_management","availability":"public_mcp","description":"Update a slide title or narration script.","when_to_use":"Use when the user wants to edit slide text or narration.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"PATCH /slides/{id}"},{"name":"delete_slide","display_name":"Delete slide","category":"project_management","availability":"public_mcp","description":"Delete a single slide from a project.","when_to_use":"Use only after explicit user confirmation.","cost":"No media generation cost.","async":false,"destructive":true,"requires_confirmation":true,"rest_endpoint":"DELETE /slides/{id}"},{"name":"check_status","display_name":"Check status","category":"project_management","availability":"public_mcp","description":"Poll processing progress after upload, render, script, TTS, or video generation.","when_to_use":"Use after any async operation.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"GET /projects/{id}/status"},{"name":"export_project","display_name":"Export project","category":"export_and_delivery","availability":"public_mcp","description":"Get download URLs for generated project assets.","when_to_use":"Use after assets are ready.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"GET /projects/{id}/export"},{"name":"export_pdf","display_name":"Export PDF","category":"export_and_delivery","availability":"public_mcp","description":"Export rendered slides as a PDF.","when_to_use":"Use when the user needs a shareable document.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"GET /projects/{id}/export/pdf"},{"name":"export_pptx","display_name":"Export PPTX","category":"export_and_delivery","availability":"public_mcp","description":"Export rendered slides as PowerPoint.","when_to_use":"Use when the user needs a PowerPoint file.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"GET /projects/{id}/export/pptx"},{"name":"export_evercam","display_name":"Export EverCam","category":"export_and_delivery","availability":"public_mcp","description":"Create an offline HTML5 playable package for LMS delivery.","when_to_use":"Use when the user needs an EverCam package.","cost":"No media generation cost.","async":true,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /projects/{id}/export/evercam","polling":"Poll evercam_status until completed.","next_steps":["evercam_status"]},{"name":"evercam_status","display_name":"EverCam status","category":"export_and_delivery","availability":"public_mcp","description":"Check EverCam export status.","when_to_use":"Use after triggering EverCam export.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"GET /projects/{id}/export/evercam/status"},{"name":"estimate_cost","display_name":"Estimate cost","category":"account_and_preferences","availability":"public_mcp","description":"Estimate credit cost before running expensive operations.","when_to_use":"Use before render, TTS, video, YouTube analysis, or full pipeline tasks.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /credits/estimate"},{"name":"get_credit_balance","display_name":"Get credit balance","category":"account_and_preferences","availability":"public_mcp","description":"Check available credits and cost reference.","when_to_use":"Use before large projects or after a 402 error.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"GET /credits/balance"},{"name":"get_credit_transactions","display_name":"Get credit transactions","category":"account_and_preferences","availability":"public_mcp","description":"List recent credit usage history.","when_to_use":"Use when the user asks what consumed credits.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"GET /credits/transactions"},{"name":"list_voices","display_name":"List voices","category":"account_and_preferences","availability":"public_mcp","description":"List available TTS voices across supported providers.","when_to_use":"Use before generating TTS when the user wants to choose a voice.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"GET /voices"},{"name":"get_preferences","display_name":"Get preferences","category":"account_and_preferences","availability":"public_mcp","description":"Get saved user preferences such as style, language, and voice.","when_to_use":"Use at the start of an agent session.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"GET /preferences"},{"name":"save_preferences","display_name":"Save preferences","category":"account_and_preferences","availability":"public_mcp","description":"Save user preferences for future sessions.","when_to_use":"Use when the user explicitly states a durable preference.","cost":"No media generation cost.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /preferences"},{"name":"youtube_to_outline","display_name":"YouTube to outline","category":"instructional_design","availability":"public_mcp","description":"Convert a YouTube video into a structured course outline.","when_to_use":"Use when the user provides a YouTube URL and wants a teaching outline.","cost":"Credits based on duration with a minimum charge; estimate when possible.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /youtube/to-outline","next_steps":["create_project","render_slides"]},{"name":"design_course_experience","display_name":"Design course experience","category":"instructional_design","availability":"public_api","description":"Generate a learning experience blueprint with activities and teaching flow.","when_to_use":"Use before making slides when the user needs lesson design, activities, or facilitation flow.","cost":"See API response and account policy.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /course-experience/generate"},{"name":"deepen_activity","display_name":"Deepen activity","category":"instructional_design","availability":"public_api","description":"Deepen a specific learning activity with facilitation details.","when_to_use":"Use when the user wants a more actionable class activity.","cost":"See API response and account policy.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /activity/deepen"},{"name":"generate_questions","display_name":"Generate questions","category":"instructional_design","availability":"public_api","description":"Generate teaching questions for a learning moment.","when_to_use":"Use when the user needs discussion prompts, checks for understanding, or exercises.","cost":"See API response and account policy.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /questions/generate"},{"name":"extract_lecture_notes","display_name":"Extract lecture notes","category":"instructional_design","availability":"public_api","description":"Extract structured teaching notes from provided source material.","when_to_use":"Use when the user wants to preserve lecture flow or summarize teaching content.","cost":"See API response and account policy.","async":false,"destructive":false,"requires_confirmation":false,"rest_endpoint":"POST /extract-lecture-notes"},{"name":"template_auto_layout","display_name":"Template auto layout","category":"advanced_layout","availability":"roadmap","description":"Bind a company template and auto-fill an outline into editable PPTX slides.","when_to_use":"Use when the user needs brand-consistent editable slides from an existing template.","cost":"To be returned by estimate_cost when available.","async":true,"destructive":false,"requires_confirmation":false,"polling":"Poll task status when available."},{"name":"instructor_style_profile","display_name":"Instructor style profile","category":"advanced_layout","availability":"agent_ui_only","description":"Analyze and apply the instructor style profile for personalized scripts.","when_to_use":"Use inside the conversational agent when the user has locked a style profile.","cost":"Depends on source processing and generation steps.","async":true,"destructive":false,"requires_confirmation":false,"polling":"Use agent UI status."}]}