Skip to main content
Glama
datacraftdevelopment

MCP-Claude-FileMaker

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_* patterns

  • Dynamic 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 expiration

3. 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: /scripts endpoint enumeration with caching

  • Parameter 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 response

Script 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 requirements

Error 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

  1. Clone or Download

    git clone https://github.com/datacraftdevelopment/MCP-Claude-FileMaker.git
    cd MCP-Claude-FileMaker
  2. Install Dependencies

    npm install
  3. Configure Environment

    cp .env.example .env
    # Edit .env with your FileMaker database details
  4. Configure 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"
          }
        }
      }
    }
  5. 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=password

For API Key Authentication:

FM_SERVER_IDENTIFIER=your-server.com
FM_DATABASE_IDENTIFIER=YourDatabase
FM_API_KEY_IDENTIFIER=your-api-key

Multiple 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_pass

Claude 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 required

fm_test_connection

Test connection to a specific database.

database: Database identifier to test

fm_get_metadata

Get database metadata (layouts/tables).

database: Database identifier

fm_get_layout_metadata

Get detailed metadata for a specific layout.

database: Database identifier
layout: Layout name

Data 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 skip

fm_create_record

Create a new record.

database: Database identifier
layout: Layout name
fieldData: Object with field names and values

fm_update_record

Update an existing record.

database: Database identifier
layout: Layout name
recordId: FileMaker record ID
fieldData: Object with field names and new values

fm_delete_record

Delete a record.

database: Database identifier
layout: Layout name
recordId: FileMaker record ID

Script 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&region=west&quarter=Q4" }

fm_get_scripts

Discover and list all available scripts in a database.

database: Database identifier

Script 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

  1. List Available Databases

    "List all my FileMaker databases"
  2. Explore Database Structure

    "Show me the layouts in my PROD database"
    "Get the field definitions for the Customers layout"
  3. Query Data

    "Find all customers with status 'Active' in the PROD database"
    "Show me the last 10 orders from the Orders layout"
  4. Create Records

    "Create a new customer record with name 'John Doe' and email 'john@example.com'"
  5. 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 name

Complex 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 summary

Automated 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 status

Script 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 steps

Advanced 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=true

  • Set NODE_TLS_REJECT_UNAUTHORIZED=1

  • Use 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

  1. Open Claude Desktop on your computer

  2. Locate the connector file: connectors/filemaker-connector-v2.1.0.dxt

  3. Drag and drop the .dxt file directly onto the Claude Desktop application window

  4. Follow the installation prompts that appear

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

  1. Open the connector from the Extensions menu

  2. 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 https for production servers

    • API Version: Typically v1 (FileMaker Data API version)

Step 4: Test and Generate Configuration

  1. Test the connection using the built-in connection tester

  2. Generate MCP configuration - the connector will create the proper environment variables

  3. 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_password

You 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 .env files

  • Claude 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 .dxt file 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:

  1. Setting up environment variables as shown in the Configuration section above

  2. Testing connections using the MCP server's built-in connection tools

  3. 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 database

Cache 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 exposed

SSL/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 test

Project 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

  1. Fork the repository

  2. Clone your fork

  3. Create a feature branch

  4. Make your changes

  5. Test thoroughly

  6. 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_cache to clear cached data

  • Restart the server for persistent issues

Debug Mode

Set environment variable DEBUG=1 for verbose logging:

DEBUG=1 node server.js

Script Execution Issues

Script Not Found

  • Use fm_get_scripts to list available scripts

  • Check 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 fmrest for Data API access

  • Ensure 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

Available Tools

11 tools
fm_clear_cacheC

Clear cached data

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesType of cache to clear

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. 'Clear cached data' implies a destructive or refresh action, but the description does not state whether clearing is reversible, what happens to active sessions, performance impacts, or required permissions. This is a significant gap for a mutation-style tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short and front-loaded, but it is a bare fragment that omits necessary context. It is concise to the point of being under-specified rather than optimally structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and only a minimal three-word description, the definition is incomplete for a tool that clears cache. It does not explain the types of cache available (beyond the enum name), when clearing is safe, or what the result of the operation is.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'type' parameter has an enum with a clear schema description. The tool description adds no additional parameter meaning beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (clear) and resource (cached data), so the basic action is unambiguous. However, it does not specify the scope or kind of cache beyond the parameter enum, nor does it differentiate from any sibling (none of which deal with caches).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool, when not to use it, or what alternatives exist. An agent must guess whether clearing cache is appropriate or what side effects it may have.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fm_create_recordD

Create a new record

ParametersJSON Schema
NameRequiredDescriptionDefault
layoutYesLayout name
databaseYesDatabase identifier
fieldDataYesField data for the new record

TDQS

D1.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states no mutation semantics, no required permissions, no side effects, no response format. 'Create a new record' is a tautology that adds nothing beyond the name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no wasted words, but it is under-specified rather than concisely informative. Every sentence should earn its place, and this one barely adds value beyond the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with three required parameters, no annotations, and no output schema, the description is inadequate. It does not explain required database/layout context, the shape of fieldData, or what happens on success/failure. It leaves the agent to rely entirely on the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters (database, layout, fieldData). The description adds no parameter meaning beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create a new record' restates the tool name (fm_create_record) almost verbatim. It gives a vague verb+resource but provides zero differentiation from siblings like fm_update_record or fm_delete_record beyond the obvious create/update/delete split.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool, no prerequisites, no mention of alternatives. An agent must infer entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fm_delete_recordC

Delete a record

ParametersJSON Schema
NameRequiredDescriptionDefault
layoutYesLayout name
databaseYesDatabase identifier
recordIdYesFileMaker record ID

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Delete a record' signals a destructive write, but it says nothing about irreversibility, required permissions, side effects on related data, or whether confirmation is needed—critical omissions for a deletion tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is structurally concise and front-loaded, but it is under-specified rather than efficient. For a destructive tool with three required parameters and no annotations, a bare 'Delete a record' fails to earn its place by conveying necessary context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, three required parameters, and destructive semantics, the description is completely inadequate. It omits permissions, reversibility, error behavior, and any usage context an agent would need to invoke it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents database, layout, and recordId fully. The description adds no additional meaning about parameter format, constraints, or relationships beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

State a specific verb ('Delete') and resource ('record'), so the core operation is unambiguous. However, it does not differentiate this tool from the many other record-level siblings (fm_update_record, fm_create_record, fm_query_records), leaving the agent to infer the distinction from the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as fm_update_record or fm_create_record, and it offers no warnings or prerequisites for a destructive operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fm_get_layout_metadataC

Get detailed metadata for a specific layout

ParametersJSON Schema
NameRequiredDescriptionDefault
layoutYesLayout name
databaseYesDatabase identifier

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not say what 'detailed metadata' contains, whether any fields are expensive or cached, or whether permissions are required, leaving a read tool's behavior largely undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. It is efficient, though its brevity is partly under-specification rather than disciplined conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should explain what metadata is returned and in what shape, but it does not. For a metadata-retrieval tool the payload is the whole point, so this leaves a real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the layout string plus the MAIN-only database enum are fully documented in the schema. The description adds no syntax, format, or naming-convention detail beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: get detailed metadata for a specific layout. An agent can identify the operation. However, it does not differentiate itself from the sibling fm_get_metadata, so the scope distinction must be inferred from the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus fm_get_metadata, fm_get_scripts, or fm_list_databases, and no stated prerequisites. The agent must infer usage purely from the name and the required layout parameter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fm_get_metadataC

Get database metadata (layouts/tables)

ParametersJSON Schema
NameRequiredDescriptionDefault
databaseYesDatabase identifier

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does not mention that this is a read-only operation, whether it requires an active connection, what the response contains, or any rate-limit/caching behavior. Only the implicit 'Get' verb hints at a read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded phrase with no filler or redundancy. It is appropriately short for a one-parameter lookup, though the 'layouts/tables' parenthetical is ambiguous rather than informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description is too thin: it neither clarifies the overlapping scope with fm_get_layout_metadata nor describes what metadata is returned. The agent cannot confidently route between the metadata-related siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'database' parameter is a fully documented enum constrained to MAIN, so the schema already does the work. The description adds no additional meaning about the parameter, which is the expected baseline when coverage is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a verb (Get) and resource (database metadata) with a parenthetical hint of layouts/tables, so the basic purpose is legible. However, it does not distinguish itself from the sibling fm_get_layout_metadata, which sounds like it returns the same layouts information, leaving the agent unsure which to pick. The parenthetical also raises doubt about whether tables are truly in scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No indication of when to call this versus fm_get_layout_metadata, fm_list_databases, or fm_get_scripts. There are no stated prerequisites, exclusions, or alternatives despite several closely related siblings existing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fm_get_scriptsC

Get list of available scripts

ParametersJSON Schema
NameRequiredDescriptionDefault
databaseYesDatabase identifier

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. 'Get list' implies a read, but the description says nothing about scope (whole file vs. current layout), whether the result is cached, or permission requirements — meaningful gaps for a metadata-fetching tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short, front-loaded sentence with no filler. It is efficient, though its brevity is closer to under-specification than to exemplary conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema read tool the definition is minimally viable, but with no annotations and no output schema it should at least clarify what 'available scripts' are scoped to and how they relate to siblings like fm_run_script.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (the single 'database' parameter is documented with an enum), so the baseline is 3. The description adds no meaning about what the database argument selects beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Get list') and resource ('available scripts'), so an agent can tell broadly what the tool returns. It does not differentiate from siblings such as fm_get_metadata or fm_get_layout_metadata, which could plausibly also enumerate scripts, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this tool versus fm_get_metadata, fm_get_layout_metadata, or fm_run_script, and no prerequisites mentioned. Usage must be inferred entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fm_list_databasesB

List all configured FileMaker databases

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure, and it says nothing about side effects, permissions, or connection prerequisites. It does not even confirm the implied read-only nature of 'List'. For a tool with zero annotation coverage this is a notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One efficient sentence with the verb and resource front-loaded and no wasted words. It is terse to the point of under-specification, but nothing is padded or buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool the statement of intent is sufficient to invoke, but with no output schema the description never indicates what a database entry looks like (name, ID, path) or how many to expect. Minimal but adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which is the baseline-4 case. There is nothing for the description to clarify beyond the name of the resource being listed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('List') and resource ('configured FileMaker databases'), making the operation legible at a glance. It is clearly distinct in subject matter from record-oriented siblings like fm_query_records, though it never explicitly contrasts itself with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this tool versus alternatives such as fm_get_metadata or fm_test_connection, nor any stated precondition or follow-up. The agent must infer that this is a discovery call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fm_query_recordsC

Query records with advanced filtering and sorting

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort array
limitNoMax records to return
queryNoFind requests array
layoutYesLayout name
offsetNoRecords to skip
databaseYesDatabase identifier

TDQS

C2.7/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing: not that it is a read-only operation, not whether results are paginated (despite limit/offset params), not caps or default page sizes. For an unannotated 6-parameter query tool this is a serious gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the core purpose front-loaded and no filler. It is economical, though arguably over-terse given the tool's filtering complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With six parameters, no annotations, and no output schema, the description should explain read-only nature, pagination expectations, and the filter/sort semantics. It supplies none of these, leaving the agent to reconstruct behavior from the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters, which sets the baseline at 3. The description's mention of filtering and sorting loosely maps to the query and sort params but adds no syntax, defaults, or semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb+resource ('Query records') with the added scope of filtering and sorting. It implicitly distinguishes itself from the write-oriented siblings (fm_create_record, fm_update_record, fm_delete_record), though it never names them explicitly, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus alternatives, no prerequisites, and no statement of what 'advanced filtering' means in practice. An agent must infer that this is the general read path for records without any explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fm_run_scriptC

Execute a FileMaker script

ParametersJSON Schema
NameRequiredDescriptionDefault
layoutYesLayout context
scriptYesScript name
databaseYesDatabase identifier
parameterNoScript parameter

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and discloses nothing: it does not say whether the script can mutate records, whether it is read-only or destructive, what permissions are required, or how errors are surfaced. For a tool that runs arbitrary server-side scripts, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short, front-loaded sentence with no filler. It is efficient, though the brevity stems partly from under-specification rather than disciplined conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter, mutation-capable tool with no annotations and no output schema, the description omits side effects, return behavior, and error handling. An agent has almost nothing to rely on beyond the parameter names.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so layout, script, database, and parameter are each documented in the schema; the baseline of 3 applies. The description adds no extra meaning, such as how the script parameter is passed or how the layout context affects execution.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Execute) and resource (FileMaker script), so the agent knows exactly what action is performed. It does not differentiate from any sibling or clarify scope, but the action itself is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus the sibling data tools (query_records, create_record, update_record, etc.), nor any mention of prerequisites such as needing a valid layout context or which scripts are available. Usage is inferred purely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fm_test_connectionC

Test connection to a FileMaker database

ParametersJSON Schema
NameRequiredDescriptionDefault
databaseYesDatabase identifier to test

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing about auth requirements, timeouts, failure semantics, or what a 'successful' test means. It restates the name without adding behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no waste, front-loaded with the action. Brevity here is appropriate to a one-parameter tool, though it is under-specified rather than maximally informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should explain what the tool returns (success/failure signal, error detail). It leaves the agent unable to anticipate results or failure modes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter, fully documented in the schema (100% coverage) and constrained by an enum. The description adds no syntax or meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: testing a connection to a FileMaker database. It is clearly distinguishable in intent from siblings like fm_query_records or fm_run_script, though it never explicitly names a sibling or scoping condition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives. The agent must infer that this is a pre-flight/health-check tool rather than something to run as part of normal data flow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fm_update_recordC

Update an existing record

ParametersJSON Schema
NameRequiredDescriptionDefault
layoutYesLayout name
databaseYesDatabase identifier
recordIdYesFileMaker record ID
fieldDataYesField data to update

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: it does not say whether the update is partial or full-replace, what happens to fields omitted from fieldData, whether it requires write permission, or whether it is reversible. For an unannotated mutation tool with a nested object parameter, this is a substantial gap. The single word 'Update' only implies mutation, which the name already conveyed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with zero filler; the action and resource come first. It is efficient, though the terseness borders on under-specification given the tool's four required parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation tool with a nested object (fieldData), no annotations, and no output schema, the description is far too thin. Although the schema covers parameter names and types, nothing explains update semantics, merge behavior, permissions, or failure modes, which an agent invoking a write operation needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (database, layout, recordId, fieldData) are already documented in the schema and the baseline is 3. The description adds nothing about fieldData's partial-update semantics or the significance of recordId, so it does not exceed the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb ('Update') with a specific resource ('existing record'), so an agent can distinguish it from fm_create_record and fm_delete_record by the verb alone. It stops short of differentiating from siblings by scope or behavior, and gives no hint of what 'existing' requires beyond the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus fm_create_record, fm_query_records, or fm_run_script. No prerequisites, no exclusions, no context about when an update is the right call. The agent must infer everything from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv1.0.0
    • First observedfm_clear_cache
    • First observedfm_create_record
    • First observedfm_delete_record
    • First observedfm_get_layout_metadata
    • First observedfm_get_metadata
    • First observedfm_get_scripts
    • First observedfm_list_databases
    • First observedfm_query_records
    • First observedfm_run_script
    • First observedfm_test_connection
    • First observedfm_update_record

TDQS

B3/5.0

Scored across 11 tools

Disambiguation4/5

Most tools have clearly distinct purposes: record CRUD, script execution, connection testing, and cache clearing are unambiguous. The only mild overlap is between fm_get_metadata (database-level layouts/tables overview) and fm_get_layout_metadata (detailed metadata for a specific layout), but descriptions make the boundary reasonably clear.

Naming Consistency5/5

All tools use a consistent fm_ prefix followed by a verb_noun snake_case pattern (e.g. fm_list_databases, fm_run_script, fm_create_record). No mixed conventions or vague imperative names.

Tool Count5/5

Eleven tools is well-scoped for a FileMaker integration: it covers connection, discovery, metadata, scripts, and record lifecycle without excessive granularity. Each tool appears to earn its place.

Completeness4/5

The set covers core record CRUD (create, query, update, delete), connection testing, database listing, script execution/listing, and metadata retrieval. A minor gap is the absence of a direct get-by-id record tool, though fm_query_records can retrieve records with filtering.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Provides AI agents with direct access to FileMaker databases through the FileMaker Data API, enabling natural language interactions for querying, managing records, and database introspection.
    28
    6 npm
    3
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables direct interaction with Microsoft Dataverse from Claude Desktop, supporting full CRUD, bulk operations, FetchXML queries, actions, and metadata discovery.
    20
    -
  • A
    license
    B
    quality
    D
    maintenance
    An MCP server that connects Claude to FileMaker databases via the Data API, enabling natural language queries, record management, layout exploration, and script execution.
    11
    MIT