protogrid

Search / io.github.ThomasFindlay/beautyspark-mcp

BeautySpark

R0· no sign-in

BeautySpark MCP server for ChatGPT, Claude and other MCP clients

v1.0.0 · active · repository · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality90strong
Trust94of 100
Uptime, 30 days100%
Latency p50458 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "beautyspark-mcp": {
      "type": "http",
      "url": "https://mcp.beautyspark.me/mcp"
    }
  }
}
claude mcp add --transport http beautyspark-mcp https://mcp.beautyspark.me/mcp
[mcp_servers.beautyspark-mcp]
url = "https://mcp.beautyspark.me/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "beautyspark-mcp": {
      "type": "remote",
      "url": "https://mcp.beautyspark.me/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "beautyspark-mcp": {
      "type": "http",
      "url": "https://mcp.beautyspark.me/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=beautyspark-mcp&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbWNwLmJlYXV0eXNwYXJrLm1lL21jcCJ9"
}
{
  "servers": {
    "beautyspark-mcp": {
      "type": "http",
      "url": "https://mcp.beautyspark.me/mcp"
    }
  }
}
{
  "mcpServers": {
    "beautyspark-mcp": {
      "httpUrl": "https://mcp.beautyspark.me/mcp"
    }
  }
}
extensions:
  "beautyspark-mcp":
    enabled: true
    name: "beautyspark-mcp"
    type: streamable_http
    uri: "https://mcp.beautyspark.me/mcp"
    timeout: 300

Quality 90 / 100strong

protocol88 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • warn
    protocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every use
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene88 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations22 of 22 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: search_guides (idempotentHint); get_guide (idempotentHint); search (idempotentHint); …
  • pass
    tools.token_costabout 7,461 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
  • pass
    tools.hidden_textno hidden text in tool names, descriptions, schemas or annotations
stability100 · weight 15
  • pass
    stability.changes1 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
  • pass
    stability.new_linksno tool change named a new site
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

22 tools, about 7,461 tokens to load them all · tool set b85fa9ce0f84 · tools last changed 2026-11-11 · checked 2026-11-14 07:03 UTC

Tool changes

  • save_my_lookchangeddescription
    before

    Save a new look to the user's BeautySpark My Looks. Photos can't be added from chat: if the user attached or mentions a photo, tell them before saving that only the text is saved and that they can add the photo in BeautySpark from the returned link. Repeating the same save within 10 minutes returns the first look instead of a copy.

    after · 87% of words in common

    Save a new look to the user's BeautySpark My Looks. Photos can't be added from chat: if the user attached or mentions a photo, tell them before saving that only the text is saved and that they can add the photo with Add photo on the look card, when it shows one, or in BeautySpark from the returned link. Repeating the same save within 10 minutes returns the first look instead of a copy.

Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 94 / 100

provenance80
liveness100
freshness100
hygiene100

+repository +namespace-matches-repo +reachable +uptime-100% +updated-8d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://mcp.beautyspark.me/mcp streamable-httpnoneyes100%458 ms2026-07-282026-11-14

Tools (22)

check_product_for_seasonread-onlyLooks a product (and optional shade) up in BeautySpark's season picks. Returns the seasons it is recommended for, or match: null when BeautySpark has not reviewed it; then do not present any verdict as BeautySpark's. Pass season to also get that season's palette for comparison.
confirm_look_generationdestructiveStart the try-on prepared by try_look_from_photo. This spends the BeautySpark credits it quoted. The try-on widget calls it when the user presses Confirm. If no widget is showing, ask the user to confirm the cost first and call it only after they agree. Calling it again for the same quote returns the same job without charging again. If it answers conflict, the same quote is still being confirmed: call it again in a few seconds.
create_upload_urlUsed by the try-on widget to upload a photo the user picked. Returns an upload URL valid for 15 minutes.
delete_my_lookdestructiveDelete a saved look from the user's BeautySpark My Looks. The look is removed.
fetchread-onlyFor research modes (deep research, company knowledge). In chat, use get_guide instead. Returns the full text of one item from search: a guide section ("<locale>/<slug>#<anchor>"), an article look ("look:<id>") or a colour-season palette page ("season:<season>").
find_article_looksread-onlyFind makeup looks shown in BeautySpark articles, filtered by color season, article type and words. With a season, looks made for that season come first; general looks (no season) follow and are labelled. Returns look ids for get_article_look and the article URL to cite.
get_article_lookread-onlyGet the steps and shades of one makeup look from a BeautySpark article. The id is a look id returned by find_article_looks ("/images/blog/<article-slug>/<look-name>").
get_color_seasonread-onlyBeautySpark's palette for one of the 12 color seasons: best, neutral and avoid colors with hex codes, plus the eye makeup and lips & cheeks advice from the season guide. Cite the returned URLs.
get_guideread-onlyRead one section of a BeautySpark guide in full, by an id from search_guides. Also lists the ids and headings of the other sections of the same article. Cite the returned url.
get_look_statusread-onlyCheck a try-on started by confirm_look_generation. Waits up to waitSeconds (at most 25) for it to finish before answering. When completed, the result includes the image URL and, when the look has them, its step-by-step instructions with the colours for each step.
get_my_lookread-onlyGet one saved look in full: steps, products and shades, tags, categories, notes, photos and a link to open it in BeautySpark.
get_my_profileread-onlyThe user's BeautySpark analysis: color season, undertone, eye shape, face shape and app language. Fields are null until the selfie analysis has been run in the app.
get_product_picksread-onlyBeautySpark's top product pick per category (blush, highlighter, eyeliner, lipstick, lip gloss, bronzer, eyeshadow palette) for a color season, each with the reason and the article it comes from.
list_my_generationsread-onlyThe user's finished BeautySpark look generations, newest first: title, date, thumbnail and whether it is already in My Looks. Pass a jobId to save_generation_to_my_looks to save one.
list_my_palettesread-onlyThe palettes the user scanned in BeautySpark, with shade names and hex colors. Use them to advise with products the user owns; pass a paletteId as a product's userPaletteId in save_my_look.
save_generation_to_my_looksSave a finished BeautySpark generation (a jobId from list_my_generations) as a look in My Looks. Saving the same generation again returns the look already saved.
save_my_lookSave a new look to the user's BeautySpark My Looks. Photos can't be added from chat: if the user attached or mentions a photo, tell them before saving that only the text is saved and that they can add the photo with Add photo on the look card, when it shows one, or in BeautySpark from the returned link. Repeating the same save within 10 minutes returns the first look instead of a copy.
searchread-onlyFor research modes (deep research, company knowledge). In chat, use search_guides instead. Searches all public BeautySpark content: guide sections (id "<locale>/<slug>#<anchor>"), article looks (id "look:<id>") and colour-season palette pages (id "season:<season>"). Read any result with fetch.
search_guidesread-onlySearch BeautySpark's makeup and colour-season guides for sections that answer a question, e.g. eyeliner for hooded eyes or how to find your undertone. Returns up to 5 sections with a short snippet and a link; read one in full with get_guide. Cite the returned url. When nothing matches, the result has a note saying no BeautySpark guide covers it.
search_my_looksread-onlySearch the user's saved looks in BeautySpark My Looks by words, tag, category, favourite or person. Returns look ids for get_my_look.
try_look_from_photoPrepare a try-on: BeautySpark recreates a makeup look on the user's selfie. Give one reference: articleLookId (from find_article_looks) or savedLookId (from search_my_looks). Photos (a reference photo or a different selfie) can only be uploaded in the try-on widget, never taken from chat attachments. The saved selfie is used unless the user uploads another in the widget. Returns the credit cost and balance without charging; nothing is generated until confirm_look_generation.
update_my_lookdestructiveChange a saved look. Only the fields you send change; list fields (steps, products, tags, categories, occasions) replace the stored list whole. Look photos are kept. Steps can't be changed while any step has a photoUrl; the user edits those steps in the BeautySpark app. When the look's steps link products or shades, send productRefs and shadeRefs on every step you send ([] for a step with none): a step sent without them is refused unless products is sent too. To unlink every step, send products too.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "io.github.ThomasFindlay/beautyspark-mcp",
  "title": "BeautySpark",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://mcp.beautyspark.me/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "1.0.0",
  "repository": {
    "url": "https://github.com/ThomasFindlay/beautyspark",
    "source": "github",
    "subfolder": "apps/mcp"
  },
  "description": "BeautySpark MCP server for ChatGPT, Claude and other MCP clients"
}