Recordful MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Recordful records the user's browser so you can produce product demo videos. It also drives the page it records, so you don't need a browser tool of your own.
Typical flow for "record feature X" (the record_feature prompt has the full version):
Plan the walkthrough first: which page, which clicks, what to type, in what order. Use test data only, never the user's real credentials.
Ask the user to click the Recordful toolbar icon in Chrome on the tab to record. Chrome only lets an extension capture a tab after the user has invoked it there, and the same click connects Recordful to you. Nothing can do this click for them. Page tools only ever act on that tab.
Call get_status. It confirms the connection, shows the tab you were handed (recorder.agent.armedTab), and reports the recording mode the user picked in Recordful (tab area, screen, camera) and whether a recording is already running.
Get to the starting page before recording: navigate(url), then snapshot() to check it loaded.
Call start_recording. It uses the user's saved Recordful settings (mode, mic, camera, countdown) and returns once capture is live.
Walk through the feature with the page tools: snapshot() lists the interactive elements with refs ("e12"), then click(ref), type(ref, text), press(key), scroll(...), wait_for(...). Recordful moves a visible cursor to each target and types at a human pace, so the video looks like a person using the app. Take a fresh snapshot after anything that changes the page; refs from before a navigation stop working.
Call pause_recording before you stop to think or plan the next steps, and resume_recording right before acting again, so the video has no dead air. snapshot and screenshot work while paused. Call add_marker("…") at moments worth finding again (a result appearing, an error shown).
Call stop_recording. Recordful opens its editor with the recording automatically.
To share it or read it back (Recordful Pro): stop_recording says where the recording went. A cloud recording is already uploading; a local one uploads with upload_recording. get_video gives its links once it's ready, and get_transcript returns what was said (it transcribes on first use and waits).
Free and Pro:
Every plan: recording, page tools, and Recordful's editor (the video is saved on this computer and opens there).
Recordful Pro only: uploads, cloud videos (list_videos, get_video) and transcripts (get_transcript).
get_status shows recorder.account.plan: "pro", "free", "signed-out", or "unavailable". Check it before you promise a link or a transcript. If it isn't "pro", record as usual, tell the user the video is open in Recordful's editor, and mention once that links and transcripts come with Recordful Pro (recordful.app/upgrade). Don't call upload_recording or get_transcript, and don't retry them after PRO_REQUIRED or NOT_SIGNED_IN.
Managing what's on recordful.app (Recordful Pro): update_video (rename, who may watch), get_video_activity (views, likes, comments), comment_on_video, like_video, list_folders, create_folder, move_videos, delete_video, get_storage. These change or publish things for the user, so show them exactly what you'll do and wait for their yes before update_video, comment_on_video, move_videos, create_folder or delete_video; delete_video also needs the exact video named and confirm: true. Comments are public to everyone who can watch the video: post only the text the user approved.
First connection on a computer:
NOT_CONNECTED: ask the user to click the Recordful icon. If that doesn't connect, they need to turn on AI agents in Recordful once (Recordful popup → More → AI agents, or paste chrome-extension://hkcgjbkibidgbefehehenlmhjanjaopc/agents.html into Chrome's address bar).
PAIRING_PENDING: Recordful opened a window asking the user to approve you. Tell them the 4-digit code from the error so they can check it matches, ask them to click Allow, then retry. This happens once per computer.
PAIRING_DENIED: the user declined. Don't retry unless they ask.
PERMISSIONS_NEEDED: Recordful's one-time browser permission to record hasn't been granted. Tell the user to turn AI agents off and on again in Recordful (popup → More → AI agents) and click Allow, then retry.
NOT_ARMED, or start_recording returning outcome "pending": the user hasn't clicked the Recordful icon on that tab yet. Ask them to, then retry.
NOT_SIGNED_IN or PRO_REQUIRED: uploads and transcripts need the user signed in to Recordful Pro. Relay the error's message (it says what still works); don't retry.
If you have a browser tool of your own you can use it for the walkthrough instead, but Recordful's page tools make smoother videos. "screen" mode always shows Chrome's screen picker, which the user must answer.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_statusA | Report whether the Recordful extension is connected and what the recorder is doing (idle, starting, recording, paused), the selected recording mode, the active tab, and which capture permissions are granted. Safe to call any time. |
| start_recordingA | Start a Recordful recording on the target tab using the user's saved Recordful settings (mode, microphone, camera, countdown). Resolves once capture is live, or reports why it could not start. Navigate to the page you want to show before calling this. |
| stop_recordingA | Stop the current Recordful recording. Recordful then opens its editor with the recording, exactly as when the user clicks Stop. Returns where it went: recording.kind "cloud" (Recordful Pro: already uploading, with its videoId and links) or "local" (saved on this computer as takeId; upload_recording uploads it), plus the markers add_marker placed. |
| pause_recordingA | Pause the current recording. Use it while you plan the next step so the video has no dead air. No-op if already paused. |
| resume_recordingA | Resume a paused recording. No-op if not paused. |
| add_markerA | Mark this moment of the running recording with a short label ("signed in", "error shown"). It is timed on the video clock, pauses left out, and stop_recording returns every marker as { atMs, label }, so you can point the user to moments or edit around them later. |
| probe_captureA | Diagnostic: check, without recording, whether the extension can capture the target tab right now with no user click, and which optional Chrome permissions are granted. Refuses while a recording is running. |
| navigateA | Open an http(s) URL in the tab the user handed to Recordful and wait for it to load. Returns the final URL and title. Refs from earlier snapshots stop working. |
| snapshotA | List the interactive elements (links, buttons, fields, checkboxes, tabs, menu items) and headings in the recorded tab, each with a ref to pass to click/type/scroll/wait_for, its role, accessible name, current value or state, and bounding box in CSS pixels. Refs stay the same for an element while it stays on the page. |
| clickA | Move Recordful's visible cursor to the element, scrolling it into view if needed, and click it, with a click highlight in the video. Reports a navigation the click started. Fails with ELEMENT_OBSCURED (naming what is on top, with its ref) if something covers it. |
| typeA | Click the field, then type the text at a human pace (text inputs, text areas, content-editable areas). Set clear to replace what is already there. Use press for Enter, Tab and other keys. |
| pressA | Press a key in the focused element, e.g. Enter to submit a form, Tab to move focus, Escape to close a dialog, ArrowDown in a menu, Shift+Tab, Control+a. Recordful also performs the key's usual effect (submitting, moving focus, deleting), since pages ignore synthetic keys otherwise. |
| scrollA | Scroll smoothly: either bring an element (ref) into view, or scroll the page in a direction, by amount pixels or most of a screen. |
| wait_forA | Wait until text appears on the page or an element (ref) becomes visible, or with state "hidden" until it goes away. Keeps waiting across navigations. Fails with WAIT_TIMEOUT if it doesn't happen in time. |
| screenshotA | Capture what the recorded tab shows right now, as an image, to check the page looks right. The tab must be the active tab of its window. |
| list_recordingsA | List the recordings saved on this computer (newest first): each takeId, size, when it was recorded, and its videoId if it was uploaded. Recordings made while signed in to Recordful Pro go straight to the cloud instead; see list_videos. |
| upload_recordingA | Recordful Pro only (check get_status recorder.account.plan first). Upload a local recording to recordful.app and, by default, wait until the upload finishes. Defaults to the last recording. Returns the videoId and its view and edit links. A recording made in the cloud is already uploading, so this just returns it. Then get_transcript reads it back. |
| get_videoA | A Recordful video's title, length, who may watch it, its view and edit links, and its upload stage: "uploading" → "processing" → "ready". With wait, keeps checking until it's ready. Defaults to the last recording. |
| list_videosA | List the user's videos on recordful.app, newest first: videoId, title, date, length, who may watch, and links. Optionally filter by title. |
| get_transcriptA | Recordful Pro only (check get_status recorder.account.plan first). Read back what was said in a Recordful video. Starts transcribing if it hasn't been yet, and by default waits until it's done, including for an upload still in progress. format: "text" (default), "vtt" (timed captions), or "both". Defaults to the last recording; a recording only on this computer must be uploaded first (upload_recording). |
| update_videoA | Recordful Pro only (check get_status recorder.account.plan first). Change a video's title and/or who may watch it: "private" (only the user), "workspace" (their team) or "public" (anyone with the link). Show the user exactly what you will change and wait for their yes first. Defaults to the last recording. Only the person who recorded it, or the workspace owner, can. |
| delete_videoA | Recordful Pro only (check get_status recorder.account.plan first). Permanently delete a video and its files from recordful.app. This can't be undone, and there is no default video: name it. Ask the user to confirm this exact video (title and link) first, then call with confirm: true. |
| get_video_activityA | Recordful Pro only (check get_status recorder.account.plan first). What viewers did with a video: its view count, likes, and every comment (oldest first, with author and time). Read-only. Defaults to the last recording. |
| comment_on_videoA | Recordful Pro only (check get_status recorder.account.plan first). Post a comment on a video as the signed-in user. It is public to everyone who can watch the video. Show the user exactly what you will change and wait for their yes first. Pass the comment exactly as the user approved it. Defaults to the last recording. |
| like_videoA | Recordful Pro only (check get_status recorder.account.plan first). Like a video as the signed-in user (liked: false removes it). Returns the new like count. Defaults to the last recording. |
| list_foldersA | Recordful Pro only (check get_status recorder.account.plan first). The user's folders on recordful.app: folderId, name, parentId (null at the top level) and whether it's shared. list_videos shows each video's folderId. |
| create_folderA | Recordful Pro only (check get_status recorder.account.plan first). Create a folder, at the top level or inside another folder. Show the user exactly what you will change and wait for their yes first. |
| move_videosA | Recordful Pro only (check get_status recorder.account.plan first). Move videos into a folder (folderId null moves them to the top level). Moving into a shared folder shares them, except private videos. Show the user exactly what you will change and wait for their yes first. Videos the user can't manage come back as skipped. |
| get_storageA | Recordful Pro only (check get_status recorder.account.plan first). How much of the user's Recordful cloud storage is used (bytes, percent) and whether more can be uploaded. Read-only. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| record_feature | Plan and record a short product demo of a feature with Recordful: work out the user-facing flow, get the app running with test data, record a clean walkthrough, and open it in the editor. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 29 tools
The tools are highly differentiated based on their function (e.g., client interaction vs. cloud management) and specific action within that domain (e.g., list_recordings vs. list_videos). Each action targets a clear resource or state.
Tool names consistently use snake_case and employ clear functional prefixes like list_, create_, delete_, and get_ to define their purpose. This high consistency ensures predictability.
With29 tools, the set is extensive, yet it feels appropriate given the complex dual nature of the server: handling raw UI interactions alongside comprehensive cloud asset management.
The surface provides excellent coverage, including full CRUD operations for cloud assets and a comprehensive suite of browser-level interaction tools like clicking, typing, and recording controls.