Formio MCP
概览
作者提供的说明(英文原文)
Create and manage Form.io forms, resources, actions, roles, and projects from your AI agent.
PopNx MCP 的三大支柱
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
- 用户评价i暂无评价评价功能将在后续阶段与账户功能一起开放
- 我们的基础检查i1 项中通过 1 项依据公开信息检查;尚未扫描代码
- 使用情况i起步阶段↓ 955/周 · ★ –
它能帮你做什么
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
- 连接方式: 在你的电脑上运行
- 传输方式: stdio
- 分类: 文档、表格与办公
- 你需要填写:FORMIO_API_KEY
安装
选择你使用的 AI 应用,然后复制设置。
安装之前
- 基础检查:1 项中通过 1 项
- 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
- 需要你自己填写:
FORMIO_PROJECT_URL,FORMIO_BASE_URL,FORMIO_API_KEY,FORMIO_LOGIN_FORM,FORMIO_AUTH_HOST,FORMIO_AUTH_PORT,FORMIO_AUTH_TIMEOUT,FORMIO_FORCE_BROWSER,FORMIO_REQUEST_TIMEOUT,FORMIO_INSECURE_TLS
标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
- npm已安装 Node.js(用于 npx 命令)
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"formio": {
"command": "npx",
"args": [
"-y",
"@formio/mcp"
],
"env": {
"FORMIO_PROJECT_URL": "your-value",
"FORMIO_BASE_URL": "your-value",
"FORMIO_API_KEY": "your-value",
"FORMIO_LOGIN_FORM": "your-value",
"FORMIO_AUTH_HOST": "your-value",
"FORMIO_AUTH_PORT": "your-value",
"FORMIO_AUTH_TIMEOUT": "your-value",
"FORMIO_FORCE_BROWSER": "your-value",
"FORMIO_REQUEST_TIMEOUT": "your-value",
"FORMIO_INSECURE_TLS": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add formio --env FORMIO_PROJECT_URL=your-value --env FORMIO_BASE_URL=your-value --env FORMIO_API_KEY=your-value --env FORMIO_LOGIN_FORM=your-value --env FORMIO_AUTH_HOST=your-value --env FORMIO_AUTH_PORT=your-value --env FORMIO_AUTH_TIMEOUT=your-value --env FORMIO_FORCE_BROWSER=your-value --env FORMIO_REQUEST_TIMEOUT=your-value --env FORMIO_INSECURE_TLS=your-value -- npx -y @formio/mcp运行前请先填写空着的值。
或者自己复制设置
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"formio": {
"command": "npx",
"args": [
"-y",
"@formio/mcp"
],
"env": {
"FORMIO_PROJECT_URL": "your-value",
"FORMIO_BASE_URL": "your-value",
"FORMIO_API_KEY": "your-value",
"FORMIO_LOGIN_FORM": "your-value",
"FORMIO_AUTH_HOST": "your-value",
"FORMIO_AUTH_PORT": "your-value",
"FORMIO_AUTH_TIMEOUT": "your-value",
"FORMIO_FORCE_BROWSER": "your-value",
"FORMIO_REQUEST_TIMEOUT": "your-value",
"FORMIO_INSECURE_TLS": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
或者自己复制设置
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"formio": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@formio/mcp"
],
"env": {
"FORMIO_PROJECT_URL": "your-value",
"FORMIO_BASE_URL": "your-value",
"FORMIO_API_KEY": "your-value",
"FORMIO_LOGIN_FORM": "your-value",
"FORMIO_AUTH_HOST": "your-value",
"FORMIO_AUTH_PORT": "your-value",
"FORMIO_AUTH_TIMEOUT": "your-value",
"FORMIO_FORCE_BROWSER": "your-value",
"FORMIO_REQUEST_TIMEOUT": "your-value",
"FORMIO_INSECURE_TLS": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
需要你填写的值
FORMIO_PROJECT_URLenvOptional, and the WEAKEST of the three project sources: a committed formio.json found by walking up from the working directory wins, then the per-directory mapping project_set writes, then this. It p…FORMIO_BASE_URLenvOptional, and usually unnecessary: the base URL is DERIVED from the project URL — https://api.form.io for a project on a form.io host, the parent path for a project addressed as a sub-directory — and…- Form.io project API key. Optional — applied only to the project FORMIO_PROJECT_URL names, so set FORMIO_PROJECT_URL beside it; any other project, and every project when it is omitted, uses the browse…
FORMIO_LOGIN_FORMenvURL of a custom login form used by the browser-based portal login flow. Defaults to the deployment's portal login form.FORMIO_AUTH_HOSTenvAddress the browser-login page binds to. Optional; defaults to 127.0.0.1. Set it to 0.0.0.0, together with FORMIO_AUTH_PORT, when the server runs in a container or on a remote machine and the login p…FORMIO_AUTH_PORTenvFixed port for the browser-login page, so a container can publish it (e.g. 43117). Optional; a positive integer, and by default the page takes an ephemeral port.FORMIO_AUTH_TIMEOUTenvSeconds to wait for a browser login before the call fails with an error naming the remedies. Optional; a positive integer no larger than 2147483, and any other value is ignored. Defaults to 900.FORMIO_FORCE_BROWSERenvSet to 1 to attempt the browser login even where the server detects it cannot present one (CI, a container, a remote shell with no display). Use it when the login page is reachable from a browser els…FORMIO_REQUEST_TIMEOUTenvSeconds a Form.io request may go unanswered before the call fails with a network error naming the URL. Optional; a positive integer no larger than 2147483, and any other value is ignored. Defaults to…FORMIO_INSECURE_TLSenvSet to 1 to skip TLS certificate verification only for requests to the configured deployment (the hosts of the resolved project URL and base URL); every other host is verified as usual. For local dev…
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它能做什么
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
基础检查i
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月10日
- ✓ 通过
作者与仓库一致
注册名称已通过域名 form.io 验证(注册中心会核实域名所有权)
- … 尚未检查
仍在维护
我们还没有从 GitHub 读取这个仓库
- … 尚未检查
有许可证
我们还没有从 GitHub 读取这个仓库
- – 不适用
端点有响应
它在你的电脑上运行,没有互联网端点
- – 不适用
使用 OAuth 登录
在你的电脑上运行,改用本地设置
- … 尚未检查
工具描述中没有隐藏指令
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与“文档、表格与办公”中的其他服务器比较i
- 星标数多于此分类中其他 3650 个服务器的 0%
- 发布到注册中心的时间比此分类中其他 3650 个服务器的 53% 更新
- 基础检查结果等于或优于此分类中其他 3650 个服务器的 100%
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
常见问题
Formio MCP 安全吗?
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
它需要哪些密钥或代码?
你需要填写:FORMIO_API_KEY
它在我的电脑上运行还是在云端?
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
它还在维护吗?
GitHub 仓库最后更新于–,最新版本(1.0.1)于27天前进入注册中心。
哪些应用可以使用它?
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
有什么可以替代它?
同一分类中有:Agent-Native Calendar, Excel MCP Server, MCP Server for Excel
替代选择
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Excel MCP Server
Create and edit Excel files with AI: charts, PivotTables, formulas. No Excel needed.
MCP Server for Excel
Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.
作者的 README
打开 README
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Formio MCP server
The MCP server (@formio/mcp) is independently usable from any MCP-aware client. It speaks stdio: the client spawns it and owns stdin/stdout. There is no port to open and nothing to start by hand.
From a clone of this repo, the entry point is src/stdio.ts:
pnpm install
pnpm --filter @formio/mcp exec tsx src/stdio.ts
Run that way it waits for MCP traffic on stdin, which only tells you it starts cleanly — point a client at the command instead. A built package exposes the same entry point as the formio-mcp bin and as dist/stdio.js.
Transport
| Transport | Command | Compatible with |
|---|---|---|
| stdio | npx -y @formio/mcp@1.0.1 (or node dist/stdio.js) | Claude Code, Claude Desktop, Cursor, VS Code, Codex, Windsurf, Cline — anything that speaks MCP over stdio |
There is no HTTP or SSE transport. The server's only HTTP listener is the temporary browser-login page described under Authentication, which carries no MCP traffic.
Connect a client
The same stdio entry works everywhere, but the file it goes in and the key it goes under both vary by client — .mcp.json under mcpServers for Claude Code, .cursor/mcp.json under mcpServers for Cursor, .vscode/mcp.json under `servers` for VS Code, and .codex/config.toml as TOML for Codex. There is no universal .mcp.json. The root README carries the full per-client table; the JSON mcpServers shape is:
{
"mcpServers": { "formio-mcp": { "command": "npx", "args": ["-y", "@formio/mcp@1.0.1"], "env": { "FORMIO_PROJECT_URL": "https://your-project.form.io" } } } }
Every tool that reaches Form.io needs a project. It can come from a committed formio.json, from a per-directory mapping written by the project_set tool, or from FORMIO_PROJECT_URL in the environment — in that order, narrowest scope first, so a mapping overrides the environment and a committed file overrides both. FORMIO_BASE_URL is optional and usually unnecessary: the base URL is derived from the project URL's shape — https://api.form.io for a project on a form.io host, the parent path for a sub-directory-routed one — and is asked for only when it cannot be derived. No plugin manifest prompts for either value; every client records them per directory with project_set or a committed formio.json, and the .mcpb desktop bundle is the one exception because a desktop host has no working directory to interview in.
The server starts without either one, so a client can connect and list the tools before anything is configured — the project URL is only demanded at the point a tool needs it, and server_status works regardless.
Run in Docker
The server ships a Dockerfile and is published to Docker Hub as formio/mcp for linux/amd64 and linux/arm64. The image speaks stdio, so the MCP client owns stdin/stdout and the container must be run with -i:
docker run -i --rm \
-e FORMIO_PROJECT_URL=https://your-project.form.io \ -e FORMIO_API_KEY=your-api-key \ formio/mcp
Wired into a client — the same entry as Connect a client, with command and args pointed at Docker — that becomes (shown in the JSON mcpServers shape; VS Code uses servers and Codex uses TOML, as noted there):
{
"mcpServers": { "formio-mcp": { "command": "docker", "args": [ "run", "-i", "--rm", "-e", "FORMIO_PROJECT_URL", "-e", "FORMIO_API_KEY", "formio/mcp" ], "env": { "FORMIO_PROJECT_URL": "https://your-project.form.io", "FORMIO_API_KEY": "your-api-key" } } } }
Authentication in a container
FORMIO_API_KEY is the recommended path — no browser, nothing interactive. Browser login also works if you publish the auth port; see Headless environments for both.
Two container-specific notes regardless of auth mode. Prefer the FORMIO_PROJECT_URL environment variable over the project_set tool: project_set persists its per-directory mapping to ~/.formio/projects.json, which lives inside the container and is discarded when it exits. And the cwd argument every tool takes refers to a path *inside* the container, not on your host — while a workspace root the client reports is a host path, so pass cwd explicitly.
To reuse a token across container runs, mount the cache directory — it must be writable, since the server rewrites the file when a token is refreshed or cleared:
-v "$HOME/.formio:/root/.formio"
Self-hosted deployments
Two things commonly bite when the deployment is not public:
Hostname resolution. A private hostname won't resolve inside the container. Map it explicitly:
docker run -i --rm --add-host forms.internal:10.0.0.5 \
-e FORMIO_BASE_URL=https://forms.internal \ -e FORMIO_PROJECT_URL=https://forms.internal/my-project \ -e FORMIO_API_KEY=your-api-key \ formio/mcp
Private or self-signed certificates. The image trusts only the standard CA bundle. A certificate your host trusts — via the macOS keychain, say — will still fail inside the container, surfacing as a bare fetch failed from the tool. There are two cases, and they behave differently:
*Issued by a private CA.* Mount the CA certificate and point Node at it:
-v /path/to/rootCA.pem:/certs/rootCA.pem:ro -e NODE_EXTRA_CA_CERTS=/certs/rootCA.pem
*A fully self-signed server certificate* — one where subject and issuer are identical and there is no CA:TRUE basic constraint. NODE_EXTRA_CA_CERTS cannot fix this, even if you mount the server's own certificate: Node requires a trust anchor to be a CA, and rejects the chain with DEPTH_ZERO_SELF_SIGNED_CERT. Confirm which case you have with:
echo | openssl s_client -connect your-host:443 -servername your-host 2>/dev/null \
| openssl x509 -noout -subject -issuer
If subject and issuer match, your only option is FORMIO_INSECURE_TLS=1, which skips certificate verification only for requests to the configured deployment; every other host the server reaches is still verified. Use it for local development only — never against a production deployment.
Building the image locally
The build context is the repository root, not this directory: the image installs its dependencies from the repository's pnpm-lock.yaml with a frozen lockfile, so it carries exactly the versions the repository tested. Run this from the repository root:
docker build -f packages/mcp-server/Dockerfile -t formio-mcp .
Inspect it with MCP Inspector
The MCP Inspector connects to the server and lets you browse and call its tools by hand — useful for confirming a config works before wiring it into an agent. Start the web portal:
npx @modelcontextprotocol/inspector
It prints a URL carrying an auth token and opens a browser. The default port is 6274; if something already holds it, move both with CLIENT_PORT=6284 SERVER_PORT=6285.
Copy inspector-config.example.json to inspector-config.json, fill in your project URL and API key, and you have the file the next step asks for. That name is gitignored, so a filled-in copy cannot be committed by accident.
The same run, step by step:
1. Choose Add Servers → Import from client config.
2. Click "From file…". The dialog takes a client config file or a client installed on this machine — there is nowhere to paste JSON.
3. Select your `inspector-config.json`, and the server it defines is listed as new. Confirm with "Import 1 server".
4. Enable the server with the toggle on its card. It turns green and reports the negotiated protocol version once the container is up; the first connection is slower because Docker has to start it.
5. Open the Tools tab for the tools this server exposes. Every server lists all 25 — including project_set and project_get, which are registered for every client.
6. Pick a tool, fill in its arguments, and press "Execute Tool". The result appears in the middle pane and the JSON-RPC exchange in the right-hand Protocol panel. server_status touches no credentials and makes no Form.io request, so it isolates transport problems from auth problems; form_list below is a real call against a project.
Importing writes the server into the inspector's own catalog at ~/.mcp-inspector/mcp.json, so it is still there next time — remove it from the card when you are done. A tool that fails with a bare fetch failed is usually the deployment, not the server: see Self-hosted deployments for hostname resolution and certificate trust inside a container.
MCP server tools
The bundled @formio/mcp server exposes these 25 tools. Skills prefer these over raw HTTP whenever an operation is covered.
Forms
| Tool | Purpose |
|---|---|
form_create | Create a new form. Use the formio-schema skill first to build the JSON definition. On a deployment licensed for revisions, revisions defaults to "original". |
form_get | Fetch a single form definition by _id or path (formIdOrPath). draft: true fetches its draft instead. |
form_list | List forms, one page at a time, filtered by type and by tags (forms carrying every tag given). Returns summary fields unless select asks for others. |
form_update | Update a form with its edited JSON. Call form_get first, edit with formio-schema, then update. draft: true saves a draft instead of the live form. |
form_publish | Publish a form's draft as its live version (formId, note). Fails with NO_DRAFT when the form has no draft. Needs the revisions licence (Security Module). |
form_revert | Restore a prior revision's components, tags, properties and display onto the live form (formId, version, note). Needs the revisions licence (Security Module). |
| form_revision_list | List a form's revision summaries (_id, _vid, _vnote, _vuser, created, `
只显示了开头部分;其余内容请在仓库中阅读