{"openapi":"3.1.1","info":{"title":"CineSuite · API para agentes","version":"0.2.0","description":"Contrato del transporte HTTP de MCP y su descubrimiento. Las operaciones de negocio son herramientas MCP, no endpoints REST independientes. El catálogo público no concede permisos ni prueba que MCP u OAuth estén activos. La organización se resuelve en servidor. No hay API pública GraphQL ni SQL genérico."},"servers":[{"url":"https://cinesuite.online","description":"Origen público canónico; comprobar disponibilidad mediante metadata."}],"externalDocs":{"description":"Guía de integración y límites","url":"https://cinesuite.online/docs/api"},"tags":[{"name":"MCP","description":"Transporte autenticado de herramientas"},{"name":"Discovery","description":"Metadata pública sin credenciales"}],"paths":{"/api/mcp":{"post":{"operationId":"sendMcpMessage","summary":"Enviar un mensaje MCP","description":"JSON-RPC sobre Streamable HTTP, sin sesiones persistentes. Usar un SDK MCP compatible. La revisión 2026-07-28 exige metadata por petición y cabeceras coincidentes; se admite compatibilidad stateless con 2025-11-25. tools/list da las herramientas anunciadas para el rol y permiso de creación actuales; cada ejecución vuelve a comprobar su scope. Las respuestas de negocio son texto JSON dentro de content. subscriptions/listen se rechaza; no hay notificaciones de cambios. Máximo 16 KiB por cuerpo.","tags":["MCP"],"security":[{"mcpBearer":[]}],"parameters":[{"name":"MCP-Protocol-Version","in":"header","required":false,"description":"Versión MCP negociada. Obligatoria en peticiones modernas; 2026-07-28 debe coincidir con params._meta. El handshake legado tiene sus propias reglas.","schema":{"type":"string"},"example":"2026-07-28"},{"name":"Mcp-Method","in":"header","required":false,"description":"En 2026-07-28, obligatorio e idéntico a method del cuerpo.","schema":{"type":"string"},"example":"tools/call"},{"name":"Mcp-Name","in":"header","required":false,"description":"En tools/call de 2026-07-28, obligatorio e idéntico a params.name.","schema":{"type":"string","enum":["projects_search","projects_get","schedule_get","finance_get_project_summary","tasks_list","contacts_search","inventory_search","organization_summary","projects_create","tasks_create","schedule_create_event"]}},{"name":"Origin","in":"header","required":false,"description":"Si se envía, debe coincidir con el origen configurado. No se admite acceso cross-origin arbitrario.","schema":{"type":"string","format":"uri"}}],"requestBody":{"required":true,"description":"Content-Type: application/json. Enviar Accept: application/json, text/event-stream. Una petición o notificación por POST; el SDK aplica las reglas según la versión.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpMessage"},"examples":{"listModern":{"summary":"Descubrir herramientas, sin solicitar datos de negocio","value":{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientInfo":{"name":"integracion-ejemplo","version":"1.0.0"},"io.modelcontextprotocol/clientCapabilities":{}}}}}}}}},"responses":{"200":{"description":"Respuesta JSON-RPC o SSE de la petición. Leer result.isError antes de usar el contenido. No es un stream de suscripción.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpResponse"}},"text/event-stream":{"schema":{"type":"string"},"example":"event: message\ndata: {\"jsonrpc\":\"2.0\",\"id\":1,\"result\":{\"tools\":[]}}\n\n"}}},"202":{"description":"Notificación aceptada, sin cuerpo (compatibilidad de transporte)."},"400":{"description":"Error de protocolo JSON-RPC o error HTTP de CineSuite. No interpretar HTTP 200 como éxito de una herramienta: revisar result.isError.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Credencial ausente, inválida, caducada o revocada. Descubrir el emisor, si está activo, desde resource_metadata; no sustituir por la sesión web.","headers":{"WWW-Authenticate":{"description":"Desafío Bearer con resource_metadata.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}},"403":{"description":"Host u Origin no permitido, o credencial sin acceso a la organización. Los errores de permiso de una herramienta pueden llegar como result.isError.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}},"404":{"description":"Error de protocolo JSON-RPC o error HTTP de CineSuite. No interpretar HTTP 200 como éxito de una herramienta: revisar result.isError.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"406":{"description":"Accept no anuncia application/json y text/event-stream.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"El cuerpo supera 16 KiB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"Content-Type no compatible con el transporte JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Cuota global o por usuario agotada. Esperar Retry-After. RateLimit y RateLimit-Policy describen solo la política que bloqueó; siguen el borrador IETF -11, no una RFC definitiva.","headers":{"Retry-After":{"description":"Segundos hasta el reinicio de la ventana, mínimo 1.","schema":{"type":"integer","minimum":1}},"RateLimit":{"description":"Política bloqueante y cuota restante; t indica segundos para el reinicio.","schema":{"type":"string"},"example":"\"mcp-user\";r=0;t=30"},"RateLimit-Policy":{"description":"Nombre, cuota q y ventana w en segundos.","schema":{"type":"string"},"example":"\"mcp-user\";q=120;w=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}},"499":{"description":"El cliente cerró la conexión durante la petición; sin cuerpo."},"500":{"description":"Error interno del transporte MCP; JSON-RPC sin detalles internos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcError"}}}},"503":{"description":"MCP deshabilitado o dependencia de autenticación, auditoría o límite temporalmente no disponible. Falla cerrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}},"504":{"description":"Plazo HTTP de 55 segundos agotado. Una alta puede haber terminado: conservar su idempotencyKey y los mismos argumentos al reintentar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}}}},"get":{"operationId":"rejectMcpStandaloneStream","summary":"Comprobar transporte GET legado","description":"La ruta pasa por autenticación y límites, pero la configuración stateless no ofrece un stream GET independiente. Usar POST para mensajes MCP.","tags":["MCP"],"security":[{"mcpBearer":[]}],"responses":{"401":{"description":"Credencial ausente, inválida, caducada o revocada. Descubrir el emisor, si está activo, desde resource_metadata; no sustituir por la sesión web.","headers":{"WWW-Authenticate":{"description":"Desafío Bearer con resource_metadata.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}},"403":{"description":"Host u Origin no permitido, o credencial sin acceso a la organización. Los errores de permiso de una herramienta pueden llegar como result.isError.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}},"405":{"description":"No hay stream GET independiente ni suscripción persistente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcError"}}}},"429":{"description":"Cuota global o por usuario agotada. Esperar Retry-After. RateLimit y RateLimit-Policy describen solo la política que bloqueó; siguen el borrador IETF -11, no una RFC definitiva.","headers":{"Retry-After":{"description":"Segundos hasta el reinicio de la ventana, mínimo 1.","schema":{"type":"integer","minimum":1}},"RateLimit":{"description":"Política bloqueante y cuota restante; t indica segundos para el reinicio.","schema":{"type":"string"},"example":"\"mcp-user\";r=0;t=30"},"RateLimit-Policy":{"description":"Nombre, cuota q y ventana w en segundos.","schema":{"type":"string"},"example":"\"mcp-user\";q=120;w=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}},"503":{"description":"MCP deshabilitado o dependencia de autenticación, auditoría o límite temporalmente no disponible. Falla cerrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}},"504":{"description":"Plazo HTTP de 55 segundos agotado. Una alta puede haber terminado: conservar su idempotencyKey y los mismos argumentos al reintentar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}}}},"delete":{"operationId":"rejectMcpSessionDeletion","summary":"Comprobar cierre de sesión legado","description":"No se crean sesiones MCP persistentes que cerrar. DELETE no revoca credenciales ni elimina datos. Las conexiones se revocan desde Configuración → Conexiones de IA.","tags":["MCP"],"security":[{"mcpBearer":[]}],"responses":{"401":{"description":"Credencial ausente, inválida, caducada o revocada. Descubrir el emisor, si está activo, desde resource_metadata; no sustituir por la sesión web.","headers":{"WWW-Authenticate":{"description":"Desafío Bearer con resource_metadata.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}},"403":{"description":"Host u Origin no permitido, o credencial sin acceso a la organización. Los errores de permiso de una herramienta pueden llegar como result.isError.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}},"405":{"description":"No hay sesión persistente que eliminar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcError"}}}},"429":{"description":"Cuota global o por usuario agotada. Esperar Retry-After. RateLimit y RateLimit-Policy describen solo la política que bloqueó; siguen el borrador IETF -11, no una RFC definitiva.","headers":{"Retry-After":{"description":"Segundos hasta el reinicio de la ventana, mínimo 1.","schema":{"type":"integer","minimum":1}},"RateLimit":{"description":"Política bloqueante y cuota restante; t indica segundos para el reinicio.","schema":{"type":"string"},"example":"\"mcp-user\";r=0;t=30"},"RateLimit-Policy":{"description":"Nombre, cuota q y ventana w en segundos.","schema":{"type":"string"},"example":"\"mcp-user\";q=120;w=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}},"503":{"description":"MCP deshabilitado o dependencia de autenticación, auditoría o límite temporalmente no disponible. Falla cerrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}},"504":{"description":"Plazo HTTP de 55 segundos agotado. Una alta puede haber terminado: conservar su idempotencyKey y los mismos argumentos al reintentar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}}}}},"/.well-known/oauth-protected-resource":{"get":{"operationId":"getMcpProtectedResourceMetadata","summary":"Descubrir el recurso protegido","description":"Consultar sin credenciales el recurso y, solo cuando está habilitado, el emisor OAuth externo. CineSuite no es servidor de autorización.","tags":["Discovery"],"security":[],"responses":{"200":{"description":"Metadata pública del recurso. authorization_servers solo se anuncia cuando OAuth y la configuración del recurso están preparados. scopes_supported aparece en modo de claves manuales y expresa permisos locales de negocio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProtectedResourceMetadata"}}}},"503":{"description":"El recurso MCP no está habilitado o su origen no está configurado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}}}}},"/.well-known/oauth-protected-resource/api/mcp":{"get":{"operationId":"getMcpPathProtectedResourceMetadata","summary":"Descubrir metadata específica de /api/mcp","description":"Alias de metadata del mismo recurso protegido. Permite descubrimiento con el camino del recurso, sin abrir acceso a datos.","tags":["Discovery"],"security":[],"responses":{"200":{"description":"Metadata pública del recurso. authorization_servers solo se anuncia cuando OAuth y la configuración del recurso están preparados. scopes_supported aparece en modo de claves manuales y expresa permisos locales de negocio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProtectedResourceMetadata"}}}},"503":{"description":"El recurso MCP no está habilitado o su origen no está configurado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"}}}}}}},"/.well-known/oauth-authorization-server":{"get":{"operationId":"explainExternalAuthorizationServer","summary":"Indicar que CineSuite no emite OAuth","description":"Devuelve 404 JSON de forma deliberada. No usar este dominio como emisor OAuth: leer authorization_servers del recurso protegido cuando exista.","tags":["Discovery"],"security":[],"responses":{"404":{"description":"Servidor de autorización no alojado en este origen.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpError"},"example":{"error":"not_found"}}}}}}}},"components":{"securitySchemes":{"mcpBearer":{"type":"http","scheme":"bearer","description":"Authorization: Bearer <credencial>. Clave manual revocable de Conexiones de IA o token OAuth emitido por el Supabase Auth anunciado en metadata, limitado al recurso y a un grant activo. No usar cookies de sesión, service-role ni tokens web como credenciales MCP. Los permisos projects:read y similares son scopes de negocio locales, no scopes solicitables al emisor OAuth."}},"schemas":{"RequestMetadata":{"type":"object","additionalProperties":true,"description":"En 2026-07-28, incluir versión, identidad y capacidades del cliente en cada petición; el SDK mantiene compatibilidad con versiones legadas.","properties":{"io.modelcontextprotocol/protocolVersion":{"type":"string"},"io.modelcontextprotocol/clientInfo":{"type":"object","required":["name","version"],"properties":{"name":{"type":"string"},"version":{"type":"string"}},"additionalProperties":true},"io.modelcontextprotocol/clientCapabilities":{"type":"object","additionalProperties":true}}},"McpMessage":{"oneOf":[{"type":"object","required":["jsonrpc","id","method","params"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer"]},"method":{"const":"tools/call"},"params":{"oneOf":[{"type":"object","required":["name"],"properties":{"name":{"type":"string","const":"projects_search"},"arguments":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","maxLength":120},"limit":{"type":"integer","minimum":1,"maximum":50}},"additionalProperties":false},"_meta":{"$ref":"#/components/schemas/RequestMetadata"}},"additionalProperties":true},{"type":"object","required":["name","arguments"],"properties":{"name":{"type":"string","const":"projects_get"},"arguments":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"}},"required":["projectId"],"additionalProperties":false},"_meta":{"$ref":"#/components/schemas/RequestMetadata"}},"additionalProperties":true},{"type":"object","required":["name","arguments"],"properties":{"name":{"type":"string","const":"schedule_get"},"arguments":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"}},"required":["projectId"],"additionalProperties":false},"_meta":{"$ref":"#/components/schemas/RequestMetadata"}},"additionalProperties":true},{"type":"object","required":["name","arguments"],"properties":{"name":{"type":"string","const":"finance_get_project_summary"},"arguments":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"}},"required":["projectId"],"additionalProperties":false},"_meta":{"$ref":"#/components/schemas/RequestMetadata"}},"additionalProperties":true},{"type":"object","required":["name"],"properties":{"name":{"type":"string","const":"tasks_list"},"arguments":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"limit":{"type":"integer","minimum":1,"maximum":50}},"additionalProperties":false},"_meta":{"$ref":"#/components/schemas/RequestMetadata"}},"additionalProperties":true},{"type":"object","required":["name"],"properties":{"name":{"type":"string","const":"contacts_search"},"arguments":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","maxLength":120},"limit":{"type":"integer","minimum":1,"maximum":50}},"additionalProperties":false},"_meta":{"$ref":"#/components/schemas/RequestMetadata"}},"additionalProperties":true},{"type":"object","required":["name"],"properties":{"name":{"type":"string","const":"inventory_search"},"arguments":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","maxLength":120},"limit":{"type":"integer","minimum":1,"maximum":50}},"additionalProperties":false},"_meta":{"$ref":"#/components/schemas/RequestMetadata"}},"additionalProperties":true},{"type":"object","required":["name"],"properties":{"name":{"type":"string","const":"organization_summary"},"arguments":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"_meta":{"$ref":"#/components/schemas/RequestMetadata"}},"additionalProperties":true},{"type":"object","required":["name","arguments"],"properties":{"name":{"type":"string","const":"projects_create"},"arguments":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"idempotencyKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"UUID único para esta alta. Reutilízalo sin cambios al reintentar; nunca generes otro para el mismo reintento."},"title":{"type":"string","minLength":1,"maxLength":200},"brief":{"type":"string","minLength":1,"maxLength":2000},"location":{"type":"string","minLength":1,"maxLength":200},"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"endDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["idempotencyKey","title"],"additionalProperties":false},"_meta":{"$ref":"#/components/schemas/RequestMetadata"}},"additionalProperties":true},{"type":"object","required":["name","arguments"],"properties":{"name":{"type":"string","const":"tasks_create"},"arguments":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"idempotencyKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"UUID único para esta alta. Reutilízalo sin cambios al reintentar; nunca generes otro para el mismo reintento."},"title":{"type":"string","minLength":1,"maxLength":200},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"priority":{"default":"Media","type":"string","enum":["Baja","Media","Alta","Urgente"]},"dueDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"notes":{"type":"string","minLength":1,"maxLength":1000}},"required":["idempotencyKey","title"],"additionalProperties":false},"_meta":{"$ref":"#/components/schemas/RequestMetadata"}},"additionalProperties":true},{"type":"object","required":["name","arguments"],"properties":{"name":{"type":"string","const":"schedule_create_event"},"arguments":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"idempotencyKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"UUID único para esta alta. Reutilízalo sin cambios al reintentar; nunca generes otro para el mismo reintento."},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"title":{"type":"string","minLength":1,"maxLength":200},"date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"location":{"type":"string","minLength":1,"maxLength":200}},"required":["idempotencyKey","projectId","title","date"],"additionalProperties":false},"_meta":{"$ref":"#/components/schemas/RequestMetadata"}},"additionalProperties":true}]}},"additionalProperties":true},{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer"]},"method":{"type":"string","not":{"const":"tools/call"},"description":"Método MCP de protocolo, por ejemplo tools/list, ping o initialize legado. Esto no declara soporte de herramientas o recursos arbitrarios."},"params":{"type":"object","additionalProperties":true}},"additionalProperties":true}]},"McpResponse":{"oneOf":[{"$ref":"#/components/schemas/RpcSuccess"},{"$ref":"#/components/schemas/RpcError"}]},"RpcSuccess":{"type":"object","required":["jsonrpc","id","result"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer"]},"result":{"type":"object","additionalProperties":true,"properties":{"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","description":"JSON serializado del resultado o del error de herramienta; no es contenido ejecutable."}},"additionalProperties":true}},"isError":{"type":"boolean"}}}},"additionalProperties":true},"RpcError":{"type":"object","required":["jsonrpc","error"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer","null"]},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":{}},"additionalProperties":true}},"additionalProperties":true},"HttpError":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}},"additionalProperties":false},"ErrorResponse":{"oneOf":[{"$ref":"#/components/schemas/HttpError"},{"$ref":"#/components/schemas/RpcError"}]},"ProtectedResourceMetadata":{"type":"object","required":["resource","bearer_methods_supported"],"properties":{"resource":{"type":"string","format":"uri"},"authorization_servers":{"type":"array","items":{"type":"string","format":"uri"}},"bearer_methods_supported":{"type":"array","items":{"type":"string","const":"header"}},"scopes_supported":{"type":"array","items":{"type":"string","enum":["projects:read","schedule:read","finance:read","tasks:read","contacts:read","inventory:read","organization:read","projects:create","tasks:create","schedule:create"]}}},"additionalProperties":false}}},"x-cinesuite-business-scopes":["projects:read","schedule:read","finance:read","tasks:read","contacts:read","inventory:read","organization:read","projects:create","tasks:create","schedule:create"],"x-cinesuite-function-tools":[{"type":"function","name":"projects_search","description":"Busca proyectos activos de la organización autenticada.","parameters":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","maxLength":120},"limit":{"type":"integer","minimum":1,"maximum":50}},"additionalProperties":false},"strict":false},{"type":"function","name":"projects_get","description":"Obtiene el resumen seguro de un proyecto por ID, solo si pertenece a la organización autenticada.","parameters":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"}},"required":["projectId"],"additionalProperties":false},"strict":false},{"type":"function","name":"schedule_get","description":"Obtiene el cronograma de un proyecto perteneciente a la organización autenticada.","parameters":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"}},"required":["projectId"],"additionalProperties":false},"strict":false},{"type":"function","name":"finance_get_project_summary","description":"Obtiene caja recibida y saldo operativo de un proyecto. No registra pagos ni modifica finanzas.","parameters":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"}},"required":["projectId"],"additionalProperties":false},"strict":false},{"type":"function","name":"tasks_list","description":"Lista tareas activas de la organización, opcionalmente de un proyecto.","parameters":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"limit":{"type":"integer","minimum":1,"maximum":50}},"additionalProperties":false},"strict":false},{"type":"function","name":"contacts_search","description":"Busca contactos de la organización autenticada con campos de directorio mínimos.","parameters":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","maxLength":120},"limit":{"type":"integer","minimum":1,"maximum":50}},"additionalProperties":false},"strict":false},{"type":"function","name":"inventory_search","description":"Busca inventario de la organización autenticada sin exponer blobs internos.","parameters":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","maxLength":120},"limit":{"type":"integer","minimum":1,"maximum":50}},"additionalProperties":false},"strict":false},{"type":"function","name":"organization_summary","description":"Resume la organización autenticada y sus módulos operativos.","parameters":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"strict":false},{"type":"function","name":"projects_create","description":"Crea un proyecto Borrador sin importes ni cliente. Solo ante una petición explícita del usuario. Guarda y reutiliza el mismo idempotencyKey al reintentar.","parameters":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"idempotencyKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"UUID único para esta alta. Reutilízalo sin cambios al reintentar; nunca generes otro para el mismo reintento."},"title":{"type":"string","minLength":1,"maxLength":200},"brief":{"type":"string","minLength":1,"maxLength":2000},"location":{"type":"string","minLength":1,"maxLength":200},"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"endDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["idempotencyKey","title"],"additionalProperties":false},"strict":false},{"type":"function","name":"tasks_create","description":"Crea una tarea Pendiente, opcionalmente en un proyecto accesible. Sin asignaciones, avisos ni recurrencias. Reutiliza idempotencyKey al reintentar.","parameters":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"idempotencyKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"UUID único para esta alta. Reutilízalo sin cambios al reintentar; nunca generes otro para el mismo reintento."},"title":{"type":"string","minLength":1,"maxLength":200},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"priority":{"default":"Media","type":"string","enum":["Baja","Media","Alta","Urgente"]},"dueDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"notes":{"type":"string","minLength":1,"maxLength":1000}},"required":["idempotencyKey","title"],"additionalProperties":false},"strict":false},{"type":"function","name":"schedule_create_event","description":"Añade un evento independiente al cronograma de un proyecto accesible. No modifica jornadas, días de producción ni importes. Reutiliza idempotencyKey al reintentar.","parameters":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"idempotencyKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"UUID único para esta alta. Reutilízalo sin cambios al reintentar; nunca generes otro para el mismo reintento."},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"title":{"type":"string","minLength":1,"maxLength":200},"date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"location":{"type":"string","minLength":1,"maxLength":200}},"required":["idempotencyKey","projectId","title","date"],"additionalProperties":false},"strict":false}],"x-cinesuite-tool-permissions":{"projects_search":{"scope":"projects:read","requiresEditorAndCreationGrant":false},"projects_get":{"scope":"projects:read","requiresEditorAndCreationGrant":false},"schedule_get":{"scope":"schedule:read","requiresEditorAndCreationGrant":false},"finance_get_project_summary":{"scope":"finance:read","requiresEditorAndCreationGrant":false},"tasks_list":{"scope":"tasks:read","requiresEditorAndCreationGrant":false},"contacts_search":{"scope":"contacts:read","requiresEditorAndCreationGrant":false},"inventory_search":{"scope":"inventory:read","requiresEditorAndCreationGrant":false},"organization_summary":{"scope":"organization:read","requiresEditorAndCreationGrant":false},"projects_create":{"scope":"projects:create","requiresEditorAndCreationGrant":true},"tasks_create":{"scope":"tasks:create","requiresEditorAndCreationGrant":true},"schedule_create_event":{"scope":"schedule:create","requiresEditorAndCreationGrant":true}},"x-cinesuite-function-adapter":"Definiciones de función exportables; no son endpoints ejecutables ni autorización. Filtrar contra tools/list de la conexión autenticada, comprobar scopes en servidor y ejecutar por tools/call. Pedir autorización del usuario para cada alta y reutilizar idempotencyKey. No solicitar ni enviar organization_id. La validación en servidor también sanea texto y exige endDate >= startDate.","x-cinesuite-rate-limits":[{"policy":"ingress","requests":600,"windowSeconds":60,"partition":"global","response":"HTTP 429"},{"policy":"user","requests":120,"windowSeconds":60,"partition":"authenticated user across credentials","response":"HTTP 429"},{"policy":"writes","requests":20,"windowSeconds":60,"partition":"authenticated user","response":"MCP result.isError=true with error=unavailable; not HTTP 429"},{"policy":"tokens","requests":10,"windowSeconds":60,"partition":"authenticated user in connection management UI","response":"HTTP 429 on connection management, not an extra /api/mcp quota"}]}