[{"slug":"ZV-2026-1891","server_name":"connect.clueso.io","severity":"breaking","title":"connect.clueso.io: Enum value gemini-3-pro-image-preview removed from model on generate_media.","summary":"[breaking] Enum value gemini-3-pro-image-preview removed from model on generate_media. [breaking] Enum value gemini-3.1-flash-image-preview removed from model on generate_media. [risky] Enum value gemini-3-pro-image added to model on generate_media. [risky] Enum value gemini-3.1-flash-image added to model on generate_media. [risky] Enum value gemini-nano-banana-2.1 added to model on generate_media. [risky] Enum value gemini-3.1-flash-lite-image added to model on generate_media.","changes":[{"kind":"enum_value_removed","path":"inputSchema.properties.model","tool":"generate_media","before":"gemini-3-pro-image-preview","detail":"Enum value `gemini-3-pro-image-preview` removed from `model` on `generate_media`.","severity":"breaking"},{"kind":"enum_value_removed","path":"inputSchema.properties.model","tool":"generate_media","before":"gemini-3.1-flash-image-preview","detail":"Enum value `gemini-3.1-flash-image-preview` removed from `model` on `generate_media`.","severity":"breaking"},{"kind":"enum_value_added","path":"inputSchema.properties.model","tool":"generate_media","after":"gemini-3-pro-image","detail":"Enum value `gemini-3-pro-image` added to `model` on `generate_media`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.model","tool":"generate_media","after":"gemini-3.1-flash-image","detail":"Enum value `gemini-3.1-flash-image` added to `model` on `generate_media`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.model","tool":"generate_media","after":"gemini-nano-banana-2.1","detail":"Enum value `gemini-nano-banana-2.1` added to `model` on `generate_media`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.model","tool":"generate_media","after":"gemini-3.1-flash-lite-image","detail":"Enum value `gemini-3.1-flash-lite-image` added to `model` on `generate_media`.","severity":"risky"}],"published_at":"2026-10-06T17:59:16.843Z"},{"slug":"ZV-2026-1322","server_name":"connect.clueso.io","severity":"breaking","title":"connect.clueso.io: Field context was removed from add_article_media input; consumers still sending it may be rejected or silently ignored.","summary":"[breaking] Field context was removed from add_article_media input; consumers still sending it may be rejected or silently ignored. [breaking] Field llm_model was removed from add_article_media input; consumers still sending it may be rejected or silently ignored. [breaking] Field conversation_id was removed from add_article_media input; consumers still sending it may be rejected or silently ignored. [breaking] Field context was removed from add_audio input; consumers still sending it may be rejected or silently ignored. [breaking] Field llm_model was removed from add_audio input; consumers still sending it may be rejected or silently ignored. [breaking] Field conversation_id was removed from add_audio input; consumers still sending it may be rejected or silently ignored. [breaking] Field context was removed from add_clips input; consumers still sending it may be rejected or silently ignored. [breaking] Field llm_model was removed from add_clips input; consumers still sending it may be rejected or silently ignored. [breaking] Field conversation_id was removed from add_clips input; consumers still sending it may be rejected or silently ignored. [breaking] Field context was removed from add_comment input; consumers still sending it may be rejected or silently ignored. [breaking] Field llm_model was removed from add_comment input; consumers still sending it may be rejected or silently ignored. [breaking] Field conversation_id was removed from add_comment input; consumers still sending it may be rejected or silently ignored. [breaking] Field context was removed from add_elements input; consumers still sending it may be rejected or silently ignored. [breaking] Field llm_model was removed from add_elements input; consumers still sending it may be rejected or silently ignored. [breaking] Field conversation_id was removed from add_elements input; consumers still sending it may be rejected or silently ignored. [breaking] Field context was removed from add_sync_point input; co","changes":[{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"add_article_media","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `add_article_media` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"add_article_media","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `add_article_media` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"add_article_media","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `add_article_media` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"add_audio","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `add_audio` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"add_audio","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `add_audio` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"add_audio","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `add_audio` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"add_clips","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `add_clips` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"add_clips","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `add_clips` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"add_clips","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `add_clips` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"add_comment","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `add_comment` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"add_comment","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `add_comment` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"add_comment","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `add_comment` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"add_elements","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `add_elements` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"add_elements","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `add_elements` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"add_elements","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `add_elements` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"add_sync_point","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `add_sync_point` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"add_sync_point","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `add_sync_point` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"add_sync_point","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `add_sync_point` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"analyze_audio","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `analyze_audio` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"analyze_audio","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `analyze_audio` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"analyze_audio","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `analyze_audio` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"auto_sync","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `auto_sync` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"auto_sync","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `auto_sync` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"auto_sync","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `auto_sync` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"check_uploads","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `check_uploads` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"check_uploads","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `check_uploads` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"check_uploads","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `check_uploads` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"create_clueprint","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `create_clueprint` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"create_clueprint","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `create_clueprint` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"create_clueprint","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `create_clueprint` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"create_project","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `create_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"create_project","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `create_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"create_project","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `create_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"duplicate_clip","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `duplicate_clip` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"duplicate_clip","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `duplicate_clip` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"duplicate_clip","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `duplicate_clip` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"duplicate_project","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `duplicate_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"duplicate_project","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `duplicate_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"duplicate_project","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `duplicate_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"estimate_duration","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `estimate_duration` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"estimate_duration","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `estimate_duration` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"estimate_duration","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `estimate_duration` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"export_project","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `export_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"export_project","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `export_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"export_project","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `export_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"find","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `find` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"find","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `find` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"find","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `find` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"generate_media","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `generate_media` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"generate_media","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `generate_media` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"generate_media","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `generate_media` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"get_article","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `get_article` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"get_article","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `get_article` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"get_article","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `get_article` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"get_clip","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `get_clip` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"get_clip","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `get_clip` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"get_clip","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `get_clip` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"get_clueprint","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `get_clueprint` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"get_clueprint","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `get_clueprint` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"get_clueprint","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `get_clueprint` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"get_comments","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `get_comments` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"get_comments","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `get_comments` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"get_comments","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `get_comments` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"get_design_guide","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `get_design_guide` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"get_design_guide","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `get_design_guide` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"get_design_guide","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `get_design_guide` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"get_element_schema","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `get_element_schema` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"get_element_schema","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `get_element_schema` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"get_element_schema","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `get_element_schema` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"get_project","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `get_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"get_project","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `get_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"get_project","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `get_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"get_script_job","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `get_script_job` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"get_script_job","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `get_script_job` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"get_script_job","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `get_script_job` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"record_screen","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `record_screen` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"record_screen","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `record_screen` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"record_screen","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `record_screen` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"remove_clip","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `remove_clip` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"remove_clip","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `remove_clip` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"remove_clip","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `remove_clip` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"remove_elements","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `remove_elements` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"remove_elements","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `remove_elements` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"remove_elements","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `remove_elements` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"remove_from_project","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `remove_from_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"remove_from_project","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `remove_from_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"remove_from_project","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `remove_from_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"reorder_elements","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `reorder_elements` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"reorder_elements","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `reorder_elements` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"reorder_elements","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `reorder_elements` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"run_script","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `run_script` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"run_script","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `run_script` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"run_script","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `run_script` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"set_voice","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `set_voice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"set_voice","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `set_voice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"set_voice","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `set_voice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"split_clip","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `split_clip` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"split_clip","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `split_clip` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"split_clip","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `split_clip` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"switch_workspace","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `switch_workspace` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"switch_workspace","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `switch_workspace` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"switch_workspace","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `switch_workspace` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"update_article","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `update_article` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"update_article","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `update_article` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"update_article","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `update_article` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"update_article_media","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `update_article_media` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"update_article_media","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `update_article_media` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"update_article_media","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `update_article_media` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"update_audio","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `update_audio` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"update_audio","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `update_audio` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"update_audio","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `update_audio` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"update_clips","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `update_clips` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"update_clips","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `update_clips` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"update_clips","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `update_clips` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"update_clueprint","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `update_clueprint` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"update_clueprint","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `update_clueprint` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"update_clueprint","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `update_clueprint` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"update_elements","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `update_elements` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"update_elements","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `update_elements` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"update_elements","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `update_elements` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"update_groups","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `update_groups` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"update_groups","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `update_groups` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"update_groups","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `update_groups` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"update_project","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `update_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"update_project","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `update_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"update_project","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `update_project` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"upload_file","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `upload_file` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"upload_file","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `upload_file` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"upload_file","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `upload_file` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.context","tool":"voiceover_batch","before":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"Field `context` was removed from `voiceover_batch` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.llm_model","tool":"voiceover_batch","before":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"Field `llm_model` was removed from `voiceover_batch` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.conversation_id","tool":"voiceover_batch","before":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Field `conversation_id` was removed from `voiceover_batch` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"}],"published_at":"2026-09-22T20:25:13.510Z"},{"slug":"ZV-2026-1320","server_name":"connect.clueso.io","severity":"breaking","title":"connect.clueso.io: New required field context on add_article_media; requests without it will fail.","summary":"[breaking] New required field context on add_article_media; requests without it will fail. [risky] Optional field conversation_id was added to add_article_media; may shift model behaviour. [breaking] New required field llm_model on add_article_media; requests without it will fail. [breaking] New required field context on add_audio; requests without it will fail. [risky] Optional field conversation_id was added to add_audio; may shift model behaviour. [breaking] New required field llm_model on add_audio; requests without it will fail. [breaking] New required field context on add_clips; requests without it will fail. [risky] Optional field conversation_id was added to add_clips; may shift model behaviour. [breaking] New required field llm_model on add_clips; requests without it will fail. [breaking] New required field context on add_comment; requests without it will fail. [risky] Optional field conversation_id was added to add_comment; may shift model behaviour. [breaking] New required field llm_model on add_comment; requests without it will fail. [breaking] New required field context on add_elements; requests without it will fail. [risky] Optional field conversation_id was added to add_elements; may shift model behaviour. [breaking] New required field llm_model on add_elements; requests without it will fail. [breaking] New required field context on add_sync_point; requests without it will fail. [risky] Optional field conversation_id was added to add_sync_point; may shift model behaviour. [breaking] New required field llm_model on add_sync_point; requests without it will fail. [breaking] New required field context on analyze_audio; requests without it will fail. [risky] Optional field conversation_id was added to analyze_audio; may shift model behaviour. [breaking] New required field llm_model on analyze_audio; requests without it will fail. [breaking] New required field context on auto_sync; requests without it will fail. [risky] Optional field conversation_id was ad","changes":[{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"add_article_media","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `add_article_media`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"add_article_media","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `add_article_media`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"add_article_media","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `add_article_media`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"add_audio","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `add_audio`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"add_audio","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `add_audio`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"add_audio","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `add_audio`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"add_clips","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `add_clips`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"add_clips","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `add_clips`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"add_clips","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `add_clips`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"add_comment","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `add_comment`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"add_comment","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `add_comment`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"add_comment","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `add_comment`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"add_elements","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `add_elements`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"add_elements","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `add_elements`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"add_elements","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `add_elements`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"add_sync_point","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `add_sync_point`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"add_sync_point","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `add_sync_point`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"add_sync_point","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `add_sync_point`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"analyze_audio","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `analyze_audio`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"analyze_audio","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `analyze_audio`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"analyze_audio","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `analyze_audio`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"auto_sync","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `auto_sync`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"auto_sync","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `auto_sync`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"auto_sync","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `auto_sync`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"check_uploads","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `check_uploads`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"check_uploads","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `check_uploads`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"check_uploads","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `check_uploads`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"create_clueprint","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `create_clueprint`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"create_clueprint","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `create_clueprint`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"create_clueprint","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `create_clueprint`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"create_project","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `create_project`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"create_project","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `create_project`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"create_project","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `create_project`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"duplicate_clip","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `duplicate_clip`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"duplicate_clip","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `duplicate_clip`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"duplicate_clip","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `duplicate_clip`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"duplicate_project","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `duplicate_project`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"duplicate_project","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `duplicate_project`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"duplicate_project","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `duplicate_project`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"estimate_duration","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `estimate_duration`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"estimate_duration","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `estimate_duration`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"estimate_duration","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `estimate_duration`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"export_project","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `export_project`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"export_project","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `export_project`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"export_project","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `export_project`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"find","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `find`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"find","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `find`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"find","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `find`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"generate_media","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `generate_media`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"generate_media","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `generate_media`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"generate_media","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `generate_media`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"get_article","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `get_article`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"get_article","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `get_article`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"get_article","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `get_article`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"get_clip","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `get_clip`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"get_clip","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `get_clip`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"get_clip","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `get_clip`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"get_clueprint","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `get_clueprint`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"get_clueprint","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `get_clueprint`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"get_clueprint","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `get_clueprint`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"get_comments","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `get_comments`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"get_comments","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `get_comments`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"get_comments","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `get_comments`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"get_design_guide","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `get_design_guide`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"get_design_guide","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `get_design_guide`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"get_design_guide","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `get_design_guide`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"get_element_schema","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `get_element_schema`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"get_element_schema","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `get_element_schema`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"get_element_schema","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `get_element_schema`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"get_project","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `get_project`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"get_project","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `get_project`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"get_project","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `get_project`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"get_script_job","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `get_script_job`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"get_script_job","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `get_script_job`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"get_script_job","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `get_script_job`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"record_screen","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `record_screen`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"record_screen","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `record_screen`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"record_screen","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `record_screen`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"remove_clip","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `remove_clip`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"remove_clip","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `remove_clip`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"remove_clip","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `remove_clip`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"remove_elements","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `remove_elements`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"remove_elements","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `remove_elements`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"remove_elements","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `remove_elements`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"remove_from_project","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `remove_from_project`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"remove_from_project","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `remove_from_project`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"remove_from_project","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `remove_from_project`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"reorder_elements","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `reorder_elements`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"reorder_elements","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `reorder_elements`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"reorder_elements","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `reorder_elements`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"run_script","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `run_script`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"run_script","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `run_script`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"run_script","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `run_script`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"set_voice","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `set_voice`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"set_voice","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `set_voice`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"set_voice","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `set_voice`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"split_clip","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `split_clip`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"split_clip","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `split_clip`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"split_clip","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `split_clip`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"switch_workspace","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `switch_workspace`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"switch_workspace","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `switch_workspace`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"switch_workspace","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `switch_workspace`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"update_article","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `update_article`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"update_article","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `update_article`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"update_article","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `update_article`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"update_article_media","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `update_article_media`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"update_article_media","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `update_article_media`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"update_article_media","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `update_article_media`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"update_audio","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `update_audio`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"update_audio","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `update_audio`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"update_audio","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `update_audio`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"update_clips","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `update_clips`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"update_clips","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `update_clips`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"update_clips","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `update_clips`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"update_clueprint","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `update_clueprint`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"update_clueprint","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `update_clueprint`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"update_clueprint","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `update_clueprint`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"update_elements","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `update_elements`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"update_elements","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `update_elements`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"update_elements","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `update_elements`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"update_groups","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `update_groups`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"update_groups","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `update_groups`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"update_groups","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `update_groups`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"update_project","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `update_project`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"update_project","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `update_project`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"update_project","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `update_project`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"upload_file","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `upload_file`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"upload_file","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `upload_file`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"upload_file","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `upload_file`; requests without it will fail.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.context","tool":"voiceover_batch","after":{"type":"string","description":"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""},"detail":"New required field `context` on `voiceover_batch`; requests without it will fail.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.conversation_id","tool":"voiceover_batch","after":{"type":"string","description":"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."},"detail":"Optional field `conversation_id` was added to `voiceover_batch`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.llm_model","tool":"voiceover_batch","after":{"type":"string","description":"The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess."},"detail":"New required field `llm_model` on `voiceover_batch`; requests without it will fail.","severity":"breaking"}],"published_at":"2026-09-22T17:18:16.992Z"},{"slug":"ZV-2026-1154","server_name":"connect.clueso.io","severity":"breaking","title":"connect.clueso.io: Type of fps on export_project changed number → unset.","summary":"[safe] Tool get_comments was added. [risky] Description of add_comment changed (48% word delta). [risky] Optional field parent_comment_id was added to add_comment; may shift model behaviour. [safe] Description of add_elements changed (14% word delta). [breaking] Type of fps on export_project changed number → unset. [breaking] Enum value 24 removed from fps on export_project. [breaking] Enum value 30 removed from fps on export_project. [breaking] Enum value 60 removed from fps on export_project. [safe] Description of find changed (11% word delta). [risky] Description of generate_media changed (47% word delta). [risky] Optional field animation_setting was added to generate_media; may shift model behaviour. [risky] Optional field background was added to generate_media; may shift model behaviour. [risky] Optional field model was added to generate_media; may shift model behaviour. [safe] Description of run_script changed (6% word delta). [risky] Description of switch_workspace changed (58% word delta).","changes":[{"kind":"tool_added","tool":"get_comments","detail":"Tool `get_comments` was added.","severity":"safe"},{"kind":"description_changed","tool":"add_comment","after":"Post a review comment on a project, attributed to \"Clueso AI\".\n\nUse this to leave feedback, suggestions, or notes — either at the project level (no clip_id) or pinned to a specific clip with an optional timestamp inside that clip.\n\nPass `parent_comment_id` to REPLY to an existing comment rather than open a new thread. Read what is already there with `get_comments` first: answering a reviewer in their own thread is what makes the note resolvable, where a fresh top-level comment just adds noise.","before":"Post a review comment on a project, attributed to \"Clueso AI\".\n\nUse this to leave feedback, suggestions, or notes — either at the project level (no clip_id) or pinned to a specific clip with an optional timestamp inside that clip.","detail":"Description of `add_comment` changed (48% word delta).","severity":"risky","descriptionDelta":0.4838709677419355},{"kind":"input_property_added","path":"inputSchema.properties.parent_comment_id","tool":"add_comment","after":{"type":"string","description":"Reply to this comment instead of starting a new thread. Take the id from get_comments. Replying is how you answer feedback you have acted on — the clip pin and timestamp come from the parent, so leave clip_id/clip_timestamp off."},"detail":"Optional field `parent_comment_id` was added to `add_comment`; may shift model behaviour.","severity":"risky"},{"kind":"description_changed","tool":"add_elements","after":"Add many elements across one or more clips in a single tool call. Replaces the per-element tool — always batch.\n\nSEND LESS. Most batches repeat themselves — the same clip_index, element_type, font_setting, alignment or gradientSetting on every item. Hoist those into `defaults` and send them once; each item then carries only what differs, and overrides any key it sets (type_data merges one level). On a 20-30 element batch this typically cuts the call by a quarter to a half. `returning` shapes the response the way `select` shapes a get_clip read.\n\n  defaults: { clip_index: 2, element_type: 'text', type_data: { font_setting: { font: 'Inter', weight: '600' }, alignment: 'center' } }\n  elements: [ { name: 'headline', x: 960, y: 400, type_data: { text: 'Hello', fontSize: 120 } }, ... ]\n\nUse after calling get_element_schema to confirm the type_data shape per element_type. Items within one call are applied in order; returns one result entry per input item so partial success is fine.\n\nReuse instead of rebuilding: an item may pass `component_id` INSTEAD of element_type/type_data to insert a saved component from this workspace exactly as stored — no generation, instant — returning every new element_id plus its parameter_schema; set its content afterwards with update_elements(type_data.parameter_values). Find them with find(type='element_components'). Use `base_component_id` (with element_type='animation' and a prompt) only when you want a NEW variant rather than that component.\n\nZ-order: list position IS z-index — later renders on top — and a new element goes on top by default. Pass `insert_at: 'back'` to put it behind what's already there, or `insert_at: {before: id}` / `{after: id}` to land next to a specific element — that also puts the new element in THAT node's group, which is the only way to place inside one. `reorder_elements` rewrites the whole order in one call, grouped clips included.\n\n`group` + `insert_at: {before|after}` together: what the reference is relative to decides what gets positioned. Point at a node INSIDE the group and the ELEMENT takes that slot among its new siblings. Point at one OUTSIDE it and the GROUP takes that slot, with the element inside — which is how you put a backdrop pattern of N elements at a chosen depth as one hideable unit: hoist both into `defaults` and the first item seats the group, the rest just join it. The one refusal left is naming a reference outside a group that already exists somewhere else, since moving an established group is not what adding one element to it should do; seat the group where you want it in the call that CREATES it, because there is no reposition afterwards. `front`/`back` with a `group` follow the same principle: they address the GROUP only while the element is alone in it — the call that creates it — and once the group has other members they address the ELEMENT within the group's interior, so they will not move an established group either.\n\nGrouping: pass `group: \"<name>\"` to keep a unit together (a card and its label, a stat and its caption) so the user can move or hide it as one thing. Items in one call sharing a name land in the same group, and a later call with that name adds to it. Grouping never changes coordinates. It does affect z-order: a group's members render contiguously at the group's slot, and a NEW group takes the slot of its first member, so grouping already-adjacent elements keeps their z-position while grouping scattered ones pulls them together at the lowest member's slot.\n\nConcurrency: within ONE call every element lands in a single save. Across calls the conflict domain is the CLIP's element list, not the individual element, so you can fan this tool out across parallel subagents targeting DIFFERENT clips. Two concurrent add_elements calls on the SAME clip are NOT safe: every add claims that clip's element list, so the later call is REJECTED ('changed since this edit was based on') and nothing it sent is written — batch all of a clip's elements into ONE call instead. A rejection is not last-write-wins: re-read and re-apply. Do NOT run it concurrently with a whole-clip or whole-project mutation on the same guide (update_clips on that clip, add_clips/remove_clip/split_clip/duplicate_clip, add_audio, update_project) — those rewrite a larger scope and would clobber the element.\n\nElement-type quirks (handled per-item):\n  • zoom      → x/y/width/height are ignored; use centerX/centerY in type_data\n  • image     → provide x/y/width/height (the clip is located by clip_index; the clip_id input is accepted but unused)\n  • animation → x/y/width/height default to the full canvas if omitted (the clip is located by clip_index)\nFor everything else, x/y/width/height are required.\n\nAnimation: pass a top-level `keyframes` array (sibling of x/y/type_data, NOT inside type_data) — entries are { timestamp, positionX?, positionY?, width?, height?, interpolation? } in canvas pixels. positionX/Y use the SAME alignment-aware origin as the element's x/y. Text caveat: width/height are not keyframable on text — animate its size with fontSize (letterSpacing/lineHeight/padding* are also keyframable).\n\nPosition origin: for TEXT `y` is the vertical CENTRE when centre-aligned and the TOP otherwise; every other type uses the top; `x` is the left edge, except TEXT where alignment picks it: left→left, center→centre, right→right.\n\nTo centre a label in a row, pill, chip, card or beside an icon: pass the container's centre line as y with y_anchor:'center'. The server centres the measured text in it, so it is one number and it holds for wrapped text. Add type_data.fit{max_height} whenever the text could wrap, so the box stays inside the space you gave it. y_anchor is a directive for computing the stored y, not a property that sticks — repeat it on any later call that moves the same label.","before":"Add many elements across one or more clips in a single tool call. Replaces the per-element tool — always batch.\n\nSEND LESS. Most batches repeat themselves — the same clip_index, element_type, font_setting, alignment or gradientSetting on every item. Hoist those into `defaults` and send them once; each item then carries only what differs, and overrides any key it sets (type_data merges one level). On a 20-30 element batch this typically cuts the call by a quarter to a half. `returning` shapes the response the way `select` shapes a get_clip read.\n\n  defaults: { clip_index: 2, element_type: 'text', type_data: { font_setting: { font: 'Inter', weight: '600' }, alignment: 'center' } }\n  elements: [ { name: 'headline', x: 960, y: 400, type_data: { text: 'Hello', fontSize: 120 } }, ... ]\n\nUse after calling get_element_schema to confirm the type_data shape per element_type. Items within one call are applied in order; returns one result entry per input item so partial success is fine.\n\nReuse instead of rebuilding: an item may pass `component_id` INSTEAD of element_type/type_data to insert a saved component from this workspace exactly as stored — no generation, instant — returning every new element_id plus its parameter_schema; set its content afterwards with update_elements(type_data.parameter_values). Find them with find(type='element_components'). Use `base_component_id` (with element_type='animation' and a prompt) only when you want a NEW variant rather than that component.\n\nZ-order: list position IS z-index — later renders on top — and a new element goes on top by default. Pass `insert_at: 'back'` to put it behind what's already there, or `insert_at: {before: id}` / `{after: id}` to land next to a specific element — that also puts the new element in THAT node's group, which is the only way to place inside one. `reorder_elements` rewrites the whole order in one call, grouped clips included.\n\nGrouping: pass `group: \"<name>\"` to keep a unit together (a card and its label, a stat and its caption) so the user can move or hide it as one thing. Items in one call sharing a name land in the same group, and a later call with that name adds to it. Grouping never changes coordinates. It does affect z-order: a group's members render contiguously at the group's slot, and a NEW group takes the slot of its first member, so grouping already-adjacent elements keeps their z-position while grouping scattered ones pulls them together at the lowest member's slot.\n\nConcurrency: within ONE call every element lands in a single save. Across calls the conflict domain is the CLIP's element list, not the individual element, so you can fan this tool out across parallel subagents targeting DIFFERENT clips. Two concurrent add_elements calls on the SAME clip are NOT safe: every add claims that clip's element list, so the later call is REJECTED ('changed since this edit was based on') and nothing it sent is written — batch all of a clip's elements into ONE call instead. A rejection is not last-write-wins: re-read and re-apply. Do NOT run it concurrently with a whole-clip or whole-project mutation on the same guide (update_clips on that clip, add_clips/remove_clip/split_clip/duplicate_clip, add_audio, update_project) — those rewrite a larger scope and would clobber the element.\n\nElement-type quirks (handled per-item):\n  • zoom      → x/y/width/height are ignored; use centerX/centerY in type_data\n  • image     → provide x/y/width/height (the clip is located by clip_index; the clip_id input is accepted but unused)\n  • animation → x/y/width/height default to the full canvas if omitted (the clip is located by clip_index)\nFor everything else, x/y/width/height are required.\n\nAnimation: pass a top-level `keyframes` array (sibling of x/y/type_data, NOT inside type_data) — entries are { timestamp, positionX?, positionY?, width?, height?, interpolation? } in canvas pixels. positionX/Y use the SAME alignment-aware origin as the element's x/y. Text caveat: width/height are not keyframable on text — animate its size with fontSize (letterSpacing/lineHeight/padding* are also keyframable).\n\nPosition origin: x/y is the top-left corner for every element type except text, where horizontal alignment moves it (center-aligned positions by its center point, right-aligned by its top-right). For text, set type_data.y_anchor to say what y means and alignment stops affecting it.\n\nTo centre a label in a row, pill, chip, card or beside an icon: pass the container's centre line as y with y_anchor:'center'. The server centres the measured text in it, so it is one number and it holds for wrapped text. Add type_data.fit{max_height} whenever the text could wrap, so the box stays inside the space you gave it. y_anchor is a directive for computing the stored y, not a property that sticks — repeat it on any later call that moves the same label.","detail":"Description of `add_elements` changed (14% word delta).","severity":"safe","descriptionDelta":0.13613861386138615},{"kind":"input_type_changed","path":"inputSchema.properties.fps","tool":"export_project","after":"unset","before":"number","detail":"Type of `fps` on `export_project` changed number → unset.","severity":"breaking"},{"kind":"enum_value_removed","path":"inputSchema.properties.fps","tool":"export_project","before":"24","detail":"Enum value `24` removed from `fps` on `export_project`.","severity":"breaking"},{"kind":"enum_value_removed","path":"inputSchema.properties.fps","tool":"export_project","before":"30","detail":"Enum value `30` removed from `fps` on `export_project`.","severity":"breaking"},{"kind":"enum_value_removed","path":"inputSchema.properties.fps","tool":"export_project","before":"60","detail":"Enum value `60` removed from `fps` on `export_project`.","severity":"breaking"},{"kind":"description_changed","tool":"find","after":"Find any resource in Clueso by type, optionally filtered by name or exact id. One tool for listing and searching across the workspace.\n\ntype:\n  • projects | folders | clueprints | workspaces\n  • backgrounds | voices | image_gen_style_packs | element_components\n(voices carry `gender`, `tags`, `accent`, `preview_url` and — where one has been written — a free-text `description` of tone and pace, which is the field actually worth choosing on. `tags` is a small closed vocabulary, so it groups voices rather than telling them apart. Choose deliberately: voiceover is the film's clock, and regenerating speech later rescales the clip and every element time and keyframe with it.)\n  • images | videos | music | sfx   — media; each result carries a `source` ('org' = your saved-media library, 'stock' = a stock/curated provider). Scope with `source`, pick the library with `provider` (see below). Stock results are a short described shortlist — pick the best fit and use its `src`. Stock video results also carry `safe_src` and a `video_files` tier list with one entry marked `recommended` — use `safe_src` (or the recommended tier) in add_elements; tiers above 1080p can exceed its ~200MB source cap and fail. For a Freesound music/sfx result, `src` is an OPAQUE handle (not a playable URL) — pass it straight to add_audio and the original is fetched + hosted by Clueso server-side; a `preview_url` is included only so you can tell what it sounds like.\n(image_gen_style_packs = generation style presets for generate_media kind='image' style_id; element_components = saved components (e.g. animations) from THIS WORKSPACE only — there is no community library for components (unlike clueprints); each reports param_keys. Insert one AS-IS with add_elements(component_id=...), or generate a variant from it with base_component_id.)\n\nFilters (all optional):\n  • query     — for stock media it's the search phrase (real semantic search for provider='clueso'; provider keyword search otherwise). For clueprints a query runs a relevance-ranked search across your workspace + the global community library (search_summary, relevance_reason, tags, is_community, fork_count). For everything else it's a case-insensitive name substring.\n  • provider  — which stock library to search (ONE call, no merging). Choose by strength:\n       images  → 'pexels' (default; realistic photography) or 'pixabay' (illustrations, vectors, icons, clip-art — set image_type)\n       videos  → 'pexels' (default; real-world footage) or 'pixabay' (motion graphics — set video_type='animation')\n       music   → 'clueso' (default; our curated, brand-safe library with the best descriptions/search — try this FIRST) or 'freesound' (niche/genre tracks)\n       sfx     → 'freesound' (default; vast sound-effect library) or 'clueso' (curated sfx)\n  • image_type — images + provider='pixabay': 'photo' | 'illustration' | 'vector'\n  • video_type — videos + provider='pixabay': 'film' | 'animation'\n  • id        — exact id; returns just that one record (any type)\n  • source    — media only: 'org' | 'stock' | 'all' (default = org + stock). Under 'all', stock is appended only when a query is given. sfx is stock only.\n  • folder_id — projects + saved media (images/videos/music): restrict to a folder\n  • engine / language     — voices only\n  • creator_id / mine_only — clueprints only\n  • orientation — stock images/videos: 'landscape' | 'portrait' | 'square'\n  • color       — stock images: a color name/hex, e.g. 'blue'\n  • size        — stock videos: 'large' | 'medium' | 'small'\n  • min_duration / max_duration — stock videos + freesound audio: length bounds in seconds\n  • page / limit          — paging for large sets (projects, components, clueprints — a clueprint list is sliced to the limit with no marker when more exist, so page through rather than assuming the first page is everything); stock media ignores these (fixed shortlist)\n\nReturns { type, count, items: [{ id, name, type, ... }] }. Feed the returned id straight into the consuming tool (set_voice, update_clips background, generate_media style_id, add_audio src, use_clueprint, etc.). Any `duration` on a returned item is in SECONDS — pass it straight to add_audio's source_duration.","before":"Find any resource in Clueso by type, optionally filtered by name or exact id. One tool for listing and searching across the workspace.\n\ntype:\n  • projects | folders | clueprints | workspaces\n  • backgrounds | voices | image_gen_style_packs | element_components\n  • images | videos | music | sfx   — media; each result carries a `source` ('org' = your saved-media library, 'stock' = a stock/curated provider). Scope with `source`, pick the library with `provider` (see below). Stock results are a short described shortlist — pick the best fit and use its `src`. Stock video results also carry `safe_src` and a `video_files` tier list with one entry marked `recommended` — use `safe_src` (or the recommended tier) in add_elements; tiers above 1080p can exceed its ~200MB source cap and fail. For a Freesound music/sfx result, `src` is an OPAQUE handle (not a playable URL) — pass it straight to add_audio and the original is fetched + hosted by Clueso server-side; a `preview_url` is included only so you can tell what it sounds like.\n(image_gen_style_packs = generation style presets for generate_media kind='image' style_id; element_components = saved components (e.g. animations) from THIS WORKSPACE only — there is no community library for components (unlike clueprints); each reports param_keys. Insert one AS-IS with add_elements(component_id=...), or generate a variant from it with base_component_id.)\n\nFilters (all optional):\n  • query     — for stock media it's the search phrase (real semantic search for provider='clueso'; provider keyword search otherwise). For clueprints a query runs a relevance-ranked search across your workspace + the global community library (search_summary, relevance_reason, tags, is_community, fork_count). For everything else it's a case-insensitive name substring.\n  • provider  — which stock library to search (ONE call, no merging). Choose by strength:\n       images  → 'pexels' (default; realistic photography) or 'pixabay' (illustrations, vectors, icons, clip-art — set image_type)\n       videos  → 'pexels' (default; real-world footage) or 'pixabay' (motion graphics — set video_type='animation')\n       music   → 'clueso' (default; our curated, brand-safe library with the best descriptions/search — try this FIRST) or 'freesound' (niche/genre tracks)\n       sfx     → 'freesound' (default; vast sound-effect library) or 'clueso' (curated sfx)\n  • image_type — images + provider='pixabay': 'photo' | 'illustration' | 'vector'\n  • video_type — videos + provider='pixabay': 'film' | 'animation'\n  • id        — exact id; returns just that one record (any type)\n  • source    — media only: 'org' | 'stock' | 'all' (default = org + stock). Under 'all', stock is appended only when a query is given. sfx is stock only.\n  • folder_id — projects + saved media (images/videos/music): restrict to a folder\n  • engine / language     — voices only\n  • creator_id / mine_only — clueprints only\n  • orientation — stock images/videos: 'landscape' | 'portrait' | 'square'\n  • color       — stock images: a color name/hex, e.g. 'blue'\n  • size        — stock videos: 'large' | 'medium' | 'small'\n  • min_duration / max_duration — stock videos + freesound audio: length bounds in seconds\n  • page / limit          — paging for large sets (projects, components, clueprints — a clueprint list is sliced to the limit with no marker when more exist, so page through rather than assuming the first page is everything); stock media ignores these (fixed shortlist)\n\nReturns { type, count, items: [{ id, name, type, ... }] }. Feed the returned id straight into the consuming tool (set_voice, update_clips background, generate_media style_id, add_audio src, use_clueprint, etc.). Any `duration` on a returned item is in SECONDS — pass it straight to add_audio's source_duration.","detail":"Description of `find` changed (11% word delta).","severity":"safe","descriptionDelta":0.11262798634812288},{"kind":"description_changed","tool":"generate_media","after":"Generate an AI image or canvas-code-based animation directly into a clip.\n\n- kind=\"image\": text-to-image. Pass `prompt`. Optional: `animation_setting` (entry/exit — set it HERE, see below), `style_id` (from find type='image_gen_style_packs'), `reference_image_url` or `mcp_upload_id` for image-to-image grounding.\n- kind=\"animation\": canvas-code animation rendered from a prompt. Pass `prompt`. Optional: `voiceover_text` (drives timing), `base_component_id` (reuse a saved animation as the starting point), `reference_image_url` or `mcp_upload_id` for visual grounding.\n\nGeneration is asynchronous: the element is created immediately with a stable `element_id` and rendered in the background. Poll `get_clip(select:['busy'])` — an EMPTY `busy` means the render has landed. (This previously said to watch the `phantom` flag; `phantom` has never been a key get_clip returns, so there was nothing to poll.)\n\nSet presentation up front. `animation_setting` is applied to the element as it is created, so the image enters correctly the first time it renders. Doing it afterwards with `update_elements` means writing to the element that is still generating, which is the write most likely to be refused while the generation holds it.\n\n`group` is NOT accepted here, unlike `add_elements`: a generated element is built in the background, and the grouping would be overwritten when the render lands. Add it ungrouped, then call `update_elements` with `group` once it appears.\n\nTip: use this tool whenever the user asks for a \"generated\", \"AI\", or \"create me a\" visual. For uploaded photos / logos / icons / GIFs, use `add_elements` with `element_type='image'` and a `src` or `mcp_upload_id` instead.","before":"Generate an AI image or canvas-code-based animation directly into a clip.\n\n- kind=\"image\": text-to-image. Pass `prompt`. Optional: `style_id` (from find type='image_gen_style_packs'), `reference_image_url` or `mcp_upload_id` for image-to-image grounding.\n- kind=\"animation\": canvas-code animation rendered from a prompt. Pass `prompt`. Optional: `voiceover_text` (drives timing), `base_component_id` (reuse a saved animation as the starting point), `reference_image_url` or `mcp_upload_id` for visual grounding.\n\nGeneration is asynchronous: the element is created immediately with a stable `element_id` and rendered in the background. Poll `get_clip` (the phantom flag drops once rendering completes).\n\nTip: use this tool whenever the user asks for a \"generated\", \"AI\", or \"create me a\" visual. For uploaded photos / logos / icons / GIFs, use `add_elements` with `element_type='image'` and a `src` or `mcp_upload_id` instead.","detail":"Description of `generate_media` changed (47% word delta).","severity":"risky","descriptionDelta":0.4722222222222222},{"kind":"input_property_added","path":"inputSchema.properties.animation_setting","tool":"generate_media","after":{"type":"object","properties":{"exit":{"type":"object","properties":{"preset":{"enum":["slide","fade","pop","scale","masked_reveal","typewriter","none"],"type":"string","description":"Preset for this phase. 'typewriter' is char-only and has no direction."},"direction":{"enum":["left","right","top","bottom","center_all","center_vertically","center_horizontally","none"],"type":"string","description":"Slide direction for this phase. Ignored by fade/scale/pop/typewriter; pass 'none' when the preset has no direction."},"apply_to_unit":{"enum":["char","word","line","box"],"type":"string","description":"Granularity. 'typewriter' is restricted to 'char'."},"duration_per_unit_ms":{"type":"number","description":"NAME IS MISLEADING — this is the TOTAL duration of the phase in ms (NOT per unit). The renderer splits it across all N units with ~50% overlap. For a perceptible per-unit rhythm scale UP with the unit count (e.g. typewriter on N chars ≈ N × 100–200 ms). For applyToUnit='box' it's just the phase duration. Omit it and you get 400ms, the same default the editor creates with.","exclusiveMinimum":0}},"description":"Exit (disappear) animation phase."},"entry":{"type":"object","properties":{"preset":{"enum":["slide","fade","pop","scale","masked_reveal","typewriter","none"],"type":"string","description":"Preset for this phase. 'typewriter' is char-only and has no direction."},"direction":{"enum":["left","right","top","bottom","center_all","center_vertically","center_horizontally","none"],"type":"string","description":"Slide direction for this phase. Ignored by fade/scale/pop/typewriter; pass 'none' when the preset has no direction."},"apply_to_unit":{"enum":["char","word","line","box"],"type":"string","description":"Granularity. 'typewriter' is restricted to 'char'."},"duration_per_unit_ms":{"type":"number","description":"NAME IS MISLEADING — this is the TOTAL duration of the phase in ms (NOT per unit). The renderer splits it across all N units with ~50% overlap. For a perceptible per-unit rhythm scale UP with the unit count (e.g. typewriter on N chars ≈ N × 100–200 ms). For applyToUnit='box' it's just the phase duration. Omit it and you get 400ms, the same default the editor creates with.","exclusiveMinimum":0}},"description":"Entry (appear) animation phase."}},"description":"Image only. Entry/exit animation, same shape as add_elements' type_data.animation_setting. The design guide asks AI images to enter with `masked_reveal` or a slow fade, so set it here rather than following up with update_elements — that follow-up targets the element while it is still generating. Ignored for kind='animation', which animates through its generated code."},"detail":"Optional field `animation_setting` was added to `generate_media`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.background","tool":"generate_media","after":{"anyOf":[{"type":"boolean"},{"enum":["0","1","true","false","yes","no"],"type":"string"}],"description":"Image only, and only honoured by `gpt-image-2.5-flare`, `gpt-image-2.5-sunburst`, `gpt-image-1` and `gpt-image-1.5` — every other model is always opaque and ignores this. Pass `false` for a cut-out with no background: icons, logos, stickers, anything meant to sit ON the composition rather than behind it. You MUST set `model` to one of those four in the same call; `gpt-image-2.5-flare` is the one to default to, since the older pair cannot frame wide."},"detail":"Optional field `background` was added to `generate_media`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.model","tool":"generate_media","after":{"enum":["gemini-3-pro-image-preview","gemini-3.1-flash-image-preview","gemini-2.5-flash-image","gpt-image-2.5-flare","gpt-image-2.5-sunburst","gpt-image-2","gpt-image-1.5","gpt-image-1"],"type":"string","description":"Image only. Which image model renders it. Default `gemini-3-pro-image-preview` (Nano Banana Pro), a strong general choice — leave it off unless you want one of the specifics below. `gemini-3.1-flash-image-preview` (Nano Banana 2) and `gemini-2.5-flash-image` are faster and cheaper. `gpt-image-2.5-flare` is OpenAI's fast one, `gpt-image-2.5-sunburst` its most precise editor, and `gpt-image-2` is the one to reach for when the image must carry legible text or follow several reference images. `gpt-image-1` / `gpt-image-1.5` are the older pair and only accept square-ish framing — a wide box is snapped to 4:3 rather than honoured, so do not pick them for a banner. An unlisted value is rejected here rather than silently swapped for the default, which is what the backend does with one."},"detail":"Optional field `model` was added to `generate_media`; may shift model behaviour.","severity":"risky"},{"kind":"description_changed","tool":"run_script","after":"Write a JavaScript program that calls this server's other tools. You have the whole language: loops, arithmetic, functions, conditionals, and values carried from one call into the next — all running next to the tools instead of across the conversation. Use it whenever code says the thing more directly than a sequence of separate calls would, which is often.\n\nCOMPUTE, don't hand-write. Anything you would otherwise work out in your head and type as literals is better computed here — eased keyframe tracks, staggered start times, grid coordinates, derived palettes, positions from measured text widths. This is usually what makes motion look right: sample a curve at ten points and emit the values, rather than guessing four.\n\nDON'T COMMENT THE SCRIPT. Nobody reads it — it runs once and is gone. Comments, blank lines and explanatory names are pure cost here. Write it dense.\n\nThe one thing to remember: inside a script you see only what you `return` or log, so a tool's own rich output (layout measurements, layout_qa, new ids) has to be surfaced deliberately. That also makes a single-call script worthwhile when a read is fat — `find` takes no projection argument, so logging the 200 characters you need is a real saving.\n\nA fat read is usually better narrowed at the source than filtered here: get_clip takes `select`, and get_element_schema takes `fields` (name what you're setting and a 15KB schema becomes ~200 bytes). get_element_schema returns TEXT by default, which you cannot index into — pass `format: 'json'` when you want to compute over the schema rather than log it.\n\nCALLING TOOLS\nEvery tool except run_script and get_script_job is a global function taking exactly the arguments it takes normally, and returning its parsed result (those two are excluded so a script cannot recurse into itself or poll its own job). Calls are synchronous — do NOT use async/await, and there are no imports.\n\n`sleep(ms)` waits, synchronously like everything else here. Use it to poll a generation: `generate_media` and `voiceover_batch` return before their work lands, and `get_clip(select:['busy'])` says what is still being written. It is clamped to the script's remaining time, so a long sleep ends the run rather than overrunning it — and it holds one of the few concurrent script slots while it waits, so poll on the order of seconds, not milliseconds.\n\n  const p = create_project({ title: \"Launch\" });\n  const made = add_clips({ project_id: p.projectId, kind: \"blank\", clips: [{ duration: 4 }] });\n\nUse the BARE tool name. If your client shows these tools under a prefix, the prefixed form works too — mcp__clueso_connect__add_elements and clueso__add_elements both resolve to add_elements. `tools()` lists every callable name; `call(name, args)` invokes one by a name computed at runtime.\n\nWHY IT IS CHEAPER\nWhat you construct never passes through the conversation. Build an array in a loop and send it in ONE batched call — a 24x24 dot grid is six lines here versus 576 elements of JSON:\n\n  const els = [];\n  for (let r = 0; r < 24; r++)\n    for (let c = 0; c < 24; c++)\n      els.push({ x: c * 60, y: r * 60, width: 8, height: 8, type_data: { backgroundColor: \"#C462F5\" } });\n  add_elements({ project_id, defaults: { clip_index: 0, element_type: \"rectangle\" }, elements: els });\n\nREAD, THEN WRITE — this is how you edit in bulk:\n\n  const clip = get_clip({ project_id, clip_index: 0, select: [\"elements.name\", \"elements.y\"] });\n  const captions = clip.elements.filter(e => e.name.startsWith(\"caption\"));\n  update_elements({ project_id, defaults: { clip_index: 0 },\n                    updates: captions.map(e => ({ element_id: e.id, y: e.y + 40 })) });\n\nWHAT COMES BACK\n`return` a value to hand it back, and `console.log` anything you want to see — that output is all you pay for, so log summaries, not payloads. `print_json(obj, maxBytes)` logs an object and truncates it for you, which is safer than hand-rolling JSON.stringify(...).slice(...) at every call site.\nYou get `{ ok, calls, writes_applied, result, stdout }`. `writes_applied` matters because a script is NOT a transaction: if it throws on call nine, the first eight writes already landed, and that count is how you tell.\nA FAILED TOOL CALL THROWS. It does not return an error object, so a failure stops the script instead of letting it run on against bad state. Wrap a call in try/catch only when you genuinely intend to continue.\nYou get every tool's normal result, so `succeeded`/`failed` counts, per-element `layout` (font_size_px, text_width_px, natural_width_px, line_count, fits_width/fits_height/fits plus `adjusted` when your height was replaced — widen to natural_width_px, not text_width_px) and `layout_qa` findings are all readable in the script. Check them and react.\nNO IMAGES are returned inside a script — a render in a loop would flood the reply. But you are not blind: `get_clip({..., render: { save: true }})` gives the script a `presigned_url` and `s3_key` for the rendered frame, so it can render many frames, keep the URLs, and hand them on (update_clueprint takes one as source_url). `_images_omitted` counts the frames withheld; when the reply would be a bare array it arrives as `{items, _images_omitted}`. Call get_clip yourself, outside a script, when YOU need to look at one.\n\nFINISHING\nFast scripts return their result here. If one is still running after `wait_seconds` (default 45s) you get `{ job_id, status: \"processing\" }` and it keeps running — poll `get_script_job`. Set `idempotency_key` on anything that builds, so a retry cannot run it twice — a key that already ran is never re-executed, failed runs included.\n\nLIMITS: 200 tool calls, 45s of run time, 16KB each of logged output and returned value. `dry_run` runs reads for real and only records writes. Anything costing credits errors as it normally would.","before":"Write a JavaScript program that calls this server's other tools. You have the whole language: loops, arithmetic, functions, conditionals, and values carried from one call into the next — all running next to the tools instead of across the conversation. Use it whenever code says the thing more directly than a sequence of separate calls would, which is often.\n\nCOMPUTE, don't hand-write. Anything you would otherwise work out in your head and type as literals is better computed here — eased keyframe tracks, staggered start times, grid coordinates, derived palettes, positions from measured text widths. This is usually what makes motion look right: sample a curve at ten points and emit the values, rather than guessing four.\n\nDON'T COMMENT THE SCRIPT. Nobody reads it — it runs once and is gone. Comments, blank lines and explanatory names are pure cost here. Write it dense.\n\nThe one thing to remember: inside a script you see only what you `return` or log, so a tool's own rich output (layout measurements, layout_qa, new ids) has to be surfaced deliberately. That also makes a single-call script worthwhile when a read is fat — `find` takes no projection argument, so logging the 200 characters you need is a real saving.\n\nA fat read is usually better narrowed at the source than filtered here: get_clip takes `select`, and get_element_schema takes `fields` (name what you're setting and a 15KB schema becomes ~200 bytes). get_element_schema returns TEXT by default, which you cannot index into — pass `format: 'json'` when you want to compute over the schema rather than log it.\n\nCALLING TOOLS\nEvery tool except run_script and get_script_job is a global function taking exactly the arguments it takes normally, and returning its parsed result (those two are excluded so a script cannot recurse into itself or poll its own job). Calls are synchronous — do NOT use async/await, and there are no imports.\n\n  const p = create_project({ title: \"Launch\" });\n  const made = add_clips({ project_id: p.projectId, kind: \"blank\", clips: [{ duration: 4 }] });\n\nUse the BARE tool name. If your client shows these tools under a prefix, the prefixed form works too — mcp__clueso_connect__add_elements and clueso__add_elements both resolve to add_elements. `tools()` lists every callable name; `call(name, args)` invokes one by a name computed at runtime.\n\nWHY IT IS CHEAPER\nWhat you construct never passes through the conversation. Build an array in a loop and send it in ONE batched call — a 24x24 dot grid is six lines here versus 576 elements of JSON:\n\n  const els = [];\n  for (let r = 0; r < 24; r++)\n    for (let c = 0; c < 24; c++)\n      els.push({ x: c * 60, y: r * 60, width: 8, height: 8, type_data: { backgroundColor: \"#C462F5\" } });\n  add_elements({ project_id, defaults: { clip_index: 0, element_type: \"rectangle\" }, elements: els });\n\nREAD, THEN WRITE — this is how you edit in bulk:\n\n  const clip = get_clip({ project_id, clip_index: 0, select: [\"elements.name\", \"elements.y\"] });\n  const captions = clip.elements.filter(e => e.name.startsWith(\"caption\"));\n  update_elements({ project_id, defaults: { clip_index: 0 },\n                    updates: captions.map(e => ({ element_id: e.id, y: e.y + 40 })) });\n\nWHAT COMES BACK\n`return` a value to hand it back, and `console.log` anything you want to see — that output is all you pay for, so log summaries, not payloads. `print_json(obj, maxBytes)` logs an object and truncates it for you, which is safer than hand-rolling JSON.stringify(...).slice(...) at every call site.\nYou get `{ ok, calls, writes_applied, result, stdout }`. `writes_applied` matters because a script is NOT a transaction: if it throws on call nine, the first eight writes already landed, and that count is how you tell.\nA FAILED TOOL CALL THROWS. It does not return an error object, so a failure stops the script instead of letting it run on against bad state. Wrap a call in try/catch only when you genuinely intend to continue.\nYou get every tool's normal result, so `succeeded`/`failed` counts, per-element `layout` (font_size_px, text_width_px, natural_width_px, line_count, fits_width/fits_height/fits plus `adjusted` when your height was replaced — widen to natural_width_px, not text_width_px) and `layout_qa` findings are all readable in the script. Check them and react.\nNO IMAGES are returned inside a script — a render in a loop would flood the reply. But you are not blind: `get_clip({..., render: { save: true }})` gives the script a `presigned_url` and `s3_key` for the rendered frame, so it can render many frames, keep the URLs, and hand them on (update_clueprint takes one as source_url). `_images_omitted` counts the frames withheld; when the reply would be a bare array it arrives as `{items, _images_omitted}`. Call get_clip yourself, outside a script, when YOU need to look at one.\n\nFINISHING\nFast scripts return their result here. If one is still running after `wait_seconds` (default 45s) you get `{ job_id, status: \"processing\" }` and it keeps running — poll `get_script_job`. Set `idempotency_key` on anything that builds, so a retry cannot run it twice — a key that already ran is never re-executed, failed runs included.\n\nLIMITS: 200 tool calls, 45s of run time, 16KB each of logged output and returned value. `dry_run` runs reads for real and only records writes. Anything costing credits errors as it normally would.","detail":"Description of `run_script` changed (6% word delta).","severity":"safe","descriptionDelta":0.06208425720620847},{"kind":"description_changed","tool":"switch_workspace","after":"Switch the active workspace. The choice sticks for this client until you change it again — including across reconnects — so every later call operates in the new workspace. Use find(type='workspaces') to see available options.","before":"Switch the active workspace for this session. Use find(type='workspaces') to see available options.","detail":"Description of `switch_workspace` changed (58% word delta).","severity":"risky","descriptionDelta":0.5757575757575757}],"published_at":"2026-09-17T19:36:18.057Z"}]