FormVault MCP Server
# FormVault MCP server
[](https://www.npmjs.com/package/@formvault/mcp)
[](LICENSE)
Create and manage GDPR-compliant, EU-hosted forms from any MCP-compatible AI assistant.
This is an [MCP](https://modelcontextprotocol.io) server for [FormVault](https://formvault.eu), a form builder hosted in Germany. Point Claude, ChatGPT, Cursor, Copilot or any MCP-compatible assistant at your FormVault account and build forms by describing them.
## Prerequisites
A FormVault account and an API key. Create the key at [formvault.eu/app/api-keys](https://formvault.eu/app/api-keys).
## Setup (hosted — recommended)
Add the hosted server to your assistant's MCP configuration — no install, no local process:
```json
{
"mcpServers": {
"formvault": {
"url": "https://api.formvault.eu/mcp",
"headers": {
"Authorization": "Bearer fv_your_key_here"
}
}
}
}
```
Claude Desktop's support for remote/header-based MCP servers depends on your version — check its current docs if the above doesn't show up as an option.
No tool takes a tenant id. The API key carries its own, so it cannot read or write another organisation's forms — and a form id it may not touch reports as _not found_ rather than _forbidden_, so a key cannot be used to discover what exists. The server itself holds no standing credentials of its own; every request is scoped to whichever key you send. Revoke a key at any time from the API keys page.
## Setup (npx / stdio)
For clients that don't yet support a remote/header-based server:
```json
{
"mcpServers": {
"formvault": {
"command": "npx",
"args": ["-y", "@formvault/mcp"],
"env": {
"FORMVAULT_API_KEY": "fv_your_key_here"
}
}
}
}
```
Restart your assistant and ask for what you need, for example:
- _"Build me a client intake form with a GDPR consent checkbox."_
- _"List my forms and tell me which have no fields yet."_
- _"Delete the test form I made earlier."_
| Variable | Required | Default |
| ------------------- | -------- | -------------------------- |
| `FORMVAULT_API_KEY` | yes | — |
| `FORMVAULT_API_URL` | no | `https://api.formvault.eu` |
## Self-hosting / local development
You can run this package yourself, either as a local stdio server or as your own HTTP deployment. It is a client of the FormVault API, so it still needs a FormVault account and API key:
```bash
npm install
npm run build
# stdio (for a local Claude Desktop/Code config using "command"/"args")
FORMVAULT_API_KEY=fv_... node dist/index.js
# HTTP (what the hosted deployment runs)
PORT=3003 FORMVAULT_API_URL=https://api.formvault.eu node dist/httpServer.js
```
To develop against a local FormVault API, point `FORMVAULT_API_URL` at it (for example `http://localhost:3000`).
## Tools
| Tool | What it does |
| ------------------ | --------------------------------------------- |
| `list_forms` | Every form in your account, with field counts |
| `get_form` | One form's full field and settings definition |
| `create_form` | Build a form from a description |
| `delete_form` | Remove a form (irreversible) |
| `list_submissions` | Decrypted responses for a form |
## About respondent data
`list_submissions` returns your respondents' personal data in the clear. It is described to the model with an instruction not to call it unless you explicitly ask for responses, so ordinary form-building work never pulls it into context.
That is a deliberate boundary, not a limitation. FormVault stores submissions encrypted with AES-256-GCM on servers in Nuremberg, Germany, with a signed DPA on every plan. Whatever you send to your AI provider is your decision — this server's job is to make sure it is a decision rather than a side effect.
## Links
- [formvault.eu/mcp](https://formvault.eu/mcp)
- [Data processing agreement](https://formvault.eu/dpa)
- [Privacy](https://formvault.eu/privacy)
## Support
Questions and bug reports: [open an issue](https://github.com/terjetyl/formvault-mcp/issues). Pull requests are welcome.
## License
[MIT](LICENSE)
TDQS
Scored across 5 tools
Each tool targets a distinct resource+action: list_forms and list_submissions return different collections, get_form retrieves a single form definition, and create/delete are unambiguous write operations. There is no meaningful overlap between any pair.
All five tools follow a strict snake_case verb_noun pattern (list_forms, get_form, list_submissions, create_form, delete_form). The convention is applied uniformly with no deviations.
Five tools is well-scoped for a form-management server, with each tool earning its place across form listing, retrieval, creation, deletion, and submissions. No redundancy or padding.
The surface covers create/read/delete for forms and read for submissions, but there is no update_form (editing an existing form is a core workflow) and no submission-level operations beyond listing. These gaps will force agents to work around missing lifecycle steps.