Atlas / MCP servers / ignsm / formhaus

formhausCAUTION

mcp/ignsm/formhaus

JSON form definition for React, Vue, Figma and AI agents: validation, conditional fields, multi-step and branching in one file. Zero-dependency core, MCP server, JSON Schema.

Verdict
CAUTION
Grade
B
Trust score
86 /100
Exposed tools
8 6r · 2w · 0d
Transport
stdio
License
MIT
Stars
3
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://www.npmjs.com/package/@formhaus/core) [](https://www.npmjs.com/package/@formhaus/react) [](https://www.npmjs.com/package/@formhaus/vue) [](https://www.npmjs.com/package/@formhaus/mcp) [](https://bundlejs.com/?q=@formhaus/core) [](LICENSE)

Formhaus is a JSON form definition with a zero-dependency engine, React and Vue renderers, a Figma plugin, a JSON Schema and an MCP server for AI agents. One file describes fields, validation, conditional fields, multi-step navigation, branching routes and skippable steps.

Example · Packages · Install · Quick start · Custom components · Figma plugin · [Docs](https://formhaus.dev) · [Spec](https://formhaus.dev/spec.html) · [Playground](https://formhaus.dev/playground.html)

What it's for

Read from source at commit 73395a9f4b11OBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add mcp -- npx -y @formhaus/[email protected]
03

Exposed tools (8)

6 read · 2 write · 0 destructive.

ToolRiskDescription
capabilitiesread
example_definitionsread
get_submissionsread
list_formsread
publish_formwrite
simulate_pathread
update_form_settingswrite
validate_definitionread
04

Trust audit

CAUTIONgrade B · trust 86/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (4 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
none-found

Findings (20)

MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/skills/formhaus-create-form
.claude/skills/formhaus-create-form
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/skills/formhaus-figma-connect
.claude/skills/formhaus-figma-connect
Why it matters. link not followed
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/.vitepress/components/playground/fixtures.ts:1
import basicForm from '../../../../examples/definitions/basic-form.json';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/.vitepress/components/playground/fixtures.ts:2
import conditionalFields from '../../../../examples/definitions/conditional-fields.json';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/.vitepress/components/playground/fixtures.ts:3
import multiStep from '../../../../examples/definitions/multi-step.json';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/.vitepress/components/playground/fixtures.ts:4
import validation from '../../../../examples/definitions/validation.json';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/.vitepress/components/playground/loaders/react-mui.ts:1
import AppTsx from '../../../../../examples/react-mui/src/App.tsx?raw';
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/mcp/__tests__/cloud-tools.test.ts:180
const { isError, body } = await call('update_form_settings', { form_id: 'f1', webhook_url: 'http://10.0.0.1' });
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
packages/core/fixtures/submissions/rules.json:116
"code": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
packages/core/fixtures/submissions/rules.json:123
"code": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
packages/core/fixtures/submissions/single-step.json:272
"name": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
packages/core/fixtures/submissions/single-step.json:279
"name": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
packages/core/fixtures/submissions/special-types.json:139
"rating": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
packages/figma/src/ui/profile-code.ts:13
const binary = atob(body);
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
docs/package.json
@codemirror/commands, @codemirror/lang-json, @codemirror/language, @codemirror/state, @codemirror/view, @formhaus/core, @formhaus/vue, @lezer/highlight
Why it matters. 11 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
examples/nextjs-app-router/package.json
@formhaus/core, @formhaus/react, next, react, react-dom, @types/node, @types/react, @types/react-dom
Why it matters. 9 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
examples/nuxt/package.json
@formhaus/core, @formhaus/vue, nuxt, vue, vue-router, typescript, vue-tsc
Why it matters. 7 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
examples/react-mui/package.json
@formhaus/core, @formhaus/react, @mui/material, @emotion/react, @emotion/styled, react, react-dom, @types/react
Why it matters. 12 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
examples/react-quiz/package.json
@formhaus/core, @formhaus/react, react, react-dom, @types/react, @types/react-dom, @vitejs/plugin-react, typescript
Why it matters. 9 dependency range(s) float
Fix. pin exact versions or ship a lockfile
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
docs/api/definition.md:45
mask?: string;                  // Input mask pattern (shown as placeholder, custom components get full access)

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 73395a9f4b11full audit observations/trust-audit/mcp-server/ignsm__formhaus.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-1173395a9f4b11CAUTIONB86first audit
06

Questions

What is the formhaus MCP server?

JSON form definition for React, Vue, Figma and AI agents: validation, conditional fields, multi-step and branching in one file. Zero-dependency core, MCP server, JSON Schema.

What tools does formhaus expose?

8 in total: 6 read-only, 2 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is formhaus safe to connect to an agent?

With care. The audit graded it B (86/100) and found 20 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does formhaus need?

It reads FORMHAUS_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does formhaus run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as @formhaus/vue at 0.9.0.

How current is this page?

The grade is for one exact copy of the source (73395a9f4b11), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement