Skip to content

AI assistants (MCP)

ioPix, ioNotes, ioCalendar and ioContacts are also Model Context Protocol servers, at /mcp on their own port, so an assistant such as Claude can work with them as you: explore and search the photo library, search and write notes, read the agenda and add events, find contacts and file suggestions for them, and, for admins, check the server's health. ioHealth and the ioSuite start page have no MCP server.

Turn it on

MCP is off on a fresh install. An admin turns it on per app under Settings › Server (or MCP=1 in config.env); while off, /mcp doesn't answer at all.

Connect an assistant

Every assistant signs in with an app password (Settings › Account › App passwords, scope "everything") and acts as that account, with its rights:

claude mcp add --transport http iocalendar https://calendar.example.com/mcp \
  --header "Authorization: Bearer APP-PASSWORD"
claude mcp add --transport http iopix https://photos.example.com/mcp \
  --header "Authorization: Bearer APP-PASSWORD"

Add one per app you want the assistant to use. On a home network without HTTPS, use http://<host>:<port>/mcp.

For Claude Desktop on a computer in your network, use the mcp-remote bridge in claude_desktop_config.json (it needs Node.js):

{
  "mcpServers": {
    "iocalendar": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://calendar.example.com/mcp",
               "--header", "Authorization: Bearer APP-PASSWORD"]
    }
  }
}

On the server itself, .venv/bin/python -m app.mcp --user NAME serves the same tools over stdio.

Be careful with admin app passwords

The tools for operating an app (diagnostics, the server log, installing an update) need an admin. An admin's app password can install code on the server: treat it like a root password, and revoke it when in doubt. For an assistant that only needs to read and write your own data, use an app password of a non-admin account.

Behind a reverse proxy, /mcp must not be buffered; behind Cloudflare Access, it needs a bypass rule. See Reverse proxy and HTTPS and Cloudflare.