让所有 AI 工具共用一套本地持久记忆
29.9/100
综合分
4
GitHub 星标
248
npm 周下载
—/5
用户评分
数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/wjabanjj/aifp-mcp.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态插件
可安装,未声明 dsh 能力
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 76 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包aifp-mcp @ 1.5.11
✓Node 引擎要求 >=22.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/21 23:44:41
🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0🔴 扫描:高危尚无人工评估
静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。
安装时即执行脚本可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 88 处,展示前 77 条)
- 读取本地文件dist/index.js:4
if (!existsSync(config.dataDir)) { - 写入本地文件dist/index.js:5
mkdirSync(config.dataDir, { recursive: true }); - 读取本地文件scripts/postinstall.mjs:23
if (existsSync(setupEntry)) { - 写入本地文件scripts/postinstall.mjs:45
mkdirSync(hooksDir, { recursive: true }) - 读取本地文件scripts/postinstall.mjs:54
if (!existsSync(srcFile)) continue - 写入本地文件scripts/postinstall.mjs:56
copyFileSync(srcFile, dstFile) - 写入本地文件scripts/postinstall.mjs:71
writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8') - 读取本地文件dist/db.js:10
if (!existsSync(config.dataDir)) { - 写入本地文件dist/db.js:11
mkdirSync(config.dataDir, { recursive: true }); - 写入本地文件dist/export-md.js:20
mkdirSync(opts.directory, { recursive: true }); - 写入本地文件dist/export-md.js:50
writeFileSync(join(opts.directory, fileName), md, 'utf-8'); - 读取本地文件dist/import.js:13
if (existsSync(sd.path) && statSync(sd.path).isDirectory()) { - 读取本地文件dist/import.js:13
if (existsSync(sd.path) && statSync(sd.path).isDirectory()) { - 读取本地文件dist/import.js:22
if (!existsSync(p)) - 读取本地文件dist/import.js:24
if (statSync(p).isDirectory()) { - 读取本地文件dist/import.js:48
const raw = readFileSync(fp, 'utf-8').slice(0, 5000); - 读取本地文件dist/import.js:83
const entries = readdirSync(dir, { withFileTypes: true }); - 发起网络请求dist/llm-helper.js:109
const res = await fetch(url, { - 读取本地文件dist/mcp.js:14
const _pkg = JSON.parse(readFileSync(resolve(__dirname, '..', 'package.json'), 'utf-8')); - 读取本地文件dist/obs-log.js:6
if (!existsSync(OBS_DIR)) { - 写入本地文件dist/obs-log.js:7
mkdirSync(OBS_DIR, { recursive: true }); - 写入本地文件dist/obs-log.js:22
appendFileSync(todayFile(), JSON.stringify(record) + '\n'); - 读取本地文件dist/obs-log.js:29
if (!existsSync(OBS_DIR)) - 读取本地文件dist/obs-log.js:33
for (const f of readdirSync(OBS_DIR)) { - 删除本地文件dist/obs-log.js:39
unlinkSync(join(OBS_DIR, f)); - 读取本地文件dist/obs-log.js:51
if (!existsSync(OBS_DIR)) - 读取本地文件dist/obs-log.js:56
for (const f of readdirSync(OBS_DIR)) { - 读取本地文件dist/obs-log.js:59
const content = readFileSync(join(OBS_DIR, f), 'utf-8'); - 发起网络请求dist/remote-client.js:18
const res = await fetch(`${this.baseUrl}/`, { - 读取本地文件dist/self-check.js:20
if (!existsSync(dir)) - 读取本地文件dist/self-check.js:23
accessSync(dir, constants.W_OK); - 读取本地文件dist/self-check.js:31
if (existsSync(config.dbPath)) - 读取本地文件dist/self-check.js:36
if (existsSync(MODEL_CACHE)) - 读取本地文件dist/self-check.js:65
.filter(([, paths]) => paths.some(p => existsSync(p))) - 读取本地文件dist/server-config.js:8
if (!existsSync(CONFIG_PATH)) - 读取本地文件dist/server-config.js:10
const raw = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8')); - 读取本地文件dist/server-config.js:20
if (!existsSync(DATA_DIR)) - 写入本地文件dist/server-config.js:21
mkdirSync(DATA_DIR, { recursive: true }); - 写入本地文件dist/server-config.js:23
writeFileSync(CONFIG_PATH, JSON.stringify(cfg, null, 2) + '\n', 'utf-8'); - 读取本地文件dist/server-config.js:27
if (!existsSync(CONFIG_PATH)) - 删除本地文件dist/server-config.js:29
rmSync(CONFIG_PATH); - 写入本地文件dist/session-miner.js:122
mkdirSync(dirPath, { recursive: true }); - 读取本地文件dist/session-miner.js:125
content = readFileSync(filePath, 'utf-8'); - 写入本地文件dist/session-miner.js:154
writeFileSync(filePath, content, 'utf-8'); - 读取本地文件dist/setup/index.js:12
if (existsSync(distEntry)) { - 读取本地文件dist/setup/index.js:27
const hasPi = existsSync(join(homedir(), '.pi', 'agent')) || hasCommand('pi'); - 读取本地文件dist/setup/pi-extension.js:9
if (!existsSync(PI_EXT_DIR)) - 写入本地文件dist/setup/pi-extension.js:10
mkdirSync(PI_EXT_DIR, { recursive: true }); - 写入本地文件dist/setup/pi-extension.js:22
writeFileSync(join(PI_EXT_DIR, 'index.ts'), renderIndexTs(serverEntry), 'utf-8'); - 写入本地文件dist/setup/pi-extension.js:23
writeFileSync(join(PI_EXT_DIR, 'package.json'), JSON.stringify(pkg, null, 2) + '\n', 'utf-8'); - 读取本地文件dist/setup/pi-extension.js:24
if (!existsSync(join(PI_EXT_DIR, 'node_modules'))) { - 执行外部命令固定命令dist/setup/pi-extension.js:25
execSync('npm install --no-audit --no-fund', { cwd: PI_EXT_DIR, stdio: 'ignore', timeout: 300000 }); - 读取本地文件dist/setup/platforms.js:8
return JSON.parse(readFileSync(p, 'utf-8')); - 写入本地文件dist/setup/platforms.js:15
mkdirSync(dirname(p), { recursive: true }); - 写入本地文件dist/setup/platforms.js:16
writeFileSync(p, JSON.stringify(obj, null, 2) + '\n', 'utf-8'); - 执行外部命令来自配置/变量dist/setup/platforms.js:20
execSync(process.platform === 'win32' ? `where ${cmd}` : `which ${cmd}`, { stdio: 'ignore', timeout: 3000 }); - 读取本地文件dist/setup/platforms.js:47
detected: () => hasCommand('claude') || existsSync(join(HOME, '.claude')), - 读取本地文件dist/setup/platforms.js:52
detected: () => hasCommand('cursor') || existsSync(join(HOME, '.cursor')), - 读取本地文件dist/setup/platforms.js:57
detected: () => hasCommand('windsurf') || existsSync(join(HOME, '.codeium', 'windsurf')), - 读取本地文件dist/setup/platforms.js:62
detected: () => hasCommand('cline') || existsSync(join(HOME, '.config', 'cline')), - 读取本地文件dist/setup/platforms.js:67
detected: () => hasCommand('gemini') || existsSync(join(HOME, '.gemini')), - 写入本地文件dist/setup/platforms.js:134
mkdirSync(dirname(p), { recursive: true }); - 写入本地文件dist/setup/platforms.js:144
writeFileSync(p, toml, 'utf-8'); - 写入本地文件dist/setup/platforms.js:158
mkdirSync(dirname(p), { recursive: true }); - 写入本地文件dist/setup/platforms.js:184
writeFileSync(p, yaml.trimEnd() + '\n' + block, 'utf-8'); - 读取本地文件hooks/check-status.mjs:19
if (!existsSync(DB_PATH)) { - 写入本地文件hooks/recall-hook.mjs:42
appendFileSync(LOG_PATH, JSON.stringify({ ts: new Date().toISOString(), status: 'timeout', latency_ms: TIMEOUT_MS }) + '\n') - 写入本地文件hooks/recall-hook.mjs:50
appendFileSync(LOG_PATH, JSON.stringify({ ts: new Date().toISOString(), ...entry }) + '\n') - 读取本地文件hooks/recall-hook.mjs:142
raw = readFileSync(0, 'utf-8').trim() - 读取本地文件scripts/count_imports.cjs:4
const files = fs.readdirSync(dir).filter(f => f.endsWith('.ts')) - 读取本地文件scripts/count_imports.cjs:8
const c = fs.readFileSync(path.join(dir, f), 'utf8') - 读取本地文件scripts/manage-keys.mjs:24
if (!existsSync(file)) return { keys: {} } - 读取本地文件scripts/manage-keys.mjs:25
try { return JSON.parse(readFileSync(file, 'utf-8')) } catch { return { keys: {} } } - 写入本地文件scripts/manage-keys.mjs:29
writeFileSync(tmp, JSON.stringify(store, null, 2) + '\n', 'utf-8') - 写入本地文件scripts/manage-keys.mjs:30
renameSync(tmp, file) - 执行外部命令来自配置/变量scripts/release-check.mjs:23
const run = (cmd) => execSync(cmd, { cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim() - 读取本地文件scripts/release-check.mjs:41
const localVersion = JSON.parse(readFileSync(resolve(cwd, 'package.json'), 'utf-8')).version
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 本地持久记忆共享
- 叙事链与语义纠错
- 感知链图扩散
展开完整介绍(131 字)↓
AiFP 记忆感知系统|MCP 服务,一套记忆全 AI 共享。面向中文的 Agent 感知记忆,支持叙事链、语义纠错、感知链图扩散。兼容 DeepSeek‑Harness、Claude Code、Cursor、Codex等全部 MCP 客户端,数据完全本地存储。
README
由 DeepSeek 最新模型翻译生成AiFP 记忆感知系统 — MCP Server
通过 Model Context Protocol 为 AI 编程助手提供持久记忆。
English · npm · GitHub
让 Obsidian、DeepSeek Harness、Claude Code、Cursor、Codex 等一切支持 MCP 的 AI 工具拥有跨会话的持续记忆。完全本地运行,数据不出本机(默认 ~/.ai-cognition/)。
为什么选 AiFP — 一套记忆,所有 AI 共享
你受够了 AI 的"健忘"吗?
- 聊了一上午,它忘了项目名——存了,但用不上
- 你说"拍森",它只认 Python——说错一个字就搜不到
- 昨天说 Docker 连不上,今天说 MySQL 连不上,它不知道是同一件事——相关的记不住
- DeepSeek Harness 学会的,Claude Code 不知道——每个 AI 都是记忆孤岛
多数 AI 记忆系统只是存——存是存了,但用不上。AiFP 是让 AI 真正记住、想通、共享,把上面这些毛病一次解决。
先讲别人做不到的(共享):
一套记忆,所有 AI 共用。 今天 DeepSeek Harness 学会的,明天 Claude Code 还记得;Codex 攒的偏好,VS Code Copilot 不用重新问。
展开完整文档(README 剩余 1 节)
AiFP 记忆感知系统 — MCP Server
通过 Model Context Protocol 为 AI 编程助手提供持久记忆。
English · npm · GitHub
让 Obsidian、DeepSeek Harness、Claude Code、Cursor、Codex 等一切支持 MCP 的 AI 工具拥有跨会话的持续记忆。完全本地运行,数据不出本机(默认 ~/.ai-cognition/)。
为什么选 AiFP — 一套记忆,所有 AI 共享
你受够了 AI 的"健忘"吗?
- 聊了一上午,它忘了项目名——存了,但用不上
- 你说"拍森",它只认 Python——说错一个字就搜不到
- 昨天说 Docker 连不上,今天说 MySQL 连不上,它不知道是同一件事——相关的记不住
- DeepSeek Harness 学会的,Claude Code 不知道——每个 AI 都是记忆孤岛
多数 AI 记忆系统只是存——存是存了,但用不上。AiFP 是让 AI 真正记住、想通、共享,把上面这些毛病一次解决。
先讲别人做不到的(共享):
一套记忆,所有 AI 共用。 今天 DeepSeek Harness 学会的,明天 Claude Code 还记得;Codex 攒的偏好,VS Code Copilot 不用重新问。别的记忆系统做不到——因为它们每个各记各的,互不相通。AiFP 让同电脑上所有 AI 工具共用一个大脑,记一份,处处用。
再讲它为什么好用(能力):
- 会掂量着记——不是每句话都存。聊的东西先进"待定区",由识别器判断这条值不值得长期记住:值得才正式记下,不值得就跳过。不会一股脑全存,也不会错漏重要的。
- 能听懂人话——你说"拍森",它知道是 Python;你说"上个月",它知道是哪个月。说错字、口语、时间词都能理解。
- 能看出关联——昨天说"连不上数据库",今天说"改了配置还不行",它知道是同一件事的延续。还能顺着一条线索联想出相关的内容。
- 记得清,用得上——一条记忆只留核心意思,不堆垃圾。用的时候只挑最相关的几条给你,又快又不乱。
- 越用越懂你——你的偏好、习惯它会慢慢积累成"画像",但它分得清"事实"和"建议",不会把你的想法和它自己的混在一起。
- 该忘的就忘——太久没用的记忆会自然淡出,重要的记忆会越来越牢。记忆库永远干净,不会变成堆不动的垃圾场。
看这些名字,就知道它不简单——记忆被做成了大脑的结构:
| 概念 | 它到底在干嘛(大白话) |
| 🧠 海马体 · 记忆感知 | 会掂量着记——先进"待定区",识别器判断值不值得长期记住,值得才正式记下,不值得就跳过 |
| 🔗 神经元突触 · 感知链 | 自动发现信息之间的联系,还能顺着线索找到最直接的关系 |
| 👃 嗅觉皮层 · 语义检索 | 说错也能找到——你说"拍森",它知道你要找 Python |
| ⚡ 共燃神经元 · 关联 | 一起出现的东西自动绑在一起,问 A 顺带带出 B |
| 🗣 语言中枢 · 理解 | 懂口语、认错字、认得"上个月"是哪个月 |
| 🌊 神经扩散 · 联想回忆 | 一条线索能联想出好几层相关的记忆 |
| 🧬 突触固化 · 记忆巩固 | 用得越多记得越牢,从临时记忆慢慢变成长期记忆 |
| ⏳ 遗忘曲线 | 太久不用的自然淡出,记忆库永远干净不堆积 |
| 📊 神经信号 · 置信度 | 每条记忆带个"可信度"标尺,越靠谱的越优先给你 |
| 👤 主人认知模型 · 画像 | 懂你这个人——偏好习惯会积累成画像,但不跟它的想法混 |
| 💪 肌肉记忆 · 跨轮复用 | 做过的经验跨会话记得,不用每次从头学 |
天生为中文服务:认错字、懂口语、认时间词,全都是为中文设计的。英文为主的记忆系统,遇到"拍森找 Python"这种就抓瞎了。
默认完全私有:所有数据都存你本机,不上云、不注册、不偷偷上报。所谓"共享"只是多个工具读写同一份本地记忆——你的数据从没离开过这台电脑。
一条命令装好:npm install -g 自动帮你配好 12 个 AI 工具(Claude Code、Cursor、Windsurf、Cline、Gemini CLI、Qwen Code、Zed、VS Code Copilot、Codex CLI、Trae、DeepSeek Harness、pi-coding-agent)。
一个大脑,多个助手:今天 DeepSeek Harness 学到的,明天 Claude Code 还记得——像跟一个有记忆的同事说话,不用每次都重新自我介绍。
快速开始
npm install -g aifp-mcp
claude mcp add ai-cognition -s user -- npx aifp-mcp
重启 Claude Code 即可使用。数据存在 ~/.ai-cognition/data/cognition.db。
DeepSeek Harness (dsh) 自动接入
装完 aifp-mcp 后自动接入 dsh,无需手动执行任何 dsh 命令:
npm install -g aifp-mcp
安装时会自动检测 dsh 并写入配置(~/.dsh/cordis.patch.yml)。重启 dsh,记忆工具自动注册为 mcp__aifp__(如 mcp__aifp__search_memories、mcp__aifp__save_memory),无需手动改任何配置。
在任意 AI 对话中安装(推荐)
不需要手动配任何东西。在 Claude Code、Codex、Cursor、DeepSeek Harness 等任意工具里直接输入:
帮我安装记忆系统:npm install -g aifp-mcp postinstall 钩子会自动检测并配置所有已安装的 AI 工具(Claude Code、Cursor、Windsurf、Cline、Gemini CLI、Qwen Code、Zed、VS Code Copilot、Codex CLI、Trae、DeepSeek Harness、pi-coding-agent),并打印状态报告。重启工具即可使用记忆工具——AI 看到报告后会告诉你重启哪个,无需手动改任何 MCP 配置文件。
首次启动:需要下载 ~30MB 的 bge-small-zh 嵌入模型,最多阻塞 45 秒。后续启动有缓存,秒开。
本地模式 vs 服务器增强模式
AiFP 支持两种运行模式(环境变量 COGNITION_MODE,默认 remote):
本地模式完全私有(数据不出本机),但感知链工具需要连接服务器。服务器地址不随包分发,需通过官方接入渠道获取。
拿到 key 后,一条命令连上
接入地址和密钥通过官方渠道发放:联系作者(微信:zm8571806/QQ:8571806/邮箱:8571806@qq.com)订阅后发放,不随包公开。订阅到期可单独吊销,不影响其他用户。
1. 安装(如未安装)
npm install -g aifp-mcp
2. 一条命令连接服务器(地址和 key 由作者发放) aifp-mcp --connect https://
3. 重启你的 AI 工具(Claude Code / Cursor / dsh 等)感知链 / 深度追踪 / 图扩散自动可用
断开(恢复纯本地): aifp-mcp --disconnect
--connect 会把连接信息保存在本机 ~/.ai-cognition/server.json,之后启动自动生效,无需每次配置环境变量。
更简单:直接让你的 AI 配置
不需要手动敲命令。在 Claude Code / Cursor / Codex / dsh 等任何 AI 工具的输入框里说:
这是我的 aifp 服务器地址和 key,帮我配置:地址:https:// key:
AI 会自动执行 aifp-mcp --connect 并提示你重启工具。重启后感知链增强自动生效。
⚠️ key 会出现在对话记录中,介意的话配置完可在管理后台吊销重发(不影响使用)。
接入 Obsidian(笔记 ↔ 记忆双向)
Obsidian 笔记 → 记忆库(AI 可语义检索你的笔记):直接让你的 AI 导入,无需配置环境变量:
把 Obsidian 笔记导入记忆:directory = C:/Users/你/Obsidian/我的笔记库
AI 会调用 reimport_sources 同步导入(frontmatter 自动剥离、哈希去重)。以后新增笔记再说一次即可。
记忆库 → Obsidian 笔记(在 Obsidian 里看到全部记忆):让 AI 调用 export_memories_md:
把记忆导出到 Obsidian:directory = C:/Users/你/Obsidian/我的笔记库/AiFP记忆
导出的笔记带 frontmatter(type/tier/tags),Obsidian 可直接识别和检索;同名笔记自动覆盖更新,保持与记忆库同步。
MCP 工具(共 33 个)
核心工具(15 个):
| 工具 | 功能 | 链路 |
| save_memory | 保存记忆(自动去重 + 向量索引) | 基础 |
| search_memories | 双路检索:FTS5 关键词 + 向量语义 | 逻辑链 |
| recall_context | 一键回忆(直接命中 + 因果链 + 关联 + 扩散) | 综合链 |
| get_memory | 按 ID 获取记忆详情 | 基础 |
| list_memories | 分页列出 | 基础 |
| trace_perception_chain | BFS 感知链追踪(6 类因果) | 上下链 |
| find_perception_path | 双向 BFS 找两条记忆间最短路径 | 关系链 |
| get_perception_graph_stats | 感知图统计 | 关系链 |
| diffuse_memories | 图扩散搜索(关联多跳) | 关系链 |
| get_memory_tree | 层级树结构 | 基础 |
| get_related_memories | Hebbian 共现关联 | 关系链 |
| get_user_profile | 用户画像——聚合偏好/事实/习惯 | 画像 |
| observe_turn | 记录对话轮次到识别队列(跨平台自动记忆入口) | 自动 |
| reimport_sources | 重新扫描外部笔记目录 | 导入 |
| get_stats | 系统统计 | 基础 |
另有 18 个管理/进阶工具:consolidate_memories / share_memory / merge_memories / batch_delete / batch_update / export_memories / export_memories_md(Obsidian)/ explain_query / get_confidence_stats / scan_memory_patterns / validate_memory / get_top_experiences / deduplicate_memories / scan_observation_patterns / rotate_observation_logs / session_mine / derive_memories / flush_recognizer。
跨平台自动记忆识别
Claude Code 使用原生 hooks(100% 自动,零遗漏)。其他工具通过 observe_turn 工具 + 指令文件实现(详见 rules/ 目录):
| 平台 | 配置方式 | 自动程度 |
| Claude Code | hooks(原生) | 100% 自动,零遗漏 |
| Cursor | .cursor/rules/ 指令文件 | AI 遵守指令时自动触发 |
| Codex CLI | AGENTS.md 指令文件 | AI 遵守指令时自动触发 |
| Trae | 项目规则(手动配置) | AI 遵守指令时自动触发 |
指令文件告诉 AI:“每次回答完用户后调用 observe_turn 记录本轮消息”。系统会自动判断是否有值得记住的内容,不需手动决定。
核心技术
- SQLite + FTS5 全文索引(CJK 感知,unicode61 tokenizer)
- bge-small-zh-v1.5 向量嵌入(本地 512 维语义搜索,自动重试 + 多镜像回退)
- Hebbian 共现矩阵(“一起发射的神经元连在一起”)
- 有向因果链(6 种关系类型)
- BFS 图扩散(沿关联多跳发现间接知识)
- 纠错 + 消歧 + 中文时间词解析
各 AI 工具怎么接入(自动或手动)
npm install -g aifp-mcp 时自动完成(postinstall 检测所有已装 AI 工具并写入 MCP 配置)。以后新装了某个 AI 工具,跑一次即可接入:
aifp-mcp --setup # 重新检测并配置所有 AI 工具
自动检测并配置已安装的 AI 工具(检测到才写入,不重复覆盖):
| 平台 | 配置方式 |
| Claude Code | ~/.claude/settings.json → mcpServers + 启动 hook |
| Cursor | ~/.cursor/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Cline | ~/.config/cline/mcp_settings.json |
| Gemini CLI | ~/.gemini/settings.json → mcpServers |
| Qwen Code | ~/.qwen/settings.json → mcpServers |
| Zed | ~/.config/zed/settings.json → context_servers |
| VS Code Copilot | %APPDATA%/Code/User/mcp.json → servers |
| Codex CLI | ~/.codex/config.toml |
| pi-coding-agent | 生成扩展到 ~/.pi/agent/extensions/aifp-memory/(pi 无内置 MCP,用扩展机制) |
手动配置
Claude Code / Cursor
{
"mcpServers": {
"ai-cognition": {
"command": "node",
"args": ["path/to/aifp-mcp/dist/index.js"]
}
}
}
自定义数据目录
COGNITION_DATA_DIR=/path/to/data npx aifp-mcp
环境变量
| 变量 | 默认值 | 说明 |
| COGNITION_DATA_DIR | ~/.ai-cognition/ | 数据存储目录 |
| COGNITION_MODE | remote | local 本地保底 / remote 连接服务器增强 |
| COGNITION_SERVER_URL | (无默认,须显式配置)* | 远程算法服务器地址(自建) |
| COGNITION_API_KEY | - | 远程模式 API 密钥 |
| COGNITION_RECOGNIZER | 0 | 设为 1 启用自动识别 |
| COGNITION_LLM_API_KEY | - | 识别器 LLM 密钥(OpenAI 兼容) |
| COGNITION_LLM_BASE_URL | https://api.deepseek.com | 识别器 LLM 地址 |
| COGNITION_LLM_MODEL | deepseek-chat | 识别器 LLM 模型 |
| HF_MIRROR | https://hf-mirror.com | 嵌入模型下载镜像(失败自动回退 huggingface.co) |
| CORS_ORIGIN | * | HTTP 模式跨域白名单 |
| PORT | 5000 | HTTP 端口 |
识别器 LLM 配置(启用自动记忆识别)
观察队列需要 LLM 判断是否值得入记忆,二选一:
OpenAI 兼容(推荐:DeepSeek 等)
export COGNITION_RECOGNIZER=1
export COGNITION_LLM_API_KEY=你的DeepSeek密钥
export COGNITION_LLM_BASE_URL=https://api.deepseek.com # 可选,默认同左
export COGNITION_LLM_MODEL=deepseek-chat # 可选
或 Anthropic
export COGNITION_RECOGNIZER=1
export ANTHROPIC_API_KEY=sk-ant-...
不配置则只记录观察日志,自动识别不落地(AI 主动 save_memory 不受影响)。
技术栈
- Node.js 22+ (node:sqlite) + TypeScript
- SQLite (内置) + FTS5
- @xenova/transformers (bge-small-zh-v1.5)
- @modelcontextprotocol/sdk (MCP 协议)
License
专有软件 — 见 LICENSE。个人/非商业用途免费;商业用途需授权。第三方依赖遵循各自开源许可。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
wjabanjj/aifp-mcp
让所有 AI 工具共用一套本地持久记忆
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,487已汉化DSH
73
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,894已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,379已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
DS Bot 是一个基于 DeepSeek Harness简称 dsh的 bot 插件,插件将 dsh 改造为 bot…
★ 5,084已汉化DSH
71.1
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,778已汉化DSH
71.1
这是你的仓库?认领条目