@zsc-glitch/knowledge-keeper-mcp 0.2.0-alpha.1 → 0.3.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,15 +1,22 @@
1
1
  # Knowledge Keeper MCP Server
2
2
 
3
- > 智能知识管理的 Model Context Protocol 实现
3
+ > 智能知识管理的 Model Context Protocol 实现,支持语义搜索
4
4
 
5
5
  ## 简介
6
6
 
7
7
  让 **knowledge-keeper** 可被 Claude Code、Cursor、Gemini CLI、Windsurf 等工具调用。
8
8
 
9
+ ## 特性
10
+
11
+ - ✅ **7 个 MCP Tools** - 完整的知识管理
12
+ - ✅ **语义搜索** - TF-IDF 向量嵌入,无外部依赖
13
+ - ✅ **本地优先** - 所有数据存储在本地
14
+ - ✅ **独立运行** - 不依赖 OpenClaw 运行时
15
+
9
16
  ## 安装
10
17
 
11
18
  ```bash
12
- npm install @zsc-glitch/knowledge-keeper-mcp
19
+ npm install @zsc-glitch/knowledge-keeper-mcp@alpha
13
20
  ```
14
21
 
15
22
  ## 使用
@@ -39,19 +46,41 @@ claude mcp add knowledge-keeper -- npx @zsc-glitch/knowledge-keeper-mcp
39
46
  | Tool | 功能 |
40
47
  |------|------|
41
48
  | `knowledge_save` | 保存知识点 |
42
- | `knowledge_search` | 搜索知识 |
49
+ | `knowledge_search` | 关键词搜索 |
50
+ | `knowledge_semantic_search` | 🆕 语义搜索 |
43
51
  | `knowledge_get` | 获取单个知识点 |
44
52
  | `knowledge_update` | 更新知识点 |
45
53
  | `knowledge_delete` | 删除知识点 |
46
54
  | `knowledge_tags` | 列出标签 |
47
55
 
48
- ## MCP Resources(计划)
56
+ ## MCP Resources
49
57
 
50
58
  | Resource | URI | 说明 |
51
59
  |----------|-----|------|
52
- | 知识点 | `knowledge:///{id}` | 单个知识点内容 |
53
- | 标签索引 | `knowledge:///tags` | 所有标签 |
54
- | 类型目录 | `knowledge:///type/{type}` | 按类型列出 |
60
+ | 知识库概览 | `knowledge:///list` | 列出所有资源 |
61
+ | 标签索引 | `knowledge:///tags` | 所有标签及计数 |
62
+ | 概念类知识 | `knowledge:///type/concept` | 概念类知识点列表 |
63
+ | 决策类知识 | `knowledge:///type/decision` | 决策类知识点列表 |
64
+ | 待办事项 | `knowledge:///type/todo` | 待办类知识点列表 |
65
+ | 笔记 | `knowledge:///type/note` | 笔记类知识点列表 |
66
+ | 项目记录 | `knowledge:///type/project` | 项目类知识点列表 |
67
+
68
+ ## 数据存储
69
+
70
+ - 默认位置:`~/.knowledge-vault/`
71
+ - 知识点:`~/.knowledge-vault/{type}/{id}.md`
72
+ - 向量索引:`~/.knowledge-vault/vectors.json`
73
+ - 可通过环境变量 `KNOWLEDGE_KEEPER_DIR` 自定义
74
+
75
+ ## 语义搜索
76
+
77
+ 默认使用 TF-IDF 向量嵌入,无需额外依赖。
78
+
79
+ **升级到 Transformer 模型:**
80
+ ```bash
81
+ npm install @xenova/transformers
82
+ EMBEDDING_MODEL=transformers npx @zsc-glitch/knowledge-keeper-mcp
83
+ ```
55
84
 
56
85
  ## 开发
57
86
 
@@ -3,9 +3,11 @@
3
3
  * 语义搜索模块 - 使用向量嵌入实现真正的语义搜索
4
4
  *
5
5
  * 技术方案:
6
- * - 嵌入模型: Xenova/all-MiniLM-L6-v2 (通过 @xenova/transformers)
7
- * - 向量存储: 本地 JSON 文件
8
- * - 相似度: 余弦相似度
6
+ * - 默认: TF-IDF 嵌入(轻量,无依赖)
7
+ * - 可选: @xenova/transformers 模型(需要安装额外依赖)
8
+ *
9
+ * 配置:
10
+ * - EMBEDDING_MODEL=tfidf (默认) 或 transformers
9
11
  */
10
12
  type Vector = number[];
11
13
  /**
package/dist/embedding.js CHANGED
@@ -3,9 +3,11 @@
3
3
  * 语义搜索模块 - 使用向量嵌入实现真正的语义搜索
4
4
  *
5
5
  * 技术方案:
6
- * - 嵌入模型: Xenova/all-MiniLM-L6-v2 (通过 @xenova/transformers)
7
- * - 向量存储: 本地 JSON 文件
8
- * - 相似度: 余弦相似度
6
+ * - 默认: TF-IDF 嵌入(轻量,无依赖)
7
+ * - 可选: @xenova/transformers 模型(需要安装额外依赖)
8
+ *
9
+ * 配置:
10
+ * - EMBEDDING_MODEL=tfidf (默认) 或 transformers
9
11
  */
10
12
  import * as fs from "fs/promises";
11
13
  import * as path from "path";
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * MCP Resources 注册
3
+ * 提供知识点的只读访问
3
4
  */
4
5
  import type { McpServer } from "@modelcontextprotocol/server";
5
6
  export declare function registerResources(server: McpServer): void;
@@ -1,10 +1,104 @@
1
1
  /**
2
2
  * MCP Resources 注册
3
+ * 提供知识点的只读访问
3
4
  */
5
+ import { listTags, searchKnowledge } from "../core.js";
4
6
  export function registerResources(server) {
5
- // TODO: 实现 Resources
6
- // knowledge:///{id} - 单个知识点
7
- // knowledge:///tags - 标签索引
8
- // knowledge:///type/{type} - 按类型列出
7
+ // 资源列表(静态)
8
+ server.registerResource("knowledge-list", "knowledge:///list", {
9
+ title: "知识库概览",
10
+ description: "列出知识库中的所有知识点类型",
11
+ mimeType: "application/json",
12
+ }, async () => {
13
+ const tags = await listTags();
14
+ const tagCount = Object.keys(tags).length;
15
+ const totalEntries = Object.values(tags).reduce((a, b) => a + b, 0);
16
+ return {
17
+ contents: [
18
+ {
19
+ uri: "knowledge:///list",
20
+ text: JSON.stringify({
21
+ message: "知识库资源列表",
22
+ types: ["concept", "decision", "todo", "note", "project"],
23
+ stats: {
24
+ totalTags: tagCount,
25
+ taggedEntries: totalEntries,
26
+ },
27
+ resources: [
28
+ { uri: "knowledge:///tags", name: "标签索引" },
29
+ { uri: "knowledge:///type/concept", name: "概念类知识" },
30
+ { uri: "knowledge:///type/decision", name: "决策类知识" },
31
+ { uri: "knowledge:///type/todo", name: "待办事项" },
32
+ { uri: "knowledge:///type/note", name: "笔记" },
33
+ { uri: "knowledge:///type/project", name: "项目记录" },
34
+ ],
35
+ usage: "使用 knowledge:///{id} 访问单个知识点",
36
+ }, null, 2),
37
+ },
38
+ ],
39
+ };
40
+ });
41
+ // 标签索引
42
+ server.registerResource("knowledge-tags", "knowledge:///tags", {
43
+ title: "标签索引",
44
+ description: "知识库中所有标签的列表",
45
+ mimeType: "application/json",
46
+ }, async () => {
47
+ const tags = await listTags();
48
+ const sortedTags = Object.entries(tags)
49
+ .sort((a, b) => b[1] - a[1])
50
+ .map(([tag, count]) => ({ tag, count }));
51
+ return {
52
+ contents: [
53
+ {
54
+ uri: "knowledge:///tags",
55
+ text: JSON.stringify({
56
+ total: sortedTags.length,
57
+ tags: sortedTags,
58
+ }, null, 2),
59
+ },
60
+ ],
61
+ };
62
+ });
63
+ // 按类型列出
64
+ const types = ["concept", "decision", "todo", "note", "project"];
65
+ const typeNames = {
66
+ concept: "概念类知识",
67
+ decision: "决策类知识",
68
+ todo: "待办事项",
69
+ note: "笔记",
70
+ project: "项目记录",
71
+ };
72
+ for (const type of types) {
73
+ server.registerResource(`knowledge-type-${type}`, `knowledge:///type/${type}`, {
74
+ title: typeNames[type],
75
+ description: `列出所有${typeNames[type]}`,
76
+ mimeType: "application/json",
77
+ }, async () => {
78
+ const results = await searchKnowledge({
79
+ query: "",
80
+ type,
81
+ limit: 100,
82
+ });
83
+ return {
84
+ contents: [
85
+ {
86
+ uri: `knowledge:///type/${type}`,
87
+ text: JSON.stringify({
88
+ type,
89
+ name: typeNames[type],
90
+ count: results.length,
91
+ entries: results.map((kp) => ({
92
+ id: kp.id,
93
+ title: kp.title,
94
+ tags: kp.tags,
95
+ created: kp.created,
96
+ })),
97
+ }, null, 2),
98
+ },
99
+ ],
100
+ };
101
+ });
102
+ }
9
103
  }
10
104
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zsc-glitch/knowledge-keeper-mcp",
3
- "version": "0.2.0-alpha.1",
4
- "description": "MCP Server for Knowledge Keeper - 智能知识管理的 Model Context Protocol 实现,支持语义搜索",
3
+ "version": "0.3.0-alpha.1",
4
+ "description": "MCP Server for Knowledge Keeper - 智能知识管理的 Model Context Protocol 实现,支持语义搜索和资源访问",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {