@4da/mcp-server 3.2.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.
- package/README.md +135 -0
- package/dist/db.d.ts +64 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +578 -0
- package/dist/db.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +422 -0
- package/dist/index.js.map +1 -0
- package/dist/llm.d.ts +144 -0
- package/dist/llm.d.ts.map +1 -0
- package/dist/llm.js +447 -0
- package/dist/llm.js.map +1 -0
- package/dist/output-manager.d.ts +156 -0
- package/dist/output-manager.d.ts.map +1 -0
- package/dist/output-manager.js +156 -0
- package/dist/output-manager.js.map +1 -0
- package/dist/schema-registry.d.ts +46 -0
- package/dist/schema-registry.d.ts.map +1 -0
- package/dist/schema-registry.js +133 -0
- package/dist/schema-registry.js.map +1 -0
- package/dist/schemas/config-validator.json +18 -0
- package/dist/schemas/context-analysis.json +25 -0
- package/dist/schemas/daily-briefing.json +34 -0
- package/dist/schemas/explain-relevance.json +19 -0
- package/dist/schemas/get-actionable-signals.json +29 -0
- package/dist/schemas/get-context.json +17 -0
- package/dist/schemas/get-relevant-content.json +26 -0
- package/dist/schemas/llm-status.json +13 -0
- package/dist/schemas/record-feedback.json +24 -0
- package/dist/schemas/score-autopsy.json +30 -0
- package/dist/schemas/source-health.json +17 -0
- package/dist/schemas/topic-connections.json +34 -0
- package/dist/schemas/trend-analysis.json +29 -0
- package/dist/tools/attention-report.d.ts +39 -0
- package/dist/tools/attention-report.d.ts.map +1 -0
- package/dist/tools/attention-report.js +72 -0
- package/dist/tools/attention-report.js.map +1 -0
- package/dist/tools/config-validator.d.ts +59 -0
- package/dist/tools/config-validator.d.ts.map +1 -0
- package/dist/tools/config-validator.js +375 -0
- package/dist/tools/config-validator.js.map +1 -0
- package/dist/tools/context-analysis.d.ts +108 -0
- package/dist/tools/context-analysis.d.ts.map +1 -0
- package/dist/tools/context-analysis.js +300 -0
- package/dist/tools/context-analysis.js.map +1 -0
- package/dist/tools/daily-briefing.d.ts +103 -0
- package/dist/tools/daily-briefing.d.ts.map +1 -0
- package/dist/tools/daily-briefing.js +278 -0
- package/dist/tools/daily-briefing.js.map +1 -0
- package/dist/tools/explain-relevance.d.ts +36 -0
- package/dist/tools/explain-relevance.d.ts.map +1 -0
- package/dist/tools/explain-relevance.js +50 -0
- package/dist/tools/explain-relevance.js.map +1 -0
- package/dist/tools/export-context.d.ts +43 -0
- package/dist/tools/export-context.d.ts.map +1 -0
- package/dist/tools/export-context.js +104 -0
- package/dist/tools/export-context.js.map +1 -0
- package/dist/tools/get-actionable-signals.d.ts +65 -0
- package/dist/tools/get-actionable-signals.d.ts.map +1 -0
- package/dist/tools/get-actionable-signals.js +268 -0
- package/dist/tools/get-actionable-signals.js.map +1 -0
- package/dist/tools/get-context.d.ts +34 -0
- package/dist/tools/get-context.d.ts.map +1 -0
- package/dist/tools/get-context.js +43 -0
- package/dist/tools/get-context.js.map +1 -0
- package/dist/tools/get-relevant-content.d.ts +44 -0
- package/dist/tools/get-relevant-content.d.ts.map +1 -0
- package/dist/tools/get-relevant-content.js +56 -0
- package/dist/tools/get-relevant-content.js.map +1 -0
- package/dist/tools/index.d.ts +40 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +44 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/knowledge-gaps.d.ts +36 -0
- package/dist/tools/knowledge-gaps.d.ts.map +1 -0
- package/dist/tools/knowledge-gaps.js +76 -0
- package/dist/tools/knowledge-gaps.js.map +1 -0
- package/dist/tools/llm-status.d.ts +45 -0
- package/dist/tools/llm-status.d.ts.map +1 -0
- package/dist/tools/llm-status.js +92 -0
- package/dist/tools/llm-status.js.map +1 -0
- package/dist/tools/project-health.d.ts +41 -0
- package/dist/tools/project-health.d.ts.map +1 -0
- package/dist/tools/project-health.js +71 -0
- package/dist/tools/project-health.js.map +1 -0
- package/dist/tools/record-feedback.d.ts +39 -0
- package/dist/tools/record-feedback.d.ts.map +1 -0
- package/dist/tools/record-feedback.js +60 -0
- package/dist/tools/record-feedback.js.map +1 -0
- package/dist/tools/reverse-mentions.d.ts +38 -0
- package/dist/tools/reverse-mentions.d.ts.map +1 -0
- package/dist/tools/reverse-mentions.js +57 -0
- package/dist/tools/reverse-mentions.js.map +1 -0
- package/dist/tools/score-autopsy.d.ts +93 -0
- package/dist/tools/score-autopsy.d.ts.map +1 -0
- package/dist/tools/score-autopsy.js +288 -0
- package/dist/tools/score-autopsy.js.map +1 -0
- package/dist/tools/semantic-shifts.d.ts +37 -0
- package/dist/tools/semantic-shifts.d.ts.map +1 -0
- package/dist/tools/semantic-shifts.js +73 -0
- package/dist/tools/semantic-shifts.js.map +1 -0
- package/dist/tools/signal-chains.d.ts +45 -0
- package/dist/tools/signal-chains.d.ts.map +1 -0
- package/dist/tools/signal-chains.js +60 -0
- package/dist/tools/signal-chains.js.map +1 -0
- package/dist/tools/source-health.d.ts +64 -0
- package/dist/tools/source-health.d.ts.map +1 -0
- package/dist/tools/source-health.js +176 -0
- package/dist/tools/source-health.js.map +1 -0
- package/dist/tools/topic-connections.d.ts +112 -0
- package/dist/tools/topic-connections.d.ts.map +1 -0
- package/dist/tools/topic-connections.js +318 -0
- package/dist/tools/topic-connections.js.map +1 -0
- package/dist/tools/trend-analysis.d.ts +105 -0
- package/dist/tools/trend-analysis.d.ts.map +1 -0
- package/dist/tools/trend-analysis.js +295 -0
- package/dist/tools/trend-analysis.js.map +1 -0
- package/dist/types.d.ts +163 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/package.json +61 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* 4DA MCP Server - Internal Use Only
|
|
4
|
+
*
|
|
5
|
+
* This MCP server provides tool and resource access to 4DA's local database
|
|
6
|
+
* for use with Claude Desktop and other MCP-compatible hosts.
|
|
7
|
+
*
|
|
8
|
+
* IMPORTANT: This server is designed for LOCAL use only. It reads from the
|
|
9
|
+
* user's local 4DA SQLite database. It does NOT implement authentication
|
|
10
|
+
* or authorization - it trusts the local environment.
|
|
11
|
+
*
|
|
12
|
+
* Do NOT expose this server over a network without adding proper auth.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* 4DA MCP Server v3.0 - AI Superpower Edition
|
|
16
|
+
*
|
|
17
|
+
* Exposes 4DA's personalized content filtering to AI agents via MCP.
|
|
18
|
+
* Now with local LLM support via Ollama for fully offline AI synthesis.
|
|
19
|
+
*
|
|
20
|
+
* Core Tools (4):
|
|
21
|
+
* - get_relevant_content: Get filtered relevant content from 4DA
|
|
22
|
+
* - get_context: Get the user's context (what 4DA knows about them)
|
|
23
|
+
* - explain_relevance: Explain why an item was considered relevant
|
|
24
|
+
* - record_feedback: Record user feedback for learning
|
|
25
|
+
*
|
|
26
|
+
* AI Superpower Tools (8):
|
|
27
|
+
* - score_autopsy: Deep forensic analysis of relevance scores (AI-powered)
|
|
28
|
+
* - trend_analysis: Statistical patterns and anomaly detection (AI-powered)
|
|
29
|
+
* - daily_briefing: Executive summaries of discoveries (AI-powered)
|
|
30
|
+
* - context_analysis: Optimize your context for better relevance (AI-powered)
|
|
31
|
+
* - source_health: Diagnose source pipeline issues
|
|
32
|
+
* - topic_connections: Build knowledge graphs from content (AI-powered)
|
|
33
|
+
* - config_validator: Validate configuration and detect issues
|
|
34
|
+
* - llm_status: Check LLM configuration and Ollama availability
|
|
35
|
+
*/
|
|
36
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
37
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
38
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
39
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
40
|
+
import { join, dirname } from "node:path";
|
|
41
|
+
import { fileURLToPath } from "node:url";
|
|
42
|
+
import { homedir } from "node:os";
|
|
43
|
+
// Schema registry for slim tool listing
|
|
44
|
+
import { getSlimToolList, getSchemaResources, hasToolSchema, getSchemaFilename } from "./schema-registry.js";
|
|
45
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
46
|
+
const __dirname = dirname(__filename);
|
|
47
|
+
import { createDatabase } from "./db.js";
|
|
48
|
+
// Core Tools
|
|
49
|
+
import { executeGetRelevantContent, executeGetContext, executeExplainRelevance, executeRecordFeedback, } from "./tools/index.js";
|
|
50
|
+
// Superpower Tools
|
|
51
|
+
import { executeScoreAutopsy, executeTrendAnalysis, executeDailyBriefing, executeContextAnalysis, executeSourceHealth, executeTopicConnections, executeConfigValidator, executeLLMStatus, executeGetActionableSignals, executeExportContextPacket, executeKnowledgeGaps, executeSignalChains, executeSemanticShifts, executeReverseMentions, executeAttentionReport, executeProjectHealth, } from "./tools/index.js";
|
|
52
|
+
// =============================================================================
|
|
53
|
+
// Server Setup
|
|
54
|
+
// =============================================================================
|
|
55
|
+
const server = new Server({
|
|
56
|
+
name: "4da-server",
|
|
57
|
+
version: "3.2.0", // Dynamic Context Discovery Edition
|
|
58
|
+
}, {
|
|
59
|
+
capabilities: {
|
|
60
|
+
tools: {},
|
|
61
|
+
resources: {}, // Enable MCP Resources for lazy schema loading
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
// Database instance (lazy initialized)
|
|
65
|
+
let db = null;
|
|
66
|
+
/**
|
|
67
|
+
* Get or create database connection
|
|
68
|
+
*/
|
|
69
|
+
function getDatabase() {
|
|
70
|
+
if (!db) {
|
|
71
|
+
const dbPath = process.env.FOURDA_DB_PATH;
|
|
72
|
+
db = createDatabase(dbPath);
|
|
73
|
+
}
|
|
74
|
+
return db;
|
|
75
|
+
}
|
|
76
|
+
// =============================================================================
|
|
77
|
+
// Tool Handlers
|
|
78
|
+
// =============================================================================
|
|
79
|
+
/**
|
|
80
|
+
* List available tools (SLIM)
|
|
81
|
+
*
|
|
82
|
+
* Returns one-liner descriptions only (~500 tokens vs ~4500).
|
|
83
|
+
* Full schemas available via MCP Resources: 4da://schema/{tool_name}
|
|
84
|
+
*/
|
|
85
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
86
|
+
return {
|
|
87
|
+
tools: getSlimToolList(),
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
/**
|
|
91
|
+
* List schema resources
|
|
92
|
+
*
|
|
93
|
+
* Exposes full tool schemas as MCP Resources for lazy loading.
|
|
94
|
+
* Also exposes skill manifest for agent dispatch.
|
|
95
|
+
*/
|
|
96
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
97
|
+
const resources = [
|
|
98
|
+
...getSchemaResources(),
|
|
99
|
+
// Skill manifest for agent dispatch
|
|
100
|
+
{
|
|
101
|
+
uri: "4da://skills",
|
|
102
|
+
name: "Skill manifest",
|
|
103
|
+
description: "Registry of 4DA skills for Claude Code agent dispatch",
|
|
104
|
+
mimeType: "application/json",
|
|
105
|
+
},
|
|
106
|
+
];
|
|
107
|
+
return { resources };
|
|
108
|
+
});
|
|
109
|
+
/**
|
|
110
|
+
* Read a resource (schema or skill manifest)
|
|
111
|
+
*/
|
|
112
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
113
|
+
const uri = request.params.uri;
|
|
114
|
+
// Handle skill manifest
|
|
115
|
+
if (uri === "4da://skills") {
|
|
116
|
+
const skillsPath = join(homedir(), ".local", "share", "4da", "skills", "registry.json");
|
|
117
|
+
if (!existsSync(skillsPath)) {
|
|
118
|
+
throw new Error("Skill manifest not found. Run 4DA setup to create it.");
|
|
119
|
+
}
|
|
120
|
+
const skillsContent = readFileSync(skillsPath, "utf-8");
|
|
121
|
+
return {
|
|
122
|
+
contents: [
|
|
123
|
+
{
|
|
124
|
+
uri,
|
|
125
|
+
mimeType: "application/json",
|
|
126
|
+
text: skillsContent,
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// Parse tool name from URI: 4da://schema/{tool_name}
|
|
132
|
+
const match = uri.match(/^4da:\/\/schema\/(.+)$/);
|
|
133
|
+
if (!match) {
|
|
134
|
+
throw new Error(`Invalid resource URI: ${uri}`);
|
|
135
|
+
}
|
|
136
|
+
const toolName = match[1];
|
|
137
|
+
if (!hasToolSchema(toolName)) {
|
|
138
|
+
throw new Error(`Unknown tool: ${toolName}`);
|
|
139
|
+
}
|
|
140
|
+
const schemaFile = getSchemaFilename(toolName);
|
|
141
|
+
if (!schemaFile) {
|
|
142
|
+
throw new Error(`No schema file for tool: ${toolName}`);
|
|
143
|
+
}
|
|
144
|
+
// Read schema from file
|
|
145
|
+
const schemaPath = join(__dirname, "schemas", schemaFile);
|
|
146
|
+
const schemaContent = readFileSync(schemaPath, "utf-8");
|
|
147
|
+
return {
|
|
148
|
+
contents: [
|
|
149
|
+
{
|
|
150
|
+
uri,
|
|
151
|
+
mimeType: "application/json",
|
|
152
|
+
text: schemaContent,
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
};
|
|
156
|
+
});
|
|
157
|
+
/**
|
|
158
|
+
* Execute a tool
|
|
159
|
+
*/
|
|
160
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
161
|
+
const { name, arguments: args } = request.params;
|
|
162
|
+
try {
|
|
163
|
+
const database = getDatabase();
|
|
164
|
+
switch (name) {
|
|
165
|
+
case "get_relevant_content": {
|
|
166
|
+
const params = (args || {});
|
|
167
|
+
const result = executeGetRelevantContent(database, params);
|
|
168
|
+
return {
|
|
169
|
+
content: [
|
|
170
|
+
{
|
|
171
|
+
type: "text",
|
|
172
|
+
text: JSON.stringify(result, null, 2),
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
case "get_context": {
|
|
178
|
+
const params = (args || {});
|
|
179
|
+
const result = executeGetContext(database, params);
|
|
180
|
+
return {
|
|
181
|
+
content: [
|
|
182
|
+
{
|
|
183
|
+
type: "text",
|
|
184
|
+
text: JSON.stringify(result, null, 2),
|
|
185
|
+
},
|
|
186
|
+
],
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
case "explain_relevance": {
|
|
190
|
+
const params = (args || {});
|
|
191
|
+
const result = executeExplainRelevance(database, params);
|
|
192
|
+
return {
|
|
193
|
+
content: [
|
|
194
|
+
{
|
|
195
|
+
type: "text",
|
|
196
|
+
text: JSON.stringify(result, null, 2),
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
case "record_feedback": {
|
|
202
|
+
const params = (args || {});
|
|
203
|
+
const result = executeRecordFeedback(database, params);
|
|
204
|
+
return {
|
|
205
|
+
content: [
|
|
206
|
+
{
|
|
207
|
+
type: "text",
|
|
208
|
+
text: JSON.stringify(result, null, 2),
|
|
209
|
+
},
|
|
210
|
+
],
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
// =========================================================================
|
|
214
|
+
// Superpower Tools (async with LLM synthesis)
|
|
215
|
+
// =========================================================================
|
|
216
|
+
case "score_autopsy": {
|
|
217
|
+
const params = (args || {});
|
|
218
|
+
const result = await executeScoreAutopsy(database, params);
|
|
219
|
+
return {
|
|
220
|
+
content: [
|
|
221
|
+
{
|
|
222
|
+
type: "text",
|
|
223
|
+
text: JSON.stringify(result, null, 2),
|
|
224
|
+
},
|
|
225
|
+
],
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
case "trend_analysis": {
|
|
229
|
+
const params = (args || {});
|
|
230
|
+
const result = await executeTrendAnalysis(database, params);
|
|
231
|
+
return {
|
|
232
|
+
content: [
|
|
233
|
+
{
|
|
234
|
+
type: "text",
|
|
235
|
+
text: JSON.stringify(result, null, 2),
|
|
236
|
+
},
|
|
237
|
+
],
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
case "daily_briefing": {
|
|
241
|
+
const params = (args || {});
|
|
242
|
+
const result = await executeDailyBriefing(database, params);
|
|
243
|
+
return {
|
|
244
|
+
content: [
|
|
245
|
+
{
|
|
246
|
+
type: "text",
|
|
247
|
+
text: JSON.stringify(result, null, 2),
|
|
248
|
+
},
|
|
249
|
+
],
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
case "context_analysis": {
|
|
253
|
+
const params = (args || {});
|
|
254
|
+
const result = await executeContextAnalysis(database, params);
|
|
255
|
+
return {
|
|
256
|
+
content: [
|
|
257
|
+
{
|
|
258
|
+
type: "text",
|
|
259
|
+
text: JSON.stringify(result, null, 2),
|
|
260
|
+
},
|
|
261
|
+
],
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
case "source_health": {
|
|
265
|
+
const params = (args || {});
|
|
266
|
+
const result = executeSourceHealth(database, params);
|
|
267
|
+
return {
|
|
268
|
+
content: [
|
|
269
|
+
{
|
|
270
|
+
type: "text",
|
|
271
|
+
text: JSON.stringify(result, null, 2),
|
|
272
|
+
},
|
|
273
|
+
],
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
case "topic_connections": {
|
|
277
|
+
const params = (args || {});
|
|
278
|
+
const result = await executeTopicConnections(database, params);
|
|
279
|
+
return {
|
|
280
|
+
content: [
|
|
281
|
+
{
|
|
282
|
+
type: "text",
|
|
283
|
+
text: JSON.stringify(result, null, 2),
|
|
284
|
+
},
|
|
285
|
+
],
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
case "config_validator": {
|
|
289
|
+
const params = (args || {});
|
|
290
|
+
const result = executeConfigValidator(database, params);
|
|
291
|
+
return {
|
|
292
|
+
content: [
|
|
293
|
+
{
|
|
294
|
+
type: "text",
|
|
295
|
+
text: JSON.stringify(result, null, 2),
|
|
296
|
+
},
|
|
297
|
+
],
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
case "llm_status": {
|
|
301
|
+
const params = (args || {});
|
|
302
|
+
const result = await executeLLMStatus(database, params);
|
|
303
|
+
return {
|
|
304
|
+
content: [
|
|
305
|
+
{
|
|
306
|
+
type: "text",
|
|
307
|
+
text: JSON.stringify(result, null, 2),
|
|
308
|
+
},
|
|
309
|
+
],
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
case "get_actionable_signals": {
|
|
313
|
+
const params = (args || {});
|
|
314
|
+
const result = executeGetActionableSignals(database, params);
|
|
315
|
+
return {
|
|
316
|
+
content: [
|
|
317
|
+
{
|
|
318
|
+
type: "text",
|
|
319
|
+
text: JSON.stringify(result, null, 2),
|
|
320
|
+
},
|
|
321
|
+
],
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
// =========================================================================
|
|
325
|
+
// Innovation Feature Tools
|
|
326
|
+
// =========================================================================
|
|
327
|
+
case "export_context_packet": {
|
|
328
|
+
const params = (args || {});
|
|
329
|
+
const result = executeExportContextPacket(database, params);
|
|
330
|
+
return {
|
|
331
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
case "knowledge_gaps": {
|
|
335
|
+
const params = (args || {});
|
|
336
|
+
const result = executeKnowledgeGaps(database, params);
|
|
337
|
+
return {
|
|
338
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
case "signal_chains": {
|
|
342
|
+
const params = (args || {});
|
|
343
|
+
const result = executeSignalChains(database, params);
|
|
344
|
+
return {
|
|
345
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
case "semantic_shifts": {
|
|
349
|
+
const params = (args || {});
|
|
350
|
+
const result = executeSemanticShifts(database, params);
|
|
351
|
+
return {
|
|
352
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
case "reverse_mentions": {
|
|
356
|
+
const params = (args || {});
|
|
357
|
+
const result = executeReverseMentions(database, params);
|
|
358
|
+
return {
|
|
359
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
case "attention_report": {
|
|
363
|
+
const params = (args || {});
|
|
364
|
+
const result = executeAttentionReport(database, params);
|
|
365
|
+
return {
|
|
366
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
case "project_health": {
|
|
370
|
+
const params = (args || {});
|
|
371
|
+
const result = executeProjectHealth(database, params);
|
|
372
|
+
return {
|
|
373
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
default:
|
|
377
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
catch (error) {
|
|
381
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
382
|
+
return {
|
|
383
|
+
content: [
|
|
384
|
+
{
|
|
385
|
+
type: "text",
|
|
386
|
+
text: JSON.stringify({ error: errorMessage }, null, 2),
|
|
387
|
+
},
|
|
388
|
+
],
|
|
389
|
+
isError: true,
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
});
|
|
393
|
+
// =============================================================================
|
|
394
|
+
// Server Lifecycle
|
|
395
|
+
// =============================================================================
|
|
396
|
+
/**
|
|
397
|
+
* Start the MCP server
|
|
398
|
+
*/
|
|
399
|
+
async function main() {
|
|
400
|
+
const transport = new StdioServerTransport();
|
|
401
|
+
await server.connect(transport);
|
|
402
|
+
// Handle graceful shutdown
|
|
403
|
+
process.on("SIGINT", () => {
|
|
404
|
+
if (db) {
|
|
405
|
+
db.close();
|
|
406
|
+
}
|
|
407
|
+
process.exit(0);
|
|
408
|
+
});
|
|
409
|
+
process.on("SIGTERM", () => {
|
|
410
|
+
if (db) {
|
|
411
|
+
db.close();
|
|
412
|
+
}
|
|
413
|
+
process.exit(0);
|
|
414
|
+
});
|
|
415
|
+
// Log startup (to stderr so it doesn't interfere with MCP protocol)
|
|
416
|
+
console.error("4DA MCP Server v3.3 (Intelligence Platform) started - 20 tools, compact output, lazy schemas");
|
|
417
|
+
}
|
|
418
|
+
main().catch((error) => {
|
|
419
|
+
console.error("Fatal error:", error);
|
|
420
|
+
process.exit(1);
|
|
421
|
+
});
|
|
422
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/llm.d.ts
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Client for 4DA MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Provides intelligence synthesis over raw tool data.
|
|
5
|
+
* Supports Anthropic Claude, OpenAI, and Ollama (local).
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Tiered model selection (use smaller models for simpler tasks)
|
|
9
|
+
* - Optimized prompts for local models
|
|
10
|
+
* - Automatic fallback
|
|
11
|
+
*/
|
|
12
|
+
export interface LLMConfig {
|
|
13
|
+
provider: "anthropic" | "openai" | "ollama" | null;
|
|
14
|
+
anthropic_api_key?: string;
|
|
15
|
+
openai_api_key?: string;
|
|
16
|
+
ollama_url?: string;
|
|
17
|
+
model?: string;
|
|
18
|
+
model_light?: string;
|
|
19
|
+
model_heavy?: string;
|
|
20
|
+
}
|
|
21
|
+
export type TaskComplexity = "light" | "medium" | "heavy";
|
|
22
|
+
export interface SynthesisRequest {
|
|
23
|
+
system: string;
|
|
24
|
+
prompt: string;
|
|
25
|
+
max_tokens?: number;
|
|
26
|
+
complexity?: TaskComplexity;
|
|
27
|
+
}
|
|
28
|
+
export interface SynthesisResult {
|
|
29
|
+
synthesis: string;
|
|
30
|
+
model_used: string;
|
|
31
|
+
tokens_used?: number;
|
|
32
|
+
latency_ms?: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Default models for different task complexities
|
|
36
|
+
* Optimized for 16GB VRAM
|
|
37
|
+
*/
|
|
38
|
+
export declare const DEFAULT_OLLAMA_MODELS: {
|
|
39
|
+
light: string;
|
|
40
|
+
medium: string;
|
|
41
|
+
heavy: string;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Task complexity by tool
|
|
45
|
+
*/
|
|
46
|
+
export declare const TOOL_COMPLEXITY: Record<string, TaskComplexity>;
|
|
47
|
+
/**
|
|
48
|
+
* Get LLM configuration from settings.json file
|
|
49
|
+
*/
|
|
50
|
+
export declare function getLLMConfig(_db?: {
|
|
51
|
+
prepare: (sql: string) => {
|
|
52
|
+
get: (...args: unknown[]) => unknown;
|
|
53
|
+
};
|
|
54
|
+
}): LLMConfig;
|
|
55
|
+
/**
|
|
56
|
+
* Check if LLM synthesis is available
|
|
57
|
+
*/
|
|
58
|
+
export declare function canSynthesize(config: LLMConfig): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Synthesize insights using LLM
|
|
61
|
+
*/
|
|
62
|
+
export declare function synthesize(config: LLMConfig, request: SynthesisRequest): Promise<SynthesisResult>;
|
|
63
|
+
/**
|
|
64
|
+
* Prompts are optimized for:
|
|
65
|
+
* 1. Clear structure (local models need explicit formatting)
|
|
66
|
+
* 2. Concise output (fewer tokens = faster inference)
|
|
67
|
+
* 3. Specific instructions (reduce ambiguity)
|
|
68
|
+
*/
|
|
69
|
+
export declare const SYNTHESIS_PROMPTS: {
|
|
70
|
+
/**
|
|
71
|
+
* Daily Briefing - Executive synthesis
|
|
72
|
+
* Complexity: MEDIUM
|
|
73
|
+
*/
|
|
74
|
+
dailyBriefing: {
|
|
75
|
+
complexity: TaskComplexity;
|
|
76
|
+
system: string;
|
|
77
|
+
buildPrompt: (data: unknown, context: unknown) => string;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Score Autopsy - Explain the reasoning
|
|
81
|
+
* Complexity: HEAVY (needs to reason about correctness)
|
|
82
|
+
*/
|
|
83
|
+
scoreAutopsy: {
|
|
84
|
+
complexity: TaskComplexity;
|
|
85
|
+
system: string;
|
|
86
|
+
buildPrompt: (data: unknown, context: unknown) => string;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Trend Analysis - Predict and explain
|
|
90
|
+
* Complexity: HEAVY (needs pattern recognition + prediction)
|
|
91
|
+
*/
|
|
92
|
+
trendAnalysis: {
|
|
93
|
+
complexity: TaskComplexity;
|
|
94
|
+
system: string;
|
|
95
|
+
buildPrompt: (data: unknown, context: unknown) => string;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Context Analysis - Personalized optimization advice
|
|
99
|
+
* Complexity: MEDIUM (structured recommendations)
|
|
100
|
+
*/
|
|
101
|
+
contextAnalysis: {
|
|
102
|
+
complexity: TaskComplexity;
|
|
103
|
+
system: string;
|
|
104
|
+
buildPrompt: (data: unknown) => string;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Topic Connections - Explain the knowledge graph
|
|
108
|
+
* Complexity: HEAVY (needs graph reasoning)
|
|
109
|
+
*/
|
|
110
|
+
topicConnections: {
|
|
111
|
+
complexity: TaskComplexity;
|
|
112
|
+
system: string;
|
|
113
|
+
buildPrompt: (data: unknown, context: unknown) => string;
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Check if Ollama is running and has required models
|
|
118
|
+
*/
|
|
119
|
+
export declare function checkOllamaStatus(baseUrl?: string): Promise<{
|
|
120
|
+
available: boolean;
|
|
121
|
+
models: string[];
|
|
122
|
+
error?: string;
|
|
123
|
+
}>;
|
|
124
|
+
/**
|
|
125
|
+
* Recommended models for 4DA synthesis tasks
|
|
126
|
+
*/
|
|
127
|
+
export declare const RECOMMENDED_MODELS: {
|
|
128
|
+
"16GB_VRAM": {
|
|
129
|
+
primary: string;
|
|
130
|
+
fallback: string;
|
|
131
|
+
install: string;
|
|
132
|
+
};
|
|
133
|
+
"12GB_VRAM": {
|
|
134
|
+
primary: string;
|
|
135
|
+
fallback: string;
|
|
136
|
+
install: string;
|
|
137
|
+
};
|
|
138
|
+
"8GB_VRAM": {
|
|
139
|
+
primary: string;
|
|
140
|
+
fallback: string;
|
|
141
|
+
install: string;
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=llm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;IACnD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;CASjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAM1D,CAAC;AA4CF;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,CAAC,EAAE;IAAE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;QAAE,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;KAAE,CAAA;CAAE,GAC3E,SAAS,CAiCX;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAaxD;AA0BD;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CA0B1B;AA4ID;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;IAC5B;;;OAGG;;oBAEuB,cAAc;;4BAWlB,OAAO,WAAW,OAAO,KAAG,MAAM;;IAaxD;;;OAGG;;oBAEsB,cAAc;;4BAYjB,OAAO,WAAW,OAAO,KAAG,MAAM;;IAUxD;;;OAGG;;oBAEsB,cAAc;;4BAYjB,OAAO,WAAW,OAAO,KAAG,MAAM;;IAUxD;;;OAGG;;oBAEuB,cAAc;;4BAWlB,OAAO,KAAG,MAAM;;IAOtC;;;OAGG;;oBAEsB,cAAc;;4BAYjB,OAAO,WAAW,OAAO,KAAG,MAAM;;CASzD,CAAC;AAMF;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,MAAiC,GACzC,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBnE;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;CAgB9B,CAAC"}
|