Jefi Mail · Integrations
Jefi Mail, from anywhere on your Mac.
Search your mail from a launcher, start a message from a Shortcut, read today’s agenda in a script, or let an AI app look something up. Everything here runs on your Mac and needs Jefi Mail 0.7.1 or later. Anything that writes opens in Jefi Mail for you to check first: nothing outside Jefi Mail sends mail.
Tinycast & Raycast
The Jefi extension runs in both Tinycast and Raycast. It reads through Jefi’s command line and acts by opening jefi:// links, so drafts, events and notes open in Jefi for you to finish.
| Command | What it does |
|---|---|
| Search Mail | Search with Jefi’s syntax; ↵ opens the conversation in Jefi |
| Inbox | Your inbox, unread first |
| Today | Today’s events and invitations; ⌘J joins the meeting |
| Compose Email | A form that opens a prefilled draft in Jefi |
| Quick Add Event | “Lunch with Nora Friday 1pm” → Jefi’s event editor |
| Create Note | A form that opens a prefilled note in Jefi |
| Search Notes | Recent notes, or notes matching the query |
| Unread Mail | Menu bar: unread count and your next event |
Install in Tinycast
- In Tinycast’s Settings → Extensions, click Registries…, then Add Registry…, and add the GitHub repository
algolab-cloud/jefi-extensions. - Click Search…, find Jefi and install it.
Tinycast builds registry extensions itself, so it needs Node and a package manager (npm, pnpm, Bun or Yarn) on your Mac. Unread Mail needs a Tinycast with menu bar commands (0.11.4 beta at the time of writing); turn on Show in menu bar in the command’s settings. The step-by-step guide has screenshots of each step.
Raycast
The extension is coming to the Raycast Store; it’s waiting for review. Until it’s listed, you can run it from the source:
git clone https://github.com/algolab-cloud/jefi-extensions
cd jefi-extensions/extensions/jefi
npm install
npm run devnpm run dev loads the extension into Raycast, and it stays there after you stop it. The source is at github.com/algolab-cloud/jefi-extensions.
jefi:// links
Every link opens Jefi and takes it somewhere. Use them as Tinycast or Raycast quicklinks, in Shortcuts (“Open URLs”), or from a script with open "jefi://…". Values in the query are URL-encoded.
| Link | Opens |
|---|---|
jefi://inbox/<accountId>jefi://inbox | Opens Jefi at the inbox, or one account’s inbox |
jefi://thread/<threadId> | Opens a conversation |
jefi://compose?to=&cc=&bcc=&subject=&body=&account=jefi://compose?to=nora%40example.com&subject=Friday%20lunch | A new message, prefilled. You press Send |
jefi://search?q=jefi://search?q=from%3Anora%20invoice | Searches mail, same syntax as the app |
jefi://calendar?date=YYYY-MM-DD&view=day|week|month|agendajefi://calendar?date=2026-10-02&view=week | Calendar, on a day and view |
jefi://event/<eventId>?start=<ms> | An event (one occurrence with start) |
jefi://new-event?title=&start=&end=&allDay=1&location=¬es=jefi://new-event?title=Standup&start=2026-10-02T09%3A30%3A00%2B02%3A00&end=2026-10-02T09%3A45%3A00%2B02%3A00 | The event editor, prefilled. You save |
jefi://quick-add?text=jefi://quick-add?text=Lunch%20with%20Nora%20Friday%201pm | The event editor, filled in from a sentence |
jefi://notes · jefi://note/<noteId>jefi://notes | Notes, or one note |
jefi://new-note?title=&body=jefi://new-note?title=Ideas&body=Start%20here | A new note, prefilled |
jefi://settings/<section>jefi://settings/ai | Settings, or one section (e.g. ai, calendar, menubar) |
open "jefi://quick-add?text=Lunch%20with%20Nora%20Friday%201pm"A link only ever prepares things. A compose link opens a draft; you press Send. Jefi doesn’t take over mailto: links either, so your default mail app stays your choice.
Command line
Jefi’s own executable has a read-only command line. It never opens a window and never changes anything.
/Applications/Jefi.app/Contents/MacOS/Jefi cli <command> [--json]| Command | Shows |
|---|---|
accounts | Your accounts |
unread | Unread count in each inbox |
search <query> [--limit 20] [--account <id>] | Search mail, newest first |
inbox [--limit 30] [--account <id>] | The inbox |
thread <threadId> | A conversation, as plain text |
today · agenda [--days 7] | Today’s events, or the days ahead |
events --from <ISO> --to <ISO> | Events in a range |
invites | Invitations awaiting your reply |
notes [--limit 30] [--query <q>] | Recent or matching notes |
note <noteId> | One note |
version | Jefi’s version |
Without --json you get a short plain listing; with it, JSON for scripts. Errors exit with code 1. For example (made-up data):
Jefi cli today
2026-10-02 09:30-09:45 Standup (Room 2)
https://meet.google.com/abc-defg-hij
2026-10-02 13:00-14:00 Lunch with Nora (Café Lina)Jefi cli unread --json
{
"total": 7,
"accounts": [
{ "id": "a1", "email": "you@example.com", "unread": 5 },
{ "id": "a2", "email": "you@work.example", "unread": 2 }
]
}AI apps (MCP)
Jefi can act as an MCP server, so AI apps like Claude Desktop, Codex and Tinycast can search and read your mail, calendar and notes. It’s off by default. Turn it on in Settings → Integrations → Allow AI apps to read Jefi (MCP); Settings then shows the setup for each app.
- AI apps can search mail, read conversations, list events and invitations, and search and read notes.
- When an AI app wants to write, Jefi opens a draft, an event or a note, filled in, for you to review. No tool sends, deletes or moves anything.
- It runs as a local process the AI app starts. There is no network port.
- Be aware: what the AI app reads from Jefi goes to that app’s AI provider, under that provider’s terms. Jefi can’t see or limit what happens after that.
Claude Desktop
Settings → Developer → Edit Config (claude_desktop_config.json)
{
"mcpServers": {
"jefi": {
"command": "/Applications/Jefi.app/Contents/MacOS/Jefi",
"args": [
"mcp"
]
}
}
}Codex
~/.codex/config.toml
[mcp_servers.jefi]
command = "/Applications/Jefi.app/Contents/MacOS/Jefi"
args = ["mcp"]Tinycast and other MCP apps
Add a local (stdio) server with this command
/Applications/Jefi.app/Contents/MacOS/Jefi mcpIf you keep Jefi somewhere other than /Applications, change the path to match; Settings shows the exact one.