mora
Experimental local-first memory CLI for MCP agents: read-only Gmail, calendars, iMessage, and files → cited local context
Install / Use
claude mcp add pyranthus-hq -- npx -y github:pyranthus-hq/moraIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
Data & AnalyticsSupported Platforms
Our assessment of mora
mora scores 84/100 on our quality scale, 463rd of 598 Data & Analytics skills we index.
Its MCP Server is 18 KB long, well organised into 21 sections with 21 code examples: a thorough specification that gives an agent plenty to work with.
It has 10 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 2 days ago, so mora is actively maintained.
- Our last check on 2026-09-14 found the source still online.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 97/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
mora compared with similar skills
All 4 of these similar skills score higher than mora; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| mora (this skill)by pyranthus-hq | 84 | 10 | 2d ago | MCP Server |
| claude-memby thedotmack | 100 | 103.1k | today | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 102.4k | today | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 77.8k | 1d ago | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.6k | today | CLAUDE.md |
Frequently asked questions
- How do I install mora?
- Run
claude mcp add pyranthus-hq -- npx -y github:pyranthus-hq/mora. The install tabs above show the steps for each supported agent. - Which AI agents does mora work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is mora safe to use?
- It is Apache-2.0-licensed and scores 97/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is mora still maintained?
- The repository was last updated 2 days ago, so mora is actively maintained.
Skill content
View source on GitHubMora
Search your mail, messages, calendars, files, and GitHub issues from one place on your computer.
</div>[!WARNING] Mora is alpha software. We use it every day, and its main paths have tests. It has not been tested on many other people's real data. Read the cited source before you act on a result. A failed or old sync can make the local copy stale.
Mora reads the sources you choose and saves copies as Markdown files on your computer. You can search them yourself or let an AI agent search them through MCP (a way for an agent to call local tools). Mora supports:
- Gmail
- Google Calendar
- iMessage on macOS
- WhatsApp Desktop on macOS
- Apple Calendar on macOS
- folders and files that you choose
- GitHub Issues from repositories that you choose
The source connectors do not change the original mail, messages, events, or issues. Mora builds a SQLite index on your computer so searches are fast. Claude Code, Codex, and other MCP clients can use the same saved data.
Mora does not call an AI model by default. It finds source records and builds briefs that link back to them. Your agent can then write an answer from that evidence. If you want, a local Ollama model can improve search.
Jump to: Install · Add a source · Connect an agent · Update · Privacy
<p align="center"> <img src="docs/assets/architecture.svg" width="760" alt="Read-only sources flow into a local Markdown vault and SQLite index, then into any MCP client. Backup and sharing are optional network paths."/> </p>Start on macOS
You need macOS and Homebrew for this route. The Cask
installs the signed Mora.app and adds the mora command:
brew tap pyranthus-hq/tap
brew install --cask pyranthus-hq/tap/mora
mora version
This app contains the memory CLI. It does not include the separate desktop companion. If Mora is already installed, read the migration steps before using Brew.
If you do not use Homebrew, install the same signed app directly in
~/Applications/Mora.app:
(
set -e
mora_installer="$(mktemp -t mora-install)"
trap '/bin/rm -f "$mora_installer"' EXIT
curl -fsSLo "$mora_installer" https://raw.githubusercontent.com/pyranthus-hq/mora/main/install-app.sh
sh "$mora_installer"
)
The direct installer checks the release and links mora to the app. Neither
install method sets up connectors or a daily update job. See
Keep Mora up to date when you are ready.
Other systems
Linux and older standalone installs can use:
curl -fsSL https://raw.githubusercontent.com/pyranthus-hq/mora/main/install.sh | sh
Windows users should see the Windows guide. To build from source with Go 1.25 or later:
go install github.com/pyranthus-hq/mora/cmd/mora@latest
Source builds report version dev. They do not update themselves. Google also
needs your own OAuth client when you build from source.
Add your first source
A folder is the quickest way to check that Mora works. It needs no account
login. Replace ~/Documents/notes with a folder you choose:
mora init
mora connect filesystem ~/Documents/notes
mora search "a project or person"
After you connect a source, try searching for a decision or asking your agent “What is on my calendar next week?” Search reads saved data. Writing a new memory is a separate action controlled by your MCP write policy.
Then add only the sources you want:
mora connect google # Gmail and Google Calendar
mora connect github --repo owner/repository # GitHub Issues
mora connect imessage # macOS; needs Full Disk Access
mora connectors enable whatsapp # macOS; local read-only store
mora ingest run --source whatsapp
For Apple Calendar:
mora connectors enable applecalendar
mora ingest run --source applecalendar
Setup commands do different jobs:
| Command | What it does |
| --- | --- |
| connect | Sets up a source, enables it, and gets its first data. |
| connectors enable | Gives Mora permission to use a connector. It does not promise a data pull. |
| ingest run | Reads enabled sources and writes their current data into the vault. Use it for a first load or a backfill. |
| sync | Refreshes a source that is already set up. |
Connect an AI agent
claude mcp add mora -s user -- mora mcp serve
codex mcp add mora -- mora mcp serve
Other MCP clients can start the same command:
{
"mcpServers": {
"mora": { "command": "mora", "args": ["mcp", "serve"] }
}
}
MCP tools cover search, reading, writing, briefs, meetings, and people. The command line also handles setup and maintenance.
Mora also publishes an experimental Agent Plugins 1.0 package
that bundles the stdio MCP declaration with portable Agent Skills. It does not
install Mora, grant source permissions, or sandbox the client. Enabling it may
auto-start the local MCP server, so review the client's data policy before first
use. Unless you set a policy, Mora runs in propose, so agent writes wait for
your approval. That holds however the server starts, including a client that
auto-starts mora mcp serve before you ever run mora init.
Check health and add a schedule
mora doctor
mora schedule install ingest-hourly
mora schedule install pulse-daily
mora schedule list
On macOS, jobs from a signed app launch through Mora.app. This lets macOS use
the app's Full Disk Access identity. Mora records its own sync result because
the macOS app launcher does not return the inner command's exit code.
Full Disk Access on macOS
iMessage, WhatsApp, and Apple Calendar are local, but macOS still protects their files. Mora cannot grant this permission for you.
- Install the signed
Mora.appfirst. - Open System Settings.
- Open Privacy & Security, then Full Disk Access.
- Press + and choose
/Applications/Mora.appfor a Homebrew install, or~/Applications/Mora.appfor a direct install. Press Command-Shift-G to enter the path if needed. - Turn Mora on. If macOS asks, quit and reopen the app or terminal.
- Run
mora doctor. - Run
mora sync imessage,mora sync whatsapp, ormora sync applecalendar.
If an old Mora entry is present, keep it until the new app passes mora doctor
and a protected sync. Then remove the old entry yourself. After an update,
repeat those checks and grant access again if macOS asks. Never replace only
the executable inside Mora.app; that breaks its signature. The
guide covers older installations.
Ask an agent to set it up
Copy this prompt into an agent that can run local shell commands:
Install Mora from the official pyranthus-hq/mora repository and set up a small,
safe first run. On macOS, use the signed Mora.app Homebrew Cask, or the direct
signed-app installer if I do not use Homebrew. Verify `mora version` and run
`mora doctor`. Ask me before any Google
OAuth approval, GitHub token use, Full Disk Access change, backup, sharing, or
schedule install. Do not say you clicked or approved a system screen. I will do
those steps myself. Start with one folder that I choose, connect it, run a test
search, then offer to wire `mora mcp serve` into my agent. Report every command,
what it changed, and any check that did not pass.
Use Mora every day
mora brief # what changed and what matters
mora search "What is open with Sam?" # direct recall
mora think "What did we decide about pricing?" # evidence plus gaps for an agent
mora write --scope project:acme --type decision \
--title "OAuth" --text "Use PKCE." # save a decision
mora brief --event-id calendar_event/abc # cited meeting prep
mora tasks list # open local tasks
mora doctor # source and index health
Useful flows:
- Start a work session with
mora brief. - Search for a person, project, issue, or decision with
mora search. - Use
mora thinkwhen the answer needs several pieces of evidence. - Save a note, fact, decision, or insight that you want agents to remember with
mora write. - Use
mora brief --event-id <id>before a meeting. - Capture and close small local tasks with
mora tasks add,list, anddone. - Run
mora doctorwhen results look old or incomplete.
Mora can install Claude Code hooks too:
mora hook install
mora hook status
The SessionStart hook adds the brief. The UserPromptSubmit hook adds a small
set of related memories for each prompt. Mora keeps existing valid Claude
hooks. It refuses to rewrite a settings file that it cannot parse.
Correct or remove memory
Mora can propose that two addresses belong to the same person. It never accepts the match on its own.
mora teach identity list
mora teach identity confirm --handle <phone> --email <address> --yes
mora teach identity reject --handle <phone> --email <address>
You can correct a cited commitment or a note that you wrote:
mora teach commitment wrong-direction --memory-id <id> --direction owed_by_self --yes
mora teach commitment already-closed --memory-id <id> --yes
mora teach memory correct --id <id> --title "Correct title" --text "Correct text" --yes
mora teach history --memory-id <id>
mora teach undo <ledger-id>
mora delete removes one memory now. A later source sync can restore connector
data. Use mora forget when the removal must remain after sync:
mora forget --chat <stable-id> --dry-run
mora forget --chat <stable-id> --yes
mora forget list
mora unforget <entry-id> --yes
Forget changes only Mora's local copy. It never deletes the source message, event, or issue.
Backup and sharing are separate choices
Mora offers three different paths:
| Path | Leaves this computer? | Encryption added by Mora? | Use |
| --- | --- | --- | --- |
| mora backup | No | No | Make a local .tar.gz copy in Mora's state directory. |
| mora sync git | Yes, if the remote is off-device | No | Push the plaintext vault to a private git remote you control. |
| mora share | Yes | Yes, with age | Send only authored memories from one scope through private git or your S3/R2 bucket. |
The vault contains plaintext. A private git remote is private by access rules,
not by Mora encryption. mora share encrypts before upload, but the remote can
still reveal file sizes and update timing. A person who already downloaded a
share keeps that copy.
See the guide before you enable a network path.
Browser access on this computer
An agent that cannot start a local process can use Mora's loopback HTTP server:
mora serve http
# or keep it running as a user service
mora serve http install
mora serve http status
It binds only to 127.0.0.1, uses a bearer token, and does not enable CORS.
Loopback means this computer only. It is still a local security boundary: any
process that gets the token can call the allowed routes. The generic HT
Truncated for display — read the full file on GitHub.
Related Skills
claude-mem
103.1kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Agent-Reach
102.4kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
77.8kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
47.6kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
