nc://flipletters

v0.1.0Pinned
ThomSharktools/nodecode-flipletters: Design, validate and render split-flap and flip-dot board videos, then share them to a team or social. - a rewrite of Terahertz-Inc/flipletters-mcp (MIT), credited to Terahertz-Inc1a517ba· 9 Nov1 commit
test1 filecell.lisp23.0 KBwire.lisp9.6 KB

nodecode-flipletters

FlipLetters: split-flap and flip-dot board videos, designed in flipcode and rendered to MP4, with team and social sharing. A Nodecode rewrite of Terahertz-Inc/flipletters-mcp by Terahertz-Inc.

The model gets FlipLetters' own thirteen tools — read the flipcode cheat sheet, take an example board, validate a draft, build a Studio link, render, poll, and share to a team or through Postiz — plus flipletters_tools, which lists what the live server offers. /flipletters is the operator's way in, and (help :flipletters) is the model's page.

Get it

Tell the agent "add the flipletters cell", or run nodecode add nc://flipletters.

Set it up

Every call on the hosted server needs a FlipLetters key: open Studio → Account → API keys & agents and create one (it starts with flk_; creating one is free). Put it in the environment:

echo 'FLIPLETTERS_API_KEY=flk_…' >> ~/.nodecode/.env

or write it in the cell's section, which /settings writes:

{
  "flipletters": {
    "api_key_env": "FLIPLETTERS_API_KEY",   // or "api_key" written inline
    "url": "https://app.flipletters.com/mcp/v1",
    "timeout_seconds": 60
  }
}

A cell with no key anywhere refuses at start, and the notice names the variable; fix it and restart-cells tries again.

Setting Default What it does
api_key / api_key_env none (FLIPLETTERS_API_KEY) the flk_ key, inline or by environment variable
url https://app.flipletters.com/mcp/v1 the server's Streamable HTTP endpoint
timeout_seconds 60 one exchange's ceiling; a render polls inside it

Use it

Ask for a board — "make a trainboard that flips through NOW BOARDING, GATE 12, ON TIME" — and the model reads the reference, drafts, validates until the warnings are gone, and gives you the Studio share link. It renders, shares or posts only when you ask.

Tool What it does
flipletters_flipcode_reference the flipcode cheat sheet: directives, board types, size limits, transitions
flipletters_example_board {template} a complete valid board of one type, to edit rather than write
flipletters_validate_board {code} a draft parsed: valid or not, warnings, normalized code, summary, share link
flipletters_template_url {board?, grid?, title?, accent?, out?, sound?, speed?, slides?, flip?, hold?} a readable Studio URL, one query parameter per flipcode line
flipletters_create_animation {text, template?} text to a rendered MP4 in one call
flipletters_render_board {code, repeat?, wait?} a cloud render of a flipcode document
flipletters_render_status {jobId} one render job polled, and its MP4 URL once done
flipletters_list_teams / flipletters_share_to_team {teamId, name, code} the teams the key belongs to, and a board into a team library
flipletters_list_workspaces the key owner's agency projects
flipletters_list_postiz_destinations {workspaceId} a project's Postiz destinations
flipletters_list_postiz_integrations {workspaceId, destinationId} the social channels on one destination
flipletters_share_to_postiz {workspaceId, destinationId, integrationId, date, type?, content?, mediaUrl?, fileName?, providerType?} schedule, draft or post the MP4 through your own connected channels
flipletters_tools {refresh?} what the server offers this key, with the arguments each requires

/flipletters says where the cell points and whether it has a key; /flipletters tools lists the server's tools; /flipletters refresh asks again; /flipletters reference prints the cheat sheet.

Two things cost money or publish, so the primer says to do them only when asked: a render spends the key owner's export quota (free renders carry a watermark), and a Postiz share goes out to the accounts they connected. create_animation is not idempotent — every call starts a new render.

What is in it

File What it is
package.lisp the package, named after the folder
wire.lisp MCP over Streamable HTTP: the session, tools/list, tools/call, and the answers' text
cell.lisp the section, the fourteen tools, /flipletters and (help :flipletters)
test/cell-test.lisp lifecycle, the handshake, the tools' arguments and answers, the refusals — every request a stubbed nlk:http
config.example.jsonc the section, commented

Why the tools are the server's

The original is a manifest and a skill over a hosted server, so its tool set and their schemas live at the endpoint, not in the repository. The cell keeps them there: each tool passes its documented arguments through, a JSON-RPC error or a bare status comes back as ERROR: with the server's words, and flipletters_tools answers the live list when a name is refused. The local npx stdio variant the README mentions is not bundled — the cell dials the hosted endpoint directly and installs nothing.

Test

From the cells repository's root, offline:

.github/test-cell.sh tools/nodecode-flipletters

License

MIT. Copyright (c) 2026 Terahertz, Inc.: see LICENSE and NOTICE.

Add nc://flipletters

  1. 1

    Install Nodecode

    Once per machine.

    $ curl -fsSL https://nodecode.ai/install.sh | sh
  2. 2

    Add the cell

    Pinned at 1a517ba.

    $ nodecode add nc://flipletters

    Or tell the agent add the flipletters cell.