@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/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
|
package/dist/db.d.ts.map
ADDED
|
@@ -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"}
|