io.form/formio-mcp
NPM · @FORMIO/MCP
Create and manage Form.io forms, resources, actions, roles, and projects from your AI agent.
Available components
Last scanned (23 hours ago)
Scores higher than 93% of npm servers
Category Developer Tools
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 Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 30 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to formio/ai). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 22 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability64
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 4632 tokens (~185/item across 25 items; 25 tools + 0 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 Management73
- Stability observed for 22 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 26 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
Checks we ran (16)
- Malware scan
- Known CVEs
- Install scripts
- Dependency health
- Source repository
- Provenance
- License
- Maintenance
- Security disclosure
- Schema quality
- Stability
- Tool coverage
- Injection markers
- Destructive annotations
- Judged manipulation
- MCP protocol
Does not apply to this package (2)
- Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
- Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
The score does not measure everything. What the score does not measure →
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 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.
- 3 Nov 26 −2
- Stability: fail → 0.67 functional
- 15 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 74 to 78.
- 14 Oct 26 +40
- Stability: unverified → fail ▼ security
- Known CVEs: pass → unverified ▼ security
- Injection markers: unverified → pass ▲ security
- Dependency health: 0.84 → unverified ▼ functional
- Schema quality: 323 → 185 ▲ functional
- Tool coverage: unverified → 100 ▲ functional
- MCP protocol: unverified → pass ▲ functional
- Schema quality: excellent → good functional
- Package version: 0.14.1 → 1.0.1 functional
- Package version: 0.14.1 → 1.0.0 functional
- 12 Oct 26 0
- Security disclosure: unverified → pass ▲ functional
- Package version: 0.14.0 → 0.14.1 functional
- 11 Oct 26 0
- Security disclosure: pass → unverified ▼ functional
- Package version: 0.14.0 → 0.14.1 functional
- 7 Oct 26 −42
- Stability: 0.90 → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Package version: 0.14.0 → 0.14.1 functional
- 3 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
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/@formio/mcp@1.0.1
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | formio/ai |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/formio/ai/.github/workflows/release.yml@refs/heads/main |
| Rekor log index | 3248523393 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:7d9ed865a8a02f4f39758e050c0a3c6d37e41fcd05e989643b5042dff7cbe0758c179412052efca4c1b476dff3c50757d060ecf074548c50271607d48 |
Background: How many MCP packages publish verified provenance →
Dependencies 95 packages
| Packages resolved | 95 |
|---|---|
| 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 →
action_create ~87
Create a new action on a form. Call action_type_get first to discover the required settings schema for the action type.
| Name | Type | Req | Description |
|---|---|---|---|
| action | object | yes | Action definition |
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| formId | string | yes | The form's _id, a 24-character ObjectId (form_get returns it) |
| Name | Type | Req | Description |
|---|---|---|---|
| _id | string | – | – |
| condition | – | – | – |
| form | string | – | – |
| handler | array | – | – |
| method | array | – | – |
| name | string | – | – |
| priority | number | – | – |
| settings | – | – | – |
| title | string | – | – |
No examples provided.
action_delete ~99
Delete an action from a form. The action stops running on submissions immediately and is not recoverable — call action_get first if the settings may be needed again.
| Name | Type | Req | Description |
|---|---|---|---|
| actionId | string | yes | The action ID to delete |
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| formId | string | yes | The form's _id, a 24-character ObjectId (form_get returns it) |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | – |
| ok | boolean | yes | – |
No examples provided.
action_get ~100
Get a single action by ID from a form, including its handler, method, condition, and type-specific settings. Call action_list first to find the action ID.
| Name | Type | Req | Description |
|---|---|---|---|
| actionId | string | yes | The action ID to retrieve |
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| formId | string | yes | The form's _id, a 24-character ObjectId (form_get returns it) |
| Name | Type | Req | Description |
|---|---|---|---|
| _id | string | – | – |
| condition | – | – | – |
| form | string | – | – |
| handler | array | – | – |
| method | array | – | – |
| name | string | – | – |
| priority | number | – | – |
| settings | – | – | – |
| title | string | – | – |
No examples provided.
action_list ~152
List the actions configured on a form, one page at a time — the server-side handlers that run when a submission is saved, such as save-to-resource, email, login, and role assignment.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| formId | string | yes | The form's _id, a 24-character ObjectId (form_get returns it) |
| limit | integer | – | Page size |
| select | string | – | Comma-separated fields to return |
| skip | integer | – | Items to skip; page while `hasMore` |
| sort | string | – | Form.io sort, e.g. "-modified" for newest first |
| Name | Type | Req | Description |
|---|---|---|---|
| actions | array | yes | – |
| hasMore | boolean | yes | True when items remain; fetch them with a larger `skip` |
| total | number | – | Items Form.io holds for this query, across all pages; absent when Form.io does not report one |
No examples provided.
action_type_get ~103
Get action type info and settings form schema. Call this before action_create to discover the required settings for the action type.
| Name | Type | Req | Description |
|---|---|---|---|
| actionName | string | yes | The action type name (e.g. "email", "save", "login") |
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| formId | string | yes | The form's _id, a 24-character ObjectId (form_get returns it) |
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | – |
| settingsForm | object | – | – |
| title | string | – | – |
No examples provided.
action_type_list ~75
List the action types available for a form. Returns the whole catalog the server supports in one result.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| formId | string | yes | The form's _id, a 24-character ObjectId (form_get returns it) |
| Name | Type | Req | Description |
|---|---|---|---|
| actionTypes | array | yes | – |
| hasMore | boolean | yes | True when items remain; fetch them with a larger `skip` |
| total | number | – | Items Form.io holds for this query, across all pages; absent when Form.io does not report one |
No examples provided.
action_update ~114
Update an existing action on a form; call action_get first if you do not already have it. Sent fields overwrite, arrays and objects whole; top-level fields left out keep their value.
| Name | Type | Req | Description |
|---|---|---|---|
| action | object | yes | Action definition |
| actionId | string | yes | The action ID to update |
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| formId | string | yes | The form's _id, a 24-character ObjectId (form_get returns it) |
| Name | Type | Req | Description |
|---|---|---|---|
| _id | string | – | – |
| condition | – | – | – |
| form | string | – | – |
| handler | array | – | – |
| method | array | – | – |
| name | string | – | – |
| priority | number | – | – |
| settings | – | – | – |
| title | string | – | – |
No examples provided.
form_create ~172
Create a form in the project `cwd` resolves to. Build the form JSON with the formio-schema skill first. On a deployment licensed for revisions, `revisions` defaults to "original". Not for a draft of an existing form ("save a draft", "draft <change>"): use form_update with `draft: true`.
| Name | Type | Req | Description |
|---|---|---|---|
| acceptNoHistory | boolean | – | Set true only after the user agrees to save without revision history. Without it, such a save (no revisions licence, or the form has revisions off) is refused with HISTORY_NOT_ACCEPTED and nothing is… |
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| form | object | yes | Form.io form JSON definition |
| note | string | – | Note describing the initial revision |
| Name | Type | Req | Description |
|---|---|---|---|
| _id | string | – | – |
| access | – | – | – |
| components | array | – | – |
| display | string | – | – |
| name | string | – | – |
| path | string | – | – |
| revisions | string|boolean | – | – |
| submissionAccess | – | – | – |
| title | string | – | – |
| type | string | – | – |
No examples provided.
form_get ~132
Fetch a form definition, by _id or path, from the project `cwd` resolves to. `draft: true` fetches its in-flight draft instead of the published form.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| draft | boolean | – | When true, fetch the form's current draft (GET /<form>/draft) |
| formIdOrPath | string | yes | Form ID (_id) or path (e.g. "user/login") |
| select | string | – | Comma-separated fields to return (omit for full form JSON) |
| Name | Type | Req | Description |
|---|---|---|---|
| _id | string | – | – |
| access | – | – | – |
| components | array | – | – |
| display | string | – | – |
| name | string | – | – |
| path | string | – | – |
| revisions | string|boolean | – | – |
| submissionAccess | – | – | – |
| title | string | – | – |
| type | string | – | – |
No examples provided.
form_list ~149
List forms from the project `cwd` resolves to, one page at a time, optionally filtered by type and tags.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| limit | integer | – | Page size |
| select | string | – | Comma-separated fields to return (default: _id,title,name,path,type,tags) |
| skip | integer | – | Items to skip; page while `hasMore` |
| sort | string | – | Form.io sort, e.g. "-modified" for newest first |
| tags | array | – | Return only forms carrying every one of these tags |
| type | string | – | Filter by form type |
| Name | Type | Req | Description |
|---|---|---|---|
| forms | array | yes | – |
| hasMore | boolean | yes | True when items remain; fetch them with a larger `skip` |
| total | number | – | Items Form.io holds for this query, across all pages; absent when Form.io does not report one |
No examples provided.
form_publish ~130
Publish a form's draft as its live version in the project `cwd` resolves to. Save the draft first with form_update and `draft: true`; a form with no draft fails with NO_DRAFT. Needs the revisions licence (Security Module).
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| formId | string | yes | The form's _id, a 24-character ObjectId (form_get returns it) |
| note | string | yes | Revision note describing what the draft changes against the live form (e.g. "Add phone field") |
| Name | Type | Req | Description |
|---|---|---|---|
| _id | string | – | – |
| access | – | – | – |
| components | array | – | – |
| display | string | – | – |
| name | string | – | – |
| path | string | – | – |
| revisions | string|boolean | – | – |
| submissionAccess | – | – | – |
| title | string | – | – |
| type | string | – | – |
No examples provided.
form_revert ~154
Revert a form in the project `cwd` resolves to back to a prior revision: its components, tags, properties and display replace the live form's. Find it with form_revision_list. Needs the revisions licence (Security Module).
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| formId | string | yes | The form's _id, a 24-character ObjectId (form_get returns it) |
| note | string | yes | Revision note; use "Reverted to version {version}" unless the user gives another |
| version | string | yes | The revision to restore: its _vid (e.g. "3") or its revision document _id |
| Name | Type | Req | Description |
|---|---|---|---|
| _id | string | – | – |
| access | – | – | – |
| components | array | – | – |
| display | string | – | – |
| name | string | – | – |
| path | string | – | – |
| revisions | string|boolean | – | – |
| submissionAccess | – | – | – |
| title | string | – | – |
| type | string | – | – |
No examples provided.
form_revision_get ~103
Fetch one immutable form revision from the project `cwd` resolves to. Restore it with form_revert, passing its `_vid`.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| formIdOrPath | string | yes | Form ID (_id) or path alias (e.g. "user/login") |
| version | string | yes | Revision _vid (e.g. "3") or revision document _id |
| Name | Type | Req | Description |
|---|---|---|---|
| _id | string | – | – |
| access | – | – | – |
| components | array | – | – |
| display | string | – | – |
| name | string | – | – |
| path | string | – | – |
| revisions | string|boolean | – | – |
| submissionAccess | – | – | – |
| title | string | – | – |
| type | string | – | – |
No examples provided.
form_revision_list ~181
List a form's published revision summaries in the project `cwd` resolves to, newest first, one page at a time. Read one with form_revision_get, or restore one with form_revert, passing its `_vid`.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| formIdOrPath | string | yes | Form ID (_id) or path alias (e.g. "user/login") |
| limit | integer | – | Page size |
| select | string | – | Comma-separated fields to return (default: _id,_vid,_vnote,_vuser,created,modified) |
| skip | integer | – | Items to skip; page while `hasMore` |
| sort | string | – | Form.io sort, e.g. "-modified" for newest first (default: -_vid) |
| Name | Type | Req | Description |
|---|---|---|---|
| hasMore | boolean | yes | True when items remain; fetch them with a larger `skip` |
| revisions | array | yes | – |
| total | number | – | Items Form.io holds for this query, across all pages; absent when Form.io does not report one |
No examples provided.
form_update ~301
Update a form in the project `cwd` resolves to: read it with form_get, apply the change using the formio-schema skill, and send the form. Sent fields overwrite, arrays and objects whole; top-level fields left out keep their value. Pass `draft: true` to save a draft instead of the live form; publish it with form_publish, and restore a prior revision with form_revert.
| Name | Type | Req | Description |
|---|---|---|---|
| acceptNoHistory | boolean | – | Set true only after the user agrees to save without revision history. Without it, such a save (no revisions licence, or the form has revisions off) is refused with HISTORY_NOT_ACCEPTED and nothing is… |
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| draft | boolean | – | When true, save a draft instead of the live form. Only the draft fields of `form` are saved (components, settings, tags, properties, controller, esign, display), over any existing draft; form_get's o… |
| form | object | yes | The updated form JSON |
| formId | string | yes | The form's _id, a 24-character ObjectId (form_get returns it) |
| note | string | yes | What changed against the live form, with no preamble ("Saved draft:", "Updated:") |
| Name | Type | Req | Description |
|---|---|---|---|
| _id | string | – | – |
| access | – | – | – |
| components | array | – | – |
| display | string | – | – |
| name | string | – | – |
| path | string | – | – |
| revisions | string|boolean | – | – |
| submissionAccess | – | – | – |
| title | string | – | – |
| type | string | – | – |
No examples provided.
project_export ~106
Export the project `cwd` resolves to as a template (roles, resources, forms, actions). With `tag`, export the template that version tag stored instead — how a workspace's template.json is refreshed; Form.io does not store project-level access with a tag, so that comes from the project's current access.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| tag | string | – | A version tag from project_tag_list |
| Name | Type | Req | Description |
|---|---|---|---|
| actions | object | – | – |
| forms | object | – | – |
| resources | object | – | – |
| roles | object | – | – |
No examples provided.
project_get ~158
Report which Form.io project the working directory resolves to, which deployment hosts it, and which layer supplied each — the preflight before the first call that reads from or writes to a deployment. It uses the resolver every tool uses, so no shell command is needed. Branch on `status`: "ok" — proceed. "not-configured" — relay the message, ask the user for the one value it names, record it with project_set, and call this again. "base-url-unresolved" — the project IS recorded: ask for the Base URL alone, never the Project URL again. Reads only; project_set records a choice.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| Name | Type | Req | Description |
|---|---|---|---|
| baseUrl | string | – | – |
| baseUrlSource | string | – | – |
| cwd | string | yes | – |
| cwdSource | string | yes | – |
| forced | boolean | – | – |
| message | string | yes | – |
| notes | array | yes | – |
| projectUrl | string | – | – |
| projectUrlSource | string | – | – |
| remedy | object | – | The fix as a call: ask the user for `supply`, add it to `arguments`, call `tool`. Absent when status is "ok" or the fix is an edit to a committed formio.json |
| shadowed | array | yes | – |
| status | string | yes | "ok": proceed. "not-configured": ask the user for a Project URL and record it with project_set. "base-url-unresolved": ask for the Base URL alone and do what the report names. Anything but "ok" block… |
| unpaired | array | yes | – |
No examples provided.
project_import ~114
Import a template's roles, resources, forms and actions into the project `cwd` resolves to, for a first build: build it with the formio-resource-planner skill. Each form it names is replaced, its actions deleted and recreated, and its `access` replaces the project's; change an existing project with the form, role and action tools instead.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| template | object | yes | The template JSON object to import |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | – |
| ok | boolean | yes | – |
No examples provided.
project_set ~367
Set the active Form.io project for a directory: records its Project URL in ~/.formio/projects.json, keyed by the directory `cwd` resolves to. Call it whenever the user asks to set, change, or switch the project; acknowledging in text persists nothing. No restart is needed. Resolution precedence: a committed formio.json, then this mapping, then FORMIO_PROJECT_URL in the environment, the weakest — so a mapping written here DOES override the environment. `ok` and `projectUrl` on the result report the pair that resolves. Pass projectUrl alone: the Base URL is derived — https://api.form.io for a form.io host, the parent path for a sub-directory project. Pass baseUrl only when the server reports it cannot be derived. A committed formio.json ({"projectUrl": "..."}, plus "baseUrl" only when it cannot be derived) is written by hand in the application's folder; this server reads it and never writes it.
| Name | Type | Req | Description |
|---|---|---|---|
| baseUrl | string | – | The deployment hosting the project; omit it unless the server reports it cannot be derived. May carry a sub-path; refused for a form.io host. Omitted, this directory's mapped value is kept unless the… |
| cwd | string | – | Optional. Directory whose mapping to write; defaults to the client's workspace root. |
| projectUrl | string | – | Full Project URL, e.g. https://examples.form.io or https://forms.mysite.com/myproject; never https://api.form.io. Omit it only to add a baseUrl to THIS DIRECTORY'S OWN mapping: where a committed form… |
| Name | Type | Req | Description |
|---|---|---|---|
| baseUrl | string | – | – |
| changed | boolean | yes | – |
| cwd | string | yes | – |
| forced | boolean | – | – |
| message | string | yes | – |
| ok | boolean | yes | False: the record WAS written but the directory still needs attention; do what `message` names, and do not retry this call |
| projectUrl | string | yes | – |
No examples provided.
project_tag_create ~127
Version the project `cwd` resolves to: Form.io snapshots its current state under a semver `tag` with a `description`, and the project is then at that version. Ask the user before calling. Export the version with project_export `tag`.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| description | string | yes | What changed in this version (at most 256 characters) |
| tag | string | yes | The next semver version, e.g. 1.3.0 (at most 32 characters) |
| Name | Type | Req | Description |
|---|---|---|---|
| created | string | – | – |
| description | string | – | – |
| tag | string | yes | – |
No examples provided.
project_tag_list ~99
Report the version the project `cwd` resolves to is at (`current`) and its version tags, newest first. With `compare: true`, also report the roles, resources, forms and actions changed since `current` — changes made outside the agent.
| Name | Type | Req | Description |
|---|---|---|---|
| compare | boolean | – | Compare the project with its current tag (two template transfers) |
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| Name | Type | Req | Description |
|---|---|---|---|
| comparison | object | – | – |
| current | string | – | – |
| tags | array | yes | – |
No examples provided.
role_create ~53
Create a new role in the project `cwd` resolves to.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| role | object | yes | The role to create |
| Name | Type | Req | Description |
|---|---|---|---|
| _id | string | – | – |
| admin | boolean | – | – |
| default | boolean | – | – |
| title | string | – | – |
No examples provided.
role_list ~106
List the roles defined in the project `cwd` resolves to, one page at a time.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| limit | integer | – | Page size |
| select | string | – | Comma-separated fields to return |
| skip | integer | – | Items to skip; page while `hasMore` |
| sort | string | – | Form.io sort, e.g. "-modified" for newest first |
| Name | Type | Req | Description |
|---|---|---|---|
| hasMore | boolean | yes | True when items remain; fetch them with a larger `skip` |
| roles | array | yes | – |
| total | number | – | Items Form.io holds for this query, across all pages; absent when Form.io does not report one |
No examples provided.
role_update ~95
Update an existing role in the project `cwd` resolves to. Sent fields overwrite, arrays and objects whole; top-level fields left out keep their value.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| role | object | yes | Role document with updated fields |
| roleId | string | yes | The _id of the role to update, a 24-character ObjectId |
| Name | Type | Req | Description |
|---|---|---|---|
| _id | string | – | – |
| admin | boolean | – | – |
| default | boolean | – | – |
| title | string | – | – |
No examples provided.
server_status ~70
Report this server's name and version and how `cwd` resolves to a project, as project_get does. It makes no Form.io request and needs no credentials: call it first when other tools fail.
| Name | Type | Req | Description |
|---|---|---|---|
| cwd | string | – | Optional. Directory whose project to use; defaults to the client's workspace root. |
| Name | Type | Req | Description |
|---|---|---|---|
| baseUrl | string | – | – |
| baseUrlSource | string | – | – |
| cwd | string | yes | – |
| cwdSource | string | yes | – |
| message | string | yes | – |
| name | string | yes | – |
| projectUrl | string | – | – |
| projectUrlSource | string | – | – |
| status | string | yes | As project_get's `status` |
| version | string | yes | – |
No examples provided.
How do I install the io.form/formio-mcp server?
io.form/formio-mcp runs locally as an npm package, launched with npx -y @formio/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @formio/mcp
claude mcp add io-form-formio-mcp -- npx -y @formio/mcp
What is the io.form/formio-mcp server?
io.form/formio-mcp is listed in the public MCP registry as io.form/formio-mcp. Create and manage Form.io forms, resources, actions, roles, and projects from your AI agent. This page covers its npm package (@formio/mcp).
Is the io.form/formio-mcp server safe to use?
io.form/formio-mcp scores 89 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. 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 io.form/formio-mcp server expose?
io.form/formio-mcp exposes 25 tools: server_status, form_create, form_get, form_list, form_revision_get, and 20 more. Their descriptions and schemas cost roughly 3,347 tokens of context every time the server is loaded.
Is the io.form/formio-mcp server still maintained?
io.form/formio-mcp 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 io.form/formio-mcp server under?
io.form/formio-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.
What did VerifyMCP test on the io.form/formio-mcp server?
VerifyMCP ran 16 checks on io.form/formio-mcp, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.