Connect an agent with MCP

MCP is another door onto the same Pro API: same permissions, same caps, same credits, same activity log. An agent connects to one address and sees tools it can use in plain language. There is nothing to install and nothing to write.

Claude Desktop, claude.ai, ChatGPT, Claude Code, Cursor, VS Code and Windsurf all speak it.

The address is a secret

https://api.tendre.ai/mcp/<key>

The key is a Pro API key, created in the app under Settings > API.

Read that address again: the key is inside it. Anyone who has the link renders with your credits, up to your caps. Treat it exactly like a password. Do not paste it into a shared document, a ticket or a screenshot, and if it gets out, revoke the key in the app: the agent stops at once.

Agents that let you set a header can use https://api.tendre.ai/mcp with Authorization: Bearer <key> instead, which keeps the key out of the URL.

Connect your agent

Everything below was checked on 22 September 2026. These are other companies' menus, and they move: Claude and OpenAI both changed theirs the same day this page was written, and OpenAI also limits custom MCP servers to some plans. If a path no longer matches what you see, look for "connectors" or "MCP" in that product's settings. The one thing that does not change is the address you paste.

  • Claude Desktop, claude.ai and the mobile app: Customize > Connectors > Add custom connector, paste the address, no extra authentication. Direct link: https://claude.ai/new#customize/connectors. It works immediately, on every device on the account, with nothing to restart. (Connectors used to live under Settings; that page now points here.)
  • ChatGPT: turn on developer mode in the settings first, then Plugins > New plugin > Custom tool. Name it Tendre.AI, put the address in Server URL, set Authentication to None, tick the warning to say you understand, and Create.
  • Claude Code: claude mcp add --transport http tendre https://api.tendre.ai/mcp/<key>
  • Cursor, in ~/.cursor/mcp.json:
json
{ "mcpServers": { "tendre": { "url": "https://api.tendre.ai/mcp/<key>" } } }
  • VS Code, in mcp.json:
json
{ "servers": { "tendre": { "type": "http", "url": "https://api.tendre.ai/mcp/<key>" } } }
  • Windsurf, in ~/.codeium/windsurf/mcp_config.json:
json
{ "mcpServers": { "tendre": { "serverUrl": "https://api.tendre.ai/mcp/<key>" } } }

The quickest way in is the app's Settings > Connectors tab: it creates the key and writes these settings for you, in one click, for the agents installed on your computer. For the web agents (claude.ai, ChatGPT), it copies the address for you to paste into their connector settings.

The thirty-one tools

ToolWhat it does
tendre_generate_imageOne or several images (count 1 to 8), with or without a LoRA, or the retouching of a source image (mode edit, img2img, or inpaint with mask_url). seed renders a previous image again, or a variation of it. It waits for the render by default, up to 55 s, and puts the images straight into the conversation. wait=false returns identifiers instead.
tendre_generate_videoSubmits a clip (format, sound, length, frame rate fps, LoRA) from a prompt, by animating an image (plus an end image for a transition), in Ultra mode (quality max, 1080p at most; billed per second, seconds gives the length, 4 to 30 s), with keyframes (keyframes, Quality mode), with enhanced consistency (consistency enhanced, up to 721 frames per shot, that is 30 s at 24 fps, extensions included), or by extending the previous clip (extend_job_id, with sequence_id for a long video). An Ultra shot extends forward or backward (extend_direction); one older than 24 hours, from its original file (extend_video_url, or extend_upload_id from tendre_upload_link, sent as is). seed renders a previous clip again, or a variation of it. A clip takes several minutes: by default the tool waits for the end (55 s at most) and returns the MP4 link, or the identifier if the render is not finished; wait=false returns the identifier right away. While it waits, the user's stop button cancels the render, and nothing is charged.
tendre_character_createCreates a character (seven views) from a photo: an upload link, a file attached in ChatGPT, an image rendered in the conversation, or a public address. Waits for it to be made (55 s at most) and puts the views into the conversation (1024 px previews; the links in the text give the full-size views). 6 credits, outfit included. See Characters.
tendre_character_getA character's state and its views (wait waits for the end of the making; sheet_id picks a sheet).
tendre_character_listThe characters on the account, those made in the app included, with the date each one will be erased.
tendre_character_redo_viewRedoes a failed view, or one that looks the wrong way (1 credit), with an optional instruction in the imperative for a character or a sheet created through the API; sheet_id targets one sheet.
tendre_character_set_viewReplaces a view of a character created through the API, or of a sheet added with tendre_character_add_sheet (sheet_id), with an image of the user, with nothing generated (free).
tendre_character_add_sheetAdds an outfit (a sheet) to an existing character, from the API or the app: ready views stored for free (views, role by role), missing roles generated (1 credit each), or, without views, the outfit put on its full-body view and six views generated (7 credits). Returns the sheet_id, to pass to tendre_character_get, tendre_character_redo_view, tendre_character_set_view and tendre_multiref_video. See Add an outfit.
tendre_character_deleteErases a character and its views.
tendre_subject_createSaves a location, an object, an animal, a style or an outfit from 1 to 6 images of the user, to use it again in Multi-Ref. Free. See Locations, objects, animals, styles and outfits.
tendre_subject_list, tendre_subject_get, tendre_subject_deleteThe locations, objects, animals, styles and outfits on the account (those of the app's Library included), their details and images, and their deletion. The elements offered by Tendre.AI join the list the first time it is read.
tendre_subject_generateGenerates a location, an object, an animal, a style or an outfit with no image from the user: a start image drawn from an English description (or imported, free), then views (see Generate a subject without images). 1 credit per rendered image, 6 images at most; waits 55 s, then returns the state and the images.
tendre_subject_add_views, tendre_subject_redo_viewAdds views to a generated subject, or redoes one (instructions replaces its brief; start redoes the start image while no view starts from it).
tendre_multiref_videoA Multi-Ref clip with 1 to 4 characters, objects and animals called by @Name in the prompt (subjects; in Ultra, up to 30 images in all, with 12 characters at most, 8 recommended), a saved location (location_id) or an optional one-off location image, Quality or Ultra (billed per second: seconds, 4 to 30 s), format, length, frame rate fps, sound, seed, and with sound a voice for the first two characters (voice_url, the public address of an audio file, 4 MB at most; order the characters like the dialogue). Waits for the end like tendre_generate_video, and the stop button cancels the render. In Ultra, also styles, outfits (with worn_by) and motion (a motion video: video_upload_id, video_job_id or video_url; mode camera or choreography). See Multi-Ref Video. With sound, the first two characters speak with the voice of their profile by default (voice generated for a voice made by the model).
tendre_multiref_imageCreates an image with characters (by their view or their LoRA), objects, animals and a location, called by @Name in the English prompt (see Create an image). Answers with the jobId right away: the image takes 1 to 3 minutes, follow it with tendre_job_status (kind images). quote_only gives the price without starting anything.
tendre_face_swapFace swap (whole character, or the head alone with part head): the person on camera in one of your videos (upload link, file attached in ChatGPT, public address, 95 MB at most) or in a video rendered in the conversation becomes one of your characters, over a passage of 20 s at most (start, duration), with scene, name, zone, likeness and, with sound, the character's voice (voice_url, the public address of an audio file, 2 MB at most). By default the sound takes the voice of the character's profile when it has one (voice original keeps the filmed voice). Transitions transition_in and transition_out: cut (the default), morphing (a fade) or glitch (a digital effect on the silhouette); with one, the whole video comes back (60 s at most). The answer gives the bounds of the passage (passage). 6 credits per second of passage. Waits for the end like tendre_generate_video, and the stop button cancels the render. See Face swap.
tendre_sequence_createOpens a sequence, to build a long video shot by shot.
tendre_sequence_exportJoins the shots of a sequence into a single video and returns its MP4 link.
tendre_project_exportExports the project folder of a render (job_id) or of a sequence (sequence_id) less than 24 hours old: the manifest in the answer, the ZIP by a link. manifest_only returns the manifest alone. For a sequence, include_film adds the assembled film. include_media, include_references and exclude_references choose what goes in, like the app's export window. Free. See Export the project folder.
tendre_upload_linkCreates an upload link for one of your images or videos (a photo or a video attached to the conversation, a file on your computer or phone). You open it and drop the file in, or an agent with access to your files sends it itself. A video (MP4, MOV, WebM or MKV, 95 MB at most) goes to tendre_face_swap. Free.
tendre_job_statusWhere a render is up to. For a video it waits for the end by default (55 s at most, wait=false for a quick look), and the stop button cancels the render while it waits. Once finished, an image comes back in the conversation and a video as a link.
tendre_cancel_jobCancels a render. Nothing is charged.
tendre_list_lorasThe characters on the account, with the name to pass as lora and the trigger word to put in the prompt.
tendre_buy_creditsThe credit packs with today's prices, and the purchase link of your licence. Beyond the largest pack, it also offers a custom amount (credits parameter). This tool does not pay: you open the link and pay, by card or crypto.
tendre_purchase_creditsBuys a pack (or a custom amount) on your saved card, if you allowed your agent to buy in the automatic top-up of your account page, within your monthly limit. The agent must announce the pack and its price and wait for your yes in the conversation (confirmed). If the purchase is refused, it gives you the ordinary purchase link. An email confirms each purchase.
tendre_creditsBalance, the key's caps, renders in flight.
tendre_pricingToday's price grid.
tendre_quoteWhat a render will cost, before you start it: a character's making (kind characters) and a Multi-Ref clip (multiref true) included. Takes consistency for a clip in enhanced consistency, and fps: the answer gives the length in seconds at that rate. For an Ultra billed per second, seconds sets the length. For an Ultra extension, extend_job_id and extend_direction.

If the connection drops before tendre_generate_image, tendre_generate_video, tendre_multiref_video or tendre_face_swap answers (a proxy timed out, a 524 error, the program stopped), the render is not started, or it is cancelled at once, and nothing is charged: just call the tool again. A character's creation (tendre_character_create) goes on even then: calling it again with the same photo and settings returns the same character, with nothing charged twice.

On connecting, the server hands the agent the house rules: prompts in English, the trigger word is mandatory with a LoRA, announce the cost before an expensive render, check the views of a new character before its first clip and redo a failed one, and a character, location, object or animal left unused for one year is erased.

Start from an image

You can ask for more than a picture from scratch: "make an image, then animate it", a transition between two images, a retouch.

The agent points to the image in one of two ways. Either by its identifier, when it was rendered in the conversation (image_job_id; the file is read back on our side while the engine still holds it, a few tens of minutes). Or by the public address of a PNG or JPEG of 12 MB at most (image_url; private addresses are refused). For a transition, the end image is given the same way (end_image_job_id, end_image_url). When you set no format, the clip takes the image's. A transition comes out at the requested size, from 480p to 1080p, and is billed as a clip of that format. For keyframes (Quality mode), keyframes takes 1 to 4 objects { at, image_job_id | image_url | image_upload_id, strength } and asks for a fixed length (length).

Your own photo

  • ChatGPT: attach the image to the conversation and ask. Nothing else.
  • Every other agent (Claude, Cursor...): the agent gives you an upload link (tendre_upload_link). Open it, drop the image in or paste it, then tell the agent it is done. An agent with access to your files (Claude Code, Cursor, VS Code) sends it itself.

Your photo is never written to disk. It stays in memory for 30 minutes, long enough for the render, and is then forgotten. The upload link only works for the key that created it. The exceptions are a photo used to create a character, which becomes one of the character's views, and the images of a saved location, object or animal: both are stored encrypted, under your control, until you delete them or until one year without use (see below).

Characters in the same clip

Ask "make a character from this photo": the agent creates it (6 credits), shows you the seven views, and redoes a failed one. Then ask for the scene, "a clip where Lea hands a cup to Tom in a sunny kitchen": it casts them with Multi-Ref Video, each one called by @Name, up to four per clip (twelve in Ultra, eight recommended). The characters you made in the app are there too. A view that keeps coming out wrong (a prosthesis on the wrong side, say) is redone with an instruction, or replaced by your own image.

Give the agent a few pictures of a place, an object or an animal and say what it is: it saves it (free), and you can then ask for "@Lea waits for @Tram in @Plaza". Up to four characters, objects and animals in all, plus one saved location as the setting; in Ultra, up to 30 images in all, with twelve characters at most (eight recommended). The details are on the Characters page and in Multi-Ref Video.

A character in your own video (Face swap)

Send the agent a video and name one of your characters: with tendre_face_swap, the person on camera becomes that character, face, hair, body and outfit, keeping the gestures, the lips, the sound and the setting, over a passage of 20 s at most. The video comes:

  • from an upload link (tendre_upload_link takes a video too: MP4, MOV, WebM or MKV, 95 MB at most);
  • as a file attached in ChatGPT;
  • from a public address (private addresses are refused);
  • or from a video rendered in the conversation.

To change only the head (face and hair) and keep the filmed body, clothes and setting, ask the agent: it sends part head.

By default, the sound of the video takes the voice of the character's profile when it has one; to keep the filmed voice, ask for it: the agent sends voice original. A voice given by voice_url takes precedence, and its first 20 seconds are used.

A character made in the app has no name on our side: the agent gives it one (name) to call it by @Name in the scene. For the character's voice, give the public address of an audio file of 2 MB at most (voice_url): the sound of the video is converted into that voice. Your video passes through our servers while it is prepared, then goes to the graphics card that renders it. The result comes back as a video link, like any clip, at the working format (about one megapixel): full resolution and several characters in a row stay specific to the desktop app. The price is per second of passage, see Face swap.

Transitions, like the corners of the cards in the app: transition_in goes from the person on camera to the character at the start of the passage, transition_out from the character back to the person at the end. Each is cut (the default, no transition), morphing (a fade, about 0.5 s) or glitch (a digital effect limited to the silhouette, about 0.4 s). There is no transition in when the passage starts the video, nor out when it ends it.

With a transition, you get back the whole video, 60 s at most (a longer one is refused): the person on camera, the transition, the character over its passage, the transition, then the person again. It comes at the working format (about one megapixel) and at 24 or 30 fps; the desktop app pastes the character back at full resolution and at the original frame rate. The rendered (and billed) passage grows by about 0.3 s on each side that has a transition. Laying the transitions is free and takes a few seconds to a minute after the render, while tendre_job_status answers pending (phase assembling the transitions). The video_job_id of such a render points to its whole video: give it to tendre_face_swap to put a second character in the same video. Our server handles two face swaps with transitions at a time; past that, the tool asks you to try again in a few minutes.

The answer gives the exact bounds of the passage, in seconds (passage: start, end). Without a transition, a passage counts 8n+1 frames, rounded down: 2.9 s asked gives 2.7 s. To put another passage right after it, start it at end. With a transition, the passage is exact to the frame.

To join two characters, start the second at the first one's passage.end: it fits on to the frame, and its transition in plays in full just before the join (about 0.4 s of glitch or 0.5 s of fade rendered extra on its side), without going back through the person on camera. Leave the first one's transition_out on cut: otherwise the tool warns that the two transitions would overlap. The answer then carries passage.joined_to_previous.

Only use videos of people who have given their consent: it is a rule of the terms of use.

Images come back, videos are a link that expires

An image arrives in the conversation: the protocol has a place for image content.

A video does not, and weighs too much for one. It comes back as a link that relays the file from the engine output and stays valid for a few tens of minutes. Nothing is kept on our side afterwards.

So an agent that can write to your disk (Claude Code, Cursor, VS Code) is told to save the file for you. One that cannot, like a web chat, can only hand you the link. Download it while it lives: once it expires the clip is gone, and rendering it again costs credits again.

There are three exceptions. A long video: its shots stay on our server only while it is being assembled, and are erased 30 minutes after the last one was added; the assembled video is kept for 24 hours, so you can find it again if you come back later, and is then erased too. And a character: its views, the photo you sent among them, are stored encrypted under your licence until you delete it (tendre_character_delete) or it goes one year unused. Last, a Face swap with a transition: the whole video stays in our server's memory until the character and its transitions are laid on it, the final video 30 minutes more, and your video only touches the disk while it is prepared. Nothing else stays with us.

Maximum quality

For the finest render, just ask for it ("in maximum quality"): the agent switches to Ultra mode, tells you the price first, and warns you that the render takes longer. Video goes up to 1080p: there is no 4K.

Long video

A clip lasts 20 seconds at most at 24 fps (16 s at 30, the default), 30 s in enhanced consistency at 24 fps. For longer, just ask for the whole video ("a one-minute video of..."): there is nothing else to know. The agent renders it shot by shot, each shot carrying on the movement of the previous one with no stop at the join, then joins them into a single MP4 and gives you its link.

The shots render one after another, and each takes several minutes. Each costs the price of a clip, which tendre_quote gives before anything starts. In enhanced consistency (consistency enhanced), one minute fits in two shots of 30 s at 24 fps, each at twice the price of its format. The sound carries on from one shot to the next, except in enhanced consistency and in Ultra, where it starts fresh with each shot. The rules and the calls behind it are on the Videos page.

Several shots with hard cuts, up to 20 seconds, need no sequence: ask for the shots, and the agent writes them into a single clip (how to describe them).

Under the hood

The transport is MCP Streamable HTTP, protocol version 2025-06-18, stateless: one JSON-RPC message per POST, a JSON answer, no server stream (a GET answers 405). The methods are initialize, ping, tools/list and tools/call, and each tool calls the same API described in these pages, with the agent's key.

Windows · Mac · Cloud or local

Generate privately. Tonight.

Download tendre.AI for free and generate without limits, privately, on your own GPU.

OS Windows 10/11GPU NVIDIA 8GB+VRAM 12GB recommendedDisk 20GB

Mac: Apple silicon (M1 or later), macOS 13 or later. Intel Macs are not supported.

Local image generation on Mac needs an M4 with 24 GB of memory, or an M2 or M3 Pro, Max or Ultra with 24 GB. Below that, everything runs online with credits. Retouching and video run online on Mac for now.

Everything about tendre.AI for Mac

No NVIDIA GPU? Start 100% in the cloud: 5 free images and 1 free video every day. An NVIDIA card (8GB+) unlocks unlimited local generation.