{"openapi":"3.1.0","info":{"title":"Nicelydone MCP API","version":"1.0.0","description":"MCP requires a current paid Nicelydone account. Register a client at https://nicelydone.club/api/mcp/register, then use authorization code with PKCE S256 and resource=https://mcp.nicelydone.club/mcp. Request only the scopes needed for your task. Requests without a scope default to library:read. Use tools/list and resources/list to discover operations."},"servers":[{"url":"https://mcp.nicelydone.club"}],"externalDocs":{"url":"https://nicelydone.club/mcp.md"},"paths":{"/mcp":{"post":{"operationId":"sendMcpMessage","summary":"Send an MCP JSON-RPC message","description":"Stateless Streamable HTTP with JSON responses. Set Accept to application/json, text/event-stream. Initialize the MCP connection before calling tools. Tool and resource permissions are checked for each operation: library:read for library content, saved:read for saved content, and collections:write for collection changes. Missing tool permissions return a tool error in the JSON-RPC result.","security":[{"mcpOAuth":[]}],"parameters":[{"in":"header","name":"MCP-Protocol-Version","description":"Send the protocol version negotiated during initialization on subsequent requests.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpMessage"},"example":{"jsonrpc":"2.0","id":1,"method":"tools/list"}}}},"responses":{"200":{"description":"JSON-RPC result or error. A tool result can contain isError: true.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpResponse"}}}},"202":{"description":"Notification accepted. The response body is empty."},"400":{"description":"Invalid JSON-RPC message or protocol version."},"401":{"description":"Missing, invalid, expired, revoked, or unscoped token. Connect through OAuth.","headers":{"WWW-Authenticate":{"description":"Bearer challenge with the MCP protected-resource metadata URL.","schema":{"type":"string"}}}},"403":{"description":"The account does not have paid access."},"406":{"description":"Accept must include application/json and text/event-stream."},"415":{"description":"Content-Type must be application/json."},"503":{"description":"MCP authentication is temporarily unavailable."}}}}},"components":{"securitySchemes":{"mcpOAuth":{"type":"oauth2","description":"Use PKCE S256 and resource=https://mcp.nicelydone.club/mcp. Scope requirements depend on the MCP tool or resource.","flows":{"authorizationCode":{"authorizationUrl":"https://nicelydone.club/api/mcp/authorize","tokenUrl":"https://nicelydone.club/api/mcp/token","scopes":{"library:read":"Search the design library and read screen details.","saved:read":"Read your favorites and collections.","collections:write":"Create and update your collections and add screens."}}}}},"schemas":{"McpMessage":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer"],"description":"Omit for notifications."},"method":{"type":"string","description":"MCP method, such as initialize, tools/list, tools/call, or resources/read."},"params":{"type":"object","additionalProperties":true}}},"McpResponse":{"type":"object","required":["jsonrpc","id"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer","null"]},"result":{"type":"object","additionalProperties":true},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":{}}}},"oneOf":[{"required":["result"]},{"required":["error"]}]}}}}