@grackle-ai/mcp 0.64.2 → 0.65.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.
@@ -1 +1 @@
1
- {"version":3,"file":"tool-scoping.d.ts","sourceRoot":"","sources":["../src/tool-scoping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEvE,qDAAqD;AACrD,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,CAM3C,CAAC;AAKH,gDAAgD;AAChD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,WAAW,GACvB,cAAc,GAAG,SAAS,CAS5B;AAED,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,GAAG,cAAc,EAAE,CAKnG"}
1
+ {"version":3,"file":"tool-scoping.d.ts","sourceRoot":"","sources":["../src/tool-scoping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEvE,qDAAqD;AACrD,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,CAO3C,CAAC;AAKH,gDAAgD;AAChD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,WAAW,GACvB,cAAc,GAAG,SAAS,CAS5B;AAED,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,GAAG,cAAc,EAAE,CAKnG"}
@@ -5,6 +5,7 @@ export const SCOPED_TOOLS = new Set([
5
5
  "session_send_input",
6
6
  "persona_list", "persona_show",
7
7
  "ipc_spawn", "ipc_write", "ipc_close", "ipc_list_fds",
8
+ "knowledge_search", "knowledge_get_node", "knowledge_create_node",
8
9
  ]);
9
10
  /** Auth types that receive full tool access. */
10
11
  const FULL_ACCESS_TYPES = new Set(["api-key", "oauth"]);
@@ -1 +1 @@
1
- {"version":3,"file":"tool-scoping.js","sourceRoot":"","sources":["../src/tool-scoping.ts"],"names":[],"mappings":"AAGA,qDAAqD;AACrD,MAAM,CAAC,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAC;IACvD,cAAc,EAAE,cAAc;IAC9B,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe;IACtE,oBAAoB;IACpB,cAAc,EAAE,cAAc;IAC9B,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc;CACtD,CAAC,CAAC;AAEH,gDAAgD;AAChD,MAAM,iBAAiB,GAAqC,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1F,gDAAgD;AAChD,MAAM,UAAU,kBAAkB,CAChC,QAAsB,EACtB,IAAY,EACZ,WAAwB;IAExB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,gBAAgB,CAAC,QAAsB,EAAE,WAAwB;IAC/E,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"tool-scoping.js","sourceRoot":"","sources":["../src/tool-scoping.ts"],"names":[],"mappings":"AAGA,qDAAqD;AACrD,MAAM,CAAC,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAC;IACvD,cAAc,EAAE,cAAc;IAC9B,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe;IACtE,oBAAoB;IACpB,cAAc,EAAE,cAAc;IAC9B,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc;IACrD,kBAAkB,EAAE,oBAAoB,EAAE,uBAAuB;CAClE,CAAC,CAAC;AAEH,gDAAgD;AAChD,MAAM,iBAAiB,GAAqC,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1F,gDAAgD;AAChD,MAAM,UAAU,kBAAkB,CAChC,QAAsB,EACtB,IAAY,EACZ,WAAwB;IAExB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,gBAAgB,CAAC,QAAsB,EAAE,WAAwB;IAC/E,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { ToolRegistry } from "../tool-registry.js";
2
2
  /** Create a ToolRegistry pre-populated with all available MCP tools. */
3
3
  export declare function createToolRegistry(): ToolRegistry;
4
+ export { setKnowledgeEmbedder } from "./knowledge.js";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAcnD,wEAAwE;AACxE,wBAAgB,kBAAkB,IAAI,YAAY,CAejD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAenD,wEAAwE;AACxE,wBAAgB,kBAAkB,IAAI,YAAY,CAgBjD;AAED,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -11,6 +11,7 @@ import { tokenTools } from "./token.js";
11
11
  import { configTools } from "./config.js";
12
12
  import { ipcTools } from "./ipc.js";
13
13
  import { usageTools } from "./usage.js";
14
+ import { knowledgeTools } from "./knowledge.js";
14
15
  /** Create a ToolRegistry pre-populated with all available MCP tools. */
15
16
  export function createToolRegistry() {
16
17
  const registry = new ToolRegistry();
@@ -26,6 +27,8 @@ export function createToolRegistry() {
26
27
  registry.registerAll(configTools);
27
28
  registry.registerAll(ipcTools);
28
29
  registry.registerAll(usageTools);
30
+ registry.registerAll(knowledgeTools);
29
31
  return registry;
30
32
  }
33
+ export { setKnowledgeEmbedder } from "./knowledge.js";
31
34
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,wEAAwE;AACxE,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,wEAAwE;AACxE,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACrC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * MCP tools for the Grackle knowledge graph.
3
+ *
4
+ * Exposes high-level operations (search, retrieve, create) to agents.
5
+ * All embedding, graph storage, and traversal details are handled
6
+ * internally — agents interact with clean Grackle concepts.
7
+ *
8
+ * @module
9
+ */
10
+ import { type Embedder } from "@grackle-ai/knowledge";
11
+ import type { ToolDefinition } from "../tool-registry.js";
12
+ /**
13
+ * Set the shared embedder instance for knowledge tools.
14
+ *
15
+ * Called once by the server at startup (before MCP serves requests).
16
+ * Pass `undefined` to clear the embedder (e.g., for testing).
17
+ */
18
+ export declare function setKnowledgeEmbedder(e: Embedder | undefined): void;
19
+ /** Knowledge graph MCP tools. */
20
+ export declare const knowledgeTools: ToolDefinition[];
21
+ //# sourceMappingURL=knowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/tools/knowledge.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EASL,KAAK,QAAQ,EAMd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAW1D;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CAElE;AAiFD,iCAAiC;AACjC,eAAO,MAAM,cAAc,EAAE,cAAc,EAsV1C,CAAC"}
@@ -0,0 +1,355 @@
1
+ /**
2
+ * MCP tools for the Grackle knowledge graph.
3
+ *
4
+ * Exposes high-level operations (search, retrieve, create) to agents.
5
+ * All embedding, graph storage, and traversal details are handled
6
+ * internally — agents interact with clean Grackle concepts.
7
+ *
8
+ * @module
9
+ */
10
+ import { z } from "zod";
11
+ import { knowledgeSearch, getNode, createNativeNode, createEdge, expandNode, expandResults, NATIVE_CATEGORY, EDGE_TYPE, } from "@grackle-ai/knowledge";
12
+ import { jsonResult } from "../result-helpers.js";
13
+ import { logger } from "@grackle-ai/knowledge";
14
+ // ---------------------------------------------------------------------------
15
+ // Embedder accessor — set by the server at startup
16
+ // ---------------------------------------------------------------------------
17
+ /** Module-level embedder instance, initialized by the server. */
18
+ let embedder;
19
+ /**
20
+ * Set the shared embedder instance for knowledge tools.
21
+ *
22
+ * Called once by the server at startup (before MCP serves requests).
23
+ * Pass `undefined` to clear the embedder (e.g., for testing).
24
+ */
25
+ export function setKnowledgeEmbedder(e) {
26
+ embedder = e;
27
+ }
28
+ /** Get the shared embedder, throwing if not initialized. */
29
+ function requireEmbedder() {
30
+ if (!embedder) {
31
+ throw new Error("Knowledge graph not available. The embedder has not been initialized.");
32
+ }
33
+ return embedder;
34
+ }
35
+ // ---------------------------------------------------------------------------
36
+ // Constants
37
+ // ---------------------------------------------------------------------------
38
+ /** Maximum allowed search results. */
39
+ const MAX_SEARCH_LIMIT = 50;
40
+ /** Maximum allowed expansion depth. */
41
+ const MAX_EXPAND_DEPTH = 5;
42
+ // ---------------------------------------------------------------------------
43
+ // Response formatting — hide internal details from agents
44
+ // ---------------------------------------------------------------------------
45
+ /** Format a node for agent consumption. */
46
+ function formatNode(node) {
47
+ const base = {
48
+ id: node.id,
49
+ kind: node.kind,
50
+ workspaceId: node.workspaceId,
51
+ createdAt: node.createdAt,
52
+ updatedAt: node.updatedAt,
53
+ };
54
+ if (node.kind === "reference") {
55
+ base.sourceType = node.sourceType;
56
+ base.sourceId = node.sourceId;
57
+ base.label = node.label;
58
+ }
59
+ else {
60
+ base.category = node.category;
61
+ base.title = node.title;
62
+ base.content = node.content;
63
+ base.tags = node.tags;
64
+ }
65
+ return base;
66
+ }
67
+ /** Format an edge for agent consumption. */
68
+ function formatEdge(edge) {
69
+ return {
70
+ fromId: edge.fromId,
71
+ toId: edge.toId,
72
+ type: edge.type,
73
+ ...(edge.metadata !== undefined ? { metadata: edge.metadata } : {}),
74
+ };
75
+ }
76
+ /** Format a search result for agent consumption. */
77
+ function formatSearchResult(result) {
78
+ return {
79
+ score: Math.round(result.score * 1000) / 1000,
80
+ node: formatNode(result.node),
81
+ edges: result.edges.map(formatEdge),
82
+ };
83
+ }
84
+ /** Clamp a numeric input to a safe integer range. */
85
+ function clampInt(value, min, max, defaultValue) {
86
+ if (value === undefined) {
87
+ return defaultValue;
88
+ }
89
+ return Math.max(min, Math.min(max, Math.floor(value)));
90
+ }
91
+ // ---------------------------------------------------------------------------
92
+ // Tool definitions
93
+ // ---------------------------------------------------------------------------
94
+ /** Knowledge graph MCP tools. */
95
+ export const knowledgeTools = [
96
+ {
97
+ name: "knowledge_search",
98
+ group: "knowledge",
99
+ description: "Search the knowledge graph using natural language. Returns relevant nodes " +
100
+ "(decisions, insights, task references, findings) ranked by semantic similarity.",
101
+ inputSchema: z.object({
102
+ query: z.string().describe("Natural language search query"),
103
+ limit: z
104
+ .number()
105
+ .int()
106
+ .min(1)
107
+ .max(MAX_SEARCH_LIMIT)
108
+ .optional()
109
+ .describe(`Maximum number of results to return (default 10, max ${MAX_SEARCH_LIMIT})`),
110
+ workspaceId: z
111
+ .string()
112
+ .optional()
113
+ .describe("Filter results to a specific workspace"),
114
+ expand: z
115
+ .boolean()
116
+ .optional()
117
+ .describe("If true, also return nodes connected to the search results (default false)"),
118
+ expandDepth: z
119
+ .number()
120
+ .int()
121
+ .min(1)
122
+ .max(MAX_EXPAND_DEPTH)
123
+ .optional()
124
+ .describe(`How many hops to traverse when expanding (default 1, max ${MAX_EXPAND_DEPTH})`),
125
+ }),
126
+ rpcMethod: "knowledgeSearch",
127
+ mutating: false,
128
+ annotations: {
129
+ readOnlyHint: true,
130
+ destructiveHint: false,
131
+ idempotentHint: true,
132
+ openWorldHint: false,
133
+ },
134
+ async handler(args) {
135
+ const { query, limit, workspaceId, expand, expandDepth, } = args;
136
+ try {
137
+ const safeLimit = clampInt(limit, 1, MAX_SEARCH_LIMIT, 10);
138
+ const results = await knowledgeSearch(query, requireEmbedder(), { limit: safeLimit, workspaceId });
139
+ const formattedResults = results.map(formatSearchResult);
140
+ let neighbors;
141
+ let neighborEdges;
142
+ if (expand && results.length > 0) {
143
+ const safeDepth = clampInt(expandDepth, 1, MAX_EXPAND_DEPTH, 1);
144
+ const expansion = await expandResults(results, {
145
+ depth: safeDepth,
146
+ });
147
+ neighbors = expansion.nodes.map(formatNode);
148
+ neighborEdges = expansion.edges.map(formatEdge);
149
+ }
150
+ return jsonResult({
151
+ results: formattedResults,
152
+ ...(neighbors !== undefined ? { neighbors, neighborEdges } : {}),
153
+ });
154
+ }
155
+ catch (error) {
156
+ return {
157
+ content: [
158
+ {
159
+ type: "text",
160
+ text: JSON.stringify({
161
+ error: error instanceof Error
162
+ ? error.message
163
+ : "Knowledge search failed",
164
+ }, null, 2),
165
+ },
166
+ ],
167
+ isError: true,
168
+ };
169
+ }
170
+ },
171
+ },
172
+ {
173
+ name: "knowledge_get_node",
174
+ group: "knowledge",
175
+ description: "Retrieve a specific node from the knowledge graph by its ID, " +
176
+ "including all edges connecting it to other nodes.",
177
+ inputSchema: z.object({
178
+ id: z.string().describe("The node ID to retrieve"),
179
+ expand: z
180
+ .boolean()
181
+ .optional()
182
+ .describe("If true, also return neighbor nodes within expandDepth hops (default false)"),
183
+ expandDepth: z
184
+ .number()
185
+ .int()
186
+ .min(1)
187
+ .max(MAX_EXPAND_DEPTH)
188
+ .optional()
189
+ .describe(`How many hops to traverse when expanding (default 1, max ${MAX_EXPAND_DEPTH})`),
190
+ }),
191
+ rpcMethod: "knowledgeGetNode",
192
+ mutating: false,
193
+ annotations: {
194
+ readOnlyHint: true,
195
+ destructiveHint: false,
196
+ idempotentHint: true,
197
+ openWorldHint: false,
198
+ },
199
+ async handler(args) {
200
+ const { id, expand, expandDepth } = args;
201
+ try {
202
+ const result = await getNode(id);
203
+ if (!result) {
204
+ return {
205
+ content: [
206
+ {
207
+ type: "text",
208
+ text: JSON.stringify({ error: `Node not found: ${id}` }, null, 2),
209
+ },
210
+ ],
211
+ isError: true,
212
+ };
213
+ }
214
+ const response = {
215
+ node: formatNode(result.node),
216
+ edges: result.edges.map(formatEdge),
217
+ };
218
+ if (expand) {
219
+ const safeDepth = clampInt(expandDepth, 1, MAX_EXPAND_DEPTH, 1);
220
+ const expansion = await expandNode(id, {
221
+ depth: safeDepth,
222
+ });
223
+ response.neighbors = expansion.nodes.map(formatNode);
224
+ response.neighborEdges = expansion.edges.map(formatEdge);
225
+ }
226
+ return jsonResult(response);
227
+ }
228
+ catch (error) {
229
+ return {
230
+ content: [
231
+ {
232
+ type: "text",
233
+ text: JSON.stringify({
234
+ error: error instanceof Error
235
+ ? error.message
236
+ : "Failed to retrieve node",
237
+ }, null, 2),
238
+ },
239
+ ],
240
+ isError: true,
241
+ };
242
+ }
243
+ },
244
+ },
245
+ {
246
+ name: "knowledge_create_node",
247
+ group: "knowledge",
248
+ description: "Create a new knowledge entry (decision, insight, concept, or snippet). " +
249
+ "The content is automatically embedded for future semantic search. " +
250
+ "Optionally link it to existing nodes.",
251
+ inputSchema: z.object({
252
+ title: z.string().describe("Title or summary of the knowledge entry"),
253
+ content: z
254
+ .string()
255
+ .describe("Full content to store and embed for search"),
256
+ category: z
257
+ .string()
258
+ .optional()
259
+ .describe("Category: decision, insight, concept, snippet (default: insight)"),
260
+ tags: z
261
+ .array(z.string())
262
+ .optional()
263
+ .describe("Tags for categorization"),
264
+ workspaceId: z
265
+ .string()
266
+ .optional()
267
+ .describe("Workspace to scope this entry to"),
268
+ edges: z
269
+ .array(z.object({
270
+ toId: z.string().describe("ID of the node to link to"),
271
+ type: z
272
+ .enum([
273
+ EDGE_TYPE.RELATES_TO,
274
+ EDGE_TYPE.DEPENDS_ON,
275
+ EDGE_TYPE.DERIVED_FROM,
276
+ EDGE_TYPE.MENTIONS,
277
+ EDGE_TYPE.PART_OF,
278
+ ])
279
+ .describe("Relationship type: RELATES_TO, DEPENDS_ON, DERIVED_FROM, MENTIONS, PART_OF"),
280
+ }))
281
+ .optional()
282
+ .describe("Edges to create from this node to existing nodes"),
283
+ }),
284
+ rpcMethod: "knowledgeCreateNode",
285
+ mutating: true,
286
+ annotations: {
287
+ readOnlyHint: false,
288
+ destructiveHint: false,
289
+ idempotentHint: false,
290
+ openWorldHint: false,
291
+ },
292
+ async handler(args, _client, authContext) {
293
+ const { title, content, category, tags, workspaceId, edges, } = args;
294
+ try {
295
+ const emb = requireEmbedder();
296
+ const { vector } = await emb.embed(`${title} ${content}`);
297
+ // For scoped callers, always use the auth context workspace.
298
+ // For full-access callers, use the provided workspace or empty.
299
+ const resolvedWorkspaceId = authContext?.type === "scoped"
300
+ ? authContext.workspaceId ?? ""
301
+ : workspaceId ?? "";
302
+ const nodeId = await createNativeNode({
303
+ category: category ?? NATIVE_CATEGORY.INSIGHT,
304
+ title,
305
+ content,
306
+ tags: tags ?? [],
307
+ embedding: vector,
308
+ workspaceId: resolvedWorkspaceId,
309
+ });
310
+ // Create edges if requested
311
+ const createdEdges = [];
312
+ if (edges) {
313
+ for (const edge of edges) {
314
+ try {
315
+ await createEdge(nodeId, edge.toId, edge.type);
316
+ createdEdges.push({ toId: edge.toId, type: edge.type });
317
+ }
318
+ catch (edgeError) {
319
+ logger.warn({ nodeId, toId: edge.toId, type: edge.type, err: edgeError }, "Failed to create edge for knowledge node");
320
+ createdEdges.push({
321
+ toId: edge.toId,
322
+ type: edge.type,
323
+ error: edgeError instanceof Error
324
+ ? edgeError.message
325
+ : "Failed to create edge",
326
+ });
327
+ }
328
+ }
329
+ }
330
+ return jsonResult({
331
+ id: nodeId,
332
+ title,
333
+ category: category ?? NATIVE_CATEGORY.INSIGHT,
334
+ ...(createdEdges.length > 0 ? { edges: createdEdges } : {}),
335
+ });
336
+ }
337
+ catch (error) {
338
+ return {
339
+ content: [
340
+ {
341
+ type: "text",
342
+ text: JSON.stringify({
343
+ error: error instanceof Error
344
+ ? error.message
345
+ : "Failed to create knowledge entry",
346
+ }, null, 2),
347
+ },
348
+ ],
349
+ isError: true,
350
+ };
351
+ }
352
+ },
353
+ },
354
+ ];
355
+ //# sourceMappingURL=knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/tools/knowledge.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grackle-ai/mcp",
3
- "version": "0.64.2",
3
+ "version": "0.65.0",
4
4
  "description": "MCP (Model Context Protocol) server for Grackle — translates MCP tool calls to ConnectRPC",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -33,7 +33,8 @@
33
33
  "@modelcontextprotocol/sdk": "^1.27.0",
34
34
  "pino": "^10.3.1",
35
35
  "zod": "^4.0.0",
36
- "@grackle-ai/common": "0.64.2"
36
+ "@grackle-ai/common": "0.65.0",
37
+ "@grackle-ai/knowledge": "0.65.0"
37
38
  },
38
39
  "devDependencies": {
39
40
  "@rushstack/heft": "1.2.4",