loading…
Search for a command to run...
loading…
MCP server for FileMaker Server OData 4.01 API integration, enabling AI assistants to discover databases, perform CRUD operations, and manage connections.
MCP server for FileMaker Server OData 4.01 API integration, enabling AI assistants to discover databases, perform CRUD operations, and manage connections.
Model Context Protocol (MCP) server providing FileMaker Server OData 4.01 API integration for AI assistants like Claude Desktop, Windsurf, Cursor, and Cline.
# Via NPM (recommended)
npm install -g filemaker-odata-mcp
# Or local development
git clone https://github.com/fsans/FMS-ODATA-MCP.git
cd FMS-ODATA-MCP
npm install
npm run build
For use with AI assistants that support MCP (Claude Desktop, Windsurf, Cursor, Cline).
Locate your Claude config file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonAdd the MCP server:
{
"mcpServers": {
"filemaker": {
"command": "npx",
"args": ["-y", "filemaker-odata-mcp"],
"env": {
"FM_SERVER": "https://your-filemaker-server.com",
"FM_DATABASE": "YourDatabase",
"FM_USER": "your-username",
"FM_PASSWORD": "your-password",
"FM_VERIFY_SSL": "true"
}
}
}
}
For self-signed SSL certificates, set FM_VERIFY_SSL to "false"
Restart Claude Desktop
The server will be automatically detected when installed globally. For local development, add to your MCP config.
Run as a standalone HTTP server accessible from any application:
# Set environment variables for HTTP mode
export MCP_TRANSPORT=http
export MCP_PORT=3333
export MCP_HOST=0.0.0.0 # Listen on all interfaces
# Run the server
filemaker-odata-mcp
The server will start on http://localhost:3333 with the following endpoints:
http://localhost:3333/mcp (POST requests with JSON-RPC 2.0)http://localhost:3333/healthhttp://localhost:3333/mcp (GET request)curl -X POST http://localhost:3333/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}'
export MCP_TRANSPORT=https
export MCP_PORT=3443
export MCP_CERT_PATH=/path/to/cert.pem
export MCP_KEY_PATH=/path/to/key.pem
Python Example:
import requests
# List available tools
response = requests.post("http://localhost:3333/mcp", json={
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
})
tools = response.json()
# Query records
response = requests.post("http://localhost:3333/mcp", json={
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "fm_odata_query_records",
"arguments": {
"table": "Contacts",
"filter": "City eq 'New York'"
}
}
})
JavaScript Example:
// Connect to FileMaker
const response = await fetch('http://localhost:3333/mcp', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'tools/call',
params: {
name: 'fm_odata_connect',
arguments: {
server: 'https://your-server.com/fmi/odata/v4',
database: 'Contacts',
user: 'admin',
password: 'secret',
verifySsl: false
}
}
})
});
start.sh (Recommended)The included start.sh script handles building, credential injection from .env, and container lifecycle:
git clone https://github.com/fsans/FMS-ODATA-MCP.git
cd FMS-ODATA-MCP
cp .env.example .env
# Edit .env with your FileMaker credentials and set MCP_TRANSPORT=http, MCP_HOST=0.0.0.0
./start.sh
The script will build TypeScript, build the Docker image, remove any existing container, and start a fresh one. Logs are tailed automatically.
# Clone and build
git clone https://github.com/fsans/FMS-ODATA-MCP.git
cd FMS-ODATA-MCP
npm run build
docker build -t filemaker-odata-mcp:latest .
# Run the container
docker run -d \
--name filemaker-odata-mcp \
-p 3333:3333 \
-e FM_SERVER=https://your-filemaker-server.com \
-e FM_DATABASE=YourDatabase \
-e FM_USER=your-username \
-e FM_PASSWORD=your-password \
-e FM_VERIFY_SSL=false \
-e MCP_TRANSPORT=http \
-e MCP_HOST=0.0.0.0 \
-v ~/.fms-odata-mcp:/home/mcp/.fms-odata-mcp \
filemaker-odata-mcp:latest
Important: Set
MCP_HOST=0.0.0.0when running in a container. Usinglocalhostbinds only to the container's loopback interface and makes the port unreachable from outside.
git clone https://github.com/fsans/FMS-ODATA-MCP.git
cd FMS-ODATA-MCP
npm run build
cp docker-compose.yml my-docker-compose.yml
# Edit my-docker-compose.yml with your FileMaker credentials
docker-compose -f my-docker-compose.yml up -d
# Start with Nginx reverse proxy for HTTPS
docker-compose -f docker-compose.yml --profile https up -d
Place your SSL certificates in the ./ssl directory:
ssl/cert.pem - SSL certificatessl/key.pem - SSL private keyOnce running, access the server at:
http://localhost:3333https://localhostCheck the health endpoint:
curl http://localhost:3333/health
To use this server as an MCP tool in Dify:
streamable_httphttp://host.docker.internal:3333/mcp (if Dify runs in Docker on the same host)Note: If Dify returns a 403 error, check your SSRF proxy configuration. Dify uses a Squid proxy to prevent SSRF attacks — port 3333 must be added to the
Safe_portsACL insquid.conf.
Once connected, try these prompts in Claude:
What tables are in my FileMaker database?
Show me the first 5 records from the Contacts table
Find all contacts where LastName equals "Smith"
Create a new contact with name "John Doe" and email "[email protected]"
| Category | Tools |
|---|---|
| Discovery | fm_odata_list_tables, fm_odata_get_metadata, fm_odata_get_service_document |
| Queries | fm_odata_query_records, fm_odata_get_record, fm_odata_get_records, fm_odata_count_records |
| CRUD | fm_odata_create_record, fm_odata_update_record, fm_odata_delete_record |
| Connection | fm_odata_connect, fm_odata_set_connection, fm_odata_list_connections, fm_odata_get_current_connection |
| Config | fm_odata_config_add_connection, fm_odata_config_remove_connection, fm_odata_config_list_connections |
| Variable | Description | Required | Default |
|---|---|---|---|
FM_SERVER |
FileMaker Server URL | Yes | - |
FM_DATABASE |
Database name | Yes | - |
FM_USER |
Username | Yes | - |
FM_PASSWORD |
Password | Yes | - |
FM_VERIFY_SSL |
Verify SSL certificates | No | true |
FM_TIMEOUT |
Request timeout (ms) | No | 30000 |
| Variable | Description | Required | Default |
|---|---|---|---|
MCP_TRANSPORT |
Transport type: stdio, http, or https |
No | stdio |
MCP_PORT |
Port for HTTP/HTTPS server | No | 3333 (HTTP), 3443 (HTTPS) |
MCP_HOST |
Host to bind to | No | localhost |
MCP_CERT_PATH |
Path to SSL certificate (HTTPS only) | No | - |
MCP_KEY_PATH |
Path to SSL private key (HTTPS only) | No | - |
The server supports OData 4.01 query options:
$filter - Filter records (e.g., "Age gt 18")
$select - Select specific fields
$orderby - Sort results
$top - Limit results
$skip - Skip records (pagination)
$expand - Include related records
$count - Include total count
Example prompts:
Get contacts where Age is greater than 18
Show only Name and Email fields from Contacts
Sort contacts by LastName in descending order
Get the first 10 contacts, skip the first 20
See CONTRIBUTING.md for development guidelines.
MIT License - see LICENSE file for details.
See dev_stuf/VERSIONING.md for version history.
Made with ❤️ for the FileMaker and AI communities
Выполни в терминале:
claude mcp add filemaker-odata-mcp -- npx Безопасность
Низкий рискАвтоматическая эвристика по публичным данным — не гарантия безопасности.