Skip to main content
Glama

furlen-mcp

furlen-mcp MCP server

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

  1. Create a Furlen API key at furlen.pro → Settings → API keys.

  2. Add the server to your MCP client config. Nothing to install first; npx fetches 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.json and restart.

  • Cursor: add it to .cursor/mcp.json.

  • Any other MCP client: run npx -y furlen-mcp with FURLEN_API_KEY set.

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

csv (required)

Raw CSV text, header row first

audience

investor · executive · linkedin · youtube · internal_team · client_report · student

linkedin

outputFormat

video_16_9 · video_9_16 · video_1_1

video_16_9

format

mp4 · gif

mp4

resolution

720p · 1080p · 4k

1080p

furlen_render_status

Polls a renderId. Returns status (queuedrunningcompleted | 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:read and renders:write scopes, 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 to https://furlen.pro.

MIT © Furlen

Available Tools

3 tools
furlen_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesWhat 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

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
csvYesRaw CSV text, header row first. E.g. "month,revenue\n2025-01,120000\n2025-02,145000"
formatNoFile format (default mp4)
audienceNoTone/angle for the AI copywriter (default linkedin)
resolutionNoCapped by the workspace plan (default 1080p)
outputFormatNoAspect (default video_16_9)

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
renderIdYesThe renderId returned by furlen_render

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

  1. 3 tool updatesv0.1.3
    • First observedfurlen_public_data
    • First observedfurlen_render
    • First observedfurlen_render_status

TDQS

A4.2/5.0
Disambiguation5/5

Each tool serves a distinct purpose: fetching data, rendering a video, and checking render status. There is no functional overlap between them.

Naming Consistency5/5

All tools follow a consistent 'furlen_<noun>' pattern with clear, descriptive names. The naming convention is uniform and predictable.

Tool Count5/5

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.

Completeness5/5

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

ActivitySlowing
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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