mcp服务器文件生成器
主控程序 通过OData v4 API让AI助手直接访问FileMaker数据库的服务器。
适用于任何兼容MCP的客户端: 克劳德代码, 克劳德桌面, 光标, 帆板运动, Continue.dev, 泽德以及其他。
跑 基于前提 --无需云代理,也不需要Claris ID。
MCP Client ──stdio──▶ MCP Server (Node.js) ──OData v4 / HTTPS──▶ FileMaker Server特性
- 20工具 --CRUD、脚本、模式自检、批处理请求、测试和验证
- OData V4 -直接表访问(不像Data API那样基于布局)
- API数据桥 --设置全局字段并使用会话上下文运行脚本
- 工具限制 --通过以下方式禁用每个数据库的危险工具
FM_DISABLED_TOOLS - 零依赖 超越MCP SDK和Zod
先决条件
- FileMaker服务器 启用OData访问(管理控制台→ 连接器→ OData)
- 专注的 API用户 具有扩展特权
fmodata - 对于数据API工具(
fm_set_globals,fm_run_script_with_globals):也fmrest - 具有有效证书的HTTPS --自签名证书是 不 支持
安装
git clone https://github.com/JoergKoester/mcp-server-filemaker.git
cd mcp-server-filemaker
npm install
npm run build配置
将服务器添加到MCP客户端配置中。对于Claude Code和Claude Desktop,编辑 ~/.mcp.json:
{
"mcpServers": {
"filemaker": {
"command": "node",
"args": ["/absolute/path/to/mcp-server-filemaker/dist/index.js"],
"env": {
"FM_HOST": "https://your-filemaker-server.example.com",
"FM_DATABASE": "YourDatabase",
"FM_USERNAME": "api_user",
"FM_PASSWORD": "your_password",
"FM_ODATA_VERSION": "v4",
"FM_TIMEOUT_MS": "15000",
"FM_RETRY_COUNT": "2",
"FM_DISABLED_TOOLS": "",
"FM_DEBUG": "false"
}
}
}
}环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
FM_HOST | 是 | 带协议的FileMaker服务器URL,例如。 https://fms.example.com |
FM_DATABASE | 是 | 数据库名称 |
FM_USERNAME | 是 | API用户(需要扩展权限 fmodata) |
FM_PASSWORD | 是 | 密码 |
FM_ODATA_VERSION | 无 | OData版本,默认 v4 |
FM_TIMEOUT_MS | 否 | HTTP请求超时(毫秒),默认值 15000 |
FM_RETRY_COUNT | 否 | 临时故障重试尝试(429/503),默认值 2 (套 0 禁用) |
FM_DISABLED_TOOLS | 否 | 要禁用的逗号分隔工具名称 |
FM_DEBUG | 没有 | true 将完整的工具参数记录到stderr(可能包括记录数据) |
多个数据库
每个数据库运行一个服务器实例:
{
"mcpServers": {
"filemaker-app": {
"command": "node",
"args": ["/path/to/dist/index.js"],
"env": {
"FM_HOST": "https://fms.example.com",
"FM_DATABASE": "MyApp",
"FM_USERNAME": "api_user",
"FM_PASSWORD": "secret",
"FM_DISABLED_TOOLS": "fm_create_table,fm_add_field"
}
},
"filemaker-data": {
"command": "node",
"args": ["/path/to/dist/index.js"],
"env": {
"FM_HOST": "https://fms.example.com",
"FM_DATABASE": "MyData",
"FM_USERNAME": "api_user",
"FM_PASSWORD": "secret",
"FM_DISABLED_TOOLS": "fm_create_table,fm_add_field,fm_delete_record"
}
}
}
}工具
结构和元数据
| 工具 | 说明 |
|---|---|
fm_get_service_document | 列出所有表格 |
fm_get_metadata | 完整的EDMX架构(字段、类型、关系) |
fm_introspect | 具有本机FM类型的表概述或字段详细信息 |
数据访问
| 工具 | 说明 |
|---|---|
fm_query | 查询记录 $filter, $select, $top, $orderby, $expand, $count |
fm_get_record | ROWID的单一记录 |
fm_create_record | 创建新记录 |
fm_update_record | 更新记录(PATCH) |
fm_delete_record | 按ROWID删除记录 |
脚本和架构
| 工具 | 说明 |
|---|---|
fm_run_script | 执行FileMaker脚本 |
fm_create_table | 创建新表 |
fm_add_field | 添加字段(SQL样式类型: VARCHAR(n), INT, NUMERIC, DATE等等) |
fm_batch | 在一次HTTP调用中批处理多个OData请求 |
数据API(会话上下文)
| 工具 | 说明 |
|---|---|
fm_set_globals | 设置全局字段(登录→ PATCH/全球→ 注销) |
fm_run_script_with_globals | 在一个会话中设置全局变量+运行脚本 |
测试与验证
| 工具 | 说明 |
|---|---|
fm_create_test_record | 创建标记的测试记录 |
fm_cleanup_test_data | 删除与测试标记匹配的所有记录 |
fm_assert_record | 验证字段值(通过/失败,带差异) |
fm_assert_count | 断言查询的记录计数 |
fm_run_script_and_assert | 运行脚本并检查结果代码 |
工具限制
通过以下方式禁用每个数据库实例的工具 FM_DISABLED_TOOLS:
FM_DISABLED_TOOLS=fm_create_table,fm_add_field,fm_delete_record- 禁用的工具在工具列表中隐藏 和 执行时被阻止(双重保护)
- 服务器启动显示
Tools: 17/20并列出禁用的工具 - 建议:始终禁用
fm_create_table和fm_add_field生产数据库
建筑
4个文件 src/:
| 文件 | 责任 |
|---|---|
index.ts | 入口点、环境配置、STDIO传输、工具路由 |
odata-client.ts | 用于所有OData v4请求(CRUD、脚本、模式、批处理)的HTTP客户端 |
data-api-client.ts | FileMaker Data API的HTTP客户端(全局、会话范围的脚本) |
tools.ts | MCP工具定义(Zod模式)、处理程序逻辑、测试工具 |
服务器是 瘦代理 --没有缓存。每个OData请求都使用基本身份验证;数据API工具管理自己的会话(登录→ 行动→ 注销)。OData客户端以指数回退重试瞬态失败(HTTP 429/503);数据API客户端当前不重试。
安全说明
- stdio传输没有自己的身份验证 -任何可以启动进程的人都可以使用API用户的权限完全访问配置的FileMaker数据库。凭据位于MCP客户端配置中(例如。
~/.mcp.json)并且仅受文件系统权限的保护。在多用户环境中,相应地保护服务器进程和配置文件。 - stderr的启动日志 包括配置的主机、数据库和 用户名 (没有密码,没有API密钥)。如果敏感,请适当重定向stderr。
FM_DEBUG=true记录对stderr的每次工具调用的完整参数,其中可能包含来自FileMaker数据库的记录数据。在生产中不要这样做。- OData
$filter价值观 传递给fm_query逐字放入查询字符串中。转义单引号('→'')在字符串文字中,请注意包含URL保留字符的值(#,+,%)可能会破坏请求。
发展
npm run dev # Run with tsx (no build needed)
npm run watch # Watch mode
npm run build # Compile TypeScript → dist/
npm start # Run compiled versionOData API参考
| 操作 | 方法 | 端点 |
|---|---|---|
| 服务文档 | GET | /fmi/odata/v4/{db} |
| 元数据(EDMX) | 获取 | /fmi/odata/v4/{db}/$metadata |
| 读取记录 | GET | /fmi/odata/v4/{db}/{table}?$filter=... |
| 创建记录 | POST | /fmi/odata/v4/{db}/{table} |
| 更新记录 | PATCH | /fmi/odata/v4/{db}/{table}({rowId}) |
| 删除记录 | 删除 | /fmi/odata/v4/{db}/{table}({rowId}) |
| 运行脚本 | POST | /fmi/odata/v4/{db}/Script.{scriptName} |
| 创建表 | POST | /fmi/odata/v4/{db}/FileMaker_Tables |
| 添加字段 | PATCH | /fmi/odata/v4/{db}/FileMaker_Tables/{table} |
| 批次 | POST | /fmi/odata/v4/{db}/$batch |
人工智能生成的实验项目
这个MCP服务器几乎完全是在生成式人工智能系统的帮助下生成的,到目前为止只经过了有限的人工审查。它被提供 照原样,不保证正确性、安全性或适用于特定目的。使用它的风险由您自己承担,在将其用于生产之前,请务必彻底审查和测试代码。
此存储库中的代码根据MIT许可证获得许可。通过使用它,您同意作者和版权持有人不对因使用它而产生的任何索赔、损害或其他责任负责,如许可证中所述。
许可证
麻省理工学院
