adaptive-agent-mcp
Adaptive Agent MCP 是一个自进化RAG(检索增强生成)系统,适用于AI代理。它不仅允许代理读取记忆,还可以自主写入和进化记忆。支持用户特定的记忆、持续进化以及跨应用共享。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"adaptive-agent-mcp": {
"args": [
"adaptive-agent-mcp"
],
"command": "uvx",
"env": {
"ADAPTIVE_EMBEDDING_API_KEY": "sk-your-xxx-key",
"ADAPTIVE_EMBEDDING_BASE_URL": "https://api.xxx.cn/v1",
"ADAPTIVE_EMBEDDING_MODEL": "Qwen/Qwen2.5-Coder-7B-Instruct",
"ADAPTIVE_RERANK_API_KEY": "sk-your-xxx-key",
"ADAPTIVE_RERANK_BASE_URL": "https://api.xxx.cn/v1",
"ADAPTIVE_RERANK_MODEL": "BAAI/bge-reranker-v2-m3"
}
}
}
}
该服务需要配置环境变量:ADAPTIVE_EMBEDDING_API_KEY、ADAPTIVE_EMBEDDING_BASE_URL、ADAPTIVE_EMBEDDING_MODEL、ADAPTIVE_RERANK_API_KEY、ADAPTIVE_RERANK_BASE_URL、ADAPTIVE_RERANK_MODEL
可用工具 (14 个)
该服务在 MCP 协议中暴露的工具,AI 可按需调用
initialize_session
[CRITICAL] **每次对话必须首先调用** - 初始化会话并加载用户画像。 ## 返回内容 1. **系统时间**: 真实的当前日期时间 (防止时间幻觉) 2. **用户画像**: 用户的偏好和习惯 (按 Scope 分区显示) 3. **近期上下文**: 最近 2 天的日志摘要 ## Agent 工作流指南 ### 读取记忆 (何时查询) - 用户问"之前讨论过...", "上次...", "我们说过..." → 先调用 `query_memory_headers` - 用户问"我的偏好是...", "我喜欢什么..." → 已在 initialize_session 返回 - 需要特定文件内容 → 调用 `read_memory_content` ### 搜索记忆 (何时搜索) - 用户问"有没有提到过 X", "关于 Y 的记录" → 调用 `search_memory_content` - 需要查找错误码、特定技术术语 → 调用 `search_memory_content` ### 写入记忆 (何时保存) - 用户说"记住", "保存", "别忘了" → 调用 `update_preference` 或 `append_daily_log` - 用户表达偏好"我喜欢...", "以后都用..." → 调用 `update_preference` - 任务完成时 → 主动记录进度到 `append_daily_log` - 解决问题后 → 记录解决方案 ## Scope 使用指南 (语义理解驱动) 请根据**对话意图**自动选择合适的 Scope,无需用户明确说明: | 对话意图 | 应使用的 Scope | 判断依据 | |---------|---------------|---------| | 闲聊、情感交流、日常对话 | `app:chat` | 非任务导向、轻松氛围 | | 写代码、调试、技术讨论 | `app:coding` | 涉及代码/技术 | | 写文档、翻译、文案创作 | `app:writing` | 内容创作类 | | 在某个项目中工作 | `project:{项目名}` | 从工作目录推断 | | 无法判断 | `global` | 回退到全局 | **查询偏好时**:根据当前对话意图,优先使用对应 scope 的偏好。 **写入偏好时**:根据用户表达的上下文,推断应保存到哪个 scope。 **重要**: 不确定是否需要记录时,宁可多记录也不要遗漏!
该工具无需必填参数,直接调用即可
query_memory_headers 2 个参数
**索引扫描** - 快速查找记忆文件的"目录",不读取完整内容。 ## 使用场景 当用户问: - "之前我们讨论过什么?" - "上个月关于 Next.js 的记录在哪?" - "有没有关于 Docker 的笔记?" ## 工作流程 1. 调用 `query_memory_headers(tags=['nextjs'])` 按标签过滤 2. 系统返回匹配文件的 **摘要信息**(日期、标签、类型) 3. 分析摘要,确定需要读取哪些文件 4. 对感兴趣的文件调用 `read_memory_content` 获取完整内容 ## 参数说明 - `tags`: 按标签过滤,如 `['development', 'nextjs']` - `limit`: 最大返回数量,默认 50 ## 返回格式 每个匹配文件返回:文件路径、类型、日期、标签、摘要
该工具无需必填参数,直接调用即可
read_memory_content 1 个参数 需填 1 项
**文件读取器** - 获取指定记忆文件的完整 Markdown 内容。 ## 使用场景 - 从 `query_memory_headers` 获取文件路径后,需要查看具体内容 - 从 `search_memory_content` 找到匹配后,需要完整上下文 ## 参数说明 - `file_paths`: 文件绝对路径列表,如 `["/path/to/2026-02-01.md"]` ## 注意事项 - **节省上下文**: 只读取真正需要的文件,不要一次读取太多 - **安全限制**: 只能读取记忆存储目录内的文件 ## 返回格式 每个文件返回完整的 Markdown 内容,带有文件名标题
必填参数:file_paths
search_memory_content 3 个参数 需填 1 项
**全文搜索** - 在所有记忆文件中搜索关键词或模式。 ## 使用场景 当 `query_memory_headers` 无法定位时: - "有没有提到过 'ECONNREFUSED' 错误?" - "之前解决 CORS 问题的记录在哪?" - "搜索所有包含 'TypeScript' 的笔记" ## 参数说明 - `query`: 搜索关键词,如 "CORS" 或 "用户认证" - `regex`: 是否使用正则表达式,默认 False - `limit`: 最大返回结果数,默认 20(防止 Context Window 爆炸) ## 搜索引擎 使用 ripgrep (rg) 进行高速搜索,支持: - 大小写不敏感匹配 - 显示匹配行的上下文 - 自动截断过长输出 ## 返回格式 匹配的文件路径、行号、以及周围的上下文内容 ## 依赖说明 需要安装 ripgrep,若未安装会返回错误提示
必填参数:query
update_preference 3 个参数 需填 2 项
[SAVE] **保存用户偏好** - 当用户说"记住"、"以后都..."时调用。 ## 触发时机 (WHEN TO CALL) 当用户表达**持久性偏好**时调用: - "我喜欢...", "以后都用...", "记住我的风格是..." - "写代码时要...", "跟我聊天时要..." - "这个项目使用..." ## Scope 参数使用指南 (语义理解驱动) 根据**对话意图**推断 scope,无需用户明确说明: | 用户在做什么 | 应使用的 scope | 示例 | |-------------|---------------|------| | 与你闲聊、表达情感偏好 | `app:chat` | "说话甜一点" | | 讨论代码、技术规范 | `app:coding` | "代码注释用英文" | | 写文档、文案相关 | `app:writing` | "写作风格正式" | | 在具体项目中设置规范 | `project:{项目名}` | "这个项目用 React" | | 设置通用偏好 | `global` | "我的语言是中文" | ## 示例 ```python await update_preference("communication_style", "卖萌", "app:chat") ```
必填参数:key、value
append_daily_log 4 个参数
[SAVE] **写入记忆** - 当用户要求保存信息或任务完成时调用。 ## 触发时机 (WHEN TO CALL) 当用户说出以下关键词时,**必须**调用此工具: - "记住", "保存", "记录", "别忘了", "以后都这样" - "我喜欢...", "我不喜欢...", "我习惯..." - "这个项目用...", "这个仓库的规范是..." - 任务完成时主动记录进度 - 解决问题后记录解决方案 ## 参数使用指南 ### 1. 每日笔记 (短期/临时) 用于任务进度、临时想法、错误记录: ``` append_daily_log(content="完成了用户认证模块的重构") ``` ### 2. 领域知识 (长期) 用于技术规范、API 用法、最佳实践: ``` append_daily_log(atomic_fact={ "fact": "Next.js 15 使用 App Router 作为默认路由", "category": "domain_knowledge" }) ``` ### 3. 用户偏好 (永久) - 推荐使用 update_preference 对于用户偏好,**优先使用 `update_preference` 工具**,它会智能覆盖旧值。 如果仍要使用此工具: ``` append_daily_log(atomic_fact={ "fact": "用户喜欢使用 Tailwind CSS", "category": "user_preference" }) ``` ### 4. Scope 参数 (语义理解驱动) 根据**对话意图**推断 scope: | 用户在做什么 | 应使用的 scope | |-------------|---------------| | 与你闲聊、表达情感偏好 | app:chat | | 讨论代码、技术规范 | app:coding | | 在具体项目中设置规范 | project:{项目名} | | 设置通用偏好 | global | ### 5. 原子化记录原则 (CRITICAL: Atomic Logging) 对于长内容 (>800字),**必须**使用 Markdown 二级或三级标题 (`##`, `###`) 将内容拆分为逻辑独立的段落。 - ❌ **禁止**: 写入一大坨无结构的纯文本流水账。 - ✅ **要求**: ```markdown ## 用户认证模块重构 完成了... ## API 接口变更 修改了... ``` - **原理**: 系统会根据标题自动进行语义切分(Semantic Chunking),确保检索精度。 **注意**: 不要询问日期,系统自动记录时间戳。
该工具无需必填参数,直接调用即可
query_knowledge 5 个参数
**知识库查询** - 从知识图谱中检索已保存的知识条目。 ## 使用场景 - 用户问 "我的偏好是什么?"(查询 user_preference) - 用户问 "之前记录的技术规范有哪些?"(查询 domain_knowledge) - 在特定项目中工作时,查询该项目的专属配置 ## 参数说明 ### scope (作用域过滤) - `None`: 返回全局知识 + 当前项目的知识 - `'global'`: 仅返回全局知识 - `'project:my-app'`: 仅返回该项目的专属知识 + 全局知识 ### category (分类过滤) - `'domain_knowledge'`: 技术规范、API 用法、最佳实践 - `'user_preference'`: 用户偏好、习惯、风格 - `None`: 返回所有分类 ### limit (分页) - 最大返回数量,默认 20 ### offset (分页) - 跳过前 N 条结果,默认 0 ## 返回格式 每条知识显示:作用域标签(如有)、知识内容、ID ## 与 append_daily_log 的关系 - `append_daily_log` 写入知识 - `query_knowledge` 读取知识
该工具无需必填参数,直接调用即可
get_period_context 2 个参数 需填 1 项
**周期索引** - 获取指定时间段的日志摘要和文件索引,用于生成周报/月报。 ## 使用场景 当用户说: - "帮我写一份周报" - "总结一下这个月做了什么" - "回顾上周的工作" ## 工作流程 1. 调用 `get_period_context(period='week')` 获取索引 2. 阅读摘要,了解每天的概况 3. 如需详细内容,调用 `read_memory_content` 按需加载 4. 撰写总结报告 5. 调用 `archive_period` 保存总结 ## 参数说明 - `period`: 时间周期,`'week'` 或 `'month'` - `date`: 可选,指定日期 (格式 YYYY-MM-DD),默认为今天 ## 返回格式 返回简短摘要 + 文件路径索引,不返回完整内容: ``` 📅 2026-02-03 | 3 entries | path/to/file.md 摘要: 完成了用户认证模块... ``` ## 按需加载 对于需要详细了解的日期,使用返回的文件路径调用 `read_memory_content`
必填参数:period
archive_period 2 个参数 需填 2 项
**保存周期总结** - 将撰写好的周报/月报保存到永久文件。 ## 使用场景 在使用 `get_period_context` 获取数据并撰写总结后,调用此工具保存。 ## 工作流程 1. `get_period_context(period='week')` - 获取原始数据 2. 阅读数据,撰写精炼总结 3. `archive_period(summary_content='...', period='week')` - 保存 ## 参数说明 - `summary_content`: 你撰写的总结内容 (Markdown 格式) - `period`: 时间周期,`'week'` 或 `'month'` ## 保存位置 文件保存到: `memory/{period}_summary_{date}.md` ## 总结建议格式 ```markdown # 周报 2026-02-06 ## 完成事项 - 事项 1 - 事项 2 ## 遇到的问题 - 问题及解决方案 ## 下周计划 - 待办事项 ```
必填参数:summary_content、period
delete_knowledge 2 个参数 需填 1 项
[DANGER] **删除知识** - 物理删除指定的知识条目。 ## 使用场景 - 用户明确要求删除某条错误或过时的信息 - 清理被标记为 [DEPRECATED] 且不再需要的条目 - 隐私数据清除 ## 参数 - `id`: 知识条目的唯一 ID (如 "fact-12345678") - `reason`: (可选) 删除原因,仅用于日志记录 ## 注意 - 此操作不可逆! - 删除后会触发索引重建(如适用)
必填参数:id
extract_knowledge 2 个参数 需填 1 项
**知识抽取** - 从文本中提取实体和关系,存入知识图谱。 ## 使用场景 当用户表达偏好或陈述事实时自动调用: - "我喜欢 Next.js" -> 提取 (user) -[LIKES]-> (Next.js) - "我使用 Tailwind CSS" -> 提取 (user) -[USES]-> (Tailwind CSS) - "React 依赖 Node.js" -> 提取 (React) -[DEPENDS_ON]-> (Node.js) ## 参数说明 - `text`: 要分析的文本 - `source`: 来源标识 (如 daily_log ID) ## 返回 提取并存储的三元组列表
必填参数:text
add_knowledge_relation 5 个参数 需填 3 项
**添加关系** - 手动添加实体关系到知识图谱。 ## 使用场景 - 手动记录用户偏好 - 建立技术栈关联 - 创建项目依赖关系 ## 参数说明 - `subject`: 主语实体名称 - `predicate`: 关系类型 (LIKES, USES, DEPENDS_ON, WORKS_ON, ...) - `object`: 宾语实体名称 - `subject_type`: 主语类型 (user, technology, concept, project) - `object_type`: 宾语类型 ## 常用谓词 | 谓词 | 含义 | 示例 | |------|------|------| | LIKES | 喜欢 | (user)-[LIKES]->(React) | | USES | 使用 | (user)-[USES]->(VSCode) | | DISLIKES | 不喜欢 | (user)-[DISLIKES]->(Java) | | SKILLED_AT | 擅长 | (user)-[SKILLED_AT]->(Python) | | DEPENDS_ON | 依赖 | (Next.js)-[DEPENDS_ON]->(React) |
必填参数:subject、predicate、object
query_knowledge_graph 3 个参数
**查询知识图谱** - 查询实体关系。 ## 使用场景 - "用户喜欢什么框架?" -> query_knowledge_graph(entity="user", predicate="LIKES") - "有哪些技术实体?" -> query_knowledge_graph(entity_type="technology") - "Next.js 的所有关系" -> query_knowledge_graph(entity="next.js") ## 参数说明 - `entity`: 查询特定实体的关系 (可选) - `predicate`: 过滤特定关系类型 (可选) - `entity_type`: 过滤实体类型 (可选) ## 返回 匹配的实体和关系列表
该工具无需必填参数,直接调用即可
multi_hop_query 2 个参数 需填 2 项
**多跳查询** - 沿关系路径进行推理查询。 ## 使用场景 - "用户喜欢的技术依赖什么?" -> multi_hop_query("user", "LIKES->DEPENDS_ON") - "和用户一起工作的人喜欢什么?" -> multi_hop_query("user", "WORKS_WITH->LIKES") ## 参数说明 - `start_entity`: 起始实体名称 - `path`: 关系路径 (用 -> 分隔,如 "LIKES->DEPENDS_ON") ## 返回 所有匹配的路径终点
必填参数:start_entity、path
服务介绍
Self-Evolving RAG for AI Agents
Agents don't just read memory — they write it.
中文 | English
Core Concept
Traditional RAG
User Input → Retrieve KB → Generate
↑
Read-only
(Human-maintained)
Self-Evolving RAG
User Input → Retrieve Memory → Generate
↑↓
Read + Write
Agent autonomously evolves
Key Differences:
| Traditional RAG | Adaptive Agent MCP | |
|---|---|---|
| Read | Retrieves pre-indexed documents | Dynamically accumulates at runtime |
| Write | Human-maintained knowledge base | Agent writes autonomously |
| Scope | Generic knowledge | User-specific memory |
| State | Static data | Continuously evolves |
How It Works
In Claude Code: "Remember, I prefer TypeScript"
↓
Agent automatically calls:
• append_daily_log() → Record to daily log
• update_preference() → Update preferences
• extract_knowledge() → Extract knowledge graph
↓
In Antigravity: "What are my coding preferences?"
↓
AI: "You prefer TypeScript"
Teach once, remember forever. Share across apps, never forget.
Getting Started
Prerequisites
- Python 3.10+
- Ripgrep (
rg): REQUIRED for full-text search. (Windows:choco install ripgrep, macOS:brew install ripgrep) - SQLite: Handled automatically by Python.
Configuration (v0.6.0)
Configuration is managed via Environment Variables.
1. mcp.json Structure
{
"mcpServers": {
"adaptive-agent-mcp": {
"command": "uvx",
"args": ["adaptive-agent-mcp"],
"env": {
"ADAPTIVE_EMBEDDING_BASE_URL": "https://api.xxx.cn/v1",
"ADAPTIVE_EMBEDDING_API_KEY": "sk-your-xxx-key",
"ADAPTIVE_EMBEDDING_MODEL": "Qwen/Qwen2.5-Coder-7B-Instruct",
"ADAPTIVE_RERANK_BASE_URL": "https://api.xxx.cn/v1",
"ADAPTIVE_RERANK_API_KEY": "sk-your-xxx-key",
"ADAPTIVE_RERANK_MODEL": "BAAI/bge-reranker-v2-m3"
}
}
}
}
Local Models:
- Ollama: Set
ADAPTIVE_EMBEDDING_PROVIDERtoollama.- LM Studio/vLLM: Set
ADAPTIVE_EMBEDDING_PROVIDERtoopenai_compatible.- Base URL: Set to your local endpoint (e.g.,
http://localhost:11434/v1orhttp://localhost:1234/v1).- API Key: Any string.
2. Environment Variables
All variables are prefixed with ADAPTIVE_.
| Variable | Description | Default |
|---|---|---|
ADAPTIVE_STORAGE_PATH |
Storage location | ~/.adaptive-agent/memory |
ADAPTIVE_RIPGREP_PATH |
Path to rg executable |
Auto-detect |
ADAPTIVE_EMBEDDING_PROVIDER |
Embedding provider (openai_compatible) |
openai_compatible |
ADAPTIVE_EMBEDDING_BASE_URL |
API Endpoint | None |
ADAPTIVE_EMBEDDING_API_KEY |
API Key | None |
ADAPTIVE_EMBEDDING_MODEL |
Embedding Model | Qwen/Qwen3-Embedding-8B |
ADAPTIVE_RERANK_PROVIDER |
Rerank provider (cohere_compatible) |
cohere_compatible |
ADAPTIVE_RERANK_BASE_URL |
API Endpoint | None |
ADAPTIVE_RERANK_API_KEY |
API Key | None |
ADAPTIVE_RERANK_MODEL |
Reranker Model | Qwen/Qwen3-Reranker-8B |
Default storage path:
~/.adaptive-agent/memory. All apps share the same memory.
Enhance Agent Memory Behavior (Optional)
If your AI doesn't actively read/write memory, add this to your system prompt or user rules:
## Memory System Instructions
- At the start of each conversation, call `initialize_session` to load user preferences.
- When user says "remember", "save", or expresses preferences, call `update_preference` or `append_daily_log`.
- After completing tasks, briefly record progress using `append_daily_log`.
- When user asks about past conversations, use `query_memory_headers` or `search_memory_content`.
Features
| Feature | Description | Version |
|---|---|---|
| Three-Layer Memory | MEMORY.md + Daily Logs + Knowledge Items | v0.1.0 |
| Scope Isolation | project:xxx, app:xxx, global |
v0.2.0 |
| Concurrent Safety | Cross-process file locking + async locks | v0.3.0 |
| Incremental Indexing | mtime-based smart updates | v0.3.0 |
| Hybrid Search | Vector + FTS5 with RRF fusion | v0.6.0 |
| Rerank Service | Cohere-compatible re-ranking for higher precision | v0.6.1 |
| Area Partitioning | Scope-based knowledge routing | v0.6.0 |
| Knowledge Graph | NetworkX-based entity relations | v0.5.0 |
| Async Foundation | Non-blocking I/O throughout | v0.6.0 |
Available Tools (14 tools)
Session & Retrieval
| Tool | Description |
|---|---|
initialize_session |
Initialize session with user profile and recent context |
query_memory_headers |
Index scan — browse memory file metadata |
read_memory_content |
Read complete memory file content |
search_memory_content |
Full-text search using ripgrep |
Memory & Knowledge
| Tool | Description |
|---|---|
update_preference |
Intelligently update user preferences |
append_daily_log |
Append content to daily log or knowledge items |
query_knowledge |
Hybrid search (Vector + FTS5 + RRF fusion) with browse fallback |
delete_knowledge |
Soft-delete knowledge items |
get_period_context |
Aggregate weekly/monthly logs for summaries |
archive_period |
Save period summaries |
Knowledge Graph
| Tool | Description |
|---|---|
extract_knowledge |
Extract entity relations from text |
add_knowledge_relation |
Manually add relations |
query_knowledge_graph |
Query entities, relations, or stats |
multi_hop_query |
Multi-hop reasoning queries |
Storage Structure
~/.adaptive-agent/memory/
├── MEMORY.md # User preferences (scope-based)
├── knowledge/
│ └── areas/
│ ├── general/items.json # Global knowledge
│ ├── chat/items.json # Chat-scope knowledge
│ ├── coding/items.json # Coding-scope knowledge
│ ├── writing/items.json # Writing-scope knowledge
│ └── projects/{name}/items.json # Project-specific knowledge
├── .index/
│ ├── vectors.db # SQLite + sqlite-vec + FTS5
│ └── index.json # Indexer metadata
├── .graph/
│ └── knowledge.json # NetworkX graph
├── .locks/ # File lock directory
└── memory/
└── 2026/
└── 02_february/
└── week_07/
└── 2026-02-10.md # Daily logs
Data Safety
- Isolated storage: Data stored in
~/.adaptive-agent/memory, independent of uvx installation - Concurrent safety: filelock prevents data corruption from multiple clients
- Human-readable: All data in Markdown/JSON format, easy to backup and version control
License
MIT License - See LICENSE for details.
Adaptive Agent MCP — Where agents learn, remember, and evolve.