@naumu/mcp 0.1.2 → 0.1.3
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/dist/client.d.ts +0 -1
- package/dist/client.js +0 -47
- package/dist/client.js.map +1 -1
- package/dist/tools/ask.js +60 -10
- package/dist/tools/ask.js.map +1 -1
- package/package.json +1 -1
package/dist/client.d.ts
CHANGED
package/dist/client.js
CHANGED
|
@@ -58,52 +58,5 @@ export class NaumuClient {
|
|
|
58
58
|
});
|
|
59
59
|
return this.handleResponse(res);
|
|
60
60
|
}
|
|
61
|
-
async postStream(path, body) {
|
|
62
|
-
const res = await fetch(`${this.baseUrl}${path}`, {
|
|
63
|
-
method: 'POST',
|
|
64
|
-
headers: this.headers(),
|
|
65
|
-
body: JSON.stringify(body),
|
|
66
|
-
});
|
|
67
|
-
if (!res.ok) {
|
|
68
|
-
const text = await res.text().catch(() => 'Unknown error');
|
|
69
|
-
throw new NaumuApiError(res.status, text);
|
|
70
|
-
}
|
|
71
|
-
if (!res.body) {
|
|
72
|
-
throw new NaumuApiError(500, 'No response body');
|
|
73
|
-
}
|
|
74
|
-
const reader = res.body.getReader();
|
|
75
|
-
const decoder = new TextDecoder();
|
|
76
|
-
let buffer = '';
|
|
77
|
-
let lastChunk = null;
|
|
78
|
-
while (true) {
|
|
79
|
-
const { done, value } = await reader.read();
|
|
80
|
-
if (done)
|
|
81
|
-
break;
|
|
82
|
-
buffer += decoder.decode(value, { stream: true });
|
|
83
|
-
const lines = buffer.split('\n');
|
|
84
|
-
buffer = lines.pop() || '';
|
|
85
|
-
for (const line of lines) {
|
|
86
|
-
const trimmed = line.trim();
|
|
87
|
-
if (!trimmed)
|
|
88
|
-
continue;
|
|
89
|
-
try {
|
|
90
|
-
lastChunk = JSON.parse(trimmed);
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
// Skip non-JSON lines
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
// Process remaining buffer
|
|
98
|
-
if (buffer.trim()) {
|
|
99
|
-
try {
|
|
100
|
-
lastChunk = JSON.parse(buffer.trim());
|
|
101
|
-
}
|
|
102
|
-
catch {
|
|
103
|
-
// Skip
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return JSON.stringify(lastChunk);
|
|
107
|
-
}
|
|
108
61
|
}
|
|
109
62
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/ask.js
CHANGED
|
@@ -2,23 +2,73 @@ import { z } from 'zod';
|
|
|
2
2
|
export function registerAsk(server, client) {
|
|
3
3
|
server.registerTool('naumu_ask', {
|
|
4
4
|
title: 'Ask AI',
|
|
5
|
-
description: 'Ask the Naumu AI agent a question about the knowledge graph. The agent can search the graph, analyze data, and suggest changes. Returns the complete AI response
|
|
5
|
+
description: 'Ask the Naumu AI agent a question about the knowledge graph. The agent can search the graph, analyze data, and suggest changes. Returns the complete AI response. Use threadId for follow-up questions in the same conversation.',
|
|
6
6
|
inputSchema: z.object({
|
|
7
7
|
graphId: z.string().describe('The graph ID to query against'),
|
|
8
8
|
question: z.string().describe('Your question about the knowledge graph'),
|
|
9
|
-
threadId: z
|
|
9
|
+
threadId: z
|
|
10
|
+
.string()
|
|
11
|
+
.optional()
|
|
12
|
+
.describe('Thread ID for follow-up questions (omit for new conversation)'),
|
|
10
13
|
}),
|
|
11
14
|
}, async ({ graphId, question, threadId }) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const
|
|
15
|
+
// Create a new thread if none provided
|
|
16
|
+
if (!threadId) {
|
|
17
|
+
const thread = (await client.post('/api/threads', { graphId }));
|
|
18
|
+
threadId = thread.id;
|
|
19
|
+
}
|
|
20
|
+
// Post the question — this triggers the AI agent and waits for completion
|
|
21
|
+
const postResult = (await client.post(`/api/threads/${threadId}/messages`, {
|
|
22
|
+
content: question,
|
|
23
|
+
}));
|
|
24
|
+
// Fetch messages to get the AI response
|
|
25
|
+
const result = (await client.get(`/api/threads/${threadId}/messages`));
|
|
26
|
+
const aiMessages = result.messages.filter((m) => m.isAI);
|
|
27
|
+
const lastAI = aiMessages[aiMessages.length - 1];
|
|
28
|
+
let responseText = lastAI?.content || 'No response received';
|
|
29
|
+
// If content is TipTap JSON, extract plain text
|
|
30
|
+
if (lastAI?.contentFormat === 'tiptap') {
|
|
31
|
+
try {
|
|
32
|
+
responseText = extractPlainText(JSON.parse(responseText));
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Keep as-is if parsing fails
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const response = { threadId, response: responseText };
|
|
39
|
+
if (postResult.diffId) {
|
|
40
|
+
response.pendingDiff = {
|
|
41
|
+
diffId: postResult.diffId,
|
|
42
|
+
status: 'pending_approval',
|
|
43
|
+
note: 'Graph changes were proposed but not yet applied. The user must accept or reject the diff in the Naumu UI.',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
19
46
|
return {
|
|
20
|
-
content: [
|
|
47
|
+
content: [
|
|
48
|
+
{
|
|
49
|
+
type: 'text',
|
|
50
|
+
text: JSON.stringify(response, null, 2),
|
|
51
|
+
},
|
|
52
|
+
],
|
|
21
53
|
};
|
|
22
54
|
});
|
|
23
55
|
}
|
|
56
|
+
function extractPlainText(node) {
|
|
57
|
+
const parts = [];
|
|
58
|
+
function walk(n) {
|
|
59
|
+
if (n.type === 'text' && n.text) {
|
|
60
|
+
parts.push(n.text);
|
|
61
|
+
}
|
|
62
|
+
if (Array.isArray(n.content)) {
|
|
63
|
+
for (const child of n.content) {
|
|
64
|
+
walk(child);
|
|
65
|
+
}
|
|
66
|
+
if (['paragraph', 'heading', 'blockquote', 'listItem'].includes(n.type)) {
|
|
67
|
+
parts.push('\n');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
walk(node);
|
|
72
|
+
return parts.join('').trim();
|
|
73
|
+
}
|
|
24
74
|
//# sourceMappingURL=ask.js.map
|
package/dist/tools/ask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/tools/ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,WAAW,CAAC,MAAiB,EAAE,MAAmB;IACjE,MAAM,CAAC,YAAY,CAClB,WAAW,EACX;QACC,KAAK,EAAE,QAAQ;QACf,WAAW,
|
|
1
|
+
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/tools/ask.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED