shelbymcp 0.1.0

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.
Files changed (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +335 -0
  3. package/dist/config.d.ts +9 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +35 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/db/database.d.ts +8 -0
  8. package/dist/db/database.d.ts.map +1 -0
  9. package/dist/db/database.js +25 -0
  10. package/dist/db/database.js.map +1 -0
  11. package/dist/db/edges.d.ts +65 -0
  12. package/dist/db/edges.d.ts.map +1 -0
  13. package/dist/db/edges.js +256 -0
  14. package/dist/db/edges.js.map +1 -0
  15. package/dist/db/fts.d.ts +25 -0
  16. package/dist/db/fts.d.ts.map +1 -0
  17. package/dist/db/fts.js +53 -0
  18. package/dist/db/fts.js.map +1 -0
  19. package/dist/db/migrations.d.ts +11 -0
  20. package/dist/db/migrations.d.ts.map +1 -0
  21. package/dist/db/migrations.js +95 -0
  22. package/dist/db/migrations.js.map +1 -0
  23. package/dist/db/thoughts.d.ts +60 -0
  24. package/dist/db/thoughts.d.ts.map +1 -0
  25. package/dist/db/thoughts.js +194 -0
  26. package/dist/db/thoughts.js.map +1 -0
  27. package/dist/db/vectors.d.ts +16 -0
  28. package/dist/db/vectors.d.ts.map +1 -0
  29. package/dist/db/vectors.js +74 -0
  30. package/dist/db/vectors.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +24 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/mcp/server.d.ts +8 -0
  36. package/dist/mcp/server.d.ts.map +1 -0
  37. package/dist/mcp/server.js +229 -0
  38. package/dist/mcp/server.js.map +1 -0
  39. package/dist/tools/capture.d.ts +4 -0
  40. package/dist/tools/capture.d.ts.map +1 -0
  41. package/dist/tools/capture.js +79 -0
  42. package/dist/tools/capture.js.map +1 -0
  43. package/dist/tools/delete.d.ts +4 -0
  44. package/dist/tools/delete.d.ts.map +1 -0
  45. package/dist/tools/delete.js +18 -0
  46. package/dist/tools/delete.js.map +1 -0
  47. package/dist/tools/get.d.ts +4 -0
  48. package/dist/tools/get.d.ts.map +1 -0
  49. package/dist/tools/get.js +19 -0
  50. package/dist/tools/get.js.map +1 -0
  51. package/dist/tools/graph.d.ts +5 -0
  52. package/dist/tools/graph.d.ts.map +1 -0
  53. package/dist/tools/graph.js +55 -0
  54. package/dist/tools/graph.js.map +1 -0
  55. package/dist/tools/helpers.d.ts +12 -0
  56. package/dist/tools/helpers.d.ts.map +1 -0
  57. package/dist/tools/helpers.js +21 -0
  58. package/dist/tools/helpers.js.map +1 -0
  59. package/dist/tools/list.d.ts +4 -0
  60. package/dist/tools/list.d.ts.map +1 -0
  61. package/dist/tools/list.js +18 -0
  62. package/dist/tools/list.js.map +1 -0
  63. package/dist/tools/search.d.ts +4 -0
  64. package/dist/tools/search.d.ts.map +1 -0
  65. package/dist/tools/search.js +73 -0
  66. package/dist/tools/search.js.map +1 -0
  67. package/dist/tools/stats.d.ts +4 -0
  68. package/dist/tools/stats.d.ts.map +1 -0
  69. package/dist/tools/stats.js +34 -0
  70. package/dist/tools/stats.js.map +1 -0
  71. package/dist/tools/update.d.ts +4 -0
  72. package/dist/tools/update.d.ts.map +1 -0
  73. package/dist/tools/update.js +59 -0
  74. package/dist/tools/update.js.map +1 -0
  75. package/package.json +58 -0
  76. package/skills/shelby-forage/SKILL.md +85 -0
@@ -0,0 +1,194 @@
1
+ import { v4 as uuidv4 } from "uuid";
2
+ function parseJsonArray(raw) {
3
+ if (!raw)
4
+ return [];
5
+ try {
6
+ const parsed = JSON.parse(raw);
7
+ return Array.isArray(parsed) ? parsed : [];
8
+ }
9
+ catch {
10
+ return [];
11
+ }
12
+ }
13
+ function parseJsonObject(raw) {
14
+ if (!raw)
15
+ return null;
16
+ try {
17
+ const parsed = JSON.parse(raw);
18
+ return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)
19
+ ? parsed
20
+ : null;
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ function rowToRecord(row) {
27
+ return {
28
+ id: row.id,
29
+ content: row.content,
30
+ summary: row.summary,
31
+ type: row.type,
32
+ source: row.source,
33
+ project: row.project,
34
+ topics: parseJsonArray(row.topics),
35
+ people: parseJsonArray(row.people),
36
+ visibility: row.visibility,
37
+ metadata: parseJsonObject(row.metadata),
38
+ embedding: row.embedding,
39
+ created_at: row.created_at,
40
+ updated_at: row.updated_at,
41
+ consolidated_into: row.consolidated_into,
42
+ reinforcement_count: row.reinforcement_count,
43
+ };
44
+ }
45
+ function rowToSummary(row) {
46
+ return {
47
+ id: row.id,
48
+ summary: row.summary,
49
+ type: row.type,
50
+ topics: parseJsonArray(row.topics),
51
+ created_at: row.created_at,
52
+ };
53
+ }
54
+ export function insertThought(db, input) {
55
+ const id = uuidv4();
56
+ const now = new Date().toISOString();
57
+ const stmt = db.prepare(`
58
+ INSERT INTO thoughts (id, content, summary, type, source, project, topics, people, visibility, metadata, created_at, updated_at)
59
+ VALUES (@id, @content, @summary, @type, @source, @project, @topics, @people, @visibility, @metadata, @created_at, @updated_at)
60
+ `);
61
+ stmt.run({
62
+ id,
63
+ content: input.content,
64
+ summary: input.summary ?? null,
65
+ type: input.type ?? "note",
66
+ source: input.source ?? "unknown",
67
+ project: input.project ?? null,
68
+ topics: input.topics ? JSON.stringify(input.topics) : null,
69
+ people: input.people ? JSON.stringify(input.people) : null,
70
+ visibility: input.visibility ?? "personal",
71
+ metadata: input.metadata ? JSON.stringify(input.metadata) : null,
72
+ created_at: now,
73
+ updated_at: now,
74
+ });
75
+ return id;
76
+ }
77
+ export function getThought(db, id) {
78
+ const row = db.prepare("SELECT * FROM thoughts WHERE id = ?").get(id);
79
+ if (!row)
80
+ return null;
81
+ return rowToRecord(row);
82
+ }
83
+ export function updateThought(db, id, updates) {
84
+ const setClauses = [];
85
+ const params = { id };
86
+ if (updates.content !== undefined) {
87
+ setClauses.push("content = @content");
88
+ params.content = updates.content;
89
+ }
90
+ if (updates.summary !== undefined) {
91
+ setClauses.push("summary = @summary");
92
+ params.summary = updates.summary;
93
+ }
94
+ if (updates.type !== undefined) {
95
+ setClauses.push("type = @type");
96
+ params.type = updates.type;
97
+ }
98
+ if (updates.source !== undefined) {
99
+ setClauses.push("source = @source");
100
+ params.source = updates.source;
101
+ }
102
+ if (updates.project !== undefined) {
103
+ setClauses.push("project = @project");
104
+ params.project = updates.project;
105
+ }
106
+ if (updates.topics !== undefined) {
107
+ setClauses.push("topics = @topics");
108
+ params.topics = JSON.stringify(updates.topics);
109
+ }
110
+ if (updates.people !== undefined) {
111
+ setClauses.push("people = @people");
112
+ params.people = JSON.stringify(updates.people);
113
+ }
114
+ if (updates.visibility !== undefined) {
115
+ setClauses.push("visibility = @visibility");
116
+ params.visibility = updates.visibility;
117
+ }
118
+ if (updates.metadata !== undefined) {
119
+ setClauses.push("metadata = @metadata");
120
+ params.metadata = JSON.stringify(updates.metadata);
121
+ }
122
+ if (setClauses.length === 0)
123
+ return false;
124
+ setClauses.push("updated_at = @updated_at");
125
+ params.updated_at = new Date().toISOString();
126
+ const sql = `UPDATE thoughts SET ${setClauses.join(", ")} WHERE id = @id`;
127
+ const result = db.prepare(sql).run(params);
128
+ return result.changes > 0;
129
+ }
130
+ export function deleteThought(db, id) {
131
+ const result = db.prepare("DELETE FROM thoughts WHERE id = ?").run(id);
132
+ return result.changes > 0;
133
+ }
134
+ export function listThoughts(db, options = {}) {
135
+ const whereClauses = [];
136
+ const params = {};
137
+ if (options.type) {
138
+ whereClauses.push("type = @type");
139
+ params.type = options.type;
140
+ }
141
+ if (options.project) {
142
+ whereClauses.push("project = @project");
143
+ params.project = options.project;
144
+ }
145
+ if (options.topic) {
146
+ whereClauses.push("topics LIKE @topic");
147
+ params.topic = `%"${options.topic}"%`;
148
+ }
149
+ if (options.person) {
150
+ whereClauses.push("people LIKE @person");
151
+ params.person = `%"${options.person}"%`;
152
+ }
153
+ if (options.source) {
154
+ whereClauses.push("source = @source");
155
+ params.source = options.source;
156
+ }
157
+ if (options.since) {
158
+ whereClauses.push("created_at >= @since");
159
+ params.since = options.since;
160
+ }
161
+ if (options.until) {
162
+ whereClauses.push("created_at <= @until");
163
+ params.until = options.until;
164
+ }
165
+ const whereStr = whereClauses.length > 0 ? `WHERE ${whereClauses.join(" AND ")}` : "";
166
+ // Clamp limit
167
+ let limit = options.limit ?? 20;
168
+ if (limit < 1)
169
+ limit = 1;
170
+ if (limit > 100)
171
+ limit = 100;
172
+ const offset = options.offset ?? 0;
173
+ // Count query
174
+ const countRow = db
175
+ .prepare(`SELECT COUNT(*) AS cnt FROM thoughts ${whereStr}`)
176
+ .get(params);
177
+ const totalCount = countRow.cnt;
178
+ // Data query
179
+ const rows = db
180
+ .prepare(`SELECT id, summary, type, topics, created_at FROM thoughts ${whereStr} ORDER BY created_at DESC LIMIT @limit OFFSET @offset`)
181
+ .all({ ...params, limit, offset });
182
+ const results = rows.map(rowToSummary);
183
+ return {
184
+ results,
185
+ total_count: totalCount,
186
+ has_more: offset + results.length < totalCount,
187
+ offset,
188
+ };
189
+ }
190
+ export function countThoughts(db) {
191
+ const row = db.prepare("SELECT COUNT(*) AS cnt FROM thoughts").get();
192
+ return row.cnt;
193
+ }
194
+ //# sourceMappingURL=thoughts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thoughts.js","sourceRoot":"","sources":["../../src/db/thoughts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAqFpC,SAAS,cAAc,CAAC,GAAkB;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAkB;IACzC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAC5E,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAkB;IACrC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;QAClC,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;QAClC,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;QACvC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;QACxC,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;KAC7C,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,GAAkB;IACtC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;QAClC,UAAU,EAAE,GAAG,CAAC,UAAU;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAqB,EAAE,KAAmB;IACtE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IACpB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC;QACP,EAAE;QACF,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;QAC9B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;QACjC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;QAC1D,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;QAC1D,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,UAAU;QAC1C,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;QAChE,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,GAAG;KAChB,CAAC,CAAC;IAEH,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAqB,EAAE,EAAU;IAC1D,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,EAAE,CAA8B,CAAC;IACnG,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,EAAqB,EACrB,EAAU,EACV,OAA8B;IAE9B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,MAAM,GAA4B,EAAE,EAAE,EAAE,CAAC;IAE/C,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACjC,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,UAAU,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC5C,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACzC,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACxC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE1C,UAAU,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC5C,MAAM,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE7C,MAAM,GAAG,GAAG,uBAAuB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC1E,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAqB,EAAE,EAAU;IAC7D,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAqB,EAAE,UAAuB,EAAE;IAC3E,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,GAAG,KAAK,OAAO,CAAC,KAAK,IAAI,CAAC;IACxC,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,GAAG,KAAK,OAAO,CAAC,MAAM,IAAI,CAAC;IAC1C,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACjC,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtF,cAAc;IACd,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAChC,IAAI,KAAK,GAAG,CAAC;QAAE,KAAK,GAAG,CAAC,CAAC;IACzB,IAAI,KAAK,GAAG,GAAG;QAAE,KAAK,GAAG,GAAG,CAAC;IAE7B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IAEnC,cAAc;IACd,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CAAC,wCAAwC,QAAQ,EAAE,CAAC;SAC3D,GAAG,CAAC,MAAM,CAAoB,CAAC;IAClC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC;IAEhC,aAAa;IACb,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN,8DAA8D,QAAQ,uDAAuD,CAC9H;SACA,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAoB,CAAC;IAExD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEvC,OAAO;QACL,OAAO;QACP,WAAW,EAAE,UAAU;QACvB,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU;QAC9C,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAqB;IACjD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,EAAqB,CAAC;IACxF,OAAO,GAAG,CAAC,GAAG,CAAC;AACjB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type Database from "better-sqlite3";
2
+ export interface VectorSearchResult {
3
+ id: string;
4
+ summary: string | null;
5
+ type: string;
6
+ topics: string[];
7
+ created_at: string;
8
+ similarity: number;
9
+ }
10
+ export declare function cosineSimilarity(a: number[], b: number[]): number;
11
+ export declare function embeddingToBuffer(embedding: number[]): Buffer;
12
+ export declare function bufferToEmbedding(buf: Buffer): number[];
13
+ export declare function storeEmbedding(db: Database.Database, thoughtId: string, embedding: number[]): boolean;
14
+ export declare function getEmbedding(db: Database.Database, thoughtId: string): number[] | null;
15
+ export declare function searchByEmbedding(db: Database.Database, queryEmbedding: number[], limit?: number, threshold?: number): VectorSearchResult[];
16
+ //# sourceMappingURL=vectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectors.d.ts","sourceRoot":"","sources":["../../src/db/vectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAajE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAM7D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAOvD;AAED,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAYT;AAED,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,GAChB,MAAM,EAAE,GAAG,IAAI,CAMjB;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,cAAc,EAAE,MAAM,EAAE,EACxB,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,kBAAkB,EAAE,CAmCtB"}
@@ -0,0 +1,74 @@
1
+ export function cosineSimilarity(a, b) {
2
+ if (a.length !== b.length || a.length === 0)
3
+ return 0;
4
+ let dot = 0;
5
+ let normA = 0;
6
+ let normB = 0;
7
+ for (let i = 0; i < a.length; i++) {
8
+ dot += a[i] * b[i];
9
+ normA += a[i] * a[i];
10
+ normB += b[i] * b[i];
11
+ }
12
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
13
+ if (denom === 0)
14
+ return 0;
15
+ return dot / denom;
16
+ }
17
+ export function embeddingToBuffer(embedding) {
18
+ const buf = Buffer.alloc(embedding.length * 4);
19
+ for (let i = 0; i < embedding.length; i++) {
20
+ buf.writeFloatLE(embedding[i], i * 4);
21
+ }
22
+ return buf;
23
+ }
24
+ export function bufferToEmbedding(buf) {
25
+ const len = buf.length / 4;
26
+ const result = new Array(len);
27
+ for (let i = 0; i < len; i++) {
28
+ result[i] = buf.readFloatLE(i * 4);
29
+ }
30
+ return result;
31
+ }
32
+ export function storeEmbedding(db, thoughtId, embedding) {
33
+ const row = db
34
+ .prepare("SELECT id FROM thoughts WHERE id = ?")
35
+ .get(thoughtId);
36
+ if (!row)
37
+ return false;
38
+ const buf = embeddingToBuffer(embedding);
39
+ db.prepare("UPDATE thoughts SET embedding = ? WHERE id = ?").run(buf, thoughtId);
40
+ return true;
41
+ }
42
+ export function getEmbedding(db, thoughtId) {
43
+ const row = db
44
+ .prepare("SELECT embedding FROM thoughts WHERE id = ?")
45
+ .get(thoughtId);
46
+ if (!row || !row.embedding)
47
+ return null;
48
+ return bufferToEmbedding(row.embedding);
49
+ }
50
+ export function searchByEmbedding(db, queryEmbedding, limit, threshold) {
51
+ const effectiveLimit = Math.max(1, Math.min(limit ?? 20, 100));
52
+ const effectiveThreshold = threshold ?? 0.3;
53
+ const rows = db
54
+ .prepare("SELECT id, summary, type, topics, created_at, embedding FROM thoughts WHERE embedding IS NOT NULL")
55
+ .all();
56
+ const scored = [];
57
+ for (const row of rows) {
58
+ const emb = bufferToEmbedding(row.embedding);
59
+ const sim = cosineSimilarity(queryEmbedding, emb);
60
+ if (sim >= effectiveThreshold) {
61
+ scored.push({
62
+ id: row.id,
63
+ summary: row.summary,
64
+ type: row.type,
65
+ topics: row.topics ? JSON.parse(row.topics) : [],
66
+ created_at: row.created_at,
67
+ similarity: sim,
68
+ });
69
+ }
70
+ }
71
+ scored.sort((a, b) => b.similarity - a.similarity);
72
+ return scored.slice(0, effectiveLimit);
73
+ }
74
+ //# sourceMappingURL=vectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectors.js","sourceRoot":"","sources":["../../src/db/vectors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { parseArgs } from "./config.js";
4
+ import { createServer } from "./mcp/server.js";
5
+ async function main() {
6
+ const config = parseArgs(process.argv.slice(2));
7
+ if (config === "version") {
8
+ console.log("shelbymcp v0.1.0");
9
+ process.exit(0);
10
+ }
11
+ if (config.verbose) {
12
+ console.error("[INFO] Verbose mode enabled");
13
+ console.error(`[INFO] Database: ${config.dbPath}`);
14
+ }
15
+ const { server } = createServer(config);
16
+ const transport = new StdioServerTransport();
17
+ await server.connect(transport);
18
+ console.error("[INFO] ShelbyMCP running on stdio");
19
+ }
20
+ main().catch((error) => {
21
+ console.error("[FATAL]", error);
22
+ process.exit(1);
23
+ });
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACrD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ShelbyConfig } from "../config.js";
3
+ import { ThoughtDatabase } from "../db/database.js";
4
+ export declare function createServer(config: ShelbyConfig): {
5
+ server: McpServer;
6
+ db: ThoughtDatabase;
7
+ };
8
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAapD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,eAAe,CAAA;CAAE,CAiR7F"}
@@ -0,0 +1,229 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { z } from "zod";
3
+ import { ThoughtDatabase } from "../db/database.js";
4
+ import { VALID_EDGE_TYPES } from "../db/edges.js";
5
+ import { handleCaptureThought } from "../tools/capture.js";
6
+ import { handleSearchThoughts } from "../tools/search.js";
7
+ import { handleListThoughts } from "../tools/list.js";
8
+ import { handleGetThought } from "../tools/get.js";
9
+ import { handleUpdateThought } from "../tools/update.js";
10
+ import { handleDeleteThought } from "../tools/delete.js";
11
+ import { handleManageEdges, handleExploreGraph } from "../tools/graph.js";
12
+ import { handleThoughtStats } from "../tools/stats.js";
13
+ const VERSION = "0.1.0";
14
+ export function createServer(config) {
15
+ const server = new McpServer({
16
+ name: "shelbymcp",
17
+ version: VERSION,
18
+ });
19
+ const db = new ThoughtDatabase(config.dbPath);
20
+ // --- capture_thought ---
21
+ server.registerTool("capture_thought", {
22
+ title: "Capture Thought",
23
+ description: "Store a thought with metadata, topics, and relationships",
24
+ annotations: {
25
+ readOnlyHint: false,
26
+ destructiveHint: false,
27
+ idempotentHint: false,
28
+ openWorldHint: false,
29
+ },
30
+ inputSchema: {
31
+ content: z.string().describe("The thought content").optional(),
32
+ summary: z.string().describe("One-line summary for search results").optional(),
33
+ type: z
34
+ .enum(["note", "decision", "task", "question", "reference", "insight"])
35
+ .describe("Thought type")
36
+ .optional(),
37
+ source: z.string().describe("Source tool or context").optional(),
38
+ project: z.string().describe("Project association").optional(),
39
+ topics: z.array(z.string()).describe("Topic tags").optional(),
40
+ people: z.array(z.string()).describe("People mentioned").optional(),
41
+ metadata: z.record(z.unknown()).describe("Arbitrary metadata").optional(),
42
+ related_to: z.array(z.string()).describe("IDs of related thoughts to link").optional(),
43
+ thoughts: z
44
+ .array(z.object({
45
+ content: z.string(),
46
+ summary: z.string().optional(),
47
+ type: z.string().optional(),
48
+ source: z.string().optional(),
49
+ project: z.string().optional(),
50
+ topics: z.array(z.string()).optional(),
51
+ people: z.array(z.string()).optional(),
52
+ metadata: z.record(z.unknown()).optional(),
53
+ related_to: z.array(z.string()).optional(),
54
+ }))
55
+ .describe("Bulk capture: array of thoughts")
56
+ .optional(),
57
+ },
58
+ }, async (args) => {
59
+ return handleCaptureThought(db, args);
60
+ });
61
+ // --- search_thoughts ---
62
+ server.registerTool("search_thoughts", {
63
+ title: "Search Thoughts",
64
+ description: "Full-text search with optional vector reranking. Returns summaries, not full content.",
65
+ annotations: {
66
+ readOnlyHint: true,
67
+ destructiveHint: false,
68
+ idempotentHint: true,
69
+ openWorldHint: false,
70
+ },
71
+ inputSchema: {
72
+ query: z.string().describe("Full-text search query").optional(),
73
+ embedding: z
74
+ .array(z.number())
75
+ .describe("Embedding vector for similarity search")
76
+ .optional(),
77
+ limit: z.number().describe("Max results (default 20, max 100)").optional(),
78
+ offset: z.number().describe("Pagination offset").optional(),
79
+ type: z.string().describe("Filter by thought type").optional(),
80
+ project: z.string().describe("Filter by project").optional(),
81
+ },
82
+ }, async (args) => {
83
+ return handleSearchThoughts(db, args);
84
+ });
85
+ // --- list_thoughts ---
86
+ server.registerTool("list_thoughts", {
87
+ title: "List Thoughts",
88
+ description: "Browse and filter thoughts by type, topic, person, project, or date range",
89
+ annotations: {
90
+ readOnlyHint: true,
91
+ destructiveHint: false,
92
+ idempotentHint: true,
93
+ openWorldHint: false,
94
+ },
95
+ inputSchema: {
96
+ type: z.string().describe("Filter by thought type").optional(),
97
+ project: z.string().describe("Filter by project").optional(),
98
+ topic: z.string().describe("Filter by topic").optional(),
99
+ person: z.string().describe("Filter by person mentioned").optional(),
100
+ source: z.string().describe("Filter by source").optional(),
101
+ since: z.string().describe("ISO 8601 start date").optional(),
102
+ until: z.string().describe("ISO 8601 end date").optional(),
103
+ limit: z.number().describe("Max results (default 20, max 100)").optional(),
104
+ offset: z.number().describe("Pagination offset").optional(),
105
+ },
106
+ }, async (args) => {
107
+ return handleListThoughts(db, args);
108
+ });
109
+ // --- get_thought ---
110
+ server.registerTool("get_thought", {
111
+ title: "Get Thought",
112
+ description: "Retrieve a specific thought by ID with full content",
113
+ annotations: {
114
+ readOnlyHint: true,
115
+ destructiveHint: false,
116
+ idempotentHint: true,
117
+ openWorldHint: false,
118
+ },
119
+ inputSchema: {
120
+ id: z.string().describe("Thought UUID"),
121
+ },
122
+ }, async (args) => {
123
+ return handleGetThought(db, args);
124
+ });
125
+ // --- update_thought ---
126
+ server.registerTool("update_thought", {
127
+ title: "Update Thought",
128
+ description: "Update content or metadata on one or more thoughts",
129
+ annotations: {
130
+ readOnlyHint: false,
131
+ destructiveHint: false,
132
+ idempotentHint: true,
133
+ openWorldHint: false,
134
+ },
135
+ inputSchema: {
136
+ id: z.string().describe("Single thought ID to update").optional(),
137
+ ids: z.array(z.string()).describe("Multiple thought IDs for bulk update").optional(),
138
+ content: z.string().describe("New content").optional(),
139
+ summary: z.string().describe("New summary").optional(),
140
+ type: z.string().describe("New type").optional(),
141
+ source: z.string().describe("New source").optional(),
142
+ project: z.string().describe("New project").optional(),
143
+ topics: z.array(z.string()).describe("New topics").optional(),
144
+ people: z.array(z.string()).describe("New people").optional(),
145
+ metadata: z.record(z.unknown()).describe("New metadata").optional(),
146
+ visibility: z.string().describe("New visibility").optional(),
147
+ },
148
+ }, async (args) => {
149
+ return handleUpdateThought(db, args);
150
+ });
151
+ // --- delete_thought ---
152
+ server.registerTool("delete_thought", {
153
+ title: "Delete Thought",
154
+ description: "Remove a thought and its edges",
155
+ annotations: {
156
+ readOnlyHint: false,
157
+ destructiveHint: true,
158
+ idempotentHint: true,
159
+ openWorldHint: false,
160
+ },
161
+ inputSchema: {
162
+ id: z.string().describe("Thought UUID to delete"),
163
+ },
164
+ }, async (args) => {
165
+ return handleDeleteThought(db, args);
166
+ });
167
+ // --- manage_edges ---
168
+ server.registerTool("manage_edges", {
169
+ title: "Manage Edges",
170
+ description: "Create or remove typed relationships between thoughts",
171
+ annotations: {
172
+ readOnlyHint: false,
173
+ destructiveHint: false,
174
+ idempotentHint: true,
175
+ openWorldHint: false,
176
+ },
177
+ inputSchema: {
178
+ action: z.enum(["link", "unlink"]).describe("Action to perform"),
179
+ source_id: z.string().describe("Source thought ID"),
180
+ target_id: z.string().describe("Target thought ID"),
181
+ edge_type: z
182
+ .enum(VALID_EDGE_TYPES)
183
+ .describe("Relationship type"),
184
+ metadata: z.record(z.unknown()).describe("Edge metadata").optional(),
185
+ },
186
+ }, async (args) => {
187
+ return handleManageEdges(db, args);
188
+ });
189
+ // --- explore_graph ---
190
+ server.registerTool("explore_graph", {
191
+ title: "Explore Graph",
192
+ description: "Traverse the knowledge graph from a starting thought",
193
+ annotations: {
194
+ readOnlyHint: true,
195
+ destructiveHint: false,
196
+ idempotentHint: true,
197
+ openWorldHint: false,
198
+ },
199
+ inputSchema: {
200
+ thought_id: z.string().describe("Starting thought ID"),
201
+ max_depth: z
202
+ .number()
203
+ .describe("Traversal depth (default 1, max 5)")
204
+ .optional(),
205
+ edge_types: z
206
+ .array(z.string())
207
+ .describe("Filter by edge types")
208
+ .optional(),
209
+ },
210
+ }, async (args) => {
211
+ return handleExploreGraph(db, args);
212
+ });
213
+ // --- thought_stats ---
214
+ server.registerTool("thought_stats", {
215
+ title: "Thought Stats",
216
+ description: "Aggregate statistics about the memory database",
217
+ annotations: {
218
+ readOnlyHint: true,
219
+ destructiveHint: false,
220
+ idempotentHint: true,
221
+ openWorldHint: false,
222
+ },
223
+ inputSchema: {},
224
+ }, async () => {
225
+ return handleThoughtStats(db);
226
+ });
227
+ return { server, db };
228
+ }
229
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ThoughtDatabase } from "../db/database.js";
2
+ import { type ToolResult } from "./helpers.js";
3
+ export declare function handleCaptureThought(db: ThoughtDatabase, args: Record<string, unknown>): ToolResult;
4
+ //# sourceMappingURL=capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/tools/capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AA4EvE,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,eAAe,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,UAAU,CAmDZ"}