furlen-mcp
This MCP server (furlen-mcp) generates animated, claim-verified chart videos from tabular data or public datasets, enabling plain‑English requests to fetch real data and turn it into narrated videos.
Fetch public datasets: Describe a dataset in plain English (e.g., "India GDP over the last 10 years") and get real rows, CSV, and provenance from World Bank, IMF WEO, FRED, Eurostat, UN Comtrade, WHO, SEC EDGAR, ESEF, DART, EDINET, and more.
Render animated chart videos: Submit CSV data and receive an AI‑narrated video where every claim is recomputed and verified against the source; export is blocked if claims don’t reconcile.
Poll render status: Check progress (queued → running → completed) and retrieve the download URL once ready (typically 30‑90 seconds).
Customize output: Audience tone (investor, LinkedIn, YouTube, etc.), aspect ratio (16:9, 9:16, 1:1), file format (MP4, GIF), and resolution (720p, 1080p, 4k).
No file uploads needed: Chain fetch → render → status for an end‑to‑end pipeline directly from a data description.
Graceful error handling: Returns descriptive 422 errors for unsupported subjects instead of guessing.
furlen-mcp
An MCP server for making charts. Give Claude, Cursor, or any Model Context Protocol client a table of numbers and it returns an animated chart video — and it recomputes every figure in the narration against your rows before it will export anything.
Published to the official MCP registry as io.github.amitsha86/furlen-mcp. Backed by
Furlen.
Why this one is different
Most chart tooling will draw whatever number you hand it, and an AI-assisted one will happily generate a number to draw. This server won't: the story it writes is checked claim-by-claim against the source rows server-side, and a claim that doesn't reconcile blocks the export rather than shipping. You can watch that gate run at furlen.pro/proof.
That matters more through an agent than through a UI. Nobody is watching the intermediate output, so the check has to be the thing that refuses — not a human noticing.
Related MCP server: ittybitty MCP server
Setup
Create a Furlen API key at furlen.pro → Settings → API keys.
Add the server to your MCP client config. Nothing to install first;
npxfetches it.
{
"mcpServers": {
"furlen": {
"command": "npx",
"args": ["-y", "furlen-mcp"],
"env": { "FURLEN_API_KEY": "sg_live_..." }
}
}
}Claude Desktop: add the block above to
claude_desktop_config.jsonand restart.Cursor: add it to
.cursor/mcp.json.Any other MCP client: run
npx -y furlen-mcpwithFURLEN_API_KEYset.
Tools
furlen_public_data
Fetch a real public dataset by describing it — no spreadsheet needed.
"India GDP over the last 10 years" · "compare US and China population" · "Apple revenue over 6 years" · "US healthy life expectancy" · "India exports to the US"
Resolves through Furlen's adapters for the World Bank, IMF WEO, FRED, Eurostat, UN Comtrade,
WHO and company filings (SEC EDGAR, ESEF, DART, EDINET). Returns the rows, a ready-to-use
csv string you can pass straight to furlen_render, and provenance naming the exact indicator.
If no connected source covers the subject it says so: a 422 with code: "subject_unsupported"
means the data doesn't exist here, not that the request was malformed — don't retry it
reworded. Exchange rates are the canonical example.
furlen_render
Turns CSV text into an animated, claim-verified chart video. One call runs the whole pipeline —
profile the data, find the insights, write the story, verify every claim, render — and returns a
renderId.
Arg | Values | Default |
| Raw CSV text, header row first | — |
|
|
|
|
|
|
|
|
|
|
|
|
furlen_render_status
Polls a renderId. Returns status (queued → running → completed | failed), progress, and a
downloadUrl when finished. Renders usually take 30–90 seconds, so poll every few seconds
rather than blocking.
Example
"Here's my quarterly revenue CSV — make a LinkedIn chart video from it with Furlen."
The agent calls furlen_render, polls furlen_render_status, and hands back the download link once
the video is ready.
Example: chart public data end to end
"Chart India's GDP over the last 10 years and make me a LinkedIn video."
The agent calls furlen_public_data with that request, gets back rows plus a csv string, passes
the csv to furlen_render, polls furlen_render_status, and returns the download link. No file
ever touches the agent's filesystem.
What it can't do yet
Worth knowing before you wire it up:
No file uploads. Data arrives as CSV text or by naming a public dataset — not as an attached spreadsheet.
Rendering is asynchronous. There is no synchronous "give me a chart back now" call.
The sources are the sources. If no connected provider publishes the figure, you get a refusal rather than an estimate. That is the design, not a gap.
It needs an API key with the
data:readandrenders:writescopes, and your plan's limits on resolution, watermarking and render minutes apply exactly as in the app.
Environment
FURLEN_API_KEY(required) — your workspace API key.FURLEN_BASE_URL(optional) — defaults tohttps://furlen.pro.
Links
Product: https://furlen.pro
API + MCP docs: https://furlen.pro/developers#mcp
How claim verification works: https://furlen.pro/proof
MIT © Furlen
Available Tools
3 toolsfurlen_public_dataA
Fetch a real public dataset by describing it in plain English — no CSV needed. Pulls from the World Bank, IMF WEO, FRED, Eurostat, UN Comtrade, WHO, and company filings (SEC EDGAR, ESEF, DART, EDINET). Returns the rows, a ready-to-use csv string you can pass straight to furlen_render, and provenance naming the exact indicator and source. If no connected source covers the subject it says so rather than guessing — a 422 with code 'subject_unsupported' means the data does not exist here, not that the request was malformed, so do not retry it reworded.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | What you want, in plain English. E.g. "India GDP over the last 10 years", "compare US and China population", "Apple revenue over 6 years", "US healthy life expectancy", "India exports to the US". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that unsupported subjects return a 422 with code 'subject_unsupported', meaning the data does not exist, and that it does not guess. It also mentions provenance.
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 sentences, direct and front-loaded. It conveys essential information without fluff. Could be slightly more concise but is efficient.
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?
Given the tool is simple (1 param, no output schema), the description adequately covers purpose, error handling, and output format. No major gaps.
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?
The only parameter 'prompt' has 100% schema coverage. The description adds value by specifying it should be in plain English and providing examples, which goes beyond the schema's description.
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 description clearly states it fetches real public datasets using plain English, lists specific sources (World Bank, IMF, etc.), and explains the return value includes rows, a csv string for rendering, and provenance. It distinguishes from sibling tools by mentioning the csv string for furlen_render.
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 tells when to use (fetching public data) and how to handle a 422 error (do not retry). It doesn't explicitly state when not to use, but the context of siblings (rendering tools) implies this is for data retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
furlen_renderA
Turn CSV data into an animated, claim-verified data-story video. Runs Furlen's full pipeline (profile → insights → AI story → verification → render) and returns a render id to poll with furlen_render_status.
| Name | Required | Description | Default |
|---|---|---|---|
| csv | Yes | Raw CSV text, header row first. E.g. "month,revenue\n2025-01,120000\n2025-02,145000" | |
| format | No | File format (default mp4) | |
| audience | No | Tone/angle for the AI copywriter (default linkedin) | |
| resolution | No | Capped by the workspace plan (default 1080p) | |
| outputFormat | No | Aspect (default video_16_9) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses full pipeline and return of render id, but lacks error handling, duration estimates, or cost/rate limit info. No annotations to share burden.
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?
Only two sentences, front-loaded with main action, no extraneous words. Every sentence contributes value.
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?
Covers pipeline and result, but missing typical duration, error scenarios, and operational context (e.g., cost, quotas). Adequate but not fully comprehensive.
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 covers 100% of parameters with descriptions; tool description adds no additional semantic value beyond summarizing overall functionality.
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?
Description clearly states it turns CSV into an animated video, enumerates pipeline steps, and distinguishes from sibling by mentioning polling with furlen_render_status.
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?
Implied usage (to create a render) but no explicit when-to-use vs siblings (furlen_public_data, furlen_render_status) or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
furlen_render_statusA
Check a Furlen render job. Returns status (queued → running → completed | failed), progress, and a downloadUrl when completed. Renders typically take 30–90 seconds; poll every few seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| renderId | Yes | The renderId returned by furlen_render |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers key behaviors: returns status, progress, downloadUrl, and typical timing. It does not detail failure modes or error handling, but suffices for a status-check tool.
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 sentences, no fluff. First sentence states function and deliverables, second gives practical timing and polling advice. Every sentence earns its place.
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?
Given one parameter and no output schema, the description covers return fields, lifecycle, and usage pattern adequately. Could mention error info on failure, but overall sufficient.
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?
Only one parameter (renderId) with schema coverage 100%. The description adds no extra detail beyond the schema's note that it's returned by furlen_render, so meets baseline but adds no enrichment.
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 description clearly states the verb 'check' and the resource 'Furlen render job', and specifies the returned status lifecycle. It does not explicitly distinguish from siblings like furlen_render or furlen_public_data, but the purpose is unambiguous.
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?
Provides context on when to use (after initiating a render) and how to poll (every few seconds based on typical 30-90 second duration), but does not mention when not to use or alternatives.
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. Dates show when Glama detected each change.
3 tool updates
v0.1.3- First observed
furlen_public_data - First observed
furlen_render - First observed
furlen_render_status
TDQS
Each tool serves a distinct purpose: fetching data, rendering a video, and checking render status. There is no functional overlap between them.
All tools follow a consistent 'furlen_<noun>' pattern with clear, descriptive names. The naming convention is uniform and predictable.
With only 3 tools, the set is tightly scoped to the core workflow (fetch, render, poll). Each tool is essential and no tool feels redundant or missing.
The tool surface covers the entire data-to-video pipeline: data fetching, render initiation, and status polling. No obvious gaps exist for the stated purpose.
Maintenance
Related MCP Connectors
Turn words, images, and audio into an animated video with MP4 export.
Turn a topic, URL, or document into a narrated, animated explainer video.
Creates 2D motion-graphics videos: kinetic typography, charts, formulas, narrated explainers.
Generate AI videos from a prompt or document (PDF/PPTX/DOCX/URL) and export shareable MP4s.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceGenerates narrated video walkthroughs of git commits, staged/unstaged changes, or entire codebases with AI-powered analysis, syntax-highlighted code visualization, and text-to-speech narration.-
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to generate narrated videos from topics or scripts, with stock footage, home videos, or local AI clips.2MIT
- AlicenseNot gradedqualityCmaintenanceYour coding agent makes the demo video — turns a storyboard.json into a narrated, captioned product-demo MP4; deterministic replay re-renders it in CI at ~$0.544MIT
- AlicenseNot gradedqualityCmaintenanceTurn words, images, and audio into an animated video with MP4 export.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/amitsha86/furlen-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server