Developers

MCP and AI assistants

Gradiently's MCP server gives an AI assistant tools to search Marks, make brands and designs, edit them and render them. It runs at one address and uses your API key.

Updated October 1, 2026

The Model Context Protocol is an open standard for giving AI assistants tools. Gradiently runs a hosted MCP server at https://gradiently.design/api/mcp. Connect it once with an API key, and your assistant can call Gradiently's tools while you talk to it. Each tool makes the same API requests your own code would, so it has the same permissions, licences, credits and limits.

Before you connect

  • Create a key in Settings › API and agents (see API keys and scopes). The key decides which workspace the assistant works in and which tools will work.
  • Every request to the server must carry the key as Authorization: Bearer gr_live_…, including the first one. Without it the server answers 401.
  • The server speaks Streamable HTTP, stateless, with JSON responses. It needs no session and has no separate event stream to open.
  • The server accepts API keys only. It does not offer an OAuth sign-in.

Connect Claude Code

Add Gradiently as a remote server over HTTP, with your key in the header. Keep the key in an environment variable so it never lands in your shell history or a committed file.

bash
export GRADIENTLY_API_KEY="gr_live_…"

claude mcp add --transport http gradiently https://gradiently.design/api/mcp \
  --header "Authorization: Bearer $GRADIENTLY_API_KEY"

Start a new Claude Code session and ask it to list Gradiently's tools to check the connection. If it reports an authentication error, the key was mistyped, revoked, or its creator is no longer an owner or admin of the workspace.

Other clients

Any client that can add a remote MCP server over Streamable HTTP and send a custom request header can use Gradiently with the same URL and header. Whether yours can depends on the client and its version.

  • Claude Desktop and claude.ai add remote servers as custom connectors. If the connector form lets you set an Authorization header, use the URL and header above. If it offers only an OAuth sign-in, Gradiently can't be connected there yet.
  • ChatGPT and other assistants: the same rule. Where the client supports remote MCP servers with a bearer header, connect it with the URL and your key.
  • Clients configured with a JSON file often accept the shape below, which is also shown in Settings under Connect an MCP client. Check your client's documentation for its exact format.
json
{
  "mcpServers": {
    "gradiently": {
      "url": "https://gradiently.design/api/mcp",
      "headers": { "Authorization": "Bearer gr_live_…" }
    }
  }
}

How the tools behave

  • Each tool returns its result as JSON text. When something fails, the tool returns the API's error message instead, such as a missing scope or an unknown template.
  • Tools that need a brand take an optional personality (its id or slug). Without one they use the workspace's first brand.
  • Tools that save a design return its Studio link, the design's /studio/<id> address on gradiently.design.
  • Several tools first look up your brands through /api/me, which needs both workspaces:read and designs:read. Those tools list both scopes below.
  • A tool call counts against your key's rate limit once for the MCP request and once for each API request the tool makes.

Marks

ToolWhat it doesInputsScopes
search_marksSearches the public Market by name or code. Returns colours, materials, status and holder.q, tone (dark or light), limit (1 to 120, default 24), all optionalmarks:read
get_markOne Mark and its full recipe.code (a code or an id)marks:read
list_marksMarks held for this workspace, with licence state, and your drafts in it.nonemarks:read
claim_markClaims an available Mark. The key's creator holds it, never the workspace.codemarks:read, marks:claim
make_markBuilds a Mark recipe from intent, or edits one, with a colour and readability review and the closest Mark in the Market. Saves nothing.spec, or recipe and editmarks:read
save_markSaves a recipe as your private draft Mark, or updates a draft you own. Returns its Forge link.name, recipe, id (optional)brand:generate
export_markRenders a Mark on its own as a PNG, up to 4096 px a side.mark, width, height, personalityworkspaces:read, designs:read, designs:write
list_mark_versionsA draft's saved versions, newest first. Only the Mark's creator sees them.mark, cursormarks:read
save_mark_versionKeeps a draft as it is now, or a given recipe, as a named version.mark, label, recipebrand:generate
restore_mark_versionPuts a version back as the draft. The current state is kept as a version first.mark, versionbrand:generate
update_mark_versionRenames or stars a version. Starred versions are kept.mark, version, label, starredbrand:generate
delete_mark_versionDeletes a version, never the published one.mark, versionbrand:generate

A claim that needs payment fails with a message that it needs checkout; finish it in Gradiently. A key can't pay for anything.

Brands and workspace

ToolWhat it doesInputsScopes
generate_brandMakes brand candidates from a name and description. The same input always gives the same candidates.input: name, description, industry, tone, colours, count, noncebrand:generate
adopt_brandTurns one candidate into a draft Mark, a brand and three starter designs, in one step.input (unchanged), keybrand:generate
list_personalitiesThe workspace's brands, with their ids.noneworkspaces:read, designs:read
create_personalityCreates a named brand.namepersonalities:write
get_brand_profileWhat a brand is, who it's for, its voice, dos and don'ts, and fonts.personalityworkspaces:read, designs:read
update_brand_profileReplaces a brand's profile. The Designer reads it before every design.personality, profileworkspaces:read, designs:read, personalities:write
my_workspaceYou, the workspace's brands with their Mark codes, and the Marks held for it.noneworkspaces:read, designs:read, marks:read
list_workspacesThe key's workspace and your role in it.cursorworkspaces:read
invite_memberEmails a seven-day invitation to join the workspace.workspaceId, email, role (admin, editor or viewer)members:write

tone takes up to three of calm, bold, warm, cool, playful, luxe, natural, technical, editorial and nocturnal; a request with more is rejected. colours takes up to eight hex colours and count asks for one to eight candidates; more of either is rejected too. To adopt a candidate, send exactly the input that generated it with the candidate's key: the server makes the candidate again from that input and never trusts a recipe sent by the client.

Designing

ToolWhat it doesInputsScopes
designAsks Gradiently's own Designer to make a design, or change one, from a plain request. It reads the brand profile and Mark, designs, reviews and saves.request, personality, size, designId, scope, selectionworkspaces:read, designs:read, designs:write
create_designsMakes a set of up to twelve designs from one brief, in the background.brief, items (size, brief, title), title, personality, mark, waitworkspaces:read, designs:read, designs:write
get_design_setA set's progress and each design's Studio link once it exists.iddesigns:read
stop_design_setStops a running set. Designs already drawn stay saved.iddesigns:write
compose_designLays out your copy with the layout engine and saves it. Returns review issues to fix.composition, personality, designId, titleworkspaces:read, designs:read, designs:write
find_templatesSearches Gradiently's hand-made designs. Returns up to six, with a picture and their slots.query, sizeany key
use_templateMakes a saved design from a template, keeping its composition.template, text, photos, icons, hide, personality, designIdworkspaces:read, designs:read, designs:write
list_templatesStarter template ids with their text element ids, and every size preset.noneany key
create_designCreates a design from a starter template id, a size preset and copy keyed by element id.template, size, copy, look, personalityworkspaces:read, designs:read, designs:write

design and create_designs spend the workspace's AI credits, as the Designer does in the Studio. When the balance is too low they fail with a message saying so; top up in Settings › AI credits. At most two sets run at once per person, and a finished set stays readable for about twenty minutes. The designs themselves stay.

A composition names a size (a preset id such as ig-post, x-post or li-banner, or {w, h} in pixels), a layout (statement, editorial, poster, split, stat, quote, list, event or minimal) and blocks in reading order, each with a role such as headline, body or cta and its text.

json
{
  "composition": {
    "size": "ig-post",
    "layout": "event",
    "blocks": [
      { "role": "eyebrow", "text": "Summer supper club" },
      { "role": "headline", "text": "Long table on the roof" },
      { "role": "details", "text": "", "items": ["Saturday 21 June", "7pm till late"] },
      { "role": "cta", "text": "Book a seat" }
    ]
  }
}
Input for compose_design. The answer holds the design's id, its Studio link, review issues and the elements it placed.

Editing and exporting

ToolWhat it doesInputsScopes
list_designsA brand's saved designs with Studio links.personalityworkspaces:read, designs:read
get_designA design's size, pages and every element with its properties. Filter long designs by page, kind, name or text.id, page, kind, name, textdesigns:read
edit_designChanges a design with up to 100 operations, as a person would in the Studio, and saves it.id, ops, pagedesigns:write
update_design_textReplaces the words of chosen text elements and keeps the layout.id, text (element id to words)designs:read, designs:write
resize_copiesSaves copies in up to eight other sizes, reflowed as the Studio does. The original is unchanged.id, sizesdesigns:read, designs:write
wear_markPuts a Mark on one design, or makes it a brand's Mark for new designs.mark, and design or personalitysee below
render_designRenders a saved design to PNG or PDF with the Studio's engine. Returns the file as base64.id, width, height, format, pagedesigns:read
export_design_linkPublishes a view link, /d/<id>, that anyone with it can open.iddesigns:write

wear_mark on a design needs designs:read and designs:write. Making a Mark a brand's Mark needs workspaces:read, designs:read and personalities:write, and a Mark you hold with an active licence. Naming the Mark by its code also needs marks:read.

render_design takes width and height from 1 to 4096 pixels and format png or pdf. page counts from 0: PNG renders the first page by default and PDF every page. A PDF keeps each page at its Studio size, so the size you ask for must match. Rendering needs the same export licence for the design's Mark as the Studio, and it never publishes or changes the design.

Example prompts

  • "Find dark Marks in the Market with chrome in them and show me the three closest to deep teal." Uses search_marks.
  • "Generate brand directions for Hearth, a neighbourhood bakery, calm and warm, and adopt the one with the softest palette." Uses generate_brand and adopt_brand.
  • "Forge a Mark called Night Harbour: a void ground, navy to sodium orange, one quiet grain layer. Fix anything the review flags, then save it." Uses make_mark and save_mark.
  • "Change the headline on design 4f1c… to 'Doors open at seven' and make copies for an Instagram story and an X post." Uses get_design, update_design_text and resize_copies.
  • "Render design 4f1c… as a 1080 by 1350 PNG and save it to launch.png." Uses render_design.
  • "Make a poster for our rooftop solstice party, 21 June, sunset to sunrise." Uses design, which needs workspaces:read.

The whole reference for the endpoints behind these tools is on API reference. For anything else, send us a request.

Need a hand?

Send us a request with the topic API and MCP, and a person will reply.

Send a request