MCP-Claude-FileMaker
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., "@MCP-Claude-FileMakershow me the customers in the sales database"
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.
MCP Claude FileMaker
A comprehensive Model Context Protocol (MCP) server for integrating Claude with FileMaker databases. This server enables Claude to interact with your FileMaker databases through the FileMaker Data API, providing seamless database operations, script execution, and metadata discovery.
🌟 Features
Core Functionality
Multi-Database Support: Connect to multiple FileMaker databases simultaneously
Dynamic Configuration: Configure databases via environment variables
Intelligent Caching: Built-in caching for improved performance
Self-Signed Certificate Support: Works with FileMaker Cloud and on-premise servers
Comprehensive Error Handling: Robust error handling and recovery
Database Operations
List Databases: Enumerate all configured databases
Test Connections: Verify database connectivity
Get Metadata: Retrieve database schemas and layout information
Query Records: Advanced record querying with filtering and sorting
Create Records: Insert new records into layouts
Update Records: Modify existing records
Delete Records: Remove records from the database
Execute Scripts: Run FileMaker scripts with parameters
Script Discovery: List available scripts
Authentication Methods
Username/Password: Traditional FileMaker authentication
API Key: OttoFMS and modern FileMaker authentication
Related MCP server: Dataverse MCP Server
🏗️ Technical Architecture
System Overview
The MCP-Claude-FileMaker server is built on a sophisticated multi-layered architecture designed for enterprise-grade FileMaker integration:
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────────┐
│ Claude AI │◄──►│ MCP Protocol │◄──►│ FileMaker Server │
│ │ │ (JSON-RPC) │ │ (Data API v1) │
└─────────────────┘ └──────────────────┘ └─────────────────────┘
│ │ │
│ ┌─────────────────┐ │
└─────────────►│ MCP Server │◄─────────────┘
│ (Node.js) │
└─────────────────┘
│
┌─────────────────────────────┐
│ Core Components │
├─────────────────────────────┤
│ • Database Discovery Engine │
│ • Dual-Cache System │
│ • Authentication Manager │
│ • Script Execution Engine │
│ • Query Processing Layer │
│ • SSL Certificate Handler │
└─────────────────────────────┘Core Architecture Components
1. Database Discovery Engine
Automatically discovers and configures multiple FileMaker databases:
Environment scanning: Detects
FM_SERVER_*,FM_DATABASE_*patternsDynamic configuration: Supports unlimited database connections
Authentication flexibility: Mixed auth methods per database
Validation: Ensures complete configuration before startup
2. Dual-Cache System
Intelligent caching for optimal performance:
// Data Cache (14 minutes TTL)
- Database metadata and layouts
- Query results and record sets
- Script lists and definitions
// Session Cache (13 minutes TTL)
- Authentication tokens
- Connection state management
- Auto-refresh before expiration3. Authentication Manager
Robust authentication with automatic recovery:
Token lifecycle management: Automatic refresh and retry
Multi-method support: Username/password and API keys
Session persistence: Cached tokens across requests
Error recovery: 401 auto-retry with new authentication
4. Script Execution Engine
Comprehensive FileMaker script automation:
Script discovery:
/scriptsendpoint enumeration with cachingParameter passing: URL-encoded parameter support
Layout context: Script execution within specific layouts
Response capture: Full script result and error handling
Workflow automation: Chained script execution via Claude conversations
5. Query Processing Layer
Advanced data query capabilities:
Smart endpoint selection: GET vs POST based on query complexity
Complex find requests: Multi-criteria, AND/OR logic support
Sorting and pagination: Full FileMaker Data API feature coverage
Record operations: Complete CRUD functionality
6. SSL Certificate Handler
Production-ready security management:
Self-signed certificate support: Development-friendly defaults
Production hardening: Configurable SSL verification levels
HTTPS Agent: Custom agent for certificate management
Data Flow Architecture
Claude Request → MCP Protocol → Tool Validation → Database Selection
↓ ↓
Authentication Check ← Session Cache ← Token Manager ← Database Config
↓ ↓
FileMaker API Call → HTTPS Request → FileMaker Server → Data/Script Response
↓ ↓
Response Processing ← Data Cache ← Result Formatting ← Raw API Response
↓
Claude Response (JSON)Performance Optimizations
Intelligent Caching Strategy
Metadata caching: Database schemas cached for 14 minutes
Session reuse: Authentication tokens cached for 13 minutes
Query optimization: Repeated queries served from cache
Cache invalidation: Manual cache clearing available
Connection Management
Connection pooling: Reused HTTPS connections
Automatic retry: 401 errors trigger re-authentication
Timeout handling: Graceful handling of connection timeouts
SSL optimization: Custom HTTPS agent for performance
Request Optimization
Batch operations: Multiple database operations in single requests
Smart querying: Optimal endpoint selection based on query type
Parameter encoding: Proper URL encoding for special characters
Response streaming: Efficient handling of large result sets
Security Architecture
Authentication Security
Credential isolation: Environment variable storage only
Token rotation: Automatic token refresh prevents stale sessions
Mixed authentication: Different methods per database
Access control: Database-specific permission validation
Network Security
TLS configuration: Configurable SSL/TLS verification
Certificate management: Self-signed and CA certificate support
Firewall compatibility: Standard HTTPS ports (80/443)
Request signing: FileMaker Data API token-based authentication
Data Security
No persistent storage: All data flows through, never stored
Cache encryption: In-memory cache only, no disk persistence
Audit trail: All operations logged for security monitoring
Error sanitization: Sensitive data excluded from error messages
Script Execution Architecture
The script execution system provides full automation capabilities:
Claude: "Run monthly report script with parameter Q4-2024"
↓
Script Discovery: fm_get_scripts → Cache Check → FileMaker /scripts API
↓
Script Validation: Verify script exists and is accessible
↓
Script Execution: fm_run_script → Layout Context → Parameter Encoding
↓
FileMaker API: GET /layouts/{layout}/script/{script}?script.param={param}
↓
Result Processing: Script response → Error handling → Claude responseScript Features
Natural language execution: "Run the backup script"
Parameter support: Complex parameter passing
Context awareness: Layout-specific script execution
Error handling: Comprehensive script error reporting
Batch execution: Multiple scripts via conversation flow
Multi-Database Architecture
Supports enterprise environments with multiple FileMaker systems:
Environment Variables Pattern:
FM_SERVER_PROD=prod.company.com → Production Database
FM_SERVER_DEV=dev.company.com → Development Database
FM_SERVER_CRM=crm.company.com → CRM Database
FM_SERVER_INVENTORY=inv.company.com → Inventory Database
Each database can have:
- Different authentication methods
- Separate caching strategies
- Independent script libraries
- Unique security requirementsError Handling & Recovery
Graceful Degradation
Connection failures: Clear error messages with troubleshooting guidance
Authentication errors: Automatic retry with fresh credentials
Timeout handling: Configurable timeout with fallback responses
API errors: FileMaker error code translation to human-readable messages
Monitoring & Observability
Health checks: Built-in container health monitoring
Debug logging: Comprehensive debug mode for troubleshooting
Performance metrics: Cache hit rates and response times
Error tracking: Detailed error logging with context
📦 Installation
Prerequisites
Node.js 18+ installed
FileMaker Server with Data API enabled
Claude Desktop (for MCP integration)
Quick Start
Clone or Download
git clone https://github.com/datacraftdevelopment/MCP-Claude-FileMaker.git cd MCP-Claude-FileMakerInstall Dependencies
npm installConfigure Environment
cp .env.example .env # Edit .env with your FileMaker database detailsConfigure Claude Desktop Add to your Claude Desktop configuration:
{ "mcpServers": { "filemaker": { "command": "node", "args": ["/path/to/MCP-Claude-FileMaker/server.js"], "env": { "FM_PROTOCOL": "https", "FM_API_VERSION": "v1", "FM_SSL_VERIFY": "false", "NODE_TLS_REJECT_UNAUTHORIZED": "0", "FM_SERVER_MYDB": "your-filemaker-server.com", "FM_DATABASE_MYDB": "YourDatabase", "FM_ACCOUNT_MYDB": "your_username", "FM_PASSWORD_MYDB": "your_password" } } } }Restart Claude Desktop
⚙️ Configuration
Environment Variables
The server uses environment variables for configuration. You can configure multiple databases using a simple naming pattern.
Global Settings
FM_PROTOCOL=https # http or https
FM_API_VERSION=v1 # FileMaker Data API version
FM_SSL_VERIFY=false # Set to true for production
NODE_TLS_REJECT_UNAUTHORIZED=0 # Set to 1 for production
CACHE_TTL=840 # Data cache TTL in seconds (14 minutes)
SESSION_TTL=780 # Session cache TTL in seconds (13 minutes)Database Configuration Pattern
For Username/Password Authentication:
FM_SERVER_IDENTIFIER=your-server.com
FM_DATABASE_IDENTIFIER=YourDatabase
FM_ACCOUNT_IDENTIFIER=username
FM_PASSWORD_IDENTIFIER=passwordFor API Key Authentication:
FM_SERVER_IDENTIFIER=your-server.com
FM_DATABASE_IDENTIFIER=YourDatabase
FM_API_KEY_IDENTIFIER=your-api-keyMultiple Database Example
# Production Database
FM_SERVER_PROD=prod.filemaker-server.com
FM_DATABASE_PROD=MainDatabase
FM_ACCOUNT_PROD=api_user
FM_PASSWORD_PROD=secure_password
# Development Database
FM_SERVER_DEV=dev.filemaker-server.com
FM_DATABASE_DEV=TestDatabase
FM_API_KEY_DEV=dev-api-key-12345
# Customer Database
FM_SERVER_CUSTOMERS=customers.filemaker-server.com
FM_DATABASE_CUSTOMERS=CustomerDB
FM_ACCOUNT_CUSTOMERS=readonly
FM_PASSWORD_CUSTOMERS=readonly_passClaude Desktop Configuration
Simple Single Database
{
"mcpServers": {
"filemaker": {
"command": "node",
"args": ["/absolute/path/to/MCP-Claude-FileMaker/server.js"],
"env": {
"FM_PROTOCOL": "https",
"FM_API_VERSION": "v1",
"FM_SSL_VERIFY": "false",
"NODE_TLS_REJECT_UNAUTHORIZED": "0",
"FM_SERVER_MAIN": "your-server.com",
"FM_DATABASE_MAIN": "YourDatabase",
"FM_ACCOUNT_MAIN": "your_username",
"FM_PASSWORD_MAIN": "your_password"
}
}
}
}Multiple Databases
{
"mcpServers": {
"filemaker": {
"command": "node",
"args": ["/absolute/path/to/MCP-Claude-FileMaker/server.js"],
"env": {
"FM_PROTOCOL": "https",
"FM_API_VERSION": "v1",
"FM_SSL_VERIFY": "false",
"NODE_TLS_REJECT_UNAUTHORIZED": "0",
"FM_SERVER_PROD": "prod.your-server.com",
"FM_DATABASE_PROD": "Production",
"FM_ACCOUNT_PROD": "api_user",
"FM_PASSWORD_PROD": "prod_password",
"FM_SERVER_DEV": "dev.your-server.com",
"FM_DATABASE_DEV": "Development",
"FM_API_KEY_DEV": "dev-api-key-123"
}
}
}
}🔧 Available Tools
Database Management
fm_list_databases
List all configured databases.
No parameters requiredfm_test_connection
Test connection to a specific database.
database: Database identifier to testfm_get_metadata
Get database metadata (layouts/tables).
database: Database identifierfm_get_layout_metadata
Get detailed metadata for a specific layout.
database: Database identifier
layout: Layout nameData Operations
fm_query_records
Query records with advanced filtering and sorting.
database: Database identifier
layout: Layout name
query: (optional) Array of find requests
sort: (optional) Sort array
limit: (optional) Max records to return
offset: (optional) Records to skipfm_create_record
Create a new record.
database: Database identifier
layout: Layout name
fieldData: Object with field names and valuesfm_update_record
Update an existing record.
database: Database identifier
layout: Layout name
recordId: FileMaker record ID
fieldData: Object with field names and new valuesfm_delete_record
Delete a record.
database: Database identifier
layout: Layout name
recordId: FileMaker record IDScript Operations
fm_run_script
Execute a FileMaker script with comprehensive parameter support.
database: Database identifier
layout: Layout context (script execution environment)
script: Script name (exact name as appears in FileMaker)
parameter: (optional) Script parameter (string, JSON, or complex data)Script Execution Features:
Layout Context: Scripts run within specified layout for proper context
Parameter Encoding: Automatic URL encoding of parameters with special characters
Response Capture: Full script execution results and return values
Error Handling: Comprehensive error reporting for script failures
Timeout Management: Graceful handling of long-running scripts
Parameter Examples:
// Simple string parameter
{ "parameter": "weekly-report" }
// Date range parameter
{ "parameter": "2024-01-01,2024-12-31" }
// JSON parameter for complex data
{ "parameter": "{\"type\": \"export\", \"format\": \"csv\", \"fields\": [\"name\", \"email\"]}" }
// Multi-value parameter
{ "parameter": "department=sales®ion=west&quarter=Q4" }fm_get_scripts
Discover and list all available scripts in a database.
database: Database identifierScript Discovery Features:
Complete enumeration: Lists all scripts accessible to the API account
Cached results: Script lists cached for performance (14-minute TTL)
Permission awareness: Only shows scripts the account can execute
Metadata included: Script names and availability status
Example Response:
{
"response": {
"scripts": [
{
"name": "Daily Backup",
"isFolder": false
},
{
"name": "Reports",
"isFolder": true
},
{
"name": "Customer Export",
"isFolder": false
}
]
}
}Utility Operations
fm_clear_cache
Clear cached data.
type: Type of cache to clear ("data", "session", "all")🚀 Usage Examples
Basic Usage with Claude
List Available Databases
"List all my FileMaker databases"Explore Database Structure
"Show me the layouts in my PROD database" "Get the field definitions for the Customers layout"Query Data
"Find all customers with status 'Active' in the PROD database" "Show me the last 10 orders from the Orders layout"Create Records
"Create a new customer record with name 'John Doe' and email 'john@example.com'"Run Scripts
"Run the 'Calculate Totals' script on the Orders layout" "Execute the backup script with parameter 'weekly'" "List all available scripts in my PROD database" "Run the monthly report script with parameter Q4-2024"
Script Automation Examples
Script Discovery Workflow
User: "What scripts are available in my production database?"
Claude: Uses fm_get_scripts to list all scripts
User: "Run the customer report script"
Claude: Uses fm_run_script with discovered script nameComplex Script Workflows
User: "Generate the end-of-month reports with parameter December-2024"
Claude:
1. Discovers available scripts using fm_get_scripts
2. Identifies "End of Month Report" script
3. Executes script with parameter "December-2024"
4. Reports execution status and results
User: "Run the data validation scripts for the customer database"
Claude:
1. Lists scripts in customer database
2. Identifies validation-related scripts
3. Executes multiple scripts in sequence
4. Provides comprehensive execution summaryAutomated Maintenance Workflows
User: "Perform database maintenance on the inventory system"
Claude:
1. Connects to inventory database
2. Runs "Daily Cleanup" script
3. Executes "Reindex Database" script
4. Runs "Generate Summary Reports" script
5. Provides maintenance completion statusScript Parameter Examples
# Simple parameter passing
"Run the backup script with parameter 'full-backup'"
# Date-based parameters
"Execute the sales report script with parameter '2024-12-01,2024-12-31'"
# JSON parameter passing
"Run the data import script with parameter '{"source": "csv", "validate": true}'"
# Multiple parameter scenarios
"Execute the user notification script with parameters for email alerts"Error Handling in Script Execution
User: "Run the data synchronization script"
Claude:
- Executes fm_run_script
- Captures script return values
- Reports success/failure status
- Provides error details if script fails
- Suggests troubleshooting stepsAdvanced Queries
// Complex find request
{
"query": [
{
"FirstName": "John",
"Status": "Active"
},
{
"LastName": "Smith",
"omit": "true"
}
],
"sort": [
{
"fieldName": "LastName",
"sortOrder": "ascend"
}
],
"limit": 50
}🔒 Security Considerations
Production Deployment
Set
FM_SSL_VERIFY=trueSet
NODE_TLS_REJECT_UNAUTHORIZED=1Use strong passwords or API keys
Limit database privileges for API accounts
Use HTTPS for all connections
Keep the MCP server updated
Authentication Best Practices
Create dedicated API accounts with minimal required privileges
Use API keys when possible (OttoFMS)
Regularly rotate passwords and API keys
Monitor access logs
🐳 Docker Deployment
Build and Run
# Build the image
docker build -t mcp-claude-filemaker .
# Run with environment file
docker run -d --env-file .env --name mcp-filemaker mcp-claude-filemaker
# Run with inline environment variables
docker run -d \
-e FM_PROTOCOL=https \
-e FM_SERVER_MAIN=your-server.com \
-e FM_DATABASE_MAIN=YourDB \
-e FM_ACCOUNT_MAIN=username \
-e FM_PASSWORD_MAIN=password \
--name mcp-filemaker \
mcp-claude-filemaker📁 FileMaker Connector Extension
Included in the connectors/ directory is filemaker-connector-v2.1.0.dxt - a powerful FileMaker extension that provides enhanced integration capabilities with Claude and the MCP server. This drag-and-drop extension simplifies the process of connecting your FileMaker databases to Claude.
What is the FileMaker Connector?
The FileMaker Connector is a pre-built extension (.dxt file) that:
Provides a user-friendly interface for configuring database connections
Automatically generates the necessary server configuration
Includes connection testing and validation tools
Streamlines the setup process for non-technical users
Works alongside the MCP server to provide seamless Claude integration
Installation Steps
Step 1: Install the Extension
Open Claude Desktop on your computer
Locate the connector file:
connectors/filemaker-connector-v2.1.0.dxtDrag and drop the
.dxtfile directly onto the Claude Desktop application windowFollow the installation prompts that appear
Claude Desktop will automatically integrate the FileMaker connector
Step 2: Access the Connector
After installation, the connector will be integrated into Claude Desktop and available through:
Claude's interface for FileMaker database configuration
Automatic detection when you mention FileMaker operations
Enhanced FileMaker integration capabilities within Claude conversations
Step 3: Configure Your Connection
Open the connector from the Extensions menu
Fill in your server details:
Server Address: Your FileMaker Server URL (e.g.,
your-server.com)Database Name: The FileMaker database filename (without .fmp12)
Username/Password: FileMaker account credentials with API access
Protocol: Usually
httpsfor production serversAPI Version: Typically
v1(FileMaker Data API version)
Step 4: Test and Generate Configuration
Test the connection using the built-in connection tester
Generate MCP configuration - the connector will create the proper environment variables
Copy the generated configuration to use in your Claude Desktop setup
Using the Generated Configuration
After configuring the connector, it will generate environment variables in this format:
FM_PROTOCOL=https
FM_API_VERSION=v1
FM_SSL_VERIFY=false
FM_SERVER_YOURDB=your-server.com
FM_DATABASE_YOURDB=YourDatabase
FM_ACCOUNT_YOURDB=your_username
FM_PASSWORD_YOURDB=your_passwordYou can then use these in your Claude Desktop configuration or .env file.
Connector Features
Connection Management
Multiple Database Support: Configure connections to multiple FileMaker databases
Credential Validation: Test credentials before saving configuration
SSL Certificate Handling: Automatic handling of self-signed certificates
Connection Status Monitoring: Real-time connection health checks
Configuration Generation
Auto-Generate Environment Variables: Creates properly formatted
.envfilesClaude Desktop Config: Generates ready-to-use Claude Desktop JSON configuration
Export/Import Settings: Save and share configuration templates
Backup Configuration: Keep copies of working configurations
Advanced Features
Script Discovery: Browse available FileMaker scripts
Layout Inspection: View database schema and field definitions
Permission Testing: Verify account privileges and access levels
Performance Monitoring: Check response times and server performance
Troubleshooting the Connector
Connector Won't Install
Ensure you're using Claude Desktop latest version
Check that Claude Desktop has permission to install extensions
Try restarting Claude Desktop and installing again
Verify the
.dxtfile is not corrupted
Connection Test Fails
Verify server URL is correct and accessible
Check that FileMaker Server Data API is enabled
Confirm username/password are correct and account is active
Test network connectivity to the FileMaker Server
Configuration Not Working
Double-check generated environment variables
Ensure MCP server can access the same network as FileMaker Server
Verify Claude Desktop is using the correct configuration file path
Manual Configuration (Alternative)
If you prefer not to use the connector extension, you can manually configure the MCP server by:
Setting up environment variables as shown in the Configuration section above
Testing connections using the MCP server's built-in connection tools
Configuring Claude Desktop manually with your database details
The connector simply automates this process and provides a user-friendly interface for configuration management.
🔧 Technical Implementation Details
Caching Strategy Deep Dive
The MCP server implements a sophisticated dual-cache strategy optimized for FileMaker Data API characteristics:
Cache Architecture
// Data Cache Configuration
const dataCache = new NodeCache({
stdTTL: parseInt(process.env.CACHE_TTL) || 840, // 14 minutes
checkperiod: 120 // Check every 2 minutes
});
// Session Cache Configuration
const sessionCache = new NodeCache({
stdTTL: parseInt(process.env.SESSION_TTL) || 780, // 13 minutes
checkperiod: 60 // Check every minute
});Cache Key Strategy
// Data cache keys (hierarchical)
`metadata_${database}` // Database layouts and schemas
`layout_${database}_${layout}` // Specific layout metadata
`scripts_${database}` // Available scripts list
`find_${database}_${layout}_${hash}` // Query results with hash
// Session cache keys
`session_${database}` // Authentication tokens per databaseCache Performance Benefits
Metadata requests: 95%+ cache hit rate after initial loading
Authentication: Eliminates ~75% of authentication API calls
Script discovery: Instant script listing after first query
Response time improvement: 60-90% faster response on cached operations
Session Management Implementation
Token Lifecycle Management
async function authenticateFileMaker(dbConfig) {
const cacheKey = `session_${dbConfig.database}`;
const cachedSession = sessionCache.get(cacheKey);
if (cachedSession) {
return cachedSession; // Use cached token
}
// Create new session with FileMaker Data API
const response = await axios.post(`${baseURL}/sessions`, {}, {
auth: { username: dbConfig.username, password: dbConfig.password },
httpsAgent
});
const token = response.data.response.token;
sessionCache.set(cacheKey, token); // Cache for 13 minutes
return token;
}Automatic Token Refresh
// Auto-retry mechanism for expired tokens
try {
const response = await axios({ method, url: endpoint, headers: { 'Authorization': `Bearer ${token}` } });
return response.data;
} catch (error) {
if (error.response?.status === 401) {
sessionCache.del(`session_${dbConfig.database}`); // Clear expired token
const newToken = await authenticateFileMaker(dbConfig); // Get fresh token
// Retry request with new token
const retryResponse = await axios({ method, url: endpoint, headers: { 'Authorization': `Bearer ${newToken}` } });
return retryResponse.data;
}
throw error;
}Error Handling & Recovery
Comprehensive Error Classification
// FileMaker API Error Handling
switch (error.response?.status) {
case 401:
// Authentication failure - retry with fresh token
return await retryWithNewAuthentication();
case 404:
// Resource not found (layout, script, record)
throw new Error(`Resource not found: ${error.response.data?.messages?.[0]?.message}`);
case 500:
// FileMaker Server error
throw new Error(`FileMaker Server error: ${error.response.data?.messages?.[0]?.message}`);
case 503:
// Service unavailable
throw new Error(`FileMaker Server temporarily unavailable`);
default:
// Generic error handling
throw new Error(`Request failed: ${error.response?.data?.messages?.[0]?.message || error.message}`);
}Graceful Degradation Patterns
Cache failures: Fall back to direct API calls
Network timeouts: Return helpful error messages with retry suggestions
Partial failures: Continue processing other operations when possible
Configuration errors: Provide specific guidance for fixing issues
Performance Optimizations
Connection Pooling & Reuse
// HTTPS Agent with connection reuse
const httpsAgent = new https.Agent({
rejectUnauthorized: process.env.FM_SSL_VERIFY === 'true',
keepAlive: true, // Reuse connections
keepAliveMsecs: 1000, // Keep alive for 1 second
maxSockets: 10, // Max concurrent connections per host
maxFreeSockets: 5 // Max free connections to keep open
});Smart Query Optimization
// Endpoint selection based on query complexity
let endpoint = `/layouts/${encodeURIComponent(layout)}/records`;
let method = 'GET';
let requestData = null;
if (query && query.length > 0) {
// Complex query - use POST to _find endpoint
endpoint = `/layouts/${encodeURIComponent(layout)}/_find`;
method = 'POST';
requestData = { query, sort, limit, offset };
} else {
// Simple query - use GET with URL parameters
const params = new URLSearchParams();
if (limit) params.append('_limit', limit.toString());
if (offset) params.append('_offset', offset.toString());
if (params.toString()) endpoint += `?${params.toString()}`;
}Response Processing Optimization
JSON streaming: Efficient handling of large result sets
Memory management: Automatic garbage collection of large responses
Compression: GZIP support for large data transfers
Pagination: Smart handling of large record sets
Security Implementation
Credential Security
// Environment variable isolation
const dbConfig = {
server: process.env[`FM_SERVER_${identifier}`],
database: process.env[`FM_DATABASE_${identifier}`],
username: process.env[`FM_ACCOUNT_${identifier}`] || '',
password: process.env[`FM_PASSWORD_${identifier}`] || '',
apiKey: process.env[`FM_API_KEY_${identifier}`]
};
// Never log sensitive information
console.error(`Connecting to database: ${dbConfig.database} at ${dbConfig.server}`);
// Credentials are never logged or exposedSSL/TLS Configuration
// Flexible SSL handling for different environments
const httpsAgent = new https.Agent({
rejectUnauthorized: process.env.FM_SSL_VERIFY === 'true' &&
process.env.NODE_TLS_REJECT_UNAUTHORIZED === '1',
secureProtocol: 'TLSv1_2_method', // Force TLS 1.2+
honorCipherOrder: true, // Use server cipher preference
ciphers: 'ECDHE+AESGCM:ECDHE+AES256:ECDHE+AES128:!aNULL:!MD5:!DSS' // Strong ciphers only
});Multi-Database Architecture
Database Discovery Algorithm
// Dynamic database configuration discovery
const databases = {};
const envKeys = Object.keys(process.env);
const serverKeys = envKeys.filter(key => key.startsWith('FM_SERVER_'));
for (const serverKey of serverKeys) {
const identifier = serverKey.replace('FM_SERVER_', '');
const config = {
server: process.env[serverKey],
database: process.env[`FM_DATABASE_${identifier}`],
username: process.env[`FM_ACCOUNT_${identifier}`],
password: process.env[`FM_PASSWORD_${identifier}`],
apiKey: process.env[`FM_API_KEY_${identifier}`]
};
// Validate configuration completeness
if (config.server && config.database &&
((config.username && config.password) || config.apiKey)) {
databases[identifier] = config;
}
}Concurrent Database Operations
Parallel processing: Multiple database operations execute concurrently
Connection isolation: Each database maintains separate connection state
Cache separation: Database-specific cache namespacing
Error isolation: Failures in one database don't affect others
Script Execution Implementation
Script Parameter Encoding
// Robust parameter handling for FileMaker scripts
let endpoint = `/layouts/${encodeURIComponent(layout)}/script/${encodeURIComponent(scriptName)}`;
if (parameter) {
// Handle complex parameters (JSON, special characters, etc.)
const encodedParam = encodeURIComponent(parameter);
endpoint += `?script.param=${encodedParam}`;
}Script Result Processing
// Comprehensive script response handling
const result = await makeFileMakerRequest(dbConfig, 'GET', endpoint);
return {
content: [{
type: 'text',
text: JSON.stringify({
scriptResult: result.response?.scriptResult || null,
scriptError: result.response?.scriptError || '0',
success: result.response?.scriptError === '0',
messages: result.messages || [],
timestamp: new Date().toISOString()
}, null, 2)
}]
};Monitoring & Observability
Performance Metrics
// Built-in performance monitoring
const performanceMetrics = {
cacheHitRate: dataCache.getStats(),
sessionCacheHitRate: sessionCache.getStats(),
activeConnections: databases.length,
requestCount: requestCounter,
averageResponseTime: responseTimeTracker.getAverage()
};Health Check Implementation
# Docker health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD node -e "console.log('Health check passed')" || exit 1🛠️ Development
Build from Source
# Install dependencies
npm install
# Build TypeScript (if using src/)
npm run build
# Start development server
npm run dev
# Run tests
npm testProject Structure
MCP-Claude-FileMaker/
├── server.js # Main server file (production ready)
├── src/ # TypeScript source files
│ ├── index.ts # TypeScript entry point
│ └── filemaker-client.ts # FileMaker client class
├── connectors/ # FileMaker extensions
│ └── filemaker-connector-v2.1.0.dxt
├── package.json # Node.js package configuration
├── tsconfig.json # TypeScript configuration
├── Dockerfile # Docker container definition
├── .env.example # Environment configuration template
└── README.md # This file🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
Development Setup
Fork the repository
Clone your fork
Create a feature branch
Make your changes
Test thoroughly
Submit a pull request
📝 License
This project is licensed under the MIT License - see the LICENSE file for details.
⚡ Troubleshooting
Common Issues
Connection Failed
Verify FileMaker Server Data API is enabled
Check server URL and credentials
Ensure firewall allows connections on port 443/80
Verify SSL certificate settings
Authentication Errors
Check username/password or API key
Verify account privileges in FileMaker
Ensure account is not disabled
No Databases Found
Check environment variable naming pattern
Verify all required variables are set
Check for typos in variable names
Cache Issues
Use
fm_clear_cacheto clear cached dataRestart the server for persistent issues
Debug Mode
Set environment variable DEBUG=1 for verbose logging:
DEBUG=1 node server.jsScript Execution Issues
Script Not Found
Use
fm_get_scriptsto list available scriptsCheck script name spelling and case sensitivity
Verify account has permission to access the script
Ensure script is not in a folder (use full path if needed)
Script Execution Fails
Check FileMaker script for errors using FileMaker Pro
Verify script parameters are correctly formatted
Ensure the layout context is appropriate for the script
Check script privileges and account permissions
Script Timeout
Long-running scripts may timeout at the server level
Consider breaking complex scripts into smaller operations
Use FileMaker Server timeout settings for script execution
Implement progress reporting within scripts
Parameter Handling Issues
Ensure parameters are properly URL encoded
Use JSON format for complex parameter structures
Verify parameter parsing within the FileMaker script
Test parameters directly in FileMaker Pro first
Script Permission Errors
Verify account has "Execute scripts" privilege
Check extended privileges include
fmrestfor Data API accessEnsure scripts are not set to "no access" for the account
Confirm script-level security settings in FileMaker
📞 Support
For support and questions:
Create an issue on GitHub
Check the troubleshooting section
Review FileMaker Data API documentation
Test script execution directly in FileMaker Pro for debugging
Made with ❤️ for the FileMaker and Claude communities
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/datacraftdevelopment/MCP-Claude-FileMaker'
If you have feedback or need assistance with the MCP directory API, please join our Discord server