Filly Forms MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Filly Forms MCP Serverlist all form types"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Filly Forms MCP Server
NPX-runnable MCP server that exposes the Filly Forms REST API as MCP tools for AI agents.
Quick Start
Install from GitHub
# Install directly from GitHub (recommended)
npx -y git+https://github.com/eneopt/filly-forms-mcp.git
# Or with SSH
npx -y git+ssh://git@github.com/eneopt/filly-forms-mcp.gitDevelopment Setup
# Clone the source repository
git clone [source-repo-url]
# Install dependencies
npm install
# Build
npm run build
# Run locally
npm startUsage with Claude Code
Add to your .mcp.json:
{
"mcpServers": {
"filly-forms": {
"command": "npx",
"args": ["-y", "git+https://github.com/eneopt/filly-forms-mcp.git"],
"env": {
"FILLY_API_URL": "http://localhost:8000/api/v1"
}
}
}
}Or use local development version (for contributing):
{
"mcpServers": {
"filly-forms": {
"command": "node",
"args": ["/home/b4zs/workspace/w/jsonforms/packages/mcp-server/dist/index.js"],
"env": {
"FILLY_API_URL": "http://localhost:8000/api/v1",
"FILLY_API_USERNAME": "your-username",
"FILLY_API_PASSWORD": "your-password"
}
}
}
}Environment Variables
FILLY_API_URL- Base URL of the Filly Forms REST API (default:http://localhost:8000/api/v1)FILLY_API_USERNAME- HTTP Basic Auth username (optional, only if API requires authentication)FILLY_API_PASSWORD- HTTP Basic Auth password (optional, only if API requires authentication)
Available Tools
list_form_types
List all form types in the system with their schemas and metadata.
Parameters:
name(optional): Filter by form type name (partial match)
Returns:
{
"types": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Invoice",
"version": 3,
"status": "published"
}
]
}create_record
Create a new record of a given form type with validation.
Parameters:
typeId(required): UUID of the form typedata(required): Record data (validated against type's JSON schema)name(optional): Record name
Returns:
{
"id": "uuid",
"version": 1
}get_record
Get a record by ID, optionally at a specific version.
Parameters:
id(required): Record UUIDversion(optional): Version number (omit for latest)
Returns:
{
"id": "uuid",
"name": "Record Name",
"typeId": "uuid",
"data": { ... },
"version": 2,
"createdAt": "2026-07-21T06:00:00+00:00"
}update_record
Update an existing record with optimistic locking.
Parameters:
id(required): Record UUIDdata(required): New record dataexpectedVersion(required): Expected current version for optimistic lockingname(optional): New name
Returns:
{
"id": "uuid",
"version": 3
}preview_data
Preview ad-hoc data through a template to see rendered HTML output.
Parameters:
typeId(required): Form type UUID for schema validationdata(required): Data to previewtemplateId(optional): Template UUID (uses default if omitted)name(optional): Name for the preview
Returns:
{
"html": "<html>...</html>"
}upload_document
Upload a document for AI extraction (long-running operation with polling).
Parameters:
name(required): Document filenamefileContent(required): Base64-encoded document contenttargetTypeId(optional): Extract into existing type (data-only mode)pollInterval(optional): Seconds between polls (default: 2)maxWait(optional): Maximum seconds to wait (default: 300)
Returns:
{
"uploadId": "uuid",
"status": "completed",
"logs": [...],
"typeId": "uuid",
"recordId": "uuid",
"targetTypeId": null
}Architecture
This MCP server is a stateless HTTP proxy:
MCP Protocol (stdio) ← Claude Code communicates here
HTTP REST API ← This server forwards requests here
Symfony Backend ← Handles business logic
Why this approach?
✅ Separation of concerns: MCP server is just a protocol adapter
✅ Standard MCP: Uses stdio (recommended for CLI clients)
✅ No duplication: All business logic stays in the Symfony app
✅ Easy debugging: Test REST API with curl, MCP with Claude
✅ NPX-runnable: Zero installation for users
Development
# Watch mode
npm run dev
# Type checking
npm run typecheck
# Build
npm run buildLicense
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/eneopt/filly-forms-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server