{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T16:01:24.271Z","url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server","markdownUrl":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server.md","server":{"slug":"com-flipletters-mcp","name":"FlipLetters","registryName":"com.flipletters/mcp","description":"Draft, validate, render, and share split-flap and flip-dot board videos written in flipcode.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"flipletters-mcp-server","type":"npm","identifier":"flipletters-mcp-server","withdrawn":false,"url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server","version":"0.3.1","transport":"stdio","scoredAt":"2026-11-05T10:15:14.795Z"},"score":{"total":73,"tier":"medium","status":"scored","weekDelta":3,"history":[{"date":"2026-11-05","total":73},{"date":"2026-11-04","total":73},{"date":"2026-11-03","total":73},{"date":"2026-11-02","total":72},{"date":"2026-11-01","total":72},{"date":"2026-10-31","total":71},{"date":"2026-10-30","total":71},{"date":"2026-10-29","total":70},{"date":"2026-10-28","total":70},{"date":"2026-10-27","total":69},{"date":"2026-10-26","total":69},{"date":"2026-10-25","total":68},{"date":"2026-10-24","total":68},{"date":"2026-10-23","total":72},{"date":"2026-10-22","total":72},{"date":"2026-10-21","total":72},{"date":"2026-10-20","total":71},{"date":"2026-10-19","total":71},{"date":"2026-10-18","total":70},{"date":"2026-10-17","total":70}]},"categories":[{"name":"Supply Chain Security","score":81,"verdict":"fail","reasons":["No malware found by supply-chain analysis.","CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available.","No install/post-install scripts declared.","30 of 94 dependencies flagged as unhealthy."],"codes":[{"code":"supplychain.malware_clean","args":{}},{"code":"cve.direct","args":{"package":"zod","version":"3.25.76","severity":"high"}},{"code":"installscript.none","args":{}},{"code":"dephealth.assessed","args":{"deps":"94","unhealthy":"30"}}]},{"name":"Provenance & Transparency","score":45,"verdict":"fail","reasons":["Source repository is publicly reachable at the declared URL.","Provenance check failed: no build-provenance attestation is published.","Clear OSI-approved license (MIT).","Actively maintained (last published 21 days ago).","Disclosure check failed: no security disclosure policy was found in the source repository."],"codes":[{"code":"provenance.repo_verified","args":{}},{"code":"provenance.none","args":{}},{"code":"license.osi","args":{"spdx":"MIT"}},{"code":"maintenance.recent","args":{"age_days":"21"}},{"code":"disclosure.absent","args":{}}]},{"name":"Schema Quality & AI Usability","score":76,"verdict":"fail","reasons":["AI-judged instruction clarity (good).","Tool/resource definitions use about 1225 tokens (~102/item across 12 items; 12 tools + 0 resources), lean.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.ai_quality","args":{"band":"good"}},{"code":"schema.footprint_lean","args":{"avg":"102","items":"12","tools":"12","tokens":"1225","resources":"0"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":63,"verdict":"partial","reasons":["Stability observed for 19 of 30 days with no destabilising changes; credit accrues until the full window elapses."],"codes":[{"code":"stability.building_history","args":{"days":"19"}}]},{"name":"Tool Coverage","score":95,"verdict":"partial","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","84% of tool parameters carry a description.","Structured output schemas are declared (33% of tools); any adoption earns full credit."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"84"}},{"code":"toolquality.output_present","args":{"pct":"33"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","We read all 12 captured tool definition(s), and no name or description among them implies an irreversible operation.","An AI judge read all 12 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_none","args":{"tools":"12"}},{"code":"toolsafety.manipulation_clean","args":{"units":"12","judged":"12"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28."],"codes":[{"code":"protocol.supported","args":{"latest":"2026-07-28","version":"2025-11-25"}}]}],"inconclusive":[],"malware":[],"components":[{"slug":"mcp-v1","type":"remote","identifier":"https://app.flipletters.com/mcp/v1","withdrawn":false,"score":85,"current":false,"url":"https://verifymcp.io/servers/com-flipletters-mcp/mcp-v1","markdownUrl":"https://verifymcp.io/servers/com-flipletters-mcp/mcp-v1.md"},{"slug":"flipletters-mcp-server","type":"npm","identifier":"flipletters-mcp-server","withdrawn":false,"score":73,"current":true,"url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server","markdownUrl":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server.md"}],"facts":[{"label":"Registry","value":"npm"},{"label":"Package","value":"flipletters-mcp-server"},{"label":"Version","value":"0.3.1"},{"label":"Transport","value":"stdio"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"flipletters_flipcode_reference","title":"flipcode reference","description":"Returns the flipcode cheat sheet (spec v1): directives, board types and size limits, transition modes, and flip-native effect recipes. Call this before writing a board so the code you produce is valid on the first try.","inputs":[],"outputs":[{"name":"reference","type":"string","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":57},{"name":"flipletters_validate_board","title":"Validate a board","description":"Parses a flipcode document, returning the normalized canonical code, any warnings (out-of-range values are clamped, unknown lines ignored), a board summary, and links: a share URL that opens the exact board in the FlipLetters Studio, and an open-with-code URL that also reveals the code panel. Use this after drafting a board; fix warnings and re-validate until clean, then give the human the share link.","inputs":[{"name":"code","type":"string","required":true,"description":"A complete flipcode document (see flipletters_flipcode_reference)."}],"outputs":[{"name":"canonicalCode","type":"string","required":true,"description":null},{"name":"openWithCodeUrl","type":"string|null","required":true,"description":null},{"name":"shareUrl","type":"string|null","required":true,"description":"Opens this exact board in the Studio. Null when the board is too large for a URL — share the code text instead."},{"name":"summary","type":"object","required":true,"description":null},{"name":"valid","type":"boolean","required":true,"description":null},{"name":"warnings","type":"array","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":114},{"name":"flipletters_example_board","title":"Example board","description":"Returns a complete, valid flipcode document for a board type (minimal, trainboard/station, artboard, flipdot, marquee, announcement, arena) — a known-good starting point to edit rather than writing from scratch.","inputs":[{"name":"template","type":"string","required":true,"description":"Board type or alias: minimal, trainboard, station, artboard, art, flipdot, dots, marquee, desk, announcement, poster, arena, lightbox."}],"outputs":[{"name":"code","type":"string","required":true,"description":null},{"name":"template","type":"string","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":97},{"name":"flipletters_template_url","title":"Readable template URL","description":"Builds a human-readable FlipLetters Studio URL where every query parameter mirrors one flipcode line — good for short text boards you want legible in the address itself (chat messages, docs). For full fidelity or paint grids use flipletters_validate_board's share link instead. Slides are strings with | between rows.","inputs":[{"name":"accent","type":"string","required":false,"description":"Hex color, # optional."},{"name":"board","type":"string","required":false,"description":"Board type/alias, e.g. \"station\"."},{"name":"flip","type":"string","required":false,"description":"Transition, commas for spaces: \"cascade,9,0.2,0.4\"."},{"name":"grid","type":"string","required":false,"description":"ROWSxCOLS, e.g. \"8x34\"."},{"name":"hold","type":"string","required":false,"description":"Seconds, e.g. \"6\"."},{"name":"out","type":"string","required":false,"description":"Canvas: \"vertical\", \"square\", \"1200x630@25\", …"},{"name":"slides","type":"array","required":false,"description":"Each entry is one slide; | separates rows: \"EGGS BENEDICT|FLAT WHITE\"."},{"name":"sound","type":"string","required":false,"description":null},{"name":"speed","type":"string","required":false,"description":null},{"name":"title","type":"string","required":false,"description":null}],"outputs":[{"name":"url","type":"string","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":230},{"name":"flipletters_render_board","title":"Cloud-render a board to MP4","description":"Parses flipcode and submits a cloud MP4 render under the API key owner's FlipLetters plan (same free quota / Premium / Studio limits as the Studio). Requires FLIPLETTERS_API_KEY. Polls until done (or returns jobId if wait=false). Prefer share links for free previews; only render when the human wants an MP4 file.","inputs":[{"name":"code","type":"string","required":true,"description":"Complete flipcode document."},{"name":"repeat","type":"integer","required":false,"description":"Loop the segment this many times (default 1). Caps apply for long / 4K exports."},{"name":"wait","type":"boolean","required":false,"description":"If true (default), poll until done/error. If false, return jobId immediately."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":142},{"name":"flipletters_render_status","title":"Cloud render job status","description":"Poll a cloud render job started with flipletters_render_board. Requires FLIPLETTERS_API_KEY.","inputs":[{"name":"jobId","type":"string","required":true,"description":"Job id returned by flipletters_render_board."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":46},{"name":"flipletters_list_teams","title":"List my teams","description":"Lists FlipLetters teams the API key owner belongs to (teamId, name, inviteCode). Requires FLIPLETTERS_API_KEY with team scope.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":41},{"name":"flipletters_share_to_team","title":"Share board to team library","description":"Parses flipcode and shares the board into a Team Library the key owner is a member of. Requires FLIPLETTERS_API_KEY. Use flipletters_list_teams first to get teamId.","inputs":[{"name":"code","type":"string","required":true,"description":"Complete flipcode document."},{"name":"name","type":"string","required":true,"description":"Display name for the template in the team library."},{"name":"teamId","type":"string","required":true,"description":"Team id from flipletters_list_teams."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":93},{"name":"flipletters_list_workspaces","title":"List FlipLetters projects","description":"Lists agency projects (workspaces) for the API key owner, plus the active project id. Project-scoped keys return their bound project as active. Requires FLIPLETTERS_API_KEY.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":49},{"name":"flipletters_list_postiz_destinations","title":"List Postiz share accounts on a project","description":"Lists Postiz destinations (masked keys) attached to a FlipLetters project. Use flipletters_list_workspaces first. Requires FLIPLETTERS_API_KEY.","inputs":[{"name":"workspaceId","type":"string","required":true,"description":"Project id from flipletters_list_workspaces."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":60},{"name":"flipletters_list_postiz_integrations","title":"List channels on a Postiz destination","description":"Lists connected social channels for a project's Postiz share account. Use before flipletters_share_to_postiz to get integrationId. Requires FLIPLETTERS_API_KEY.","inputs":[{"name":"destinationId","type":"string","required":true,"description":null},{"name":"workspaceId","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":62},{"name":"flipletters_share_to_postiz","title":"Schedule export on Postiz","description":"Uploads a cloud media URL (or Studio host local fileName) to a project's Postiz destination and schedules/drafts/posts it. Loop: render_board → list_workspaces → list_postiz_destinations → list_postiz_integrations → share_to_postiz. Requires FLIPLETTERS_API_KEY. Prefer mediaUrl from flipletters_render_board.","inputs":[{"name":"content","type":"string","required":false,"description":"Caption / post body."},{"name":"date","type":"string","required":true,"description":"UTC ISO datetime, e.g. 2026-08-14T15:00:00.000Z"},{"name":"destinationId","type":"string","required":true,"description":"Postiz destination id on that project."},{"name":"fileName","type":"string","required":false,"description":"Local renders/*.mp4 name when Studio host has the file."},{"name":"integrationId","type":"string","required":true,"description":"Postiz channel/integration id."},{"name":"mediaUrl","type":"string","required":false,"description":"HTTPS URL of the MP4 (from cloud render)."},{"name":"providerType","type":"string","required":false,"description":"Postiz provider __type, e.g. tiktok, x, linkedin."},{"name":"type","type":"string","required":false,"description":"Default schedule."},{"name":"workspaceId","type":"string","required":true,"description":"FlipLetters project id."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":234}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T10:15:14.000Z","track":"package","endpoint":null,"declaredUrl":null,"truncated":false,"tls":null,"dnssec":null,"auth":null,"httpsRedirect":null,"transports":[],"provenance":{"outcome":"none","label":"No attestation","reason":null,"reasonLabel":null,"discovery":null,"discoveryLabel":null,"sourceRepo":null,"attestationSkipped":null,"attestationSkippedLabel":null},"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[{"id":"GHSA-mrhx-c7xc-m3w5","cve":"CVE-2023-54404","severity":"high","fixAvailable":true}],"vulnerabilitiesTotal":1,"dependencies":{"nodes":94,"partial":false,"deprecated":null,"stale":30,"noRepo":null}},"mismatches":[],"changelog":{"trackingSince":"2026-10-17","recent":[{"id":"chg_01a1a0e6-ca74-7a28-b390-55c7d0fa111d","kind":"score.total_changed","summary":"Trust score (72 → 73)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server#chg-chg_01a1a0e6-ca74-7a28-b390-55c7d0fa111d"},{"id":"chg_01a1969a-a4d6-7581-a108-252587ea56dc","kind":"score.total_changed","summary":"Trust score (71 → 72)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server#chg-chg_01a1969a-a4d6-7581-a108-252587ea56dc"},{"id":"chg_01a18c4c-625c-7639-a68a-4e033a42abe7","kind":"score.total_changed","summary":"Trust score (70 → 71)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-30","url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server#chg-chg_01a18c4c-625c-7639-a68a-4e033a42abe7"},{"id":"chg_01a181fe-fe0d-7ef7-92ee-e6ddbf600af1","kind":"score.total_changed","summary":"Trust score (69 → 70)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server#chg-chg_01a181fe-fe0d-7ef7-92ee-e6ddbf600af1"},{"id":"chg_01a177b3-0d04-7582-bbef-51b090061944","kind":"score.total_changed","summary":"Trust score (68 → 69)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-26","url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server#chg-chg_01a177b3-0d04-7582-bbef-51b090061944"},{"id":"chg_01a16d65-f1e8-7147-947f-ca801b9f5fbc","kind":"score.total_changed","summary":"Trust score (72 → 68)","materiality":"functional","direction":"regression","scoreDelta":-4,"occurredOn":"2026-10-24","url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server#chg-chg_01a16d65-f1e8-7147-947f-ca801b9f5fbc"},{"id":"chg_01a16d65-f1e7-7a26-9749-6672d733c8fb","kind":"check.verdict","summary":"Known CVEs (pass → fail)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-24","url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server#chg-chg_01a16d65-f1e7-7a26-9749-6672d733c8fb"},{"id":"chg_01a16d65-f1e7-7431-8b21-348bd95e33ce","kind":"advisory.identified","summary":"CVE-2023-54404 affects this package (high)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-24","url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server#chg-chg_01a16d65-f1e7-7431-8b21-348bd95e33ce"},{"id":"chg_01a15df1-f3da-7f28-a8aa-e342a2d009b0","kind":"score.total_changed","summary":"Trust score (71 → 72)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-21","url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server#chg-chg_01a15df1-f3da-7f28-a8aa-e342a2d009b0"},{"id":"chg_01a153a4-b5f6-7770-91e0-cd1f9ef4092f","kind":"score.total_changed","summary":"Trust score (70 → 71)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-19","url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server#chg-chg_01a153a4-b5f6-7770-91e0-cd1f9ef4092f"},{"id":"chg_01a1477e-d394-77fe-b20d-966e04502328","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-17","url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server#chg-chg_01a1477e-d394-77fe-b20d-966e04502328"},{"id":"chg_01a14760-6ebd-7670-b15e-e588c11bcf89","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-17","url":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server#chg-chg_01a14760-6ebd-7670-b15e-e588c11bcf89"}],"truncated":false,"feedUrl":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server/changelog.json"},"links":{"html":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server","markdown":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server.md","changelogJson":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server/changelog.json","changelogRss":"https://verifymcp.io/servers/com-flipletters-mcp/flipletters-mcp-server.xml","external":[{"label":"npm package","href":"https://www.npmjs.com/package/flipletters-mcp-server"},{"label":"Socket report","href":"https://socket.dev/npm/package/flipletters-mcp-server"},{"label":"Repository","href":"https://github.com/Terahertz-Inc/flipletters-mcp"},{"label":"Website","href":"https://flipletters.com/mcp"}]}}