@maxpetrusenko/filemaker-mcp-server
v2.5.12
Published
A comprehensive FileMaker MCP server with global search, DDR export, and relationship analysis
Maintainers
Readme
FileMaker MCP Server v2.5.10
A comprehensive Model Context Protocol (MCP) server for FileMaker Data API integration, providing intelligent tools for database discovery, analysis, and management.
🚀 Features
Phase 1: Core Discovery Tools
fm_list_layouts- List all layouts in the databasefm_list_scripts- List all scripts in the databasefm_discover_hidden_scripts- Discover hidden scripts not visible in standard listfm_get_record_count- Get total record count for any layoutfm_list_value_lists- List value lists (requires script approach)
Phase 2: Advanced Analysis Tools
fm_analyze_portal_data- Analyze portal fields and relationships for performance insightsfm_get_field_metadata- Get detailed metadata for all fields in a layoutfm_search_across_fields- Search for specific text across multiple fieldsfm_analyze_performance- Analyze database performance and identify bottlenecks
Phase 3: Global Search & Advanced Discovery
fm_global_search_fields- Search for fields across all layouts in the databasefm_global_search_data- Search for data across multiple layouts simultaneouslyfm_export_ddr- Export Database Design Report for comprehensive analysisfm_analyze_relationships- Analyze relationships between tables and identify foreign keys
Core Data Operations
fm_find_records- Find records using FileMaker Data API find syntaxfm_create_record- Create new recordsfm_update_record- Update existing recordsfm_delete_record- Delete recordsfm_execute_script- Execute FileMaker scriptsfm_get_layout_metadata- Get layout structure and field information
📦 Installation
Option 1: Direct Installation (Recommended)
For Claude Desktop
- Add to your MCP configuration:
{
"mcpServers": {
"filemaker": {
"command": "npx",
"args": [
"-y",
"@maxpetrusenko/filemaker-mcp-server@latest"
],
"env": {
"FILEMAKER_HOST": "https://your-filemaker-server.com",
"FILEMAKER_DATABASE": "your-database-name",
"FILEMAKER_USERNAME": "your-username",
"FILEMAKER_PASSWORD": "your-password"
}
}
}
}For Development
# Clone the repository
git clone https://github.com/maxpetrusenko/filemaker-mcp-server.git
cd filemaker-mcp-server
# Install dependencies
npm install
# Build the project
npm run build
# Run locally with environment variables
FILEMAKER_HOST="https://your-filemaker-server.com" \
FILEMAKER_DATABASE="your-database-name" \
FILEMAKER_USERNAME="your-username" \
FILEMAKER_PASSWORD="your-password" \
npm startOption 2: Docker Installation
Build and Run with Docker
# Build the Docker image
docker build -t filemaker-mcp-server .
# Run with environment variables
docker run -it --rm \
-e FILEMAKER_HOST="https://your-filemaker-server.com" \
-e FILEMAKER_DATABASE="your-database-name" \
-e FILEMAKER_USERNAME="your-username" \
-e FILEMAKER_PASSWORD="your-password" \
filemaker-mcp-serverDocker Compose (Recommended for Production)
Create a docker-compose.yml file:
version: '3.8'
services:
filemaker-mcp:
build: .
environment:
- FILEMAKER_HOST=https://your-filemaker-server.com
- FILEMAKER_DATABASE=your-database-name
- FILEMAKER_USERNAME=your-username
- FILEMAKER_PASSWORD=your-password
ports:
- "3000:3000"
restart: unless-stopped
volumes:
- ./logs:/app/logsRun with:
docker-compose up -d🔧 Configuration
Environment Variables
| Variable | Description | Required | Example |
|----------|-------------|----------|---------|
| FILEMAKER_HOST | FileMaker server URL | Yes | https://your-server.com |
| FILEMAKER_DATABASE | Database name | Yes | my-database |
| FILEMAKER_USERNAME | Username for authentication | Yes | API |
| FILEMAKER_PASSWORD | Password for authentication | Yes | your-password |
Claude Desktop Configuration
Add this to your Claude Desktop MCP configuration file:
macOS/Linux: ~/.config/claude-desktop/mcp-servers.json
Windows: %APPDATA%\claude-desktop\mcp-servers.json
{
"mcpServers": {
"filemaker": {
"command": "npx",
"args": [
"-y",
"@maxpetrusenko/filemaker-mcp-server@latest"
],
"env": {
"FILEMAKER_HOST": "https://your-filemaker-server.com",
"FILEMAKER_DATABASE": "your-database-name",
"FILEMAKER_USERNAME": "your-username",
"FILEMAKER_PASSWORD": "your-password"
}
}
}
}🛠️ Tool Reference
Discovery Tools
fm_list_layouts
Lists all layouts in the FileMaker database.
{
"name": "fm_list_layouts",
"description": "List all layouts in the FileMaker database",
"inputSchema": {
"type": "object",
"properties": {},
"required": []
}
}fm_list_scripts
Lists all scripts in the FileMaker database.
{
"name": "fm_list_scripts",
"description": "List all scripts in the FileMaker database",
"inputSchema": {
"type": "object",
"properties": {},
"required": []
}
}fm_discover_hidden_scripts
Discovers hidden scripts that exist but are not visible in the standard script list.
{
"name": "fm_discover_hidden_scripts",
"description": "Discover hidden scripts that exist but are not visible in the standard script list",
"inputSchema": {
"type": "object",
"properties": {},
"required": []
}
}fm_get_record_count
Gets the total number of records in a specified layout.
{
"name": "fm_get_record_count",
"description": "Get the total number of records in a specified layout",
"inputSchema": {
"type": "object",
"properties": {
"layout": { "type": "string", "description": "Layout name" }
},
"required": ["layout"]
}
}Analysis Tools
fm_analyze_portal_data
Analyzes portal fields and their relationships for performance insights.
{
"name": "fm_analyze_portal_data",
"description": "Analyze portal fields and their relationships for performance insights",
"inputSchema": {
"type": "object",
"properties": {
"layout": { "type": "string", "description": "Layout name to analyze" }
},
"required": ["layout"]
}
}fm_get_field_metadata
Gets detailed metadata for all fields in a layout.
{
"name": "fm_get_field_metadata",
"description": "Get detailed metadata for all fields in a layout",
"inputSchema": {
"type": "object",
"properties": {
"layout": { "type": "string", "description": "Layout name" }
},
"required": ["layout"]
}
}fm_search_across_fields
Searches for specific text across multiple fields in a layout.
{
"name": "fm_search_across_fields",
"description": "Search for specific text across multiple fields in a layout",
"inputSchema": {
"type": "object",
"properties": {
"layout": { "type": "string", "description": "Layout name" },
"searchText": { "type": "string", "description": "Text to search for" },
"fields": { "type": "array", "items": { "type": "string" }, "description": "Fields to search in" }
},
"required": ["layout", "searchText"]
}
}fm_analyze_performance
Analyzes database performance and identifies potential bottlenecks.
{
"name": "fm_analyze_performance",
"description": "Analyze database performance and identify potential bottlenecks",
"inputSchema": {
"type": "object",
"properties": {
"layout": { "type": "string", "description": "Layout to analyze" },
"operation": { "type": "string", "enum": ["find", "sort", "portal"], "description": "Operation type to analyze" }
},
"required": ["layout"]
}
}Global Search & Discovery Tools
fm_global_search_fields
Search for fields across all layouts in the database.
{
"name": "fm_global_search_fields",
"description": "Search for fields across all layouts in the database",
"inputSchema": {
"type": "object",
"properties": {
"searchText": { "type": "string", "description": "Text to search for in field names" },
"fieldType": { "type": "string", "enum": ["text", "number", "date", "calculation", "summary", "portal", "all"], "description": "Filter by field type" }
},
"required": ["searchText"]
}
}fm_global_search_data
Search for data across multiple layouts simultaneously.
{
"name": "fm_global_search_data",
"description": "Search for data across multiple layouts simultaneously",
"inputSchema": {
"type": "object",
"properties": {
"searchText": { "type": "string", "description": "Text to search for in data" },
"layouts": { "type": "array", "items": { "type": "string" }, "description": "Specific layouts to search (empty for all)" },
"limit": { "type": "number", "description": "Maximum results per layout" }
},
"required": ["searchText"]
}
}fm_export_ddr
Export Database Design Report for comprehensive analysis.
{
"name": "fm_export_ddr",
"description": "Export Database Design Report for comprehensive analysis",
"inputSchema": {
"type": "object",
"properties": {
"format": { "type": "string", "enum": ["json", "xml", "html"], "description": "Export format" },
"includeScripts": { "type": "boolean", "description": "Include script information" },
"includeLayouts": { "type": "boolean", "description": "Include layout information" }
},
"required": []
}
}fm_analyze_relationships
Analyze relationships between tables and identify foreign keys.
{
"name": "fm_analyze_relationships",
"description": "Analyze relationships between tables and identify foreign keys",
"inputSchema": {
"type": "object",
"properties": {
"layout": { "type": "string", "description": "Layout to analyze" },
"includeDetails": { "type": "boolean", "description": "Include detailed relationship information" }
},
"required": ["layout"]
}
}Data Operations
fm_find_records
Find records using FileMaker Data API find syntax.
{
"name": "fm_find_records",
"description": "Find records using FileMaker Data API find syntax",
"inputSchema": {
"type": "object",
"properties": {
"layout": { "type": "string", "description": "Layout name" },
"query": { "type": "array", "items": { "type": "object" }, "description": "Find query array" },
"limit": { "type": "number", "description": "Maximum number of records to return" },
"offset": { "type": "number", "description": "Number of records to skip" }
},
"required": ["layout", "query"]
}
}fm_create_record
Create a new record in the specified layout.
{
"name": "fm_create_record",
"description": "Create a new record in the specified layout",
"inputSchema": {
"type": "object",
"properties": {
"layout": { "type": "string", "description": "Layout name" },
"fieldData": { "type": "object", "description": "Field data to insert" }
},
"required": ["layout", "fieldData"]
}
}fm_update_record
Update an existing record.
{
"name": "fm_update_record",
"description": "Update an existing record",
"inputSchema": {
"type": "object",
"properties": {
"layout": { "type": "string", "description": "Layout name" },
"recordId": { "type": "number", "description": "Record ID to update" },
"fieldData": { "type": "object", "description": "Field data to update" }
},
"required": ["layout", "recordId", "fieldData"]
}
}fm_delete_record
Delete a record from the database.
{
"name": "fm_delete_record",
"description": "Delete a record from the database",
"inputSchema": {
"type": "object",
"properties": {
"layout": { "type": "string", "description": "Layout name" },
"recordId": { "type": "number", "description": "Record ID to delete" }
},
"required": ["layout", "recordId"]
}
}fm_execute_script
Execute a FileMaker script.
{
"name": "fm_execute_script",
"description": "Execute a FileMaker script",
"inputSchema": {
"type": "object",
"properties": {
"script": { "type": "string", "description": "Script name to execute" },
"parameters": { "type": "string", "description": "Script parameters" }
},
"required": ["script"]
}
}fm_get_layout_metadata
Get layout structure and field information.
{
"name": "fm_get_layout_metadata",
"description": "Get layout structure and field information",
"inputSchema": {
"type": "object",
"properties": {
"layout": { "type": "string", "description": "Layout name" }
},
"required": ["layout"]
}
}🧪 Testing
Local Testing
# Test with environment variables
FILEMAKER_HOST="https://your-filemaker-server.com" \
FILEMAKER_DATABASE="your-database-name" \
FILEMAKER_USERNAME="your-username" \
FILEMAKER_PASSWORD="your-password" \
npm testDocker Testing
# Test Docker build
docker build -t filemaker-mcp-test .
# Test Docker run
docker run -it --rm \
-e FILEMAKER_HOST="https://your-filemaker-server.com" \
-e FILEMAKER_DATABASE="your-database-name" \
-e FILEMAKER_USERNAME="your-username" \
-e FILEMAKER_PASSWORD="your-password" \
filemaker-mcp-test🔍 Troubleshooting
Common Issues
"Server disconnected" error in Claude Desktop
- Ensure environment variables are correctly set
- Check FileMaker server connectivity
- Verify database name and credentials
"Layout is missing" error
- Verify layout name exists in the database
- Check case sensitivity of layout names
"Circular JSON structure" error
- This has been fixed in v2.5.10
- Update to the latest version
Global search returns 0 matches
- Check field names for exact matches
- Verify search text case sensitivity
- Check debug logs in
/tmp/filemaker-global-search-debug.log
Log Files
The server creates log files in /tmp/ directory:
/tmp/filemaker-mcp.log- General server logs/tmp/filemaker-global-search-debug.log- Global search debugging/tmp/filemaker-method-called.log- Method call tracking
📝 Development
Project Structure
filemaker-mcp-server/
├── src/
│ ├── filemaker-mcp.ts # Main MCP server implementation
│ └── index.ts # Entry point
├── dist/ # Compiled JavaScript
├── Dockerfile # Docker configuration
├── docker-compose.yml # Docker Compose configuration
├── package.json # Node.js dependencies
└── README.md # This fileBuilding
# Install dependencies
npm install
# Build TypeScript
npm run build
# Run tests
npm test
# Start development server
npm startContributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🤝 Support
For support and questions:
- Create an issue on GitHub
- Check the troubleshooting section above
- Review the log files for detailed error information
🔄 Version History
- v2.5.10 - Fixed circular JSON structure, added hidden script discovery, improved error handling
- v2.5.9 - Fixed read-only file system issues, improved logging
- v2.5.8 - Fixed MCP SDK compatibility and package structure
- v2.5.0 - Initial release with comprehensive FileMaker Data API integration
