← Home
SETUP

Published · Updated

Add Valmera as an MCP Server

One endpoint, every client. Valmera is a remote Model Context Protocol server over streamable HTTP with OAuth 2.1, so in most clients the entire configuration is a URL and a sign-in. Below is the exact config location and the literal JSON or command for each one, plus what the first call does once you are connected.

Each entry says what was verified and when. Where a client's support is undocumented or changing, it says that instead of guessing — a config that looks confident and fails is worse than one that admits a gap.

THE ENDPOINT
https://entrepreneur-bot-backend.onrender.com/mcp

Streamable HTTP · OAuth 2.1 with dynamic client registration and PKCE · a bearer-token path for clients without OAuth · 108 tools (97 editing, 11 session)

JUMP TO YOUR CLIENT

Claude (web, desktop, mobile)Claude CodeCursorVS Code (GitHub Copilot)ClineWindsurf (Cascade)ZedContinueGooseLibreChatMCP InspectorAnything stdio-only

Before You Start

You need a Valmera account — sign up free with email or Google, 50 credits, no card. Two things are worth knowing before you paste anything.

The connector is in limited release. Access is enabled per account, and it is re-checked on every request rather than at connection time. If a sign-in succeeds and the server still refuses, that is what happened — and the message says so, rather than claiming your password was wrong, because sending someone round a password-reset loop over an entitlement is a way to waste an afternoon.

An account created with Google sign-in has no password. The OAuth consent screen asks for one. Set it with "Forgot password" on valmera.io first, and the browser step will work the first time.

How to Add Valmera to Any MCP Client

  1. 1
    Find your client's MCP config
    Most clients keep a JSON or YAML file with a map of servers. The key is mcpServers in Cursor, Cline, Claude Code and LibreChat; servers in VS Code; context_servers in Zed; extensions in Goose. Several also have a UI that writes the file for you, which is the safer path the first time.
  2. 2
    Add the endpoint as a remote streamable-HTTP server
    The entry is the URL https://entrepreneur-bot-backend.onrender.com/mcp plus, in some clients, an explicit transport type — http in VS Code and Claude Code, streamable-http in Continue and LibreChat, streamableHttp in Cline, streamable_http in Goose. Windsurf calls the field serverUrl instead of url.
  3. 3
    Authenticate
    If the client supports OAuth, that is the whole of it: it reads the 401 challenge, discovers the authorization server, registers itself and opens a Valmera sign-in. There is no client id, secret or token to create. If it does not, paste a bearer token into the client's headers block instead.
  4. 4
    Confirm, then edit something
    Ask the model to list your Valmera projects. If it comes back with a list — or an honest empty one — the connection works. Then create a project, upload footage, wait for indexing, and describe the edit.

Setup is one paste and one sign-in in most clients. The first upload then needs a one-time analysis pass — transcript, silences, shot boundaries, frame tiles — which reports progress and is reused by every edit afterwards.

Every Client at a Glance

ClientConfig lives inAuthThe shape
Claude web / desktop / mobileConnectors UI (add on web)OAuthURL only
Claude Code~/.claude.json or .mcp.jsonOAuth or bearerclaude mcp add --transport http
Cursor~/.cursor/mcp.json or .cursor/mcp.jsonOAuthmcpServers → url
VS Code (Copilot).vscode/mcp.jsonOAuthservers → type: http
ClineRemote Servers tab or ~/.cline/mcp.jsonBearertype: streamableHttp
Windsurf~/.codeium/windsurf/mcp_config.jsonOAuth or bearerserverUrl (not url) · 100-tool cap
Zed~/.config/zed/settings.jsonOAuthcontext_servers → url
Continue.continue/config.yamlBearertype: streamable-http
Goose~/.config/goose/config.yamlOAuth or bearertype: streamable_http · uri
LibreChatlibrechat.yamlOAuth (DCR) or headerstype: streamable-http
MCP Inspectornpx, no installOAuth or --header--server-url --transport http
Anything stdio-onlyThat client's stdio configOAuth via the bridgenpx mcp-remote <endpoint>

The spread in that third column is the whole reason this page exists. Five clients spell the same transport five different ways, one renames the URL field, and one caps how many tools it will accept — none of which is discoverable from an error message.

The Configs

Claude (web, desktop, mobile)

Custom connector

CONFIG LOCATION

Settings → Customize → Connectors → + → Add custom connector

AUTH

OAuth — nothing to paste but the URL

Paste the endpoint into the URL field and save. Claude reads the 401 challenge, discovers the authorization server, registers itself, and opens a Valmera sign-in and consent page. The Advanced settings offer an OAuth Client ID and Secret; leave both empty — Valmera implements dynamic client registration, so there is nothing for you to create.

https://entrepreneur-bot-backend.onrender.com/mcp
  • Custom connectors are available on Free, Pro, Max, Team and Enterprise. Free accounts are limited to one custom connector.
  • On Team and Enterprise, an Owner adds it from Organization settings → Connectors instead, and members enable it.
  • Mobile can USE the connector but cannot add it. Add it once on claude.ai and it syncs to iOS, Android and the desktop app.
  • An account created with Google sign-in has no password, and the consent screen needs one. Set it with "Forgot password" on valmera.io first.

Verified 2026-08-04 against Anthropic's custom-connector help articles, and end to end against Valmera.

Claude Code

CLI

CONFIG LOCATION

~/.claude.json (local/user scope) or .mcp.json at the repo root (project scope)

AUTH

OAuth, or a bearer token in a header

One command, then /mcp inside a session to complete the browser sign-in. Add --scope user to get it in every repo, or --scope project to write a committed .mcp.json your team inherits.

claude mcp add --transport http valmera \
  https://entrepreneur-bot-backend.onrender.com/mcp
  • Confirm with claude mcp list — a working server reads ✔ Connected, ! Needs authentication means the sign-in has not completed, ✘ Failed to connect is transport or credentials.
  • For a static token instead: --header "Authorization: Bearer vlm_mcp_..." (-H is the short form).
  • Hand-editing .mcp.json: an entry with a url and no type is read as a stdio server and skipped. Keep "type": "http" — "streamable-http" is accepted as an alias.
  • Claude Code expands ${VAR} inside url and headers, so a committed .mcp.json can reference ${VALMERA_MCP_TOKEN} and keep the secret out of git.

Full Claude Code guide, with a session end to end

Verified 2026-08-04 against code.claude.com/docs/en/mcp, and end to end against Valmera.

Cursor

mcp.json

CONFIG LOCATION

~/.cursor/mcp.json (global) or .cursor/mcp.json (this project)

AUTH

OAuth — Cursor runs the flow itself

A remote server is a url entry. Cursor discovers the authorization server, registers itself and opens the Valmera sign-in — there is no client id, secret or token to fill in. You can also add and toggle servers from Customize in the sidebar.

{
  "mcpServers": {
    "valmera": {
      "url": "https://entrepreneur-bot-backend.onrender.com/mcp"
    }
  }
}
  • Cursor's documented remote shape is url plus optional headers; it does not require a type field.
  • Cursor asks before running each MCP tool by default. Most of an edit is reading — look_at, get_words, project_state — so use a Run Mode with an allowlist or the session becomes a confirmation dialog.
  • Cursor's OAuth redirect URLs are fixed: https://www.cursor.com/agents/mcp/oauth/callback for web and agents, http://localhost:8787/callback on desktop. Both are already accepted by Valmera's dynamic registration.
  • MCP Logs in the Output panel (Cmd+Shift+U) separate an unreachable URL from a rejected sign-in.

Full Cursor guide, including the screen-recording tools

Verified 2026-08-04 against cursor.com/docs/context/mcp.

VS Code (GitHub Copilot)

mcp.json

CONFIG LOCATION

.vscode/mcp.json in the workspace, or the user profile via MCP: Open User Configuration

AUTH

OAuth — VS Code opens a browser on first connect

VS Code's key is servers, not mcpServers — a config copied from another client's docs will not load. Run MCP: Add Server from the command palette to have it written for you, or paste this. MCP works in agent mode.

{
  "servers": {
    "valmera": {
      "type": "http",
      "url": "https://entrepreneur-bot-backend.onrender.com/mcp"
    }
  }
}
  • MCP: List Servers shows status; MCP: Browse MCP Servers opens the gallery.
  • For a static token, add a headers object. Do not hardcode it — use the inputs array with ${input:valmera-token} and type promptString with password: true, so VS Code prompts and stores it instead of committing it.
  • An explicit oauth block with a clientId exists for servers that require a pre-registered client. Valmera does not — omit it and let VS Code register dynamically.

Verified 2026-08-04 against code.visualstudio.com MCP servers and MCP configuration reference docs. Not yet exercised end to end against Valmera.

Cline

Extension UI or JSON

CONFIG LOCATION

The MCP Servers icon → Remote Servers tab, or ~/.cline/mcp.json for the CLI

AUTH

Bearer token — no documented OAuth flow

Add it from the Remote Servers tab: a name, the URL, and Streamable HTTP as the transport. Cline's documented remote authentication is a header, so mint a Valmera bearer token first — see below. The type field is streamableHttp, camel-cased, which is Cline's own spelling.

{
  "mcpServers": {
    "valmera": {
      "type": "streamableHttp",
      "url": "https://entrepreneur-bot-backend.onrender.com/mcp",
      "headers": {
        "Authorization": "Bearer vlm_mcp_..."
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}
  • Cline's docs describe header authentication and do not document an OAuth browser flow for remote servers. If you would rather not hold a token, wrap the endpoint in mcp-remote and add it as a stdio server instead.
  • autoApprove is a per-tool allowlist. Leave it empty until you know which calls you want unattended — a render and an export spend credits.

Verified 2026-08-04 against docs.cline.bot. OAuth support is undocumented rather than known-absent; treat the bearer path as the supported one.

Windsurf (Cascade)

mcp_config.json

CONFIG LOCATION

~/.codeium/windsurf/mcp_config.json

AUTH

OAuth is supported; a header also works

Windsurf's key for a remote server is serverUrl, not url — the one field that makes a config copied from Cursor or VS Code fail silently here. Headers support ${env:VAR} and ${file:/path} interpolation.

{
  "mcpServers": {
    "valmera": {
      "serverUrl": "https://entrepreneur-bot-backend.onrender.com/mcp",
      "headers": {
        "Authorization": "Bearer ${env:VALMERA_MCP_TOKEN}"
      }
    }
  }
}
  • Read this one before you connect: Cascade caps at 100 total tools across all servers, and Valmera publishes 108. You will need to disable other servers, or accept that Cascade will not see the whole registry. No other client on this page has that ceiling.
  • Windsurf's docs state OAuth is supported for each transport type, so the headers block above is optional if the sign-in flow works for you.

Verified 2026-08-04 against the Windsurf/Cascade MCP docs. The 100-tool cap is theirs, documented, and the reason this entry carries a warning.

Zed

settings.json

CONFIG LOCATION

~/.config/zed/settings.json (macOS/Linux), %APPDATA%\Zed\settings.json (Windows)

AUTH

OAuth when no Authorization header is set

Zed calls MCP servers context servers. Settings → AI → MCP Servers → Add Server → Add Remote Server writes this for you. When a remote server has no configured Authorization header, Zed runs the standard MCP OAuth flow.

{
  "context_servers": {
    "valmera": {
      "url": "https://entrepreneur-bot-backend.onrender.com/mcp"
    }
  }
}
  • Native remote-server support is recent. Older Zed builds had no url form at all and the workaround was mcp-remote as a stdio context server — if your settings file rejects url, that is the version you are on, and the fallback at the bottom of this page is the answer.
  • A headers object with Authorization: Bearer works if you would rather use a token.

Verified 2026-08-04 against zed.dev/docs/ai/mcp. Not yet exercised end to end against Valmera.

Continue

config.yaml

CONFIG LOCATION

.continue/config.yaml in the workspace, or a file under .continue/mcpServers/

AUTH

Bearer token — OAuth is not documented

The type is streamable-http, hyphenated and case-sensitive — streamableHttp and http are both rejected. Authentication goes in requestOptions.headers, which Continue documents for sse and streamable-http servers.

mcpServers:
  - name: valmera
    type: streamable-http
    url: https://entrepreneur-bot-backend.onrender.com/mcp
    requestOptions:
      headers:
        Authorization: Bearer vlm_mcp_...
  • MCP is available in agent mode only.
  • Continue's config reference does not mention OAuth for MCP servers, so plan on a token.

Verified 2026-08-04 against docs.continue.dev. OAuth is absent from the reference rather than documented as unsupported.

Goose

config.yaml

CONFIG LOCATION

~/.config/goose/config.yaml (macOS/Linux), %APPDATA%\Block\goose\config\config.yaml (Windows)

AUTH

OAuth on a 401 challenge, or a header

Run goose configure → Add Extension → Remote Extension (Streaming HTTP), name it, and paste the endpoint as the URI. Use the interactive path for the first setup — it writes correct YAML — and hand-edit afterwards to change the timeout or add headers.

extensions:
  valmera:
    enabled: true
    type: streamable_http
    name: valmera
    description: Agentic video editor
    uri: https://entrepreneur-bot-backend.onrender.com/mcp
    timeout: 60
  • Two spellings are Goose's alone: the key is uri where every other client uses url, and the type is streamable_http with an underscore.
  • Goose triggers OAuth when a server answers 401 with a WWW-Authenticate header, which is exactly what Valmera answers. Dynamic client registration is what makes that work without a client id.
  • Raise timeout above the default if you script long sequences; Valmera's own calls return within about 25 seconds regardless.

Verified 2026-08-04 against Goose's extension configuration docs and community setup guides. Not yet exercised end to end against Valmera.

LibreChat

librechat.yaml

CONFIG LOCATION

librechat.yaml, under a top-level mcpServers block

AUTH

OAuth with dynamic client registration, or headers

The simple form is a type, a url and a timeout in milliseconds. LibreChat is a multi-user server, so the interesting question is whose Valmera account gets used — see the second block.

mcpServers:
  valmera:
    type: streamable-http
    url: https://entrepreneur-bot-backend.onrender.com/mcp
    timeout: 60000

PER-USER OAUTH INSTEAD OF A SHARED TOKEN

mcpServers:
  valmera:
    type: streamable-http
    url: https://entrepreneur-bot-backend.onrender.com/mcp
    oauth:
      authorization_url: https://entrepreneur-bot-backend.onrender.com/mcp/oauth/authorize
      token_url: https://entrepreneur-bot-backend.onrender.com/mcp/oauth/token
      redirect_uri: http://localhost:3080/api/mcp/valmera/oauth/callback
  • Per-user identity is the right shape here. An oauth block with client_id and client_secret omitted makes LibreChat use dynamic client registration, so each of your users signs into their own Valmera account rather than sharing one.
  • The alternative — one bearer token in a static header — means every LibreChat user edits the same Valmera projects and spends the same credits. That is occasionally what you want and usually not.
  • customUserVars prompts each user for their own credential and interpolates it as {{VAR}} in headers, which is the middle path if you are issuing tokens yourself.

Verified 2026-08-04 against librechat.ai's mcp_servers reference. Endpoint paths shown are Valmera's own, read from the server's authorization-server metadata.

MCP Inspector

Debugging tool

CONFIG LOCATION

Nothing to install — npx, Node 22.19.0 or newer

AUTH

Full OAuth, or --header

This is the one to reach for when a client will not connect and you need to know whose fault it is. The Inspector implements the whole authorization flow, so if it connects and lists 108 tools, the server is fine and the problem is the client's config.

npx @modelcontextprotocol/inspector \
  --server-url https://entrepreneur-bot-backend.onrender.com/mcp --transport http
  • Add --cli for a scriptable client and --tui for a terminal UI; all three share the same OAuth state on disk.
  • List the tools without a browser step, once a token is stored: npx @modelcontextprotocol/inspector --cli --server-url <endpoint> --transport http --method tools/list
  • A static token instead of the browser flow: --header "Authorization: Bearer vlm_mcp_...", repeatable.
  • The CLI and TUI complete OAuth on http://127.0.0.1:6276/oauth/callback; the web client uses http://localhost:6274/oauth/callback. Both are accepted by Valmera's dynamic registration.
  • In CI, pass --stored-auth-only so it fails immediately instead of waiting for a callback nobody will complete.

Verified 2026-08-04 against the MCP Inspector docs (2026-07-28 protocol era).

Anything stdio-only: the mcp-remote Bridge

Some clients only know how to launch a local process and talk to it over stdin and stdout. That is not a reason to be locked out of a remote server. mcp-remote is a small npm package that runs as that local process, performs the OAuth flow in your browser, and proxies everything to the HTTP endpoint. To the client it looks like an ordinary stdio server.

{
  "mcpServers": {
    "valmera": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://entrepreneur-bot-backend.onrender.com/mcp"]
    }
  }
}

Credentials are cached in ~/.mcp-auth, so the browser step happens once. Node 18 or higher is required. If you would rather carry a token than run the flow, the --header flag takes one — and the environment-variable form below is not a style preference. Some clients mangle arguments containing spaces, and Authorization: Bearer … contains one, so the package's own documentation recommends putting the value in env and referencing it:

{
  "mcpServers": {
    "valmera": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://entrepreneur-bot-backend.onrender.com/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer vlm_mcp_..."
      }
    }
  }
}

To test the bridge on its own, before blaming your client: npx -p mcp-remote@latest mcp-remote-client https://entrepreneur-bot-backend.onrender.com/mcp. Transport selection is --transport, which accepts http-first (the default), sse-first, http-only and sse-only; Valmera is streamable HTTP, so the default is right and http-only skips one probe.

Verified 2026-08-04 against the mcp-remote README. Use it when a client has no remote support at all — a client with native HTTP support should use it directly, since every bridge is another process that can fail.

The OAuth Flow: Nothing to Paste

Most instructions for connecting a service to an AI client start with "create an app, copy the client id, copy the secret". There is none of that here, and the reason is worth understanding because it is also how you debug it when it fails.

  1. The client connects and is refused. The server answers 401 with a WWW-Authenticate header carrying a resource_metadata URL. That header is the entire entry point — a connector UI with no field to type a token can only find the authorization server by being told, here, where it lives.
  2. The client discovers the authorization server from /.well-known/oauth-protected-resource (RFC 9728), then reads /.well-known/oauth-authorization-server (RFC 8414) for the endpoints and supported grants.
  3. The client registers itself via dynamic client registration (RFC 7591), inventing its own client id on the spot and declaring the redirect URIs it will use. This is the step that removes the developer-portal detour. Registration accepts any https URI, plus http on localhost or 127.0.0.1 because desktop clients loop back to those — which covers Cursor's https://www.cursor.com/agents/mcp/oauth/callback and http://localhost:8787/callback, and the Inspector's http://127.0.0.1:6276/oauth/callback. No secret is issued: a client that cannot keep one is more honest as a public client with PKCE than as a confidential one whose secret ships inside an app.
  4. You sign in and consent in a browser window the client opens, with PKCE (S256) mandatory on the exchange.
  5. The code is exchanged for tokens and the original request is retried. Refresh tokens rotate, and replaying an authorization code revokes the whole grant rather than quietly issuing a second one.

Two details that decide how it feels day to day. The project you have open lives on the grant, so a reconnect resumes the same edit rather than dropping you at a blank canvas. And an unregistered redirect URI dead-ends on our own page instead of redirecting to it — a misconfigured client fails visibly, which is the behaviour you want from the one hop that carries an authorization code.

The Bearer Token Path

OAuth is the better path when there is a person and a browser. There often is not — a CI runner, a container, a client that never implemented the OAuth half of the spec. Cline and Continue are in that second category today. For those, the server accepts a static token on the standard header:

Authorization: Bearer vlm_mcp_...

A token is minted against your signed-in Valmera account and shown exactly once — it is stored only as a sha256 hash, so a lost token is replaced rather than recovered. While the connector is in limited release, minting is enabled per account; the MCP server page is where to ask for one.

Both credential types resolve to the same session inside the server — who you are, and which project is open — so a token session and an OAuth session receive an identical tool registry and identical refusals. Nothing is degraded by choosing the simpler one.

Do not commit it. Every client here supports a way not to: ${VALMERA_MCP_TOKEN} in Claude Code, ${env:VALMERA_MCP_TOKEN} in Windsurf and Cursor, an inputs entry with password: true in VS Code, customUserVars in LibreChat, and an env block with mcp-remote. A token in a repo is a token in everyone's clone.

The First Call, in Order

A connected client has 108 tools and no context. The studio hands Valmera's own agent a project, an upload and an index for free; a headless model has to be handed all three. The order is not optional, and the server enforces it rather than letting a model guess.

1 · A project, first

list_projects shows what exists, open_project resumes one, create_project starts a new one. Everything afterwards is scoped to whichever is active, and the active project is remembered on your credential — so reconnecting tomorrow resumes the same edit rather than the same blank canvas.

2 · Footage, by presigned URL

MCP arguments are JSON, so video bytes never cross the protocol in either direction. upload_start returns a presigned URL and the literal command to PUT the file to it; upload_finish registers it. Files above 16MB upload multipart — one presigned URL per part, with the ETags passed back. A client with a shell runs that command itself, which is the practical difference between Claude Code or Cursor and a chat app. Or skip the local file entirely and give it a link to fetch. Limits: 14 GB or 3 hours, MP4, MOV, MKV or WebM.

3 · Indexing, once

index_status reports progress on the one-time analysis: a word-level transcript with speaker labels, every silence measured, shot boundaries detected, and labeled frame tiles the agent reads directly. Until it finishes there are no real timings in existence, and no tool accepts a timestamp the model invented. Every later edit reuses this, which is why a request against a three-hour file is not three hours of work.

4 · Edit, render, look, export

The 97 editing tools write to an edit decision list, never to pixels. render_preview produces a fast proxy render, look_at hands the model real frames out of it so it can check its own work, and export_final then renders from your original upload at source quality. download_url mints a temporary link. Your file is never modified and any cut can be restored.

The complete registry — every tool name, what it does and what it refuses — is the tool reference.

Slow Work Returns a Ticket: wait_for_job

A render is minutes of ffmpeg; an MCP tool call is a request. Something has to give, and what gives is the pretence that the call finished. Renders, exports, pixel repainting and browser recording answer like this:

STILL RUNNING — render_preview is job 8814 (running, 12%). Nothing
has failed; call wait_for_job(job_id=8814) to pick the result up.

Every call returns within about 25 seconds. That bound is deliberate: clients put a first-byte timer on HTTP MCP servers — 60 seconds in Claude Code — so a tool that blocked for the length of a render would be killed by the client rather than finished by the server. wait_for_job is meant to be called in a loop. It waits a bounded time too and returns either the finished result or the same line at a higher percentage; there is no penalty for calling it repeatedly, and the job continues server-side whether or not anything is waiting on it.

Three jobs per account run at once. A fourth is refused with "Too much is already running on this account" — which matters more from a script than from a chat window, because a loop will fire off exports faster than they render.

One Project, One Editor

If the Valmera studio is open on the same project in a browser tab, an MCP tool call answers:

Valmera's own agent is mid-turn on this project — wait for it to
finish before editing, or the two of you will overwrite each other's
edit.

This is a deliberate refusal, and it runs in both directions: the studio will not start a turn while an MCP call is in flight either. Two writers on one edit decision list each read state the other is halfway through changing, so the loser is not a merge conflict anyone would notice — it is a silently wrong edit, discovered at export.

The fix is to let the turn finish, or work on a different project. Every MCP call writes an activity row, so the studio shows the outside model editing live rather than appearing to be broken.

When It Does Not Connect

  • Prove whose fault it is first. Point the MCP Inspector at the endpoint. If it connects and lists tools, the server and your account are fine and the problem is the client's config. That one check saves most of the guessing below.
  • The server loads but shows no tools. Almost always authentication that has not completed — the client connected, got a 401, and has not run the sign-in yet. Look for the client's authenticate action rather than editing the config again.
  • A url with no type. In Claude Code and VS Code an entry with a url and no type is read as a stdio server and skipped. Claude Code names it precisely: MCP server "valmera" has a "url" but no "type".
  • The wrong field name. Windsurf wants serverUrl, Goose wants uri, VS Code wants servers rather than mcpServers, Zed wants context_servers. A config copied from another client's docs fails quietly.
  • The sign-in rejects a password you are sure of. A Google-only account has no password. Set one with "Forgot password" and reconnect.
  • "The account does not have access." A different message from a wrong password, on purpose: the password was right and the account is not enabled. See the limited-release note above.
  • Fewer tools than expected. A tool whose backing service is unconfigured is hidden from tools/list rather than exposed and failing at call time, so a session can be a few short. Windsurf's 100-tool cap is a separate, larger cut.
  • Every call asks for approval. Most of an edit is reading — look_at, get_words, project_state, get_shots. Use your client's allowlist, but be deliberate: reading costs nothing while rendering, exporting and generating spend credits. Allowing the read tools and prompting on export_final is a reasonable middle.

One thing that is never the answer: retrying a tool call because the reply mentioned a job number. That is a receipt, not an error.

What This Does Not Do

Connecting the server does not change what the editor is. The honest edges, so a model reading this page does not promise them:

  • It edits footage, it does not generate it. Short generated clips and stills can be spliced in; there is no whole-video text-to-video. Upload something real.
  • Nothing renders locally. Only the upload and the download run on your machine. There is no local ffmpeg step to pin or cache.
  • Captions are burned in. No SRT or VTT is accepted or produced, and no chapter metadata — so there is no subtitle file to commit next to the MP4.
  • One deliverable per request. A 16:9 for the docs and a 9:16 for social are two requests, not one matrix build.
  • No NLE interchange, and no multi-cam. No project file for Premiere, Resolve or Final Cut, no true crossfade, and one transition style per video rather than per cut.
  • No team seats, share links or direct publishing. The export is a file you download and post yourself. Also no custom font uploads, no motion-tracked overlays, no audio denoise, no diarization output, and no AI music generation.

The agent knows these edges and refuses out-of-scope requests instead of faking them — every reply is verified server-side against the edit decisions actually recorded, so it cannot report a change it did not make. The category argument for why an editor built this way is the kind another agent can drive is on the agentic video editor page, and the field of alternatives is on video editing MCP servers.

Frequently Asked Questions

Every MCP client keeps a config file with a map of servers, and a remote server is one entry containing a URL. The three things that differ between clients are the file's location, the name of the top-level key (mcpServers in most, servers in VS Code, context_servers in Zed, extensions in Goose), and the spelling of the transport (http, streamable-http, streamableHttp, streamable_http, or nothing at all). For Valmera the URL is https://entrepreneur-bot-backend.onrender.com/mcp, the transport is streamable HTTP, and authentication is OAuth 2.1 with dynamic client registration — so in most clients the whole config is the URL and one sign-in.
For Cursor: {"mcpServers": {"valmera": {"url": "https://entrepreneur-bot-backend.onrender.com/mcp"}}} in ~/.cursor/mcp.json. For VS Code the key is servers and the entry needs a type: {"servers": {"valmera": {"type": "http", "url": "https://entrepreneur-bot-backend.onrender.com/mcp"}}} in .vscode/mcp.json. For Claude Code the same shape lives in .mcp.json with "type": "http", and an entry with a url and no type is read as a stdio server and skipped. Those three cover most of what people mean by mcp.json.
In the Claude app, open Settings → Customize → Connectors, click + and choose Add custom connector, then paste https://entrepreneur-bot-backend.onrender.com/mcp and save. Claude discovers the authorization server from the endpoint, registers itself, and opens a Valmera sign-in and consent page — there is no token, client id or secret to paste. Custom connectors work on Free, Pro, Max, Team and Enterprise, with free accounts limited to one. Add it on claude.ai and it syncs to the desktop and mobile apps; mobile can use connectors but cannot add them.
Any client that can reach a remote streamable-HTTP MCP server. This page carries verified configuration for Claude, Claude Code, Cursor, VS Code, Cline, Windsurf, Zed, Continue, Goose, LibreChat and the MCP Inspector. The two we have exercised end to end against Valmera are the Claude app and Claude Code; the rest are verified against each client's own documentation, which we say per entry rather than implying we tested everything. Clients that only speak stdio can use the mcp-remote bridge.
Prefer OAuth. Valmera implements OAuth 2.1 with RFC 9728 protected-resource discovery, RFC 8414 authorization-server metadata, RFC 7591 dynamic client registration and mandatory PKCE, so a client that supports it needs nothing but the URL — no app to register, no client id, no secret. A bearer token exists for the clients that never implemented the OAuth half of the spec (Cline, Continue) and for headless environments like CI where no browser will open. Both credentials resolve to the same session inside the server, so a token session and an OAuth session get an identical tool registry and identical refusals.
It is minted against your signed-in Valmera account and shown exactly once — it is stored only as a sha256 hash, so a lost token is replaced rather than recovered. Tokens carry the prefix vlm_mcp_. While the MCP connector is in limited release, minting is enabled per account; the /mcp page is where to ask. Never commit one: every client on this page supports either an environment variable in the config (${VAR} in Claude Code, ${env:VAR} in Windsurf and Cursor, ${input:...} in VS Code) or a prompt.
The model has no project open, so the first thing it does is create_project or open_project (list_projects shows what already exists). Then the footage has to get there: upload_start returns a presigned URL and the literal command to PUT the bytes, and upload_finish registers the file and kicks off indexing. index_status reports progress on that one-time analysis — word-level transcript, silences, shot boundaries, labeled frame tiles — and no editing tool will accept a timestamp before it finishes, because until then there are no real timings to accept. After that, editing is the 97 tools writing to an edit decision list. A client with a shell, like Claude Code or Cursor, runs the upload command itself; a chat app hands it to you.
Because it has not finished, and saying so beats blocking or lying. Renders, exports, pixel repainting and browser recording all outlast a sane request timeout, so they return a job id: "STILL RUNNING — render_preview is job 8814 (running, 12%). Nothing has failed; call wait_for_job(job_id=8814) to pick the result up." Every Valmera call returns within about 25 seconds, which keeps it under the 60-second first-byte timer clients like Claude Code put on HTTP servers. wait_for_job is meant to be called in a loop; there is no penalty for calling it repeatedly and the job continues server-side either way. Three jobs per account run at once; a fourth is refused.
No, and it is refused in both directions rather than allowed to corrupt the edit. An MCP call on a project with a studio turn in flight answers: "Valmera's own agent is mid-turn on this project — wait for it to finish before editing, or the two of you will overwrite each other's edit." The studio refuses to start a turn while an MCP call is running. Two writers on one edit decision list each read state the other is halfway through changing, so the failure is not a merge conflict you would notice — it is a silently wrong edit. Every MCP call writes an activity row, so the studio shows the outside model editing live rather than looking broken.
If it speaks streamable HTTP, almost certainly — this is a standard MCP server with no client-specific behaviour. If it only speaks stdio, put mcp-remote in front of it: {"command": "npx", "args": ["-y", "mcp-remote", "https://entrepreneur-bot-backend.onrender.com/mcp"]}. mcp-remote runs the OAuth flow in your browser, caches credentials in ~/.mcp-auth, and proxies stdio to the remote endpoint. It needs Node 18 or higher.
Two reasons, both intended. A tool whose backing service is unconfigured is hidden from tools/list rather than exposed and failing when called, so a given session can be a few tools shorter — stock footage search and image generation are the usual absences. Separately, Windsurf's Cascade caps at 100 total tools across every connected server, so it will not see the full registry no matter what the server sends. If the count is zero, that is not this: it is an authentication problem, and the MCP Inspector will tell you which one.
The MCP server is the supported programmatic surface. It serves the same registry Valmera's own agent uses — the tools are not re-declared for MCP, so there is no second list that can drift, and a test fails the build if a copy ever appears. There is no separate REST API for editing.

Connect It and Edit Something

Create a free Valmera account, paste the endpoint into your client, sign in — then upload footage and describe the edit from the chat you are already in.

Create a free account →
See pricing →

Related Articles

Valmera MCP Server
The server itself — transport, auth, and the design decisions behind it.
MCP Tool Reference
All 108 tools, what each does and what it refuses.
Connect Claude to Video Editing
The Claude app's connector UI in full, with the errors worth recognising.
Edit Video from Claude Code
Scopes, a committed .mcp.json, permissions, and a session from local file to exported MP4.
Video Editing in Cursor
The Cursor path, plus the screen-recording tools that fit a release-notes workflow.
ChatGPT and MCP Video Editing
Why ChatGPT's two connector paths mostly cannot drive an editor, and where they stop.
What Is MCP Video Editing?
The protocol, the category, and why an editor is a good thing to expose over it.
Video Editing MCP Servers
Every MCP server that edits video, compared — including where another one is the better answer.