FormLM
NPM · @FORMLM/CLI
Build AI-powered forms, scored assessments and professional reports on FormLM, by natural language.
Available components
Last scanned (5 hours ago)
Scores higher than 39% of npm servers
Category Productivity and Notes
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security81
- No malware found by supply-chain analysis.Pass
- CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. View diagnostics → Fail
- No install/post-install scripts declared.Pass
- 30 of 94 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency19
- Repository check failed: the declared repository URL returned HTTP 404. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 25 days ago).Pass
- Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability78
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4333 tokens (~270/item across 16 items; 10 tools + 6 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 Management70
- Stability observed for 21 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
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 11 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
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.
- 4 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.
- 30 Oct 26 0
- Security disclosure: fail → unverified ▼ functional
- 29 Oct 26 −4
- Source repository: pass → fail ▼ security
- 26 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.
- 24 Oct 26 −4
- CVE-2023-54404 affects this package: high ▼ security
- Known CVEs: pass → fail ▼ security
- 22 Oct 26 +4
- Stability: unverified → 0.23 ▲ functional
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 5 Nov 2026 · Analysed npm/@formlm/cli@0.5.4
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Vulnerabilities 1 finding
| ID | CVE | Severity | Vector | Fix available |
|---|---|---|---|---|
| GHSA-mrhx-c7xc-m3w5 | CVE-2023-54404 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | yes |
Background: What a vulnerability scan can and cannot prove →
Dependencies 94 packages
| Packages resolved | 94 |
|---|---|
| Stale | 30 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
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 →
auth_email_code Request email verification code ~238
Request an email verification code for FormLM login (part of auth_login method 2 — no password needed). Two-step usage: 1. Call WITHOUT `captcha` → returns a captcha image. Show it to the user and ask them to read the 4 digits. (The image is a human-verification gate — you cannot solve it yourself; the user must read it.) 2. Call WITH `captcha` (the 4 digits) → if correct, a 6-digit code is emailed to the user (valid 5 minutes). Then ask the user for that code and call auth_login with { email, code }. Server rate limits (anti-abuse): 1 send per email per 60s, 10 sends per IP per minute. On 429, tell the user to wait a minute. On 403, the digits were wrong — fetch a fresh image and try once more.
| Name | Type | Req | Description |
|---|---|---|---|
| captcha | string | – | The 4 digits the user read from the captcha image (omit on first call to get the image) |
| string | yes | Account email (the verification code will be sent here) |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | – |
| stage | string | yes | – |
No examples provided.
auth_login Login to FormLM ~356
Login to FormLM. Three methods, in order of preference: 1. Access Token (recommended): ask the user to copy it from formlm.me → Workspace → Account Settings → Access Token → Copy, then pass it as `token`. 2. Email verification code (no password needed, fully in-chat, works for ALL accounts): a. Call auth_email_code { email } — returns a captcha image (show it to the user) b. Ask the user to read the 4 digits from the image, then call auth_email_code { email, captcha } c. A 6-digit code is emailed to the user (valid 5 minutes) — ask them for it d. Call this tool with { email, code } 3. email + password: only for accounts that HAVE set a password. Accounts registered via email verification code or Google have NO password. If password login fails with 401/403, do NOT retry — switch to method 1 or 2. IMPORTANT: At the START of any FormLM session (before calling formlm_generate/formlm_exec), call auth_status first. If not logged in, authenticate immediately. Do NOT wait for a 401 error.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | – | Email verification code (6 digits, valid 5 min) — request it via auth_email_code first |
| string | – | Account email (use with `code` for verification-code login, or with `password`) | |
| password | string | – | Account password (use together with email; verification-code/Google accounts have no password) |
| token | string | – | Access token from formlm.me → Workspace → Account Settings → Access Token → Copy |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | – |
| ok | boolean | yes | – |
| user | string | – | – |
No examples provided.
auth_status Check login status ~56
Check current login status. Tokens expire after 7 days — if this returns "Token invalid (expired)", ask the user to copy a fresh Access Token from formlm.me → Workspace → Account Settings and re-login via auth_login.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| loggedIn | boolean | yes | – |
| message | string | yes | – |
| url | string | – | – |
| user | string | – | – |
No examples provided.
formlm_doctor Quality audit (read-only) ~313
Read-only quality inspection of ONE app — the fastest way to verify a generated app before wiring it into a page. Returns {ok, failCount, warnCount, summary, findings[]} where each finding is {name, level(pass|warn|fail), detail, fix?}. Checks: content/scoring coverage, expert enabled-but-empty or referenced-but-missing (dead AI assistant), styling applied, dimensions without report pages, unexpected certificate page, share access semantics (type=all/owner = login required — anonymous respondents get the login page, NOT the form), link expiry, and fill-in URL reachability. Set expectLang (e.g. "en", "zh-hant") to catch text written in the wrong script — the classic batch defect where an English app ends up with Chinese certificate/report boilerplate. Use deep=true to also scan report widget BODY text (extra queries; titles/labels are always scanned). Read-only: this tool never writes. Apply the returned `fix` commands via formlm_exec.
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | yes | App ID |
| deep | boolean | – | Also fetch and scan report widget body text (slower, more accurate language check) |
| expectLang | string | – | BCP-47 expected language, e.g. "en" / "zh" / "zh-hant" / "ja". Enables the script-consistency scan. |
| probe | boolean | – | Probe the fill-in URL for reachability (default true) |
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | – | – |
| failCount | number | – | – |
| findings | array | – | – |
| message | string | yes | – |
| ok | boolean | yes | – |
| summary | – | – | – |
| warnCount | number | – | – |
No examples provided.
formlm_exec Run FormLM CLI command ~888
Execute a raw FormLM CLI command directly. Use this for fine-grained control that formlm_generate doesn't cover, or for modifying existing apps. IMPORTANT: All commands must start with "assess". Read formlm_skill first to ensure P0 compliance. SAFETY — destructive operations (remove/delete): Before running ANY "remove" command (app/form/scale/expert), first run the matching "query"/"list"/"find" command to show the user the EXACT name of what will be deleted, then get explicit confirmation ("Delete app 'X' (id: Y)? This cannot be undone."). NEVER call a remove command based on a vague reference ("delete it", "remove that one") without first resolving and confirming the exact target. Deletion is irreversible. Whitelisted commands (3-token granularity; anything else returns 403): App: assess app list/create/use/current/update/remove/urls Form: assess form query/find/types/config/add/update/remove/move/set-property Scale: assess scale query/find/add/update/set/remove/clear/config/keys/data Connect: assess connect query/find/types/config/cover-page/final-page/main-page/style Report: assess report query/find/update/page/widget (conditional rules: assess report widget logic add/list/remove) Expert: assess expert query/find/config/set/avatar/remove/chat Share: assess share set/query/url/api/flavor Smart: assess smart plan/execute Skill: assess skill form/scale/connect/report/expert/share NOT available here: assess snapshot / assess field * (CLI-only wrappers of the module queries) Common patterns: "assess app list --all --with-urls --json" (full inventory incl. shareToken per app) "assess app urls --app <id> --json" (URLs + published/shareType/shareToken) "assess form add --app <id> --id q1 --name \"Name\" --type radio --options \"A:1,B:2,C:3\" --json" "assess scale add --app <id> --id stress --name \"St…
| Name | Type | Req | Description |
|---|---|---|---|
| command | string | yes | Full CLI command starting with "assess". Do NOT include the "formlm-cli" prefix. Add --json flag for structured output. Escape inner quotes with \". |
| Name | Type | Req | Description |
|---|---|---|---|
| code | number | yes | – |
| data | – | – | – |
| message | string | yes | – |
| ok | boolean | yes | – |
No examples provided.
formlm_execute Execute plan module ~354
Execute a single module from the plan generated by formlm_generate. Call this sequentially for each module, following the task list order from formlm_generate. Default order: form → scale → connect → report → expert → share. Takes ~30-120 seconds per module. Do NOT cancel. ## USER FEEDBACK (IMPORTANT for good UX): Before calling, tell the user: "正在生成 [module] 模块..." After calling, tell the user: "✅ [module] 模块完成" After the last module (share), present the 3 URLs to the user. ## PLAN PASSING: Plan is cached server-side (~10 min) after formlm_generate — no need to pass it manually. Just call formlm_execute with appId and module for each module in sequence. If you get "Plan not found in server cache", pass the plan JSON from the formlm_generate output into `plan` — do NOT re-run formlm_generate (that creates a brand-new app). Success is structured: the response carries appId / module / taskStatus / status(success|error) — trust taskStatus, not human wording. A retried `scale` execute appends dimensions unless existing ones are cleared first (formlm_exec: "assess scale clear --app <id>").
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | yes | App ID from formlm_generate result |
| module | string | yes | Module to execute: form / scale / connect / report / expert / share |
| plan | string | – | Full plan JSON (optional — the plan is cached server-side for ~10 min after formlm_generate; pass this only to resume after the cache expired) |
| Name | Type | Req | Description |
|---|---|---|---|
| accessType | string | – | – |
| appId | string | yes | – |
| builderUrl | string | – | – |
| dataUrl | string | – | – |
| message | string | yes | – |
| module | string | yes | – |
| ok | boolean | yes | – |
| shareToken | string | – | – |
| shareUrl | string | – | – |
| taskStatus | string | – | – |
No examples provided.
formlm_generate Generate execution plan ~1,299
Generate an execution plan from natural language description (Phase 1 only — does NOT execute any module). Server runs: Plan AI (assess-plan.md) → generates task list for 6 modules (form/scale/connect/report/expert/share). Returns: appId, planType, name, plan JSON, and task list. Takes ~10-30 seconds. This tool is plan-only — the name "generate" predates the split. There is no single call that produces a live app; that is generate → execute×N (or the CLI `formlm-cli smart generate` wrapper). ## Scene Templates (when user description is vague, present these and ask them to choose): 1. assessment: 评估量表 — 多维度打分 + 分值区间解读报告 (MOST COMMON, for psych/workplace/health) 2. consultation: 咨询评估 — 评估 + AI专家对话解读 (for mental health / coaching) 3. survey: 问卷调查 — 仅收集数据,无打分 (for feedback / research) 4. exam: 考试测验 — 标准答案 + 对错判分 (for education / training) 5. report: 外部评测 — 对外部对象打分评价+报告 (for performance reviews / 360 feedback) 6. learn: 学习卡片 — 知识点 + 自测题 (for micro-learning) ## AFTER SUCCESS — execute modules sequentially via formlm_execute: The plan is cached server-side (~10 min TTL) — just call formlm_execute with appId and module for each module. No need to pass the plan JSON back — it is handled automatically. IMPORTANT: module coverage depends on planType. Only `consultation` plans include the `expert` module; assessment / exam / report / survey / learn plans do NOT. If the app must have an AI expert, create it explicitly afterwards with formlm_exec: "assess expert config --app <id> --name ... --role ... --kbText ..." (otherwise the published page promises an expert the app does not have — silent functional gap). After the ~10 min cache expires, formlm_execute still works if you pass the plan JSON back via `plan` (the full plan is returned in this tool's output) — re-running this tool would create a NEW app instead. ## USER FEEDBACK (IMPORTANT for good UX): After getting the plan, tell the user: "✅ 计划已生成!" and list the modules. Before each formlm_execute call, tell the user whic…
| Name | Type | Req | Description |
|---|---|---|---|
| appName | string | – | PIN the app display name (default: chosen by the Plan AI). Use for batch creation when the caller must know the exact name up front to map apps to pages/ledgers. |
| dimensions | string | – | PIN the scoring dimensions (names and count) instead of letting the Plan AI invent them — separate with | or ; (e.g. "Natural Finish|Glam Intensity|Editorial|Color Confidence"). Use whenever an exter… |
| input | string | yes | Natural language description of the app. Be specific: mention topic, audience, number of questions, dimensions/subscales, scoring, visual style. Example: "A workplace stress assessment for office wor… |
| lang | string | – | BCP-47 language code (e.g. "zh", "zh-hant", "zh-tw", "en", "ja"). Injects an [OUTPUT LANGUAGE] directive that anchors AI output language for the plan AND every module execute. This is the only langua… |
| planType | string | – | Plan type. Choose based on user needs: "assessment" (scoring+report, for psych/workplace/health evaluations, MOST COMMON), "consultation" (scoring+report+AI expert chat, for mental health/coaching),… |
| questionCount | string | – | Target question count range: "5-9" (micro check-in, ~2 min), "10-15" (quick screening, 3-5 min), "15-20" (standard assessment, 5-8 min), "20-30" (deep assessment, 8-15 min), "30-50" (facet-level), "5… |
| style | string | – | Visual style preference. Suggested options: "温暖亲切" (warm friendly, for health/care), "正式专业" (formal professional, for workplace/corporate), "简洁直接" (minimal clean, for general use), "轻松活泼" (lively pla… |
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | – | – |
| appName | string | – | – |
| message | string | yes | – |
| ok | boolean | yes | – |
| planType | string | – | – |
| tasks | array | – | – |
No examples provided.
formlm_skill Domain knowledge doc ~99
Get the full SKILL.md domain knowledge for a specific skill module. Same documents that AssessAgent loads internally — contains P0/P1/P2 constraints, parameter rules, examples. You can also read these via MCP resources: formlm://skills/<skillId> READ the relevant skill BEFORE constructing formlm_exec commands manually.
| Name | Type | Req | Description |
|---|---|---|---|
| skillId | string | yes | Skill ID: form / scale / connect / report / expert / share |
| Name | Type | Req | Description |
|---|---|---|---|
| markdown | string | yes | – |
| skillId | string | yes | – |
No examples provided.
formlm_snapshot App state snapshot ~241
Get aggregated snapshot of ALL 6 app modules in a single call. Returns: form fields, scale dimensions+ranges, connect page styles, report pages+widgets, expert config, share status. Call this BEFORE making changes to understand what already exists. Call this AFTER formlm_generate to verify the generated app. Prefer summary=true for batch audits / consistency checks: it returns a compact profile (appName, fieldCount, questionCount, dimCount+dimNames, reportPageCount+reportPages, styled, expertEnabled/expertHasContent, share.type/perm/day/forever/shareToken) instead of the full module payloads, so you do not have to parse widget layoutData or markdown tables. If any module fetch fails the result carries _errors/_degraded — treat it as UNKNOWN, not as "empty module".
| Name | Type | Req | Description |
|---|---|---|---|
| appId | string | yes | App ID |
| module | string | – | Get only one module: form / scale / connect / report / expert / share (default: all 6) |
| summary | boolean | – | Return the compact audit profile instead of full module payloads (recommended for batch verification) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
| mode | string | yes | – |
No examples provided.
formlm_usage Account usage & budget ~142
Report the logged-in account budget: plan, app-slot usage, and AI credits — check BEFORE batch creating. Free plan caps at 10 apps (in-use AND recycle-bin apps hold a slot; purging frees it): once full, app create / formlm_generate fail with 403 "app-limit". AI credits are billed per completed generation (capped at zero — generation never blocks). When slots are full, tell the user: purge the recycle bin at formlm.me → Workspace or upgrade (formlm.me → #/vip). Requires a server that reports usage fields; on an older server those lines come back "n/a".
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | – | – |
| appsLeft | number | – | – |
| appsLimit | number | – | – |
| appsUnlimited | boolean | – | – |
| appsUsed | number | – | – |
| credits | number | – | – |
| message | string | yes | – |
| ok | boolean | yes | – |
| plan | string | – | – |
No examples provided.
How do I install the FormLM MCP server?
FormLM runs locally as an npm package, launched with npx -y @formlm/cli. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @formlm/cli
claude mcp add me-formlm-cli -- npx -y @formlm/cli
What is the FormLM MCP server?
FormLM is an MCP server listed in the public MCP registry as me.formlm/cli. Build AI-powered forms, scored assessments and professional reports on FormLM, by natural language. This page covers its npm package (@formlm/cli).
Is the FormLM MCP server safe to use?
FormLM scores 70 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 5 November 2026. It declares no install or post-install scripts. 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 FormLM MCP server expose?
FormLM exposes 10 tools: auth_login, auth_email_code, auth_status, formlm_usage, formlm_generate, and 5 more. Their descriptions and schemas cost roughly 3,986 tokens of context every time the server is loaded.
Is the FormLM MCP server still maintained?
FormLM is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the FormLM MCP server under?
FormLM declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.