{"openapi":"3.1.1","info":{"title":"Terbium Public Studio API","version":"1.0.0","description":"Structured public information about Terbium, an independent London creative agency. No authentication is required."},"servers":[{"url":"https://terbium-marketing-delta.vercel.app","description":"Terbium production"}],"tags":[{"name":"Studio","description":"Public Terbium studio information."},{"name":"MCP","description":"Model Context Protocol transport."}],"paths":{"/api/studio":{"get":{"tags":["Studio"],"operationId":"getTerbiumStudioResource","summary":"Get a Terbium public studio resource","description":"Returns the Terbium studio profile, services, or contact details as JSON. This endpoint does not require authentication.","parameters":[{"name":"resource","in":"query","required":false,"description":"The public Terbium resource to retrieve. Defaults to profile.","schema":{"type":"string","enum":["profile","services","contact"],"default":"profile"}}],"responses":{"200":{"description":"The requested studio resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioResource"}}}},"400":{"description":"The resource query parameter is not supported.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Studio"],"operationId":"rejectTerbiumStudioPost","summary":"Explain that the public studio resource is read-only","description":"Returns a structured JSON error because this endpoint supports GET only.","responses":{"405":{"description":"Method not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/mcp":{"post":{"tags":["MCP"],"operationId":"sendTerbiumMcpRequest","summary":"Send a JSON-RPC request to the Terbium MCP server","description":"Uses Streamable HTTP transport. Call initialize first, then tools/list or tools/call. No authentication is required for public studio information.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcRequest"}}}},"responses":{"200":{"description":"A JSON-RPC result or protocol error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcResponse"}}}},"400":{"description":"The request body is malformed or invalid JSON-RPC.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcResponse"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","hint"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Human-readable problem description."},"hint":{"type":"string","description":"Actionable resolution guidance."}}}}},"StudioResource":{"oneOf":[{"$ref":"#/components/schemas/StudioProfile"},{"$ref":"#/components/schemas/StudioServices"},{"$ref":"#/components/schemas/StudioContact"}]},"StudioProfile":{"type":"object","required":["resource","name","description","website","location"],"properties":{"resource":{"type":"string","const":"profile"},"name":{"type":"string"},"description":{"type":"string"},"website":{"type":"string","format":"uri"},"location":{"type":"string"}}},"StudioServices":{"type":"object","required":["resource","services"],"properties":{"resource":{"type":"string","const":"services"},"services":{"type":"array","items":{"type":"string"}}}},"StudioContact":{"type":"object","required":["resource","email","contactType","contactUrl"],"properties":{"resource":{"type":"string","const":"contact"},"email":{"type":"string","format":"email"},"contactType":{"type":"string"},"contactUrl":{"type":"string","format":"uri"}}},"JsonRpcRequest":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","enum":["initialize","tools/list","tools/call"]},"params":{"type":"object","additionalProperties":true}}},"JsonRpcResponse":{"type":"object","required":["jsonrpc","id"],"properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"result":{"type":"object","additionalProperties":true},"error":{"type":"object","additionalProperties":true}}}}}}