txtreel
REMOTE · TXTREEL.COM · SCANNED OCT 7
Free iMessage, WhatsApp, Instagram DM and Reddit chat videos (1080x1920 MP4) and screenshots.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security74
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability54
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 7782 tokens (~1111/item across 7 items; 7 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 7 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 8 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the txtreel MCP server?
txtreel is a hosted endpoint at https://txtreel.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · txtreel.com
claude mcp add --transport http com-txtreel-txtreel 'https://txtreel.com/mcp'
{
"mcpServers": {
"com-txtreel-txtreel": {
"url": "https://txtreel.com/mcp"
}
}
} {
"servers": {
"com-txtreel-txtreel": {
"type": "http",
"url": "https://txtreel.com/mcp"
}
}
} [mcp_servers.com-txtreel-txtreel] url = "https://txtreel.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-txtreel-txtreel": {
"type": "remote",
"url": "https://txtreel.com/mcp",
"enabled": true
}
}
} openclaw mcp add com-txtreel-txtreel --url 'https://txtreel.com/mcp' --transport streamable-http
mcp_servers:
com-txtreel-txtreel:
url: "https://txtreel.com/mcp" {
"McpServers": {
"com-txtreel-txtreel": {
"Transport": "http",
"Url": "https://txtreel.com/mcp"
}
}
} assistant mcp add com-txtreel-txtreel -t streamable-http -u 'https://txtreel.com/mcp'
{
"mcpServers": {
"com-txtreel-txtreel": {
"type": "http",
"url": "https://txtreel.com/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 7 Oct 26 +1
- Tool “lockscreen_render_video” rewrote its description, which is the text the model reads security
- Tool “lockscreen_screenshot” rewrote its description, which is the text the model reads security
- Schema quality: 5148 → 7782 ▼ functional
- “lockscreen_render_video” reworded the description of “notifications” cosmetic
- “lockscreen_render_video” reworded the description of “wallpaperX” cosmetic
- “lockscreen_screenshot” reworded the description of “notifications” cosmetic
- “lockscreen_screenshot” reworded the description of “wallpaperX” cosmetic
- 3 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Oct 26 +1
- Authorization: unverified → partial ▲ security
- Injection markers: unverified → pass ▲ security
- Endpoint reachability: unreachable → reachable ▲ functional
- Tool coverage: unverified → 100 ▲ functional
- Stability: unverified → 0.10 ▲ functional
- MCP protocol: unverified → pass ▲ functional
- 1 Oct 26 0
- Endpoint reachability: reachable → unreachable ▼ security
- Tool safety: pass → unverified ▼ security
- Stability: 0.03 → unverified ▼ security
- Authorization: partial → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- First check of Schema quality: unverified functional
- 30 Sept 26 0
- Stability: unverified → 0.03 ▲ functional
- 29 Sept 26 68
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 7 Oct 2026 · Probed https://txtreel.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_256_GCM_SHA384 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=txtreel.com | CN=YE2,O=Let's Encrypt,C=US | 29 Sept 2026 | 28 Dec 2026 | ECDSA 256 | ECDSA-SHA384 | 6f34defbc58e73dbd2e585855d8bcba96c6 |
| SANs: txtreel.com, www.txtreel.com | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of txtreel.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| txtreel.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| x-content-type-options | nosniff |
| referrer-policy | strict-origin-when-cross-origin |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://txtreel.com/mcp | Verified | 200 | |
| http (plaintext) | http://txtreel.com/mcp | HTTPS enforced | 301 | https://txtreel.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
chat_render_video Render a txtreel video ~1,055
Render a txtreel conversation (script or messages) to an MP4 and wait for it to finish. This queues a render, waits for it, and returns once it is done (or after failing/timing out). A short render (a handful of messages) typically takes 20-60 seconds. Returns a public link to the MP4; the file is deleted after 24 hours. If txtreel is busy or you hit the rate limit, the result is an error with the message. Conversation script format (one event per line): them: hey, you up? me: yeah why [pause 1.5] wait 1.5 s --- Today 9:41 PM date/time separator me: [photo URL] caption a photo (URL, local file path, or an uploaded photo's number) [them reacts ❤️] reaction on my last message [read] they read my messages === everything above is already on screen at the start === scroll 3 same, but open on the oldest message and skim down in 3 s # comment "Name: text" also means "them" when Name matches contact.name (e.g. contact.name "Sam" lets you write "Sam: omg" instead of "them: omg"). A literal "\n" inside a message becomes a line break. Lines starting with # are comments. Photos: "me: [photo https://example.com/image.jpg] optional caption" (https URLs only; local file paths are not available). "=== scroll 3" opens on the oldest message of a longer history and skims down to the live part in 3 s. With keyboard true (the default), the newest messages stay above the area where the Reels caption sits.
| Name | Type | Req | Description |
|---|---|---|---|
| autoRead | boolean | – | Mark "me" messages as read as soon as the other person starts typing. Default: true. |
| composerTyping | boolean | – | Type "me" messages into the input bar before sending them. Default: true. |
| contact | object | – | Contact header info. |
| endHold | number | – | Seconds to hold on the final frame before the video ends. Default: 2. |
| keyboard | boolean | – | Show the iOS keyboard, which keeps the latest messages above the Reels caption area. Default: true. |
| messages | array | – | Conversation as an array of event objects instead of a script string (use this OR script, not both). Passed through to the txtreel API as-is; each item is one of: {from:"me"|"them", text, delay?, typ… |
| platform | string | – | Chat app to render: "imessage", "whatsapp", or "instagram". Default: imessage. |
| script | string | – | Conversation as a plain-text script. Use this OR messages, not both. Conversation script format (one event per line): them: hey, you up? me: yeah why [pause 1.5] wait 1.5 s --- Today 9:4… |
| sounds | boolean | – | Real UI sounds: iOS key clicks while typing, the app's send and receive sounds. Default: true. |
| speed | number | – | Pacing multiplier; 2 = twice as fast, 0.5 = half speed. Default: 1. |
| startTime | string | – | Clock used for messages, read receipts, and WhatsApp bubble times, e.g. "9:41 PM". Default: 9:41 PM. |
| statusBar | object | – | Phone status bar shown at the top of the frame. |
| theme | string | – | Color theme, "light" or "dark". Default: light. |
No output schema declared.
No examples provided.
chat_screenshot Screenshot a txtreel conversation ~1,057
Render a single frame of a txtreel conversation (script or messages) to a PNG and return it as an image. Defaults to the last frame — pass "frame" to capture an earlier moment (30 fps). Returns the PNG as image content, plus a text line with the PNG's URL (expires after 24 hours). Conversation script format (one event per line): them: hey, you up? me: yeah why [pause 1.5] wait 1.5 s --- Today 9:41 PM date/time separator me: [photo URL] caption a photo (URL, local file path, or an uploaded photo's number) [them reacts ❤️] reaction on my last message [read] they read my messages === everything above is already on screen at the start === scroll 3 same, but open on the oldest message and skim down in 3 s # comment "Name: text" also means "them" when Name matches contact.name (e.g. contact.name "Sam" lets you write "Sam: omg" instead of "them: omg"). A literal "\n" inside a message becomes a line break. Lines starting with # are comments. Photos: "me: [photo https://example.com/image.jpg] optional caption" (https URLs only; local file paths are not available). "=== scroll 3" opens on the oldest message of a longer history and skims down to the live part in 3 s. With keyboard true (the default), the newest messages stay above the area where the Reels caption sits.
| Name | Type | Req | Description |
|---|---|---|---|
| autoRead | boolean | – | Mark "me" messages as read as soon as the other person starts typing. Default: true. |
| composerTyping | boolean | – | Type "me" messages into the input bar before sending them. Default: true. |
| contact | object | – | Contact header info. |
| endHold | number | – | Seconds to hold on the final frame before the video ends. Default: 2. |
| frame | integer | – | Frame index to capture, at 30 fps (e.g. 30 = one second in). Omit to capture the final frame of the conversation. |
| keyboard | boolean | – | Show the iOS keyboard, which keeps the latest messages above the Reels caption area. Default: true. |
| messages | array | – | Conversation as an array of event objects instead of a script string (use this OR script, not both). Passed through to the txtreel API as-is; each item is one of: {from:"me"|"them", text, delay?, typ… |
| platform | string | – | Chat app to render: "imessage", "whatsapp", or "instagram". Default: imessage. |
| script | string | – | Conversation as a plain-text script. Use this OR messages, not both. Conversation script format (one event per line): them: hey, you up? me: yeah why [pause 1.5] wait 1.5 s --- Today 9:4… |
| sounds | boolean | – | Real UI sounds: iOS key clicks while typing, the app's send and receive sounds. Default: true. |
| speed | number | – | Pacing multiplier; 2 = twice as fast, 0.5 = half speed. Default: 1. |
| startTime | string | – | Clock used for messages, read receipts, and WhatsApp bubble times, e.g. "9:41 PM". Default: 9:41 PM. |
| statusBar | object | – | Phone status bar shown at the top of the frame. |
| theme | string | – | Color theme, "light" or "dark". Default: light. |
No output schema declared.
No examples provided.
chat_validate Validate a txtreel conversation ~1,051
Checks a txtreel conversation (script or messages) without rendering anything. It is fast and free. On success returns { ok: true, durationSeconds, messageCount, conversation } where "conversation" is the fully-resolved object (all defaults applied). On failure returns { ok: false, errors: string[] } — one message per problem; when the input was a script, errors are prefixed with the offending line number. Videos longer than the server limit are rejected here too. Conversation script format (one event per line): them: hey, you up? me: yeah why [pause 1.5] wait 1.5 s --- Today 9:41 PM date/time separator me: [photo URL] caption a photo (URL, local file path, or an uploaded photo's number) [them reacts ❤️] reaction on my last message [read] they read my messages === everything above is already on screen at the start === scroll 3 same, but open on the oldest message and skim down in 3 s # comment "Name: text" also means "them" when Name matches contact.name (e.g. contact.name "Sam" lets you write "Sam: omg" instead of "them: omg"). A literal "\n" inside a message becomes a line break. Lines starting with # are comments. Photos: "me: [photo https://example.com/image.jpg] optional caption" (https URLs only; local file paths are not available). "=== scroll 3" opens on the oldest message of a longer history and skims down to the live part in 3 s. With keyboard true (the default), the newest messages stay above the area where the Reels caption sits.
| Name | Type | Req | Description |
|---|---|---|---|
| autoRead | boolean | – | Mark "me" messages as read as soon as the other person starts typing. Default: true. |
| composerTyping | boolean | – | Type "me" messages into the input bar before sending them. Default: true. |
| contact | object | – | Contact header info. |
| endHold | number | – | Seconds to hold on the final frame before the video ends. Default: 2. |
| keyboard | boolean | – | Show the iOS keyboard, which keeps the latest messages above the Reels caption area. Default: true. |
| messages | array | – | Conversation as an array of event objects instead of a script string (use this OR script, not both). Passed through to the txtreel API as-is; each item is one of: {from:"me"|"them", text, delay?, typ… |
| platform | string | – | Chat app to render: "imessage", "whatsapp", or "instagram". Default: imessage. |
| script | string | – | Conversation as a plain-text script. Use this OR messages, not both. Conversation script format (one event per line): them: hey, you up? me: yeah why [pause 1.5] wait 1.5 s --- Today 9:4… |
| sounds | boolean | – | Real UI sounds: iOS key clicks while typing, the app's send and receive sounds. Default: true. |
| speed | number | – | Pacing multiplier; 2 = twice as fast, 0.5 = half speed. Default: 1. |
| startTime | string | – | Clock used for messages, read receipts, and WhatsApp bubble times, e.g. "9:41 PM". Default: 9:41 PM. |
| statusBar | object | – | Phone status bar shown at the top of the frame. |
| theme | string | – | Color theme, "light" or "dark". Default: light. |
No output schema declared.
No examples provided.
lockscreen_render_video Render a lock screen notification video ~1,286
Render an iOS lock screen with notifications to an MP4 and wait for it to finish: a wallpaper, the big clock, and cards from imessage, whatsapp, instagram, chatgpt, claude, reddit, mail, phone, facetime, notes, reminders that land one by one at the seconds you set. This queues a render, waits for it, and returns once it is done (or after failing/timing out). A short render (3-5 notifications) typically takes 20-60 seconds. Returns a public link to the MP4; the file is deleted after 24 hours. If txtreel is busy or you hit the rate limit, the result is an error with the message. If the input is invalid, this returns an error result with the validation messages instead of rendering. Lock screen format (an iOS 26 lock screen with notifications): The video starts on a lock screen (wallpaper, big clock, date, padlock). Like the chat videos, the 9:16 video is the iPhone screen cut below the status bar and above the flashlight and camera buttons. Each notification is a Liquid Glass card from one app (imessage, whatsapp, instagram, chatgpt, claude, reddit, mail, phone, facetime, notes, reminders) with a bold title (usually the sender), a body of up to 4 lines, and a grey time such as "now" or "2m ago". A card lands at its "at" second (seconds from the start of the video) and springs in from the bottom; at 0 it is already there. At least one notification is required. The video ends "endHold" seconds (default 2) after the last card has settled. Wallpaper and avatars are https image URLs or data: URIs (local file paths are not available). Without a wallpaper a dark gradient is drawn. "avatar" on a notification shows the contact's photo with the app icon as a small badge. "display": "stack" folds the cards like iOS does (newest on top with slivers behind); "list" shows every card.
| Name | Type | Req | Description |
|---|---|---|---|
| camera | boolean | – | Camera button bottom right. Default: true. |
| carrier | string | – | Network name on the left of the status bar. Default: none. |
| clockColor | string | – | Clock colour (CSS colour). Default: "#FFFFFF". |
| clockOpacity | number | – | Clock opacity, 0-1; below 1 the wallpaper shows faintly through it. Default: 0.88. |
| clockSize | number | – | Clock size in points on a 402 pt wide iPhone screen. Default: 100. |
| clockStretch | number | – | Vertical stretch of the clock numerals. Default: 1.18. |
| clockWeight | number | – | Clock numeral weight, 100-900. Default: 700. |
| date | string | – | The line above the clock, e.g. "Tuesday, October 6". Default: "Tuesday, October 6". |
| dim | number | – | Black overlay on the wallpaper, 0 to 1. Default: 0. |
| display | string | – | "list" shows every card; "stack" shows the newest with one or two slivers behind it. Default: list. |
| endHold | number | – | Seconds to hold on the last frame after the last card has settled. Default: 2. |
| flashlight | boolean | – | Flashlight button bottom left. Default: true. |
| notifications | array | yes | The notifications, 1 to 20, in any order (they land in order of "at", ties keep the written order, and the newest sits on top). Lock screen format (an iOS 26 lock screen with notifications): The vi… |
| padlock | boolean | – | Small locked padlock above the date. Default: true. |
| sounds | boolean | – | The iOS notification tone when each card lands (video only). Default: true. |
| statusBar | object | – | Right side of the status bar. (The clock there is not shown on a lock screen.) |
| theme | string | – | Glass tint: "light" = pale glass with dark text, "dark" = smoked glass with white text. Default: light. |
| time | string | – | The big clock, without AM/PM, e.g. "9:41". Default: "9:41". |
| wallpaper | string | – | Full-bleed wallpaper image: URL or data: URI. Omitted: a dark gradient. |
| wallpaperX | number | – | Where the crop is centred horizontally when the image is not the screen's shape, in % (50 = middle). Default: 50. |
| wallpaperY | number | – | Where the crop is centred vertically, in % (50 = middle). Default: 50. |
| wallpaperZoom | number | – | 1 = cover the screen, 2 = twice as close. Default: 1. |
No output schema declared.
No examples provided.
lockscreen_screenshot Screenshot a lock screen with notifications ~1,245
Render a single frame of an iOS lock screen with notifications to a PNG and return it as an image. Defaults to the last frame — pass "frame" to capture an earlier moment (30 fps). Returns the PNG as image content, plus a text line with the PNG's URL (expires after 24 hours). If the input is invalid, this returns an error result with the validation messages instead of an image. Lock screen format (an iOS 26 lock screen with notifications): The video starts on a lock screen (wallpaper, big clock, date, padlock). Like the chat videos, the 9:16 video is the iPhone screen cut below the status bar and above the flashlight and camera buttons. Each notification is a Liquid Glass card from one app (imessage, whatsapp, instagram, chatgpt, claude, reddit, mail, phone, facetime, notes, reminders) with a bold title (usually the sender), a body of up to 4 lines, and a grey time such as "now" or "2m ago". A card lands at its "at" second (seconds from the start of the video) and springs in from the bottom; at 0 it is already there. At least one notification is required. The video ends "endHold" seconds (default 2) after the last card has settled. Wallpaper and avatars are https image URLs or data: URIs (local file paths are not available). Without a wallpaper a dark gradient is drawn. "avatar" on a notification shows the contact's photo with the app icon as a small badge. "display": "stack" folds the cards like iOS does (newest on top with slivers behind); "list" shows every card.
| Name | Type | Req | Description |
|---|---|---|---|
| camera | boolean | – | Camera button bottom right. Default: true. |
| carrier | string | – | Network name on the left of the status bar. Default: none. |
| clockColor | string | – | Clock colour (CSS colour). Default: "#FFFFFF". |
| clockOpacity | number | – | Clock opacity, 0-1; below 1 the wallpaper shows faintly through it. Default: 0.88. |
| clockSize | number | – | Clock size in points on a 402 pt wide iPhone screen. Default: 100. |
| clockStretch | number | – | Vertical stretch of the clock numerals. Default: 1.18. |
| clockWeight | number | – | Clock numeral weight, 100-900. Default: 700. |
| date | string | – | The line above the clock, e.g. "Tuesday, October 6". Default: "Tuesday, October 6". |
| dim | number | – | Black overlay on the wallpaper, 0 to 1. Default: 0. |
| display | string | – | "list" shows every card; "stack" shows the newest with one or two slivers behind it. Default: list. |
| endHold | number | – | Seconds to hold on the last frame after the last card has settled. Default: 2. |
| flashlight | boolean | – | Flashlight button bottom left. Default: true. |
| frame | integer | – | Frame index to capture, at 30 fps (e.g. 30 = one second in). Omit to capture the final frame, with every notification on screen. |
| notifications | array | yes | The notifications, 1 to 20, in any order (they land in order of "at", ties keep the written order, and the newest sits on top). Lock screen format (an iOS 26 lock screen with notifications): The vi… |
| padlock | boolean | – | Small locked padlock above the date. Default: true. |
| sounds | boolean | – | The iOS notification tone when each card lands (video only). Default: true. |
| statusBar | object | – | Right side of the status bar. (The clock there is not shown on a lock screen.) |
| theme | string | – | Glass tint: "light" = pale glass with dark text, "dark" = smoked glass with white text. Default: light. |
| time | string | – | The big clock, without AM/PM, e.g. "9:41". Default: "9:41". |
| wallpaper | string | – | Full-bleed wallpaper image: URL or data: URI. Omitted: a dark gradient. |
| wallpaperX | number | – | Where the crop is centred horizontally when the image is not the screen's shape, in % (50 = middle). Default: 50. |
| wallpaperY | number | – | Where the crop is centred vertically, in % (50 = middle). Default: 50. |
| wallpaperZoom | number | – | 1 = cover the screen, 2 = twice as close. Default: 1. |
No output schema declared.
No examples provided.
reddit_render_video Render a Reddit thread video ~831
Render a Reddit thread (script, or post+comments) to an MP4 and wait for it to finish. This queues a render, waits for it, and returns once it is done (or after failing/timing out). A short render typically takes 20-60 seconds. Returns a public link to the MP4; the file is deleted after 24 hours. If txtreel is busy or you hit the rate limit, the result is an error with the message. If the thread is invalid, this returns an error result with the validation messages (script errors are prefixed with the offending line number) instead of rendering. Reddit thread script format (post + nested comments): title: AITA for not going to my sister's wedding? body: First paragraph of the post (optional, one line per paragraph) body: Second paragraph [photo URL] a photo in the post (URL, file path or uploaded photo's number) sleepy_joe: A top-level comment > OP: A reply by the post's author (blue OP label) >> sleepy_joe [2.1K 3h]: A reply to that reply, with its votes and age [91 more replies] collapsed replies under the comment above [pause 2] wait 2 s # comment The video is a screen recording of a thread on mobile reddit.com in iOS Safari: the page is laid out once and the view scrolls from block to block, holding each one long enough to read. The title is on screen from frame 0. Scores and ages left out of the script are generated (decreasing down the thread, never older than the post).
| Name | Type | Req | Description |
|---|---|---|---|
| comments | array | – | Comments as an array of event objects instead of a script string (use this OR script, not both). Each item is one of: {author, text, depth (0 top-level, 1 reply to the nearest depth-0 comment above,… |
| endHold | number | – | Seconds to hold on the final frame before the video ends. Default: 2. |
| post | object | – | The post. Use this OR script, not both. |
| script | string | – | Thread as a plain-text script. Use this OR post/comments, not both. Reddit thread script format (post + nested comments): title: AITA for not going to my sister's wedding? body: First paragraph of… |
| speed | number | – | Pacing multiplier; 2 = twice as fast, 0.5 = half speed. Default: 1. Use 1.3-1.5 for a faster reel. |
| statusBar | object | – | Phone status bar shown above the Safari toolbar. |
| subreddit | object | – | The subreddit the thread is posted in. |
| theme | string | – | Color theme, "light" or "dark". Default: light. |
No output schema declared.
No examples provided.
reddit_screenshot Screenshot a Reddit thread ~828
Render a single frame of a Reddit thread (script, or post+comments) to a PNG and return it as an image. Defaults to the last frame — pass "frame" to capture an earlier moment (30 fps). Returns the PNG as image content, plus a text line with the PNG's URL (expires after 24 hours). If the thread is invalid, this returns an error result with the validation messages instead of an image. Reddit thread script format (post + nested comments): title: AITA for not going to my sister's wedding? body: First paragraph of the post (optional, one line per paragraph) body: Second paragraph [photo URL] a photo in the post (URL, file path or uploaded photo's number) sleepy_joe: A top-level comment > OP: A reply by the post's author (blue OP label) >> sleepy_joe [2.1K 3h]: A reply to that reply, with its votes and age [91 more replies] collapsed replies under the comment above [pause 2] wait 2 s # comment The video is a screen recording of a thread on mobile reddit.com in iOS Safari: the page is laid out once and the view scrolls from block to block, holding each one long enough to read. The title is on screen from frame 0. Scores and ages left out of the script are generated (decreasing down the thread, never older than the post).
| Name | Type | Req | Description |
|---|---|---|---|
| comments | array | – | Comments as an array of event objects instead of a script string (use this OR script, not both). Each item is one of: {author, text, depth (0 top-level, 1 reply to the nearest depth-0 comment above,… |
| endHold | number | – | Seconds to hold on the final frame before the video ends. Default: 2. |
| frame | integer | – | Frame index to capture, at 30 fps (e.g. 30 = one second in). Omit to capture the final frame of the thread. |
| post | object | – | The post. Use this OR script, not both. |
| script | string | – | Thread as a plain-text script. Use this OR post/comments, not both. Reddit thread script format (post + nested comments): title: AITA for not going to my sister's wedding? body: First paragraph of… |
| speed | number | – | Pacing multiplier; 2 = twice as fast, 0.5 = half speed. Default: 1. Use 1.3-1.5 for a faster reel. |
| statusBar | object | – | Phone status bar shown above the Safari toolbar. |
| subreddit | object | – | The subreddit the thread is posted in. |
| theme | string | – | Color theme, "light" or "dark". Default: light. |
No output schema declared.
No examples provided.
What is the txtreel MCP server?
txtreel is an MCP server listed in the public MCP registry as com.txtreel/txtreel. Free iMessage, WhatsApp, Instagram DM and Reddit chat videos (1080x1920 MP4) and screenshots. This page covers its hosted endpoint (https://txtreel.com/mcp).
Is the txtreel MCP server safe to use?
txtreel scores 71 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the txtreel MCP server expose?
txtreel exposes 7 tools: chat_validate, chat_render_video, chat_screenshot, reddit_render_video, reddit_screenshot, and 2 more. Their descriptions and schemas cost roughly 7,353 tokens of context every time the server is loaded.
Does the txtreel MCP server require authentication?
No. We connected to txtreel without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the txtreel MCP server still maintained?
txtreel is still listed as active in the MCP registry. We last reached this channel on 7 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.