Fillout.io MCP Server
MCP Server for the Fillout.io API, enabling form management, response handling, and analytics.
Token Setup
-
Get your Fillout.io API Key:
- Log in to your Fillout.io account
- Go to Account Settings β API & Webhooks
- Click βCreate new API Keyβ
- Copy your new API key
-
API Key Information:
- Production keys start with
fo_live_
- Test keys start with
fo_test_
- Test keys only work with test forms
- API keys provide access to all resources in your account
- Production keys start with
-
Replace
your-fillout-api-key
in the configuration with your API key.
β οΈ Security Notes:
- Keep your API key secure and private
- Use test keys for development
- Store keys in environment variables
- Rotate keys periodically
- Never commit keys to version control
Token Troubleshooting
Common Error Messages
-
βInvalid API key providedβ or βAuthentication failedβ
- Cause: API key is missing, malformed, or invalid
- Solution:
- Verify key starts with
fo_live_
orfo_test_
- Check for extra spaces or characters
- Ensure environment variable is set correctly
- Create a new key if necessary
- Verify key starts with
-
βTest mode key used with live formβ
- Cause: Using test key (
fo_test_
) with production form - Solution:
- Use live key for production forms
- Create test form for development
- Switch to appropriate key type
- Cause: Using test key (
-
βRate limit exceededβ
- Cause: Too many API requests
- Solution:
- Implement request throttling
- Check usage in dashboard
- Optimize request patterns
Validation Steps
-
Check API Key Format:
# Key should: - Start with 'fo_live_' or 'fo_test_' - Be approximately 50 characters - Contain only letters, numbers, and underscores
-
Test API Key:
curl -H "Authorization: Bearer your-api-key" \ https://api.fillout.com/v1/api/forms
Features
Form Management
- List all forms
- Get form details
- Create new forms
- Delete forms
- Update form settings
Response Handling
- Submit form responses
- Get form submissions
- Filter responses
- Export responses
Analytics
- Response rates
- Completion times
- Submission trends
Tools
-
list_forms
- Get all accessible forms
- Parameters:
limit
(optional): Number of forms to returnoffset
(optional): Pagination offset
- Returns: Array of form objects
-
get_form
- Get detailed form information
- Parameters:
formId
(string): Form identifier
- Returns: Form details including questions and settings
-
create_form
- Create a new form
- Parameters:
name
(string): Form namedescription
(optional string): Form descriptionquestions
(array): Array of question objectstype
: Question type (e.g., βShortAnswerβ, βMultipleChoiceβ)name
: Question textrequired
: Whether question is requiredchoices
: Array of choices for multiple choice questions
- Returns: Created form object
-
get_form_responses
- Get form submissions
- Parameters:
formId
(string): Form identifierfilters
(optional): Response filterspageSize
(optional): Results per pageafterDate
(optional): Filter by submission datebeforeDate
(optional): Filter by submission datestatus
(optional): Filter by completion status
- Returns: Array of form responses
-
submit_form_response
- Submit a new response
- Parameters:
formId
(string): Form identifierresponses
(array): Array of answersquestionId
: Question identifiervalue
: Response value
calculations
(optional): Custom calculations
- Returns: Submission confirmation
Setup
Usage with Claude Desktop
Docker Configuration
{
"mcpServers": {
"fillout": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"FILLOUT_API_KEY",
"mcp/fillout"
],
"env": {
"FILLOUT_API_KEY": "your-fillout-api-key"
}
}
}
}
NPX Configuration
{
"mcpServers": {
"fillout": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-fillout"
],
"env": {
"FILLOUT_API_KEY": "your-fillout-api-key"
}
}
}
}
Building
Prerequisites
- Node.js 18 or later
- npm or yarn
- Docker (optional)
Local Development
# Install dependencies
npm install
# Run in development mode
npm run dev
# Build for production
npm run build
Docker Build
# Build image
docker build -t mcp/fillout .
# Run container
docker run -e FILLOUT_API_KEY=your-key mcp/fillout
Examples
Creating a Form
const form = await client.createForm({
name: "Customer Feedback",
description: "Please share your experience",
questions: [
{
type: "ShortAnswer",
name: "What did you like most?",
required: true
},
{
type: "MultipleChoice",
name: "Would you recommend us?",
required: true,
choices: ["Yes", "No", "Maybe"]
}
]
});
Submitting a Response
const response = await client.submitFormResponse(formId, {
responses: [
{
questionId: "q1",
value: "Great customer service!"
},
{
questionId: "q2",
value: "Yes"
}
]
});
Error Handling
The server provides detailed error messages for common issues:
try {
const forms = await client.listForms();
} catch (error) {
if (error instanceof AuthenticationError) {
// Handle invalid API key
} else if (error instanceof FilloutError) {
// Handle API-specific errors
} else {
// Handle unexpected errors
}
}
License
This project is licensed under the MIT License. See the LICENSE file for details.
Last updated on