agent-recorder-mcp
Record the agent machine's Linux X11 display, report status, finalize/share recordings, and clean them up.
startRecording: start a recording with configurablefpsandmaxDurationSeconds; returns an existing active/pending recording instead of starting a duplicate.recordingStatus: check active or specified recording state, duration, display, and file size.finishRecording: stop and deliver a recording via FFL by default, localfile:URI, or Google Drive pending upload; supports cleanup modes.abortRecording: stop without sharing and optionally delete the partial file.confirmUpload: store a Google Drive link after external upload and applyafter_uploadcleanup.cleanupRecording: delete a local recording and stop any share serving it.The exposed schema does not include README-described
title,outputDir,package, orsummaryMarkdownparameters.
Supports delivering finished screen recordings to Google Drive by returning the local file path for the assistant's Google Drive connector to upload, then storing the resulting Drive URL and applying cleanup after upload.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@agent-recorder-mcprecord my browser session and give me a replay link when done"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
agent-recorder-mcp
Local MCP server that records the computer an agent is using and returns a replay link when the task is done.
The recording stays on the agent machine. The model receives a link, not the video. FastFileLink is the delivery transport: the local file remains until the recipient finishes downloading.
Version 0.2.3 captures the agent machine's Linux X11 display, not the user's desktop. It works with compatible agents that have access to their own X11 display and MCP tools. Windows/macOS/Wayland capture is not implemented.
Install — Skill first, MCP second
Give the agent the Skill URL, not an MCP install command. The skill is the single entry point for installation. It instructs the receiving agent to install/load the skill, check for the recording tools, register the pinned MCP connector if needed, and verify tool availability.
Share this URL:
https://raw.githubusercontent.com/company-notes/agent-recorder-mcp/v0.2.3/skills/agent-session-recording/SKILL.mdView the versioned SKILL.md on GitHub
An agent receiving only the repository URL should follow the same skill-first
flow, starting from the link above. The common skill source lives at
skills/agent-session-recording/SKILL.md. The MCP installer is not required
to install the skill. Installing a skill does not automatically give an agent
OS, connector-management or recording permissions: the agent must obtain any
required approvals, and may need a client restart to discover the new tools.
The agent should finish by stating separately whether the skill is installed,
the MCP connector is registered, and startRecording, recordingStatus,
finishRecording are actually available. A missing approval or unsupported
MCP client must be reported as incomplete, not called installed.
Supported agent integration
Agent | Skill location | MCP registration |
Grok Bot / Grok Build |
| Grok Bot custom connector / Grok Build config |
Claude Code |
| CLI/MCP installer |
Codex |
| MCP installer or TOML config |
Cursor |
| MCP JSON config |
Copilot |
| Client-specific MCP setup |
Other agents | Agent's supported skill directory | Client-specific stdio MCP setup |
If a compatible skill manager is available, install the Skill using the URL above before handling the MCP. If the agent can only read the Skill, it can follow those instructions for the current session, but persistent skill installation still requires the client's supported mechanism.
The Skill contains specific Grok Bot, Grok Build, Claude, Codex and Cursor
connector setup steps. It pins the MCP source to v0.2.3:
{
"command": "uvx",
"args": [
"--from",
"git+https://github.com/company-notes/agent-recorder-mcp.git@v0.2.3",
"agent-recorder-mcp"
]
}An already-installed local copy of this package also provides
agent-recorder-mcp install --target claude-code,codex,grok-build for MCP
registration, and agent-recorder-mcp install-skill --target all for copying
the Skill to additional directories. These are optional helpers, not
requirements for reading or installing the Skill first. Do not send users
through an MCP-first workflow.
The agent runtime needs Python 3.11+ via uvx, ffmpeg, and an X11 size
tool (xdpyinfo or xwininfo, commonly x11-utils). MCP approval,
FFL sharing and Drive uploads may require user permission.
Useful environment variables:
Variable | Role |
| Recording root. Default: |
| Explicit |
| Optional FFL transport override: |
Pass title to startRecording to name an MP4 using the agent machine's
local start time. For example:
2026-11-04_1408_devto-hashnode-github-login.mp4Unsafe filename characters become hyphens. If the same title is used
again within a minute, the MCP appends -2, -3, etc. and never overwrites
an existing recording. The normalized title is limited to 48 characters.
The fileName field in the tool response identifies the actual MP4 name.
For backward compatibility, omitting title still generates
rec_YYYYMMDD_HHMMSS_<id>.mp4. The default folder is
<root>/recordings; outputDir can select an existing writable folder.
The recommended Skill workflow calls
finishRecording(package="zip", summaryMarkdown="..."), which first
finalizes the local MP4, then creates a same-stem YYYY-MM-DD_HHMM_title.zip
containing exactly that MP4 and summary.md. FFL shares the ZIP, not the
original MP4. after_download deletes both the ZIP and MP4 when the
download completes. The downloadFileName field reports the shared ZIP name;
fileName remains the original MP4 name.
For backward compatibility, finishRecording() without package="zip"
still shares the original MP4. ZIP packaging currently requires FFL and a
non-empty summaryMarkdown; local or Google Drive delivery retains the
existing MP4 behavior.
Related MCP server: markupR MCP Server
Tools
Tool | Purpose |
| Select this agent's display and start FFmpeg. Defaults: 5 fps, 7200 seconds. Supply |
| Duration, size, display, and state. |
| Finalize a recording. Use |
| Store the Google Drive link and apply |
| Stop without sharing. Deletes the partial file unless |
| Delete one local recording by |
finishRecording defaults to delivery=ffl and cleanup=after_download. In ZIP mode, both the MP4 and the ZIP remain on disk until FFL's completed-download event triggers cleanup. delivery=local with cleanup=manual returns a file: URI and leaves the MP4 in place. delivery=google_drive with cleanup=after_upload returns localPath for the assistant's Google Drive connector. Pass outputDir on startRecording as a folder that connector can read, such as /workspace. confirmUpload stores the Drive URL and then deletes that file.
A second startRecording while one recording is active returns that recording and sets alreadyRecording to true. Its existing filename is unchanged. The Skill must verify that startRecording exposes title and finishRecording exposes package and summaryMarkdown, upgrading an older MCP when needed.
Display selection
startRecording looks at X11 sockets and the process tree that spawned this server (the agent, an intermediate launcher such as uvx, and browsers those processes started). It prefers a single browser display in that tree. Otherwise it uses the nearest DISPLAY on that chain.
It does not fall back to another socket. If the display cannot be identified, or a frame cannot be grabbed from it, the tool fails with:
No active agent display could be identified.A blank frame on the identified display is still recorded. The browser often opens after recording starts.
FFL network transport
FFL delivery selects a transport automatically when finishRecording shares a recording.
If FFL_NETWORK_PROFILE is not set, the server probes DNS for example.com and
stun.cloudflare.com in parallel, using a total timeout of 0.5 seconds.
When all returned addresses for both hosts are in 198.18.0.0/15 (the synthetic DNS
range used by some managed sandbox environments), it calls ffl-python with
force_relay=True and preferred_tunnel="default:web".
Otherwise it leaves the existing P2P-first behavior unchanged.
The optional FFL_NETWORK_PROFILE setting takes priority over detection:
relay forces relay, p2p or direct keeps P2P, and
synthetic-dns-198-18 selects the managed-sandbox web relay policy.
Unrecognized non-empty values raise an error rather than silently changing behavior.
The selected profile is cached for the lifetime of the MCP server.
This applies only to FFL shares; local and Google Drive delivery are unchanged.
Cleanup
Creating an FFL link does not delete the file. With after_download, the server waits for FFL's completed event (/transfer/complete), stops the share, then deletes the local file. That event covers a full HTTP download, including curl, and a WebRTC or direct P2P transfer. If the MCP process exits before that event, the file stays and a later finishRecording can share it again.
maxDurationSeconds stops FFmpeg and keeps a playable file so finishRecording can still share it. A crashed recorder does not leave FFmpeg running past that limit or after its owner process is gone.
Skill
skills/agent-session-recording/SKILL.md is the canonical skill-first installation guide and recording rule. The user shares this skill, the agent handles its own MCP setup as needed, and the agent verifies that startRecording supports title before saying setup succeeded. During browser/computer-use work it calls startRecording(title="...") before the first UI action and finishRecording before answering.
The skill also requires a recording summary alongside the ZIP replay URL and inside the ZIP as summary.md: the time span and duration, key steps, systems/accounts involved, changes made, human assistance such as 2FA, and errors or detours and their resolutions. Never include passwords, verification codes or key contents. The agent writes this summary from its own recorded actions; the MCP does not analyze the video.
Development
On this machine, tests use the recoding-mcp conda environment.
conda activate recoding-mcp
pip install -e .
python -m unittest discover -s tests -p "*Test.py" -vtests/Smoke.py is a manual check for a Linux agent computer. It records for a few seconds. It does not open a browser; watch the resulting file and confirm it shows the agent display.
python tests/Smoke.py --seconds 5 --delivery local --cleanup manualTo exercise titled ZIP delivery on a real Linux X11 agent, run:
python tests/Smoke.py --seconds 5 --title zip-smoke-test --package zip --delivery ffl --cleanup after_downloadDownload the returned ZIP and confirm it contains the MP4 and summary.md.
The MCP should delete both local files only after FFL reports the completed
download. GitHub Actions runs the isolated unit suite, not this real X11/FFL test.
Network share tests are not part of the default suite.
Out of scope
Dashboard, accounts, tamper-proof storage, action traces, OCR, a custom browser, and Windows/macOS/Wayland capture. This server records, shares, and deletes. Google Drive upload is performed by the assistant's own Drive connector.
Available Tools
6 toolsabortRecordingAbortrecordingA
Stop a recording without sharing it.
deletePartial defaults to true and removes the incomplete file. Use this when the task is cancelled or the capture is the wrong display.
| Name | Required | Description | Default |
|---|---|---|---|
| recordingId | No | ||
| deletePartial | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the destructive default ('deletePartial defaults to true and removes the incomplete file') and that nothing is shared, but is silent on permissions, whether the aborted recording remains listed/recoverable, and what happens when deletePartial is false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and then the destructive-default detail. Minor waste in the awkward mid-sentence line break, but nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the destructive behavior is disclosed. However, for a mutation tool with zero annotations the description leaves the recordingId parameter and post-abort state undefined, which is a real invocation risk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains deletePartial beyond the schema (default true, removes the incomplete file), but recordingId is completely unaddressed despite being nullable with a null default — an agent cannot tell whether to pass it or what null means.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Stop a recording') and adds the distinguishing qualifier 'without sharing it,' which separates it from finishRecording/confirmUpload. It never names a sibling explicitly, so an agent still has to infer why it would pick this over cleanupRecording, which likely also discards files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit triggering condition: 'Use this when the task is cancelled or the capture is the wrong display.' No when-not guidance or named alternative (e.g., finishRecording for a good capture) is provided, so the routing is clear but not fully closed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cleanupRecordingCleanuprecordingB
Delete a local recording and stop any share still serving it.
Pass the recordingId. This removes the file even if a recipient has not downloaded it yet.
| Name | Required | Description | Default |
|---|---|---|---|
| recordingId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose non-obvious side effects: termination of an active share and file removal even for undownloaded recipients. However, it omits irreversibility, required permissions, and any failure behavior for an unambiguously destructive delete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and its main side effect; nothing is redundant. The line breaks read slightly awkwardly but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the action, the required id, and the key sharing side effect. For an unannotated destructive tool it would ideally also flag irreversibility and permission requirements, but the essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter, so the description has to compensate. 'Pass the recordingId' tells the agent which identifier is required but adds no format, source, or provenance guidance, which is thin for the only input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a local recording') plus an accompanying side effect ('stop any share still serving it'), which an agent can understand immediately. It does not explicitly distinguish itself from the close sibling abortRecording, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to use this versus abortRecording or finishRecording, which are the plausible alternatives for ending a recording session. Usage is only implied by the word 'Delete' and the post-hoc 'cleanup' framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirmUploadConfirmuploadA
Store the link from the connected Google Drive tool.
Call this after finishRecording(delivery="google_drive") once the Drive tool has uploaded localPath. url is that Drive file link. cleanup after_upload then deletes the local recording.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| recordingId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses a side effect (cleanup 'after_upload' deletes the local recording) and the external dependency on the Drive tool, but says nothing about idempotency, what happens if url is wrong, or permission/auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core action and immediately followed by the trigger condition. The trailing cleanup sentence is relevant but sits slightly apart from the call instructions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation. For a simple two-parameter state-recording tool, the sequencing, dependency, and url meaning are the essentials, and they are covered; only recordingId semantics and failure behavior are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and neither parameter is described in the schema, so the description must compensate. It explains url ('that Drive file link') but leaves recordingId entirely undefined beyond its name, covering only half the inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and object ('Store the link from the connected Google Drive tool') and anchors it to a specific recording workflow, so an agent can distinguish it from startRecording/abortRecording/recordingStatus. It never explicitly says it finalizes/confirms an upload for a given recordingId, leaving the exact resource slightly implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition and ordering: 'Call this after finishRecording(delivery="google_drive") once the Drive tool has uploaded localPath.' The alternative (calling before the Drive upload exists) is ruled out by that phrasing, so no inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finishRecordingFinishrecordingA
Stop the recording and hand it to a transfer strategy.
delivery defaults to ffl. cleanup defaults to after_download. The local file stays until FastFileLink reports that the download finished, then the share stops and the file is deleted. delivery local with cleanup manual returns a file URI and leaves the file in place.
delivery google_drive with cleanup after_upload does not call Google. It returns localPath and uploadStatus pending. Upload that file with the connected Google Drive tool, then call confirmUpload with the Drive link.
For the recommended Skill workflow, pass package="zip" and a non-empty summaryMarkdown. The MCP first finalizes the named MP4 locally, builds a same-stem ZIP containing the MP4 and summary.md, then shares the ZIP by FFL. The ZIP and original MP4 remain local until a completed download triggers after_download cleanup of both files. Do not put passwords, verification codes or key contents in summaryMarkdown.
package="video" (the legacy default) continues sharing the MP4 directly; ZIP packaging currently supports ffl delivery only.
Put the returned url in the final answer along with the summary. If this call fails, explain that no new replay was produced and why.
| Name | Required | Description | Default |
|---|---|---|---|
| cleanup | No | after_download | |
| package | No | video | |
| delivery | No | ffl | |
| recordingId | No | ||
| summaryMarkdown | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so unusually well: it discloses that the local file and share persist until FastFileLink reports a completed download, at which point the share stops and files are deleted — i.e. what gets destroyed and when. It also reveals a non-obvious behavioral quirk (google_drive delivery does NOT call Google, returning localPath plus uploadStatus pending instead), which an agent could not infer from any structured field. It adds prompt-level safety guidance against putting passwords, verification codes or key contents in summaryMarkdown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with purpose and organized into short paragraphs per delivery mode, so it is scannable despite its length. A few lines are redundant: the ZIP paragraph restates the after_download cleanup behavior already explained two paragraphs earlier, and the closing instruction to put the returned url in the final answer is agent-facing output policy rather than tool documentation. Most sentences still earn their place because the branching logic is genuinely complex.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter mutation tool with no annotations, no schema descriptions and irreversible cleanup, the description is substantially complete: it covers defaults, file lifecycle, delivery routing, packaging, and failure messaging, and an output schema exists so return values need not be spelled out. The notable gaps are that recordingId semantics are absent and that cleanup manual is described as leaving the file in place without pointing at the cleanupRecording sibling that would later remove it. The relationship to abortRecording is likewise never stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must supply the meaning, and it does for three of five parameters: it enumerates delivery values (ffl, local, google_drive), cleanup values (after_download, after_upload, manual), and package values (video, zip) with their behavioral consequences. summaryMarkdown gets partial treatment (used to build summary.md in the ZIP, must not contain secrets). recordingId — the one parameter that identifies the target and is nullable-with-null-default — is never explained, leaving the agent to guess whether null means the current active recording.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb+resource pair — stop the recording and hand it to a transfer strategy — which is concrete enough to distinguish it from abortRecording (discard) and cleanupRecording (post-hoc deletion). It further clarifies scope by naming confirmUpload as a required follow-up for the google_drive path. It stops short of explicitly contrasting itself with abortRecording, which is the sibling an agent is most likely to confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent across every meaningful branch: default ffl/after_download, local+manual for a returned file URI, google_drive+after_upload with an explicit two-step confirmUpload follow-up, and package=zip as the recommended Skill workflow versus package=video as the legacy default. It also states a hard constraint (ZIP packaging supports ffl delivery only) and tells the agent what to report on failure. This is explicit when-to-use guidance with named alternatives and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recordingStatusRecordingstatusA
Return the recording state, duration, display, and file size.
Omit recordingId to ask about the active recording. The state is idle when nothing is recording.
| Name | Required | Description | Default |
|---|---|---|---|
| recordingId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It usefully discloses the default-target behavior and that state is 'idle' when nothing is recording, and 'Return' implies a read-only operation, but it omits error behavior for an unknown/expired recordingId and any permission or rate-limit context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what is returned, then the parameter rule, then the idle-state edge case. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be enumerated, yet the description names them anyway. For a single-parameter read tool this is nearly complete; only failure modes for an invalid recordingId are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and recordingId is documented only as a nullable string, so the description's rule 'omit recordingId to ask about the active recording' supplies the parameter's actual semantics. It adds real meaning the schema cannot convey, though it does not describe accepted ID formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Return) plus the exact resource and its fields (recording state, duration, display, file size). It is unmistakably distinct from the sibling mutators startRecording/finishRecording/abortRecording/cleanupRecording/confirmUpload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to omit recordingId (to query the active recording), which is the main usage decision for this tool. It does not state exclusions or errors, but the sibling names make the alternative operations obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
startRecordingStartrecordingA
Start recording the agent computer display before browser or computer-use actions.
Call this before the first browser or computer action. The display is selected from this agent process tree. A display belonging to another session is not used.
fps defaults to 5. maxDurationSeconds defaults to 7200. When the limit is reached the capture stops and the file is kept so finishRecording can still share it.
title, when supplied, names the MP4 using the agent's local start time: YYYY-MM-DD_HHMM_title.mp4 (e.g. 2026-11-04_1408_github-login.mp4). Unsafe filename characters are converted to hyphens. A duplicate filename gets a -2, -3, etc. suffix, never overwriting an earlier recording. If title is omitted, the legacy unique recording ID filename is used.
outputDir writes the recording file directly into that directory. Omit it to use the default recordings directory. The directory must already exist and be writable. When the replay will be uploaded with a connected Google Drive tool, pass a directory that tool can read, such as /workspace.
If a recording is already active, or is waiting to be shared, that recording is returned and a second recorder is not started. title and outputDir are ignored in that case.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | ||
| title | No | ||
| outputDir | No | ||
| maxDurationSeconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses idempotency (a second recorder is never started), the auto-stop at maxDurationSeconds with the file retained, filename derivation/sanitization/collision suffixing, and the requirement that outputDir pre-exist and be writable. It stops short of stating error behavior when outputDir is invalid, whether user consent or permissions are needed, and roughly how large the output can get.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the imperative call-to-action, then organized into short paragraphs per concern (duration, title, outputDir, already-active case), which makes it easy to scan. It runs longer than necessary for four optional parameters — the process-tree/other-session sentences and some filename detail could be tightened — but nearly every sentence carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter, zero-required side-effecting tool with no annotations, the description covers timing, defaults, termination, naming, path requirements, and idempotency. Because an output schema exists, omitting return-value details is appropriate and nothing an agent needs to invoke it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and largely does: it gives the fps and maxDurationSeconds defaults, explains what happens at the duration limit, and fully specifies title (naming pattern with example, unsafe-character conversion, -2/-3 dedup) and outputDir (must exist, must be writable, Drive-readable path suggestion, plus being ignored when a recording is already active). Only fps lacks range or tuning guidance, which is a small residual gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Start recording the agent computer display') plus the exact moment to do it ('before browser or computer-use actions'). The scope clause about the display being selected from this agent process tree further distinguishes it from sibling tools like recordingStatus and finishRecording.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to call it ('Call this before the first browser or computer action') and implicitly when not to bother, since an already-active or pending recording is returned rather than starting a second one. It also routes downstream behavior by naming finishRecording as the consumer of the retained file, and gives a conditional case for choosing outputDir when a Google Drive upload tool is involved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.2.3- Changed
finishRecording2 fields changed- added
Input schema / properties / packageAdded value: +{ + "default": "video", + "type": "string" +} - added
Input schema / properties / summaryMarkdownAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
startRecording2 fields changed- added
Input schema / properties / outputDirAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / titleAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
6 tool updates
v0.1.0- First observed
abortRecording - First observed
cleanupRecording - First observed
confirmUpload - First observed
finishRecording - First observed
recordingStatus - First observed
startRecording
TDQS
Scored across 6 tools
Each tool covers a distinct recording-lifecycle action: status, start, finish/share, abort, delete, and confirm upload. Although finishRecording and abortRecording both stop capture, their sharing behavior is clearly differentiated, and cleanupRecording is clearly post-capture deletion.
The set is consistently camelCase and mostly follows a verb+noun pattern: startRecording, finishRecording, abortRecording, cleanupRecording, confirmUpload. recordingStatus is the main deviation because it is noun-first rather than verb-first.
Six tools are well-scoped for a recording lifecycle and each has a clear role. There is no obvious redundancy or missing lifecycle phase that would require additional tools.
The surface covers starting, inspecting, stopping, sharing, aborting, deleting, and confirming Google Drive uploads. Minor gaps remain around listing existing recordings or checking share/download status independently, but core workflows are covered.
Maintenance
Related MCP Connectors
Jam recordings (video, console, network) as context and proof of work for your coding agent.
A cloud Linux desktop for your AI: browse, click, type, read the screen and run commands.
Your coding agent records a demo or tutorial video of your web app.
Remote Linux boxes for coding agents: Docker, a browser, screenshots, logs, human takeover.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables browser automation for LLMs on Linux display servers, supporting web interaction, screenshots, and JavaScript execution in a real browser.74 npm7MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to capture screen and voice recordings, extract timestamped frames, and receive structured Markdown reports with context for bug fixing and UI feedback.15 npm18MIT
- AlicenseAqualityDmaintenanceEnables AI agents to start and stop full-screen recordings on macOS using FFmpeg, with control over quality, FPS, and audio.5MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to see and control an existing Linux X11 desktop over SSH by taking screenshots and performing mouse, scroll, typing, and keyboard-shortcut actions across browsers, terminals, file managers, and other apps.MIT