Skip to main content
Glama

rag-kb — 로컬 Agent 메모리 서비스 + 다중 Agent 협업 시스템

License: Apache-2.0 Glama MCP score English | 中文

이 저장소에는 두 개의 하위 시스템이 있습니다(ROADMAP):

하위 시스템

한 줄 요약

상태

kb

로컬 우선, 완전 무료 Agent 메모리 및 지식 서비스(핵심 제품, 개발 주축)

v1.0.1 프로덕션 사용 가용

agent-orchestra

kb 공유 태스크 보드 기반의 크로스 태스크 다중 Agent 협업 시스템(❄️ 유지보수 모드, 개인용 스캐폴드)

B1-B3 마무리 동결

오픈소스 라이선스: Apache-2.0(특허 허여 포함, 상업적 이용 가능).

kb — 로컬 우선 Agent 메모리 및 지식 서비스

Windows 단일 프로세스 상주(python -m kb serve),REST + MCP 이중 프로토콜, Claude Code / Cursor / TraeWork / 자체 구축 Agent에 메모리 쓰기, 문서·웹페이지 등록, 하이브리드 검색(벡터 + BM25/RRF 융합) 및 RAG 질의응답을 제공합니다.

LLM 없이도 저장·조회 및 검색이 완전히 사용 가능 — 메모리 쓰기, 문서 등록, 하이브리드 검색은 어떤 대형 언어 모델에도 의존하지 않습니다. 로컬 Ollama 또는 클라우드 API를 구성하면 /ask 질의응답 기능이 자동으로 활성화됩니다.

Related MCP server: mnemostack

핵심 기능

  • 단일 프로세스 상주: 하나의 python -m kb serve가 REST API와 MCP 엔드포인트를 동시에 제공, 추가 컴포넌트 불필요

  • 하이브리드 검색: BGE-M3 벡터 검색 + BM25 키워드 검색, RRF 융합 정렬, 중국어 토큰화에 친화적

    • 선택적 정밀 재정렬: KB_RERANK_ENABLED=true로 bge-reranker-v2-m3 교차 재정렬 활성화(기본 꺼짐)

    • 선택적 3-way: KB_SPARSE_ENABLED=true로 BGE-M3 희소 벡터 제3 경로 활성화(기본 꺼짐, 실패 시 자동으로 2-way 폴백)

  • 메모리 관리: 쓰기 / 업데이트 / 삭제 / 목록, namespace, tags, type 필터 지원

  • 다중 클라이언트/프로젝트 격리(v2): 격리 키 = (client, project), 신원은 환경이 담당하고 AI가 스스로 밝히지 않음 — client는 MCP clientInfo에서 자동 식별(프레임워크 수준 신뢰), project는 연결/디렉터리가 담당(기본값=해당 클라이언트의 기본 버킷);개인 메모리는 해당 클라이언트+해당 프로젝트에만 보임(타인 읽기/수정/삭제 거부), 문서/웹페이지 공유 지식은 모든 클라이언트에 보임;기본 키는 서버에서 생성

  • 접근 감사: 모든 쓰기/읽기/수정/삭제/검색/질의응답을 JSON으로 logs/agent-audit/<客户端>__<项目>.log에 기록(client+project별 파일 분리);조회 가능: REST GET /api/v1/audit?client=<客户端>[&project=<项目>] 또는 CLI kb audit --client <客户端>

  • 지식 등록: 로컬 문서(txt/md/pdf/docx 등)업로드 또는 경로 가져오기, 웹페이지 본문 크롤링 등록

  • 디렉터리 감시: 지정 디렉터리 내 파일 추가/삭제 시 자동 등록/정리(KB_WATCH_DIR

  • CLI 도구: kb add/search/stats/ask/eval/forget/dedup — 터미널에서 직접 쓰기, 검색, 통계, RAG 질의응답 수행

  • 프라이버시 가드레일: 민감 namespace는 로컬 응답을 강제하여 외부로 나가지 않음;/ask 스마트 라우팅(로컬 우선, 어려운 문제는 클라우드 선택 가능)

  • 오프라인 사용 가능: 모델과 데이터가 모두 로컬에 있으므로 네트워크가 없어도 저장·조회 및 검색 기능이 완전합니다

빠른 시작(Windows / Linux / macOS)

Windows PowerShell:

# 1. 创建并激活虚拟环境
python -m venv venv
.\venv\Scripts\Activate.ps1

# 2. 安装依赖
pip install -r requirements.txt

# 3. 启动服务(默认监听 http://127.0.0.1:8000)
python -m kb serve

Linux / macOS:

# 1. 创建并激活虚拟环境
python3 -m venv venv
source venv/bin/activate

# 2. 安装依赖
pip install -r requirements.txt

# 3. 启动服务
python -m kb serve

중요: kb 명령은 가상 환경 내에만 설치됩니다. 새 터미널마다 먼저 가상 환경을 활성화하세요 (Windows .\venv\Scripts\Activate.ps1, Linux/macOS source venv/bin/activate), 그렇지 않으면 kb:未找到命令가 표시됩니다. python -m kb <子命令>을 사용하면 활성화를 건너뛸 수 있습니다.

빠른 설치 대안(가상 환경 불필요, Python 3.10+): pip install --user -r requirements.txtpython -m kb serve로 실행하세요. 다만 venv로 의존성을 격리하는 것을 우선 권장합니다.

시작 후 헬스 체크:

curl http://127.0.0.1:8000/api/v1/healthz

첫 시작 시 로컬 임베딩 모델(기본 BAAI/bge-m3, 약 2GB, 사전 다운로드 캐시 필요)을 로드합니다. LLM을 구성하지 않아도 서비스는 정상 시작되며, /ask는 503과 구성 안내를 반환합니다.

LLM 기본 꺼짐(KB_LLM_MODE=off: 서비스 시작 시 어떤 대형 언어 모델도 탐지/로드/호출하지 않습니다. 제로 VRAM, 제로 비용, 완전 오프라인. 메모리 쓰기, 문서 등록, 하이브리드 검색이 완전히 사용 가능합니다. RAG 질의응답(/ask)이 필요하면 아래 방법으로 로컬 또는 클라우드 LLM을 구성하세요.

LLM 구성(선택 사항, /ask 질의응답에 필요)

KB_LLM_MODE 기본값은 off(로드/호출 안 함);네 가지 단계:

단계

동작

off(기본)

LLM을 전혀 로드/호출하지 않음; 메모리 저장·조회 및 검색 완전 사용 가능

local

로컬 Ollama만 사용(완전 오프라인, 프라이버시 외부 유출 제로)

auto

로컬 우선, 클라우드 폴백: 로컬 Ollama 사용 가능하면 로컬, 로컬이 없고 클라우드 Key가 있으면 클라우드

cloud

전부 클라우드(로컬은 압축과 프라이버시 격리만 수행)

로컬 LLM(Ollama):

# 1. 安装并启动 Ollama(Windows 从开始菜单/托盘启动,不要从 AI 沙箱终端拉起)
# 2. 拉取一个适合你电脑的模型(按显存/内存选择,如 qwen3:4b 约 3.2GB、
#    qwen3:1.7b 约 1.8GB;国内可用魔搭加速,拉完 ollama cp 改成短名)
ollama pull <你的模型名>
# 3. 在 .env 配置后重启服务:
#    KB_LLM_MODE=local            # 仅本地
#    KB_LLM_MODEL=<你的模型名>    # 以 `ollama list` 输出的名称为准
#    KB_OLLAMA_BASE_URL=http://localhost:11434

클라우드 LLM(모든 OpenAI 호환 서비스 제공사, DeepSeek에 국한되지 않음): DeepSeek / OpenAI / 通义 / 硅基流动 / Moonshot 등 모두 가능, 공통 세 가지 키:

# .env
KB_LLM_MODE=auto                 # 本地优先、云端降级;或 cloud 全云端
KB_LLM_API_KEY=sk-xxx            # 服务商 API Key
KB_LLM_BASE_URL=https://api.deepseek.com   # 换成你所用服务商的 OpenAI 兼容端点
KB_LLM_CLOUD_MODEL=deepseek-v4-flash       # 云端模型名

확인: GET /api/v1/healthzllm 필드 — local/cloud는 LLM 준비 완료, disabled는 미활성화를 의미합니다.

자주 묻는 질문: 임베딩 모델 다운로드 실패

  • 중국 본토에서 huggingface.co에 직접 연결하면 타임아웃됩니다. HF 미러를 설정한 후 재시작하세요:

    export HF_ENDPOINT=https://hf-mirror.com   # 或写入 ~/.bashrc 永久生效
    python -m kb serve

    모델은 미러에서 자동으로 다운로드되어 ~/.cache/huggingface/hub/에 캐시되며, 이후 네트워크가 없어도 오프라인 로드가 가능합니다.

  • 모델이 이미 로컬에 캐시되어 있지만 외부 네트워크가 없음: kb는 오프라인 우선(로컬 캐시 먼저 히트, 실패 시에만 네트워크)방식을 사용하므로 캐시 디렉터리가 완전하다면 완전 오프라인으로 실행할 수 있습니다.

Agent가 kb에 연결하기(클라이언트 무관)

kb의 접속 규약을 AI 클라이언트(TraeWork / Claude Code / Cursor / 자체 구축 Agent)에게 주어 메모리 읽기/쓰기 방법, 어떤 신원 규약을 따르는지, 감사를 조회하는 방법을 알게 하세요. 두 가지 방법 중 하나를 선택하세요:

  1. skill(권장, 자동 트리거 가능)— 선택적 독립 단계: 저장소 내 skills/kb-memory/SKILL.md 는 클라이언트 무관한 Anthropic 개방형 포맷 skill입니다. 사용 중인 클라이언트의 사용자 수준 skills 디렉터리에 설치하면, 해당 클라이언트의 모든 프로젝트 세션은 메모리 읽기/쓰기, RAG 질의응답, 감사 조회 시 자동 인식 및 트리거됩니다. 설치 = skills/kb-memory 디렉터리를 복사하면 됩니다(스크립트가 있으며 수동 복사도 가능, 의존성 불필요). 업데이트(다시 덮어쓰기), 제거, 설치 후 사용 방법은 scripts/README.md 참조.

설치하지 않아도 kb 서비스에는 영향이 없습니다: skill은 AI 클라이언트를 위한 「프롬프트 래퍼」일 뿐이며 서비스의 설치/시작과 무관합니다. 이 단계를 건너뛰어도 서비스는 정상 실행되고, 언제든 방법 2의 순수 텍스트 프롬프트로 연결할 수 있습니다. skill 설치는 일회성, 필요 시, 독립적으로 실행되며, kb serve에 따라 자동 트리거되지 않고, 클라이언트 디렉터리 밖의 어떤 파일에도 기록하지 않습니다.

  1. 순수 텍스트 프롬프트(폴백, 모든 클라이언트 공용): docs/AGENT_PROMPT.md를 통째로 복사하여 Agent에 붙여넣기만 하면 됩니다. skill 메커니즘에 의존하지 않습니다.

.trae-cn/skills / .claude/skills / .cursor/skills는 모든 클라이언트가 인정하는 「표준」인가요? — 아닙니다. 이것은 각 클라이언트의 자체 사용자 수준 규약 디렉터리일 뿐입니다: SKILL.md 자체는 통일된 Anthropic 개방형 포맷이지만, 「어느 디렉터리에 설치할지, 자동 트리거 여부」는 각 클라이언트가 결정하며 지원 수준이 다릅니다:

클라이언트

사용자 수준 skills 디렉터리

자동 로드

TraeWork

~/.trae-cn/skills/

자동 발견

Claude Code

~/.claude/skills/

최신 버전에서 지원

Cursor

~/.cursor/skills/

점진적으로 지원

기타 / 자체 구축 Agent

통일된 규약 없음

수동 로드 필요 또는 미지원

「모든 클라이언트가 따르는」통일된 디렉터리는 없습니다. 클라이언트가 skill을 지원하지 않으면 언제나 방법 2가 폴백입니다 (AGENT_PROMPT.md 붙여넣기, 순수 텍스트로 모든 클라이언트에서 사용 가능). 설치 방법, 각 클라이언트 디렉터리 차이와 로딩 메커니즘, 상호 참조 관계: 자세한 내용은 scripts/README.md 참조(여기서 반복하지 않음).

MCP 마운트

MCP 엔드포인트(streamable HTTP):http://127.0.0.1:8000/mcp/

Claude Code: 이 저장소에는 프로젝트 수준 .mcp.json이 내장되어 있어 이 디렉터리에서 Claude Code를 시작하면 자동으로 마운트됩니다. 전역으로도 추가할 수 있습니다:

claude mcp add --transport http kb http://127.0.0.1:8000/mcp/

Cursor / TraeWork 및 기타 MCP를 지원하는 클라이언트: MCP 구성에 다음 JSON을 추가하세요 (Cursor는 ~/.cursor/mcp.json 또는 프로젝트 .cursor/mcp.json에 배치;TraeWork는 설정에서 MCP 서버 추가):

{
  "mcpServers": {
    "kb": {
      "type": "http",
      "url": "http://127.0.0.1:8000/mcp/"
    }
  }
}

마운트 후 사용 가능한 MCP 도구: write_memory / search_memory / read_memory / update_memory / delete_memory / add_document / add_webpage / ask_kb.

KB_API_KEY 인증을 활성화하면 MCP 클라이언트는 연결 구성에 headersAuthorization: Bearer <key>)를 추가해야 합니다. 저장소의 .mcp.json 템플릿에는 실제 key가 포함되어 있지 않습니다(JSON은 주석을 지원하지 않음). 구성 방법은 USER_GUIDE §5.2 참조.

REST 엔드포인트 요약

메서드

경로

설명

POST

/api/v1/memories

메모리 쓰기 {content, tags?, source?, namespace?}

GET

/api/v1/memories

메모리 목록, type/tag/source/q/limit/offset 필터 지원

GET

/api/v1/memories/{id}

단일 메모리 조회

PATCH

/api/v1/memories/{id}

내용 또는 태그 업데이트

DELETE

/api/v1/memories/{id}

단일 메모리 삭제

POST

/api/v1/search

하이브리드 검색 {query, top_k?, mode?, type?, tag?}, mode: hybrid/vector/keyword

POST

/api/v1/documents

문서 등록: multipart file 필드 또는 JSON {"path": "本地路径"}

GET

/api/v1/documents

등록된 문서 목록(source 기준 집계)

DELETE

/api/v1/documents/{source}

source 기준 해당 문서의 모든 레코드 삭제

POST

/api/v1/ingest/web

웹페이지 등록 {url}, 본문 크롤링 후 청크 분할 등록

POST

/api/v1/ask

RAG 질의응답 {question}; LLM 미구성 시 503 반환

GET

/api/v1/healthz

헬스 체크 및 서비스 통계

GET

/api/v1/governance/stats

메모리 거버넌스 통계: total_count/avg_access_count/stale_90d_count(읽기 전용)

GET

/api/v1/governance/config

거버넌스 구성: 감쇠+신선도 스위치와 파라미터(읽기 전용)

POST

/api/v1/memories409

의미론적 중복 제거(KB_DEDUP_ENABLED=true)활성화 후 중복 기록 시 409 반환: {"error":"DUPLICATE","duplicate_of":"<已有记录id>","similarity":<相似度>}(쓰지 않음)

메모리 거버넌스(중복 제거/감쇠/신선도)는 기본 모두 꺼져 있으며 동작 변화가 없습니다. 사용법은 USER_GUIDE §3.5 참조.

예시:

# 写入一条记忆
curl -X POST http://127.0.0.1:8000/api/v1/memories `
  -H "Content-Type: application/json" `
  -d '{"content": "用户偏好深色主题", "tags": ["偏好"]}'

# 混合检索
curl -X POST http://127.0.0.1:8000/api/v1/search `
  -H "Content-Type: application/json" `
  -d '{"query": "用户界面偏好", "top_k": 5}'

# RAG 问答(需配置 LLM)
curl -X POST http://127.0.0.1:8000/api/v1/ask `
  -H "Content-Type: application/json" `
  -d '{"question": "用户喜欢什么主题?"}'

구성 항목 요약표

모든 구성은 KB_ 접두사 환경 변수 또는 .env 파일로 제공됩니다. 전체 키 이름은 .env.example 참조 (.env로 복사하여 작성. .env는 gitignore 처리되어 있으며 실제 키는 로컬에만 두고 저장소에 절대 커밋 금지).

구성 항목

기본값

설명

KB_LLM_MODE

off

LLM 모드: off(기본, LLM 로드/호출 안 함, 제로 VRAM·제로 비용)/ local(로컬 Ollama만)/ auto(로컬 우선, 클라우드 폴백)/ cloud

KB_DEVICE

비어 있음

임베딩 모델 장치: 비어 있음=자동 감지, cpu/cuda 명시 설정 가능

KB_WATCH_DIR

data

serve 모드 감시 디렉터리, 파일 변동 시 자동 등록;빈 문자열 또는 . = 미시작

KB_DATA_DIR

kb_data

실행 데이터 루트 디렉터리(ChromaDB, 런타임 상태 등)

KB_API_HOST / KB_API_PORT

127.0.0.1 / 8000

REST 및 MCP 수신 주소

KB_EMBED_MODEL

BAAI/bge-m3

임베딩 모델

KB_LLM_MODEL

비어 있음

로컬 Ollama 모델명(기본 비어 있음=미구성;KB_LLM_MODE=local/auto 구성 시 자신의 컴퓨터에 맞는 모델을 선택해야 하며 ollama list 기준)

KB_OLLAMA_BASE_URL

http://localhost:11434

Ollama 엔드포인트

KB_LLM_API_KEY / KB_LLM_BASE_URL / KB_LLM_CLOUD_MODEL

비어 있음

클라우드 LLM(선택): 모든 OpenAI 호환 서비스 제공사(DeepSeek / OpenAI / 通义 / 硅基流动 등), 로컬 .env에만 작성

KB_CHUNK_SIZE / KB_CHUNK_OVERLAP

500 / 100

문서 청크 분할 파라미터

KB_SENSITIVE_NAMESPACES

비어 있음

쉼표로 구분된 민감 namespace, 매칭 시 로컬 응답 강제, 외부 송출 안 함

KB_API_KEY

비어 있음

비어 있음=인증 없음(로컬 루프백 제로 마찰);비어 있지 않음=Bearer/X-API-Key 인증 활성화;orchestra 클라이언트는 자동으로 X-API-Key 헤더 포함

KB_RERANK_ENABLED / KB_RERANK_MODEL / KB_RERANK_TOP_N

false / BAAI/bge-reranker-v2-m3 / 20

검색 정밀 재정렬(A3.5):융합 후보를 CrossEncoder 재정렬에 전달, 기본 꺼짐

KB_SPARSE_ENABLED

false

희소 제3 경로(A3.5):BGE-M3 희소 벡터 + 역색인이 RRF 융합에 참여, 기본 꺼짐

CLI 요약(서비스 시작 불필요)

python -m kb add "记忆内容" --tags 偏好 --client TraeWork                       # 写入(project 缺省自动取当前目录名)
python -m kb search "查询词" --client TraeWork                                 # 混合检索(只回本客户端+本项目的 memory)
python -m kb stats                            # 统计:类型分布 / 访问热度 / 陈旧分布
python -m kb ask "问题" --client TraeWork      # 终端 RAG 问答(LLM 不可用时输出检索命中)
python -m kb audit --client TraeWork --days 7   # 查某客户端/项目存过/读过什么
python -m kb eval --file tests/eval_zh_50.jsonl   # 检索质量评测(Recall@1/@5 + MRR)
python -m kb forget --stale --days 90         # 清理超期未命中记忆
python -m kb dedup --threshold 0.92           # 语义去重

kb ask는 로컬 서비스 로직에 직접 연결됩니다(HTTP 경유 없음). serve가 중지된 상태에서 사용할 것을 권장합니다. 이중 프로세스의 DB 쓰기 경합을 피하세요.

agent-orchestra — 다중 Agent 협업 시스템(실험)

여러 AI 어시스턴트(서로 다른 TraeWork 작업 / Claude Code 세션, 모델은 달라도 됨)가 kb 공유 작업 보드를 통해 협업 개발하도록 합니다: 코디네이터 AI가 카드를 분해·배포하고, worker AI가 카드를 받아 실행하며, 카드당 1라운드씩 결과를 회신하면 코디네이터가 검증하고 진행을 관리합니다.

# 前置:kb serve 已运行。开一个新 TraeWork 任务,粘贴以下引导语即可唤醒一个 worker:
venv\Scripts\python.exe orchestra\board.py new-worker worker-1

전체 사용 방법(코디네이터가 카드를 어떻게 분해하는지, 여러 worker를 어떻게 병렬 실행하는지, 협업 규율과 알려진 제한 사항)은 사용자 매뉴얼 4장 참조.

디렉토리 구조

kb/            kb 服务源码(config / models / embedder / storage / bm25 / retriever /
               service / llm / ingest / watcher / api / mcp / cli + reranker / sparse / eval)
tests/         kb 验收测试(339 项,含 eval_zh_50.jsonl 检索评测数据集)
orchestra/     多 Agent 协作系统(board.py CLI + 协议三件套 + skill + 245 项测试)
docs/          设计文档、节点计划、用户使用手册
kb_data/       kb 运行数据(gitignore)
_archive/      旧学习项目归档(仅保留历史,禁止参考)

더 많은 문서

  • 사용자 매뉴얼(인간 사용자 진입점)docs/USER_GUIDE.md

  • AI 인계 문서(AI 어시스턴트 진입점)PROJECT.md(프로젝트 상태 / 진행 상황 보드 / 인계 가이드)

  • 설계 문서(요구사항, 아키텍처, API, 마일스톤):docs/superpowers/specs/2026-08-23-kb-memory-service-design.md

  • P2 로그 설계:docs/superpowers/specs/2026-08-24-logging-design.md

  • P2 로드맵:docs/superpowers/plans/2026-08-24-p2-roadmap.md

  • 노드 개발 계획:docs/superpowers/plans/2026-08-23-kb-dev-nodes.md

  • AI 협업 규범:AGENTS.md

Available Tools

8 tools
add_documentA

导入本地文档(PDF/DOCX/MD/TXT 及 Office 格式)切分入库; 返回 {"source": 文件名, "chunks": 块数};文件不存在或格式不支持时 返回 {"error": "FILE_NOT_FOUND" | "UNSUPPORTED_FORMAT", "message": 原因}。 project/client:仅用于审计归类;文档 chunk 为共享知识,所有客户端可检索。 client:来源客户端(可选,缺省从 clientInfo 自动识别)。 English: Import a local document (PDF/DOCX/MD/TXT and Office formats), split and ingest it; returns {"source": filename, "chunks": count}; when the file is missing or the format is unsupported returns {"error": "FILE_NOT_FOUND" | "UNSUPPORTED_FORMAT", "message": reason}. project/client: audit bucketing only; document chunks are shared knowledge, searchable by all clients.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
clientNo
projectNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and largely meets it: it discloses the split-and-ingest side effect, the two error modes with exact error codes, and the shared-knowledge behavior. It does not mention permissions or idempotency, but it is still substantially transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the verb, formats, and return contract, and the bilingual duplication is structured rather than rambling. It is longer than necessary because of the translation, but every section carries useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description supplies the return shape and error contract. Given there are no annotations, it also discloses the shared-knowledge side effect. A small gap remains around path qualification and prerequisites, but the agent has enough context to call the tool and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does add useful meaning for project/client: audit bucketing only and optional client auto-detection from clientInfo. However, the required path parameter is never explicitly described, and its format is only implied by 'local document' and FILE_NOT_FOUND.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action: import and ingest a local document. It names supported formats, states the exact return shape, and contrasts naturally with the sibling add_webpage by requiring a local path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells the agent this is for local files, that project/client are audit-only, and that ingested chunks become shared knowledge searchable by all clients. It does not explicitly name alternatives or state when not to use it, but the local-file requirement and the presence of add_webpage imply the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_webpageA

抓取网页正文并切分入库;返回 {"source": url, "chunks": 块数}; 抓取/正文提取失败时返回 {"error": "WEB_FETCH_FAILED", "message": 原因}。 project/client:仅用于审计归类;web chunk 为共享知识,所有客户端可检索。 client:来源客户端(可选,缺省从 clientInfo 自动识别)。 English: Fetch a webpage body and ingest it after splitting; returns {"source": url, "chunks": count}; on fetch/body-extraction failure returns {"error": "WEB_FETCH_FAILED", "message": reason}. project/client: audit bucketing only; web chunks are shared knowledge, searchable by all clients.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
clientNo
projectNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral disclosure burden. It clearly specifies success return shape, failure error code, project/client's audit-only role, and that web chunks are shared knowledge searchable by all clients, while also noting client auto-detection.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main action and return behavior are front-loaded and the structure is logical, but the content is duplicated across Chinese and English sections, making it longer than strictly necessary. Each sentence does not fully earn its place because of the near-verbatim repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description provides crucial invocation details: success/error returns, parameter roles, and sharing semantics. Minor gaps remain around url parameter documentation and any size/format constraints, but the core usage context is sufficiently complete for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It explains that client is optional and defaults from clientInfo, and that project/client are audit-only, but it does not describe the url format or project individually beyond the grouped statement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('抓取网页正文并切分入库' / 'Fetch a webpage body and ingest it after splitting') with a clear resource: a webpage. This distinguishes it from siblings like add_document and write_memory, which handle documents and memory respectively.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for ingesting web pages into shared knowledge, and clarifies that project/client are only for audit bucketing. However, it does not explicitly compare against alternatives like add_document, nor state when one should choose this tool over them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ask_kbA

基于知识库的 RAG 问答(检索 → 上下文拼装 → 护栏生成),返回 answer 与 sources; v2:检索按当前 (client, project) 隔离 memory(doc/web 共享),并写 ask 存取审计; client:来源客户端(可选,缺省从 clientInfo 自动识别); LLM 不可用时返回 {"error": "LLM_DISABLED", "message": 配置指引}。 English: Knowledge-base RAG Q&A (retrieve → build context → guarded generation), returning answer and sources; v2: retrieval isolates memory by the current (client, project) (doc/web shared); an ask access-audit is emitted; client: source client (optional; auto-detected from clientInfo when omitted); returns {"error": "LLM_DISABLED", "message": setup guidance} when the LLM is unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientNo
projectNo
questionYes

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it is notably forthcoming: it discloses the retrieve-to-generation pipeline, retrieval scoping by (client, project) with doc/web memory shared, an emitted ask access-audit, client auto-detection from clientInfo, and the exact shape of the LLM-unavailable error response. These are concrete behavioral traits beyond a basic read, especially the audit side effect and error contract.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded and the content is logically segmented into pipeline, v2 behavior, client semantics, and error handling. However, the entire description is duplicated in Chinese and English, which roughly doubles the length without adding information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and sparse input schema, the description covers the important operational details: return shape (answer and sources), memory scoping, the audit side effect, and LLM-unavailable error handling. It does not specify the exact structure of sources or how the current (client, project) is fully resolved, but these are minor relative to what is disclosed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add parameter meaning, and it does so only partially. It clearly explains client (optional, auto-detected from clientInfo) and indirectly ties project to memory isolation, but it does not define project's role directly nor describe the expected form/content of the required question parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete action and resource: 'Knowledge-base RAG Q&A' / '基于知识库的 RAG 问答', with a described pipeline and return values (answer and sources). It is far from a tautology, but it does not explicitly contrast itself with sibling tools such as search_memory or read_memory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Knowledge-base RAG Q&A' and the memory-isolation note imply use for natural-language questions grounded in the KB rather than for memory CRUD or document ingestion. However, the description offers no explicit when-to-use, when-not-to-use, or alternative-tool guidance, so an agent must infer the decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_memoryA

按 ID 删除一条记忆;成功返回 {"ok": true},记录不存在返回 {"error": "NOT_FOUND"}; 非 (client, project) 归属返回 {"error": "FORBIDDEN"}。 client:来源客户端(可选,缺省从 clientInfo 自动识别)。 English: Delete a memory by ID; returns {"ok": true} on success and {"error": "NOT_FOUND"} when it does not exist; non-(client, project) owners get {"error": "FORBIDDEN"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientNo
projectNo
record_idYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does well by specifying success and error return shapes, including NOT_FOUND and FORBIDDEN ownership restrictions. It could further disclose that the deletion is permanent and irreversible, but the core behavioral surface is covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core operation and return values. The bilingual repetition adds some length but is acceptable given multilingual context. No filler or irrelevant details are present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete tool with no output schema and no annotations, the description covers the main operation, the three return states, the ownership restriction, and the optional client parameter. Minor gaps remain around project semantics and explicit irreversibility, but overall an agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds useful meaning for client by saying it is the source client and optional, defaulting from clientInfo. It does not explain project beyond its role in ownership, and record_id is only implicitly described as 'by ID'. Partial compensation but not full.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: deleting a memory by ID. It uses a specific verb and resource, and the tool name itself distinguishes it from siblings like write_memory and read_memory. However, it does not explicitly contrast itself with sibling tools, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this tool to delete a memory by ID. It does not provide explicit when-to-use versus when-not-to-use guidance, nor does it mention alternatives such as update_memory for modifying existing memories. The context is clear but implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_memoryA

按 ID 读取单条记忆完整内容;记录不存在返回 {"error": "NOT_FOUND"}; 非 (client, project) 归属的 memory 返回 {"error": "FORBIDDEN"};共享知识可读。 client:来源客户端(可选,缺省从 clientInfo 自动识别)。 project:项目归属(可选,缺省=该客户端默认桶)。 English: Read the full content of a single memory by ID; returns {"error": "NOT_FOUND"} when absent; a memory not owned by the (client, project) returns {"error": "FORBIDDEN"}; shared knowledge is readable.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientNo
projectNo
record_idYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It transparently discloses NOT_FOUND and FORBIDDEN error responses, ownership rules, that shared knowledge is readable, and the default behavior for optional client/project parameters. This gives the agent a strong behavioral model without needing to invoke the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core action and error semantics. It includes bilingual text that duplicates the same information, adding minor redundancy, but the content remains well-organized and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-by-ID tool with no output schema, the description adequately covers error scenarios, ownership, and optional parameter defaults. It doesn't detail the success response shape, but 'full content of memory' conveys the expected return. Overall, enough for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains that client is optional and auto-detected from clientInfo, and project defaults to the client's default bucket. record_id is self-explanatory as the ID. This adds meaningful semantics beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific action: read the full content of a single memory by ID. It distinguishes itself from search_memory (which searches rather than reads a single record) and other sibling write/update/delete tools. The error cases further clarify the scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use: when you have a memory ID and want its full content. It explains optional client/project defaults and ownership constraints. However, it doesn't explicitly name alternatives or state when not to use this tool versus search_memory.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_memoryA

混合检索记忆与知识(向量语义 + BM25 关键词,RRF 融合); 返回命中列表,每项含 id/content/score/type/source。 v2:个人记忆(memory)只返回归属当前 (client, project) 的; 共享知识(doc/web chunk)所有客户端可见。top_k 小于 1 时返回 {"error": "INVALID_ARGUMENT", "message": 原因}。 client:来源客户端(可选,缺省从 clientInfo 自动识别)。 English: Hybrid retrieval over memories and knowledge (vector semantics + BM25 keywords, RRF-fused); returns a hit list, each item having id/content/score/type/source. v2: memory records only return those owned by the current (client, project); shared knowledge (doc/web chunks) is visible to all clients. Returns {"error": "INVALID_ARGUMENT", "message": reason} when top_k is less than 1. client: source client (optional; auto-detected from clientInfo when omitted).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_kNo
clientNo
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With zero annotations, the description carries the full burden and delivers substantially: hybrid retrieval mechanism, RRF fusion, response item fields, ownership scoping, the INVALID_ARGUMENT error contract for top_k < 1, and client auto-detection from clientInfo. It does not cover every possible trait (auth, rate limits), but the core behavioral contract an agent needs before calling is well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core function and every sentence conveys a distinct fact, but the full bilingual duplication doubles the length for any single-language reader. The top_k error contract and client parameter note are appended after the main body rather than integrated with a parameter section, making the structure slightly scattered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter hybrid-retrieval tool with a bare schema and no annotations, the description covers nearly everything an agent needs: retrieval method, return fields, scope behavior, error contract, and the client shortcut. The remaining gaps — a semantic definition of top_k and a dedicated project explanation — are minor because the parameter names are reasonably self-descriptive and the default of 5 is present in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does well for client (optional, auto-detected from clientInfo), partially for top_k (only the error condition is stated; no explicit 'maximum number of results' definition), and not at all for project, which appears only inside the ownership scoping rule rather than as a parameter definition. This is meaningful but incomplete compensation for a fully undocumented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource pair — '混合检索记忆与知识' / 'Hybrid retrieval over memories and knowledge' — and specifies the mechanism (vector + BM25 keywords, RRF-fused) and result shape (hits with id/content/score/type/source). This clearly distinguishes it from the CRUD memory siblings (write/read/update/delete_memory) by positioning it as cross-source retrieval, and the v2 scope rule further differentiates personal memory from shared knowledge.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through the v2 scoping rule (personal memory only for current client/project, shared knowledge visible to all) and the error contract, but it never explicitly states when to choose search_memory over read_memory or ask_kb. There are no 'use X instead' statements or exclusions. An agent can infer this is the retrieval/search tool among its siblings, but the guidance remains implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_memoryA

按 ID 更新记忆内容(变更后自动重新嵌入);记录不存在返回 {"error": "NOT_FOUND"}; 非 (client, project) 归属返回 {"error": "FORBIDDEN"}; 内容为空串或纯空白时返回 {"error": "INVALID_ARGUMENT", "message": 原因}。 client:来源客户端(可选,缺省从 clientInfo 自动识别)。 English: Update a memory's content by ID (auto re-embed on change); returns {"error": "NOT_FOUND"} when absent; non-(client, project) owners get {"error": "FORBIDDEN"}; empty content returns {"error": "INVALID_ARGUMENT", "message": reason}.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientNo
contentYes
projectNo
record_idYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the burden of behavioral disclosure. It usefully reveals that content is auto-re-embedded on change, and it documents the main error responses (NOT_FOUND, FORBIDDEN, INVALID_ARGUMENT) and the optional client defaulting from clientInfo. Some detail around ownership determination and success return is missing, but the core behavior is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the primary purpose and includes important error behavior. However, it duplicates the same content in Chinese and English, which adds length without adding new information; the English section is mostly a redundant translation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is no output schema, the description does not specify what a successful response looks like, and the project parameter remains ambiguous. It covers primary errors and behavior well, but for a mutation tool with no structured annotations or output schema, a bit more detail would be needed for full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for the client parameter by explaining it is optional and auto-detected from clientInfo, and content/record_id are reasonably inferable from the main action. However, the project parameter is essentially unexplained beyond the ownership error mention.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates a memory's content by ID, which is a specific verb+resource action. It inherently distinguishes itself from siblings like write_memory, read_memory, and delete_memory by referencing an existing record via ID.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The update-by-ID behavior implies when to use it, and the error conditions provide some context for expected failures. However, there is no explicit statement about when to prefer this tool over write_memory or other alternatives, so usage guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_memoryA

写入一条记忆短文本(事实/笔记/摘要),可选标签与归属项目;返回 {"id": 记录ID}。 内容为空串或纯空白时返回 {"error": "INVALID_ARGUMENT", "message": 原因}。 v2(2026-08-30):身份由环境承载——client 自动从 MCP 握手 clientInfo 识别 (TraeWork / Claude Code / Cursor),project 为项目/任务归属(连接配置声明, 可空=该客户端默认桶);记录主键由服务端生成。共享知识(add_document/add_webpage) 所有客户端可见。 English: Write a memory short text (fact/note/summary) with optional tags and project; returns {"id": record_id}. Returns {"error": "INVALID_ARGUMENT", "message": reason} when content is empty or blank. v2: identity comes from the environment — client is auto-detected from the MCP clientInfo handshake (TraeWork / Claude Code / Cursor), project is the project/task bucket (declared in the connection config; empty = this client's default bucket). The record primary key is generated server-side. Shared knowledge (add_document/add_webpage) is visible to all clients.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
clientNo
contentYes
projectNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does it well: it discloses the success return format ({"id": ...}), the error case for empty/blank content, how identity is derived from the MCP handshake, that the primary key is server-generated, and that shared knowledge is separately namespaced. This is far more transparent than typical tool descriptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key purpose and return format are front-loaded, and the v2 notes are useful. However, the description duplicates nearly all information in Chinese and English, roughly doubling the length. The structure is organized but not optimally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write tool with no output schema and no annotations, the description is quite complete: it covers return values, validation errors, identity/resolution, key generation, and boundary with shared knowledge tools. Minor missing pieces are explicit guidance on when to prefer read/update/delete siblings and any permission requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains content as the memory text, tags as optional, project as the project/task bucket with empty meaning default, and client as auto-detected from MCP clientInfo. This adds real meaning beyond the bare schema, though it does not specify tag element constraints or content length limits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource: '写入一条记忆短文本' (write a memory short text) with optional tags and project, and specifies the return shape. It also distinguishes itself from add_document/add_webpage by noting that shared knowledge is visible to all clients, which implies this tool is for non-shared memory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context on when the tool is appropriate by explaining the client/project identity model and contrasting shared knowledge tools (add_document/add_webpage) as visible to all clients. It does not explicitly state 'when not to use' or name alternatives for read/update/delete, but the context is clear enough for an agent to choose correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct resource and action: CRUD operations for memories are clearly separated from hybrid retrieval, and the two ingestion tools are differentiated by source type (local file vs URL). search_memory and ask_kb are distinguishable by their outputs—raw hits versus a generated answer with sources.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (write_memory, read_memory, update_memory, delete_memory, search_memory, add_document, add_webpage, ask_kb). The only slight deviation is ask_kb's abbreviated noun, but it still fits the verb_noun structure and is readable.

Tool Count5/5

8 tools is well-scoped for a memory/knowledge server: full CRUD for memories, two ingestion tools for shared knowledge, hybrid search, and RAG Q&A each earn their place. The count is neither sparse nor bloated.

Completeness4/5

The memory lifecycle is fully covered (write/read/update/delete), and knowledge ingestion plus retrieval and Q&A are present. Minor gaps exist—there is no list/delete operation for shared documents or webpages—but agents can work around these since shared knowledge is append-only.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Persistent memory MCP server for AI coding agents (Claude Code, Codex, Gemini CLI). Hybrid retrieval (vector + BM25), cross-encoder reranking, knowledge graph, session checkpoint/resume, and multi-scope isolation. Local-first with LanceDB.
    30
    276
    15
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Durable hybrid memory for AI agents. Combines vector search, BM25, temporal retrieval, and optional Memgraph knowledge graph via reciprocal rank fusion. 6 MCP tools: health, search, answer, feedback, graph_query, graph_add_triple. Self-hosted with Qdrant backend.
    7
    7
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that enables persistent, hybrid, local memory for LLM agents, with vector + BM25 search, knowledge graph, and policy-driven retention, providing token-budgeted context injection for AI assistants.
    MIT

Latest Blog Posts

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/fish827-08/rag-kb'

If you have feedback or need assistance with the MCP directory API, please join our Discord server