Ailimu.

Install

Ailimu ships as one container. It needs a FileMaker Server it can reach and an account it can sign in as.

Before you start

Create a dedicated FileMaker account for Ailimu rather than reusing a person's. Give it a privilege set that can see only what you are willing to expose: Ailimu is another client and your privilege set still governs it, so this is your strongest control.

That account's privilege set needs extended privileges:

Extended privilege Needed for
fmodata Reading tables. This is the default and the better choice: real field types, declared keys, relationships and your field comments.
fmrest Scripts, and the layout list they run against. Also the fallback way of reading data, through layouts.

Enable both if you intend to expose scripts. If you only want to read tables, fmodata alone is enough.

Reading through layouts instead of tables. The Data API sees only fields placed on a layout, and returns the literal text <No Access> for fields the account cannot reach through it. On one large file that meant 4,352 fields of which 85% were unreadable, against 2,099 readable fields over OData. Use OData unless it is unavailable to you.

Run it

docker pull ailimu/ailimu:latest

Create a .env beside your compose file:

FM_USER=ailimu
FM_PASS=your-filemaker-password

Those two are the only required settings. Credentials are read from the environment and are never written to the config file, so they stay out of your backups. See the reference for the rest.

docker-compose.yml:

services:
  ailimu:
    image: ailimu/ailimu:latest
    ports:
      - "8081:8081"
    env_file:
      - path: .env
        required: false
    volumes:
      - ailimu-config:/config
    restart: unless-stopped
volumes:
  ailimu-config:
docker compose up -d
docker compose logs

The connector prints where to go:

ailimu up on :8081

  Setup wizard:  http://localhost:8081/admin/?token=YOUR-ADMIN-TOKEN
  MCP endpoint:  http://localhost:8081/mcp  (or /mcp/<profile>)
  MCP token:     YOUR-MCP-TOKEN

Open that wizard URL. The token in it guards the wizard: anyone with it can change what is exposed, so treat it as a password.

About that volume

/config holds everything that survives a restart:

Path What
profiles/<slug>.json One published profile per FileMaker file.
schema/<slug>.json The last discovery, cached so opening a profile is instant. Shape only: no record values.
tokens.json The generated admin and per-profile tokens, mode 0600.
audit.log One line per write or script call.

Back it up and you can rebuild an install without redoing the setup. Lose it and the tokens are regenerated, which invalidates the config you gave Claude.

Tokens

Set ADMIN_TOKEN and MCP_TOKEN yourself if you want stable values. Leave them unset and the connector generates them on first boot and persists them to the volume, so a container recreate does not invalidate a saved Claude config. Environment always wins.

Upgrading

docker compose pull && docker compose up -d

Your profiles and cached schemas are on the volume and survive. A setup written before profiles existed is migrated automatically the first time the new version reads it: it becomes a profile named after the file, and the old file is renamed rather than deleted.