exo
Exo
一个用于智能体生活系统的个人上下文层。
Exo——exocortex(外脑皮层)的简称,即你思考中存在于大脑之外的那一部分——是一份人生记录,形态由你掌控。你所消费的一切、你所写的一切,以及机器从这两者推断出的一切,都集中在一个地方,并有一个统一的 SQL 查询层贯穿其中。
该记录的一份经过过滤的副本会发布到一个只读 MCP 服务器上,这样你面前不管是什么助手,都可以把它用作上下文——而不会让该助手的厂商拥有这份记录。
loaders ─────────▶ the record ─────────▶ the surface
what reaches it what it holds what it exposes
(one per source, (tier zones, one (a fixed set of named
each writes one SQL surface, one questions, read-only
zone) wall) by construction)为什么
你应该尽可能拥有自己的个人上下文、操作知识和记忆。这正是它们可移植的根源,也是实现细粒度隐私的唯一途径。
你拥有例行程序,而不必拥有调度器。 自托管一切值得称赞,但并非没有痛苦;有时候,使用别人的基础设施才是正确答案。不应该转移的是记录本身。
没有平台锁定,也没有模型锁定。 记录以 parquet 和 markdown 形式存放在你的磁盘上。对外接口是 MCP,这是每个助手都懂的语言。
在你工作的地方与你相遇。 通过 MCP 可访问的集中式存储,意味着同一份上下文可以到达你的终端代理、编辑器和手机。
这个东西之所以存在,是因为另一种选择是十几个孤岛,每个孤岛只知道你的一小部分,而没有一个会把数据还给你。
Related MCP server: mcp-multi-db
它实际做什么
加载器把困在孤岛中的数据拉出来:Last.fm、Letterboxd、Goodreads、Untappd、Trakt、Raindrop、你的 Claude 和 ChatGPT 导出、你的 markdown 笔记、你公开发表的文章、你的 git 仓库。每个加载器只写入一个区域,不碰其他任何东西。
记录按谁可以写入来区分它们,而不是按数据是什么:
层级 | 内容 | 写入方 |
T0 消费 | 世界记录下的关于你的一切——scrobbles、评分、收藏 | 仅加载器 |
T1 创作 | 你的文字:笔记、帖子、评价、食谱、任务 | 你,手工 |
T2 派生 | 机器推断出的结果:原子、向量、亲和度 | 仅派生流程 |
派生流程读取 T0 和 T1,并且在物理上无法看到 T2——它读取时所用的配置文件完全没有 T2 视图。因此 T2 总是从基准真值重新生成,exo verify 通过两次派生并比较摘要来证明这一点。机器输出永远不会变成机器输入。
发布面发布一份物理上独立的副本,只包含你声明为可发布的行。被扣留的内容不会出现在发布的文件中,而不是在读取时过滤,因此下游的任何 bug 和注入的指令都无法触及它。该策略是失败即关闭(fail-closed):未声明的区域会导致构建失败,而不是默认放行或默认禁止。
引擎与你的实例
这个仓库是引擎。它不保存任何数据,也永远不会保存。
你的数据、配置和你自己的加载器位于实例中——一个独立、私有的目录(通常是一个独立的私有仓库),引擎通过 $EXO_HOME 找到它:
your-instance/
exo.toml who you are, where your inputs live
serve-manifest.json what may leave this machine
raw/ your exports and mirrors
zones/ the record itself
plugins/ loaders only you could have
items/ your tasks, habits, slots
procedures/ how you do a recurring thing, by hand如果某个加载器的输入是一种格式——例如 Last.fm 导出、一个 markdown 文件夹、一个 git 仓库目录——那么它随引擎一起发布。任何人都能拥有这样的输入。如果某个加载器的输入是一个场所——你所在城市的场馆日历、你的兄弟仓库、你的博客——那么它属于你的实例。判断标准不是代码有多专门化,而是陌生人是否有可能拥有这种输入。
开始
uv sync
uv run exo init ~/my-exo # scaffold an instance
export EXO_HOME=~/my-exo
# drop your exports into $EXO_HOME/raw/exports/, then:
uv run exo rebuild # ingest -> index -> derive -> catalog
uv run exo query "SELECT artist, count(*) FROM t0_music GROUP BY 1 ORDER BY 2 DESC LIMIT 10"
uv run exo publish --dry-run # what would leave, and what is held backexo init 复制的模板位于 exo/templates/——在编辑副本之前,请先阅读它们。
从手机访问它
只读发布面的意义在于,当你远离持有记录的机器时,记录仍然可以应答。worker/ 是一个通过 HTTP 提供 MCP 服务的 Cloudflare Worker——永久只读,只提供发布包——worker/README.md 介绍了如何将其部署并连接到 Poke,这个 iMessage 助手:
cd worker
cp wrangler.example.toml wrangler.toml # your database id, your buckets, your name
npx wrangler d1 create exo # + r2 bucket create exo-vectors
npx wrangler deploy
npx wrangler secret put AUTH_TOKEN # openssl rand -hex 32然后将一个发布包发布进去(exo publish --cf,然后 import.sh),并在 poke.com/integrations/new 添加 Worker 的 URL 和该令牌。任何 MCP 客户端都能以同样的方式工作——Poke 只是那个通过短信触达你的客户端。
然后阅读 CONTEXT.md——它是词汇表,仓库的其他部分都假定你已经读过。
坦诚的局限
启动成本是真实存在的。 这个工具面向那些已经记笔记、已经导出数据、并且本来就想要这个东西的人。它不会替你建立起这个习惯。
加载器会坏。 它们读取别人的导出格式,抓取别人的页面。每个加载器都会保留最后一次成功生成的文件,而不是用失败结果覆盖它;但加载器腐坏只是时间问题。
底层是一个第二大脑。 一个个人 wiki、用于消费数据和档案的加载器,再加上一些蒸馏提炼。新颖之处不在于其中任何单一组件,而在于它们共享同一条记录和同一个发布边界。
聊天导出加载器是一把口袋刀。 它将 Claude 和 ChatGPT 的导出标准化为一种格式,无论你是否需要本项目的其他部分,它都很有用。
决策
每一个不太显然的选择在 docs/adr 中都有一份 ADR。其中起支撑作用的有:
层级原生文件之上的 DuckDB 目录,以及那堵墙 | |
拆分 ETL:笔记本摄取,云端重建 | |
远程只读发布面永久只读 | |
限制注入读取的爆炸半径 | |
代码公开,实例私有 | |
过程是资源,而非工具 |
贡献
请先阅读 CONTRIBUTING.md——尤其是关于绝不在本仓库中放入个人数据(包括你自己的数据)的部分,以及那些看似微小却会重新铸造运行中实例每个 id 的改动清单。
MIT.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceModel Context Protocol (MCP) server that gives AI assistants a safe, correct data-analyst capability over business metrics - without raw SQL improvisation.
- AlicenseAqualityAmaintenanceRead-only MCP server for querying PostgreSQL, MySQL, and SQLite from AI agents — multi-database, safe by default.4181ISC
- AlicenseNot gradedqualityBmaintenanceMCP server providing read-only access to SQL Server databases for AI assistants, enabling schema exploration, query execution, and foreign key inference with token-efficient TOON responses.1MIT
- AlicenseAqualityAmaintenanceA read-only MCP server that exposes SQL database access to LLMs, supporting multiple database types, compact columnar results, pagination, and file export.622MIT
Related MCP Connectors
The personal context layer for AI: your profile and files, read by any MCP client over OAuth.
Person-owned, portable AI memory as a remote MCP server, readable and writable by any MCP client.
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/reeswrites/exo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server