{"language":"en","name":"Dermalytics MCP","version":"1.1.0","description":"Model Context Protocol (MCP) server for ingredient and product search, product lookup and INCI analysis. It exposes the same public data surfaces as the Dermalytics REST API.","documentationUrl":"https://www.dermalytics.dev/docs","serverUrl":"https://api.dermalytics.dev/mcp","docsEndpoint":"https://api.dermalytics.dev/v1/mcp/docs","authentication":{"type":"bearer","headerName":"Authorization","description":"Send your Dermalytics API key as Authorization: Bearer <API_KEY>.","getApiKeyUrl":"https://www.dermalytics.dev/dashboard"},"transport":{"type":"Streamable HTTP","endpoint":"https://api.dermalytics.dev/mcp","notes":"Stateless HTTP transport served by the hosted API."},"tools":[{"name":"search_ingredients","description":"Search ingredient names, synonyms or exact CAS/EC identifiers. Costs 1 credit per non-empty page, 0 for empty results. Follow next_offset explicitly.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"q":{"type":"string","minLength":2,"maxLength":100},"limit":{"default":20,"type":"integer","minimum":1,"maximum":50},"offset":{"default":0,"type":"integer","minimum":0,"maximum":10000}},"required":["q","limit","offset"],"additionalProperties":false},"creditsPerCall":"1 per non-empty page","mapsToApi":"GET /v1/ingredients"},{"name":"search_products","description":"Search active products by name or brand, with optional exact brand and ingredient filters. Costs 1 credit per non-empty page. Follow next_offset explicitly.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"q":{"type":"string","minLength":2,"maxLength":100},"limit":{"default":20,"type":"integer","minimum":1,"maximum":50},"offset":{"default":0,"type":"integer","minimum":0,"maximum":10000},"brand":{"type":"string","minLength":1,"maxLength":255},"ingredient":{"type":"string","minLength":1,"maxLength":255}},"required":["q","limit","offset"],"additionalProperties":false},"creditsPerCall":"1 per non-empty page","mapsToApi":"GET /v1/products"},{"name":"get_product","description":"Retrieve a product and its stored ingredient IDs, names and positions. Costs 1 credit on success. Stored traits are not verified safety claims.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id"],"additionalProperties":false},"creditsPerCall":1,"mapsToApi":"GET /v1/products/{id}"},{"name":"get_ingredient","description":"Look up one cosmetic ingredient by INCI-style name or known synonym. Returns the same fields as GET /v1/ingredients/{name}.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Ingredient name or synonym, for example \"niacinamide\"."}},"required":["name"]},"creditsPerCall":1,"mapsToApi":"GET /v1/ingredients/{name}"},{"name":"analyze_product","description":"Analyze a full product ingredient list. Returns the same fields as POST /v1/analyze.","inputSchema":{"type":"object","properties":{"ingredients":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Array of ingredient names from a product INCI list."}},"required":["ingredients"]},"creditsPerCall":"1 per matched ingredient","mapsToApi":"POST /v1/analyze with body { ingredients: string[] }"}],"responseFields":{"severity":"safe | low_risk | moderate_risk | high_risk.","safety_status":"Overall formulation severity for analyze_product.","found":"Whether an analyze_product row matched an ingredient in the Dermalytics database.","description":"Ingredient description when available.","comedogenicity":"Integer 0-5 when available.","irritancy":"Integer 0-5 when available.","formula":"Chemical formula when available.","molecular_weight":"Molecular weight when available.","cas_no":"CAS Registry Number when available.","ec_no":"European Community number when available.","ph_eur_name":"Ph. Eur. name when available.","functions":"Cosmetic function list.","trait_flags":"Ingredient-level traits used to determine product badges such as fragrance-free, paraben-free, and fungal-acne-safe.","category":"Primary ingredient category when available.","synonyms":"Known alternate names returned by get_ingredient.","credits_remaining":"API credits remaining after a successful charged call."},"errorResponses":{"400":"Validation error.","401":"Missing or invalid Bearer API key.","402":"Insufficient credits.","404":"Ingredient or product not found.","500":"Internal server error.","503":"Product catalog temporarily unavailable."},"integration":{"cursor":{"configPath":".cursor/mcp.json","example":{"mcpServers":{"dermalytics":{"url":"https://api.dermalytics.dev/mcp","headers":{"Authorization":"Bearer YOUR_API_KEY"}}}}},"claudeDesktop":{"configPath":"Claude Desktop config (varies by OS)","example":{"mcpServers":{"dermalytics":{"url":"https://api.dermalytics.dev/mcp","headers":{"Authorization":"Bearer YOUR_API_KEY"}}}}}},"apiEndpoints":[{"method":"GET","path":"/v1/ingredients","description":"Ingredient search."},{"method":"GET","path":"/v1/products","description":"Product search."},{"method":"GET","path":"/v1/products/{id}","description":"Product and stored ingredient list."},{"method":"GET","path":"/v1/ingredients/{name}","description":"Single ingredient lookup."},{"method":"POST","path":"/v1/analyze","description":"Product ingredient list analysis."}]}