@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.
Files changed (123) hide show
  1. package/README.md +135 -0
  2. package/dist/db.d.ts +64 -0
  3. package/dist/db.d.ts.map +1 -0
  4. package/dist/db.js +578 -0
  5. package/dist/db.js.map +1 -0
  6. package/dist/index.d.ts +37 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +422 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/llm.d.ts +144 -0
  11. package/dist/llm.d.ts.map +1 -0
  12. package/dist/llm.js +447 -0
  13. package/dist/llm.js.map +1 -0
  14. package/dist/output-manager.d.ts +156 -0
  15. package/dist/output-manager.d.ts.map +1 -0
  16. package/dist/output-manager.js +156 -0
  17. package/dist/output-manager.js.map +1 -0
  18. package/dist/schema-registry.d.ts +46 -0
  19. package/dist/schema-registry.d.ts.map +1 -0
  20. package/dist/schema-registry.js +133 -0
  21. package/dist/schema-registry.js.map +1 -0
  22. package/dist/schemas/config-validator.json +18 -0
  23. package/dist/schemas/context-analysis.json +25 -0
  24. package/dist/schemas/daily-briefing.json +34 -0
  25. package/dist/schemas/explain-relevance.json +19 -0
  26. package/dist/schemas/get-actionable-signals.json +29 -0
  27. package/dist/schemas/get-context.json +17 -0
  28. package/dist/schemas/get-relevant-content.json +26 -0
  29. package/dist/schemas/llm-status.json +13 -0
  30. package/dist/schemas/record-feedback.json +24 -0
  31. package/dist/schemas/score-autopsy.json +30 -0
  32. package/dist/schemas/source-health.json +17 -0
  33. package/dist/schemas/topic-connections.json +34 -0
  34. package/dist/schemas/trend-analysis.json +29 -0
  35. package/dist/tools/attention-report.d.ts +39 -0
  36. package/dist/tools/attention-report.d.ts.map +1 -0
  37. package/dist/tools/attention-report.js +72 -0
  38. package/dist/tools/attention-report.js.map +1 -0
  39. package/dist/tools/config-validator.d.ts +59 -0
  40. package/dist/tools/config-validator.d.ts.map +1 -0
  41. package/dist/tools/config-validator.js +375 -0
  42. package/dist/tools/config-validator.js.map +1 -0
  43. package/dist/tools/context-analysis.d.ts +108 -0
  44. package/dist/tools/context-analysis.d.ts.map +1 -0
  45. package/dist/tools/context-analysis.js +300 -0
  46. package/dist/tools/context-analysis.js.map +1 -0
  47. package/dist/tools/daily-briefing.d.ts +103 -0
  48. package/dist/tools/daily-briefing.d.ts.map +1 -0
  49. package/dist/tools/daily-briefing.js +278 -0
  50. package/dist/tools/daily-briefing.js.map +1 -0
  51. package/dist/tools/explain-relevance.d.ts +36 -0
  52. package/dist/tools/explain-relevance.d.ts.map +1 -0
  53. package/dist/tools/explain-relevance.js +50 -0
  54. package/dist/tools/explain-relevance.js.map +1 -0
  55. package/dist/tools/export-context.d.ts +43 -0
  56. package/dist/tools/export-context.d.ts.map +1 -0
  57. package/dist/tools/export-context.js +104 -0
  58. package/dist/tools/export-context.js.map +1 -0
  59. package/dist/tools/get-actionable-signals.d.ts +65 -0
  60. package/dist/tools/get-actionable-signals.d.ts.map +1 -0
  61. package/dist/tools/get-actionable-signals.js +268 -0
  62. package/dist/tools/get-actionable-signals.js.map +1 -0
  63. package/dist/tools/get-context.d.ts +34 -0
  64. package/dist/tools/get-context.d.ts.map +1 -0
  65. package/dist/tools/get-context.js +43 -0
  66. package/dist/tools/get-context.js.map +1 -0
  67. package/dist/tools/get-relevant-content.d.ts +44 -0
  68. package/dist/tools/get-relevant-content.d.ts.map +1 -0
  69. package/dist/tools/get-relevant-content.js +56 -0
  70. package/dist/tools/get-relevant-content.js.map +1 -0
  71. package/dist/tools/index.d.ts +40 -0
  72. package/dist/tools/index.d.ts.map +1 -0
  73. package/dist/tools/index.js +44 -0
  74. package/dist/tools/index.js.map +1 -0
  75. package/dist/tools/knowledge-gaps.d.ts +36 -0
  76. package/dist/tools/knowledge-gaps.d.ts.map +1 -0
  77. package/dist/tools/knowledge-gaps.js +76 -0
  78. package/dist/tools/knowledge-gaps.js.map +1 -0
  79. package/dist/tools/llm-status.d.ts +45 -0
  80. package/dist/tools/llm-status.d.ts.map +1 -0
  81. package/dist/tools/llm-status.js +92 -0
  82. package/dist/tools/llm-status.js.map +1 -0
  83. package/dist/tools/project-health.d.ts +41 -0
  84. package/dist/tools/project-health.d.ts.map +1 -0
  85. package/dist/tools/project-health.js +71 -0
  86. package/dist/tools/project-health.js.map +1 -0
  87. package/dist/tools/record-feedback.d.ts +39 -0
  88. package/dist/tools/record-feedback.d.ts.map +1 -0
  89. package/dist/tools/record-feedback.js +60 -0
  90. package/dist/tools/record-feedback.js.map +1 -0
  91. package/dist/tools/reverse-mentions.d.ts +38 -0
  92. package/dist/tools/reverse-mentions.d.ts.map +1 -0
  93. package/dist/tools/reverse-mentions.js +57 -0
  94. package/dist/tools/reverse-mentions.js.map +1 -0
  95. package/dist/tools/score-autopsy.d.ts +93 -0
  96. package/dist/tools/score-autopsy.d.ts.map +1 -0
  97. package/dist/tools/score-autopsy.js +288 -0
  98. package/dist/tools/score-autopsy.js.map +1 -0
  99. package/dist/tools/semantic-shifts.d.ts +37 -0
  100. package/dist/tools/semantic-shifts.d.ts.map +1 -0
  101. package/dist/tools/semantic-shifts.js +73 -0
  102. package/dist/tools/semantic-shifts.js.map +1 -0
  103. package/dist/tools/signal-chains.d.ts +45 -0
  104. package/dist/tools/signal-chains.d.ts.map +1 -0
  105. package/dist/tools/signal-chains.js +60 -0
  106. package/dist/tools/signal-chains.js.map +1 -0
  107. package/dist/tools/source-health.d.ts +64 -0
  108. package/dist/tools/source-health.d.ts.map +1 -0
  109. package/dist/tools/source-health.js +176 -0
  110. package/dist/tools/source-health.js.map +1 -0
  111. package/dist/tools/topic-connections.d.ts +112 -0
  112. package/dist/tools/topic-connections.d.ts.map +1 -0
  113. package/dist/tools/topic-connections.js +318 -0
  114. package/dist/tools/topic-connections.js.map +1 -0
  115. package/dist/tools/trend-analysis.d.ts +105 -0
  116. package/dist/tools/trend-analysis.d.ts.map +1 -0
  117. package/dist/tools/trend-analysis.js +295 -0
  118. package/dist/tools/trend-analysis.js.map +1 -0
  119. package/dist/types.d.ts +163 -0
  120. package/dist/types.d.ts.map +1 -0
  121. package/dist/types.js +7 -0
  122. package/dist/types.js.map +1 -0
  123. package/package.json +61 -0
package/README.md ADDED
@@ -0,0 +1,135 @@
1
+ # @4da/mcp-server
2
+
3
+ MCP server that plugs [4DA](https://github.com/4da-dev/4da-home)'s personalized developer intelligence into Claude Code, Cursor, Windsurf, or any MCP-compatible host.
4
+
5
+ 4DA monitors 11 sources (Hacker News, arXiv, Reddit, GitHub, Product Hunt, YouTube, etc.), scores everything against your codebase and tech stack, and rejects 99%+ as noise. This MCP server gives your AI tools access to what survived.
6
+
7
+ ## Quick Setup
8
+
9
+ **Prerequisites:** [4DA](https://github.com/4da-dev/4da-home) must be installed and have run at least one analysis.
10
+
11
+ ### Claude Code
12
+
13
+ ```bash
14
+ # Add to your project's .mcp.json
15
+ claude mcp add 4da node /path/to/mcp-4da-server/dist/index.js
16
+ ```
17
+
18
+ Or manually add to `.mcp.json`:
19
+ ```json
20
+ {
21
+ "mcpServers": {
22
+ "4da": {
23
+ "command": "node",
24
+ "args": ["/path/to/mcp-4da-server/dist/index.js"],
25
+ "env": {
26
+ "FOURDA_DB_PATH": "/path/to/4da-v3/data/4da.db"
27
+ }
28
+ }
29
+ }
30
+ }
31
+ ```
32
+
33
+ ### Cursor / Windsurf
34
+
35
+ Add to `.cursor/mcp.json` or equivalent:
36
+ ```json
37
+ {
38
+ "mcpServers": {
39
+ "4da": {
40
+ "command": "node",
41
+ "args": ["/path/to/mcp-4da-server/dist/index.js"],
42
+ "env": {
43
+ "FOURDA_DB_PATH": "/path/to/4da-v3/data/4da.db"
44
+ }
45
+ }
46
+ }
47
+ }
48
+ ```
49
+
50
+ ### Claude Desktop
51
+
52
+ Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
53
+ ```json
54
+ {
55
+ "mcpServers": {
56
+ "4da": {
57
+ "command": "node",
58
+ "args": ["/path/to/mcp-4da-server/dist/index.js"],
59
+ "env": {
60
+ "FOURDA_DB_PATH": "/path/to/4da-v3/data/4da.db"
61
+ }
62
+ }
63
+ }
64
+ }
65
+ ```
66
+
67
+ ## Tools (13)
68
+
69
+ ### Core
70
+
71
+ | Tool | Description |
72
+ |------|-------------|
73
+ | `get_relevant_content` | Filtered content feed — only what passed the 5-axis scoring gate |
74
+ | `get_context` | Your tech stack, interests, learned affinities, ACE-detected topics |
75
+ | `explain_relevance` | Why a specific item was scored the way it was |
76
+ | `record_feedback` | Teach 4DA — save, dismiss, or mark items irrelevant |
77
+
78
+ ### Intelligence
79
+
80
+ | Tool | Description |
81
+ |------|-------------|
82
+ | `get_actionable_signals` | Classified signals: security alerts, breaking changes, new tools |
83
+ | `daily_briefing` | Executive summary of recent discoveries (AI-powered with synthesize=true) |
84
+ | `score_autopsy` | Forensic analysis of any item's scoring breakdown |
85
+ | `trend_analysis` | Statistical patterns and anomaly detection across your feed |
86
+ | `context_analysis` | Recommendations to optimize your context for better results |
87
+ | `topic_connections` | Knowledge graph of how your content topics relate |
88
+
89
+ ### Diagnostic
90
+
91
+ | Tool | Description |
92
+ |------|-------------|
93
+ | `source_health` | Pipeline status for each source adapter |
94
+ | `config_validator` | Configuration validation and issue detection |
95
+ | `llm_status` | LLM provider status and Ollama availability |
96
+
97
+ ## Environment Variables
98
+
99
+ | Variable | Description | Default |
100
+ |----------|-------------|---------|
101
+ | `FOURDA_DB_PATH` | Path to 4DA's SQLite database | Auto-detected from `~/.4da/4da.db` or `data/4da.db` |
102
+
103
+ ## Build from Source
104
+
105
+ ```bash
106
+ cd mcp-4da-server
107
+ pnpm install
108
+ pnpm build
109
+ ```
110
+
111
+ ## Test
112
+
113
+ ```bash
114
+ # MCP Inspector (interactive)
115
+ pnpm run inspect
116
+
117
+ # Direct JSON-RPC
118
+ echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node dist/index.js
119
+ ```
120
+
121
+ ## Example Usage in Claude Code
122
+
123
+ Once configured, you can ask Claude:
124
+
125
+ - "What did 4DA find for me today?"
126
+ - "Are there any security alerts in my feed?"
127
+ - "Give me a briefing on what's relevant to my current project"
128
+ - "Why was this item scored highly?"
129
+ - "What are the trending topics in my domain?"
130
+
131
+ Claude will use the MCP tools automatically to answer from your personalized feed.
132
+
133
+ ## License
134
+
135
+ MIT
package/dist/db.d.ts ADDED
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Database module for 4DA MCP Server
3
+ *
4
+ * Read-only access to the 4DA SQLite database.
5
+ * Only the record_feedback function performs writes.
6
+ */
7
+ import Database from "better-sqlite3";
8
+ import type { SourceItem, RelevantItem, UserContext, RelevanceExplanation, FeedbackAction, FeedbackResult } from "./types.js";
9
+ /**
10
+ * 4DA Database accessor
11
+ */
12
+ export declare class FourDADatabase {
13
+ private db;
14
+ constructor(dbPath?: string);
15
+ /**
16
+ * Get the raw better-sqlite3 database instance for custom queries
17
+ */
18
+ getRawDb(): Database.Database;
19
+ /**
20
+ * Close the database connection
21
+ */
22
+ close(): void;
23
+ /**
24
+ * Get relevant content items with computed relevance scores
25
+ */
26
+ getRelevantContent(minScore?: number, sourceType?: string, limit?: number, sinceHours?: number): RelevantItem[];
27
+ /**
28
+ * Get a single source item by ID and type
29
+ */
30
+ getSourceItem(itemId: number, sourceType: string): SourceItem | null;
31
+ /**
32
+ * Get the user's context (what 4DA knows about them)
33
+ */
34
+ getUserContext(includeAce?: boolean, includeLearned?: boolean): UserContext;
35
+ /**
36
+ * Explain why an item was considered relevant
37
+ */
38
+ explainRelevance(itemId: number, sourceType: string): RelevanceExplanation | null;
39
+ /**
40
+ * Record user feedback on an item
41
+ */
42
+ recordFeedback(itemId: number, sourceType: string, action: FeedbackAction): FeedbackResult;
43
+ /**
44
+ * Compute relevance score for an item based on user context
45
+ */
46
+ private computeRelevanceScore;
47
+ /**
48
+ * Extract topics from text (simple keyword extraction)
49
+ */
50
+ private extractTopics;
51
+ /**
52
+ * Check if a topic matches a term (case-insensitive, partial match)
53
+ */
54
+ private topicMatches;
55
+ /**
56
+ * Check if a word is a stop word
57
+ */
58
+ private isStopWord;
59
+ }
60
+ /**
61
+ * Create a database instance
62
+ */
63
+ export declare function createDatabase(dbPath?: string): FourDADatabase;
64
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAStC,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EAMZ,WAAW,EAGX,oBAAoB,EACpB,cAAc,EACd,cAAc,EACf,MAAM,YAAY,CAAC;AAiEpB;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;gBAElB,MAAM,CAAC,EAAE,MAAM;IAkB3B;;OAEG;IACH,QAAQ,IAAI,QAAQ,CAAC,QAAQ;IAI7B;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,kBAAkB,CAChB,QAAQ,GAAE,MAAa,EACvB,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,GAAE,MAAW,EAClB,UAAU,GAAE,MAAW,GACtB,YAAY,EAAE;IAiEjB;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAapE;;OAEG;IACH,cAAc,CAAC,UAAU,GAAE,OAAc,EAAE,cAAc,GAAE,OAAc,GAAG,WAAW;IA0GvF;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI;IAsIjF;;OAEG;IACH,cAAc,CACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,cAAc,GACrB,cAAc;IA2CjB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoE7B;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,UAAU;CA8FnB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAE9D"}