Filly Forms MCP Server

Filly Forms MCP Server

Exposes the Filly Forms REST API as MCP tools for AI agents, enabling form type listing, record CRUD, data preview, and document upload with AI extraction.

Category
Visit Server

README

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.git

Development Setup

# Clone the source repository
git clone [source-repo-url]

# Install dependencies
npm install

# Build
npm run build

# Run locally
npm start

Usage 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 type
  • data (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 UUID
  • version (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 UUID
  • data (required): New record data
  • expectedVersion (required): Expected current version for optimistic locking
  • name (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 validation
  • data (required): Data to preview
  • templateId (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 filename
  • fileContent (required): Base64-encoded document content
  • targetTypeId (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:

  1. MCP Protocol (stdio) ← Claude Code communicates here
  2. HTTP REST API ← This server forwards requests here
  3. 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 build

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured