@4da/mcp-server 5.0.4 → 6.0.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 (172) hide show
  1. package/CHANGELOG.md +667 -0
  2. package/README.md +66 -35
  3. package/dist/build-staleness.d.ts +35 -0
  4. package/dist/build-staleness.js +95 -0
  5. package/dist/db.d.ts +53 -2
  6. package/dist/db.js +233 -37
  7. package/dist/doctor.js +27 -7
  8. package/dist/embeddings.js +7 -1
  9. package/dist/freshness-markers.d.ts +34 -0
  10. package/dist/freshness-markers.js +74 -0
  11. package/dist/gitignore.d.ts +37 -0
  12. package/dist/gitignore.js +130 -0
  13. package/dist/index.js +127 -44
  14. package/dist/live/bun-lockfile.d.ts +26 -0
  15. package/dist/live/bun-lockfile.js +123 -0
  16. package/dist/live/cargo-platform.d.ts +38 -0
  17. package/dist/live/cargo-platform.js +178 -0
  18. package/dist/live/changelog-classify.d.ts +41 -0
  19. package/dist/live/changelog-classify.js +207 -0
  20. package/dist/live/changelog.d.ts +64 -0
  21. package/dist/live/changelog.js +318 -0
  22. package/dist/live/crates-registry.js +3 -1
  23. package/dist/live/crates-versions.d.ts +47 -0
  24. package/dist/live/crates-versions.js +201 -0
  25. package/dist/live/dependency-set.d.ts +13 -0
  26. package/dist/live/dependency-set.js +95 -0
  27. package/dist/live/dev-scope.d.ts +32 -0
  28. package/dist/live/dev-scope.js +102 -0
  29. package/dist/live/file-signature.d.ts +18 -0
  30. package/dist/live/file-signature.js +43 -0
  31. package/dist/live/go-registry.js +3 -1
  32. package/dist/live/hn-fetcher.js +9 -3
  33. package/dist/live/index.d.ts +105 -2
  34. package/dist/live/index.js +266 -139
  35. package/dist/live/install-state.d.ts +43 -0
  36. package/dist/live/install-state.js +150 -0
  37. package/dist/live/js-lockfile-readers.d.ts +46 -0
  38. package/dist/live/js-lockfile-readers.js +181 -0
  39. package/dist/live/lockfile-parsers-pygo.d.ts +60 -0
  40. package/dist/live/lockfile-parsers-pygo.js +274 -0
  41. package/dist/live/lockfile-parsers.d.ts +69 -0
  42. package/dist/live/lockfile-parsers.js +311 -0
  43. package/dist/live/lockfile-types.d.ts +34 -0
  44. package/dist/live/lockfile-types.js +42 -0
  45. package/dist/live/maintenance.d.ts +33 -0
  46. package/dist/live/maintenance.js +37 -0
  47. package/dist/live/npm-packument.d.ts +47 -0
  48. package/dist/live/npm-packument.js +150 -0
  49. package/dist/live/npm-registry.js +67 -53
  50. package/dist/live/osv-scanner.d.ts +12 -1
  51. package/dist/live/osv-scanner.js +50 -15
  52. package/dist/live/package-archive.d.ts +49 -0
  53. package/dist/live/package-archive.js +186 -0
  54. package/dist/live/pypi-registry.js +3 -1
  55. package/dist/live/registry-health.d.ts +16 -0
  56. package/dist/live/registry-health.js +74 -0
  57. package/dist/live/release-metadata.d.ts +67 -0
  58. package/dist/live/release-metadata.js +16 -0
  59. package/dist/live/resolution.d.ts +43 -0
  60. package/dist/live/resolution.js +62 -0
  61. package/dist/live/semver-precedence.d.ts +30 -0
  62. package/dist/live/semver-precedence.js +83 -0
  63. package/dist/live/severity-scope.d.ts +57 -0
  64. package/dist/live/severity-scope.js +89 -0
  65. package/dist/live/types.d.ts +83 -0
  66. package/dist/live/upgrade-sources.d.ts +71 -0
  67. package/dist/live/upgrade-sources.js +198 -0
  68. package/dist/live/version-compare.d.ts +39 -0
  69. package/dist/live/version-compare.js +130 -0
  70. package/dist/live/version-resolver.d.ts +14 -1
  71. package/dist/live/version-resolver.js +93 -303
  72. package/dist/native-bindings.d.ts +19 -0
  73. package/dist/native-bindings.js +39 -0
  74. package/dist/project-manifests.d.ts +40 -0
  75. package/dist/project-manifests.js +193 -0
  76. package/dist/project-scanner.js +38 -48
  77. package/dist/project-tree.d.ts +41 -0
  78. package/dist/project-tree.js +110 -0
  79. package/dist/prompts.d.ts +28 -0
  80. package/dist/prompts.js +54 -0
  81. package/dist/schema-registry.d.ts +41 -29
  82. package/dist/schema-registry.js +98 -105
  83. package/dist/server-instructions.d.ts +11 -0
  84. package/dist/server-instructions.js +36 -0
  85. package/dist/tool-args.d.ts +28 -0
  86. package/dist/tool-args.js +93 -0
  87. package/dist/tool-dispatch.d.ts +1 -1
  88. package/dist/tool-dispatch.js +42 -8
  89. package/dist/tools/app-plan.d.ts +92 -0
  90. package/dist/tools/app-plan.js +155 -0
  91. package/dist/tools/briefing-stored-advisories.d.ts +20 -0
  92. package/dist/tools/briefing-stored-advisories.js +58 -0
  93. package/dist/tools/briefing-task-scope.d.ts +73 -0
  94. package/dist/tools/briefing-task-scope.js +197 -0
  95. package/dist/tools/briefing-wisdom.d.ts +31 -0
  96. package/dist/tools/briefing-wisdom.js +148 -0
  97. package/dist/tools/decision-enforcement.d.ts +0 -5
  98. package/dist/tools/decision-enforcement.js +0 -4
  99. package/dist/tools/decision-memory.js +18 -66
  100. package/dist/tools/dependency-check-signals.d.ts +74 -0
  101. package/dist/tools/dependency-check-signals.js +264 -0
  102. package/dist/tools/dependency-check.d.ts +98 -0
  103. package/dist/tools/dependency-check.js +295 -0
  104. package/dist/tools/dependency-health.js +74 -21
  105. package/dist/tools/developer-dna.d.ts +3 -0
  106. package/dist/tools/developer-dna.js +16 -15
  107. package/dist/tools/ecosystem-pulse.d.ts +6 -2
  108. package/dist/tools/ecosystem-pulse.js +53 -14
  109. package/dist/tools/get-actionable-signals.d.ts +26 -4
  110. package/dist/tools/get-actionable-signals.js +214 -251
  111. package/dist/tools/get-context.d.ts +2 -0
  112. package/dist/tools/get-context.js +9 -1
  113. package/dist/tools/get-relevant-content.d.ts +3 -1
  114. package/dist/tools/get-relevant-content.js +34 -3
  115. package/dist/tools/index.d.ts +4 -2
  116. package/dist/tools/index.js +4 -2
  117. package/dist/tools/install-drift-notes.d.ts +51 -0
  118. package/dist/tools/install-drift-notes.js +172 -0
  119. package/dist/tools/knowledge-gap-citations.d.ts +55 -0
  120. package/dist/tools/knowledge-gap-citations.js +132 -0
  121. package/dist/tools/knowledge-gap-exposure.d.ts +72 -0
  122. package/dist/tools/knowledge-gap-exposure.js +160 -0
  123. package/dist/tools/knowledge-gap-grading.d.ts +91 -0
  124. package/dist/tools/knowledge-gap-grading.js +157 -0
  125. package/dist/tools/knowledge-gap-installs.d.ts +65 -0
  126. package/dist/tools/knowledge-gap-installs.js +134 -0
  127. package/dist/tools/knowledge-gap-ranges.d.ts +51 -0
  128. package/dist/tools/knowledge-gap-ranges.js +146 -0
  129. package/dist/tools/knowledge-gap-scope.d.ts +63 -0
  130. package/dist/tools/knowledge-gap-scope.js +118 -0
  131. package/dist/tools/knowledge-gaps.d.ts +12 -3
  132. package/dist/tools/knowledge-gaps.js +172 -121
  133. package/dist/tools/package-presence.d.ts +24 -0
  134. package/dist/tools/package-presence.js +35 -0
  135. package/dist/tools/record-feedback.d.ts +0 -1
  136. package/dist/tools/record-feedback.js +7 -8
  137. package/dist/tools/signal-classifier.d.ts +25 -0
  138. package/dist/tools/signal-classifier.js +40 -0
  139. package/dist/tools/upgrade-impact-callsites.d.ts +52 -0
  140. package/dist/tools/upgrade-impact-callsites.js +226 -0
  141. package/dist/tools/upgrade-impact-literals.d.ts +45 -0
  142. package/dist/tools/upgrade-impact-literals.js +118 -0
  143. package/dist/tools/upgrade-impact-report.d.ts +80 -0
  144. package/dist/tools/upgrade-impact-report.js +178 -0
  145. package/dist/tools/upgrade-impact.d.ts +84 -0
  146. package/dist/tools/upgrade-impact.js +305 -0
  147. package/dist/tools/upgrade-planner.d.ts +41 -8
  148. package/dist/tools/upgrade-planner.js +201 -53
  149. package/dist/tools/vulnerability-scan-concise.d.ts +72 -0
  150. package/dist/tools/vulnerability-scan-concise.js +97 -0
  151. package/dist/tools/vulnerability-scan-format.d.ts +137 -0
  152. package/dist/tools/vulnerability-scan-format.js +276 -0
  153. package/dist/tools/vulnerability-scan.d.ts +338 -18
  154. package/dist/tools/vulnerability-scan.js +84 -125
  155. package/dist/tools/what-should-i-know.d.ts +86 -19
  156. package/dist/tools/what-should-i-know.js +277 -283
  157. package/dist/types.d.ts +4 -1
  158. package/package.json +27 -30
  159. package/dist/schemas/agent-memory.json +0 -49
  160. package/dist/schemas/decision-enforcement.json +0 -22
  161. package/dist/schemas/decision-memory.json +0 -54
  162. package/dist/schemas/dependency-health.json +0 -27
  163. package/dist/schemas/developer-dna.json +0 -219
  164. package/dist/schemas/ecosystem-pulse.json +0 -17
  165. package/dist/schemas/get-actionable-signals.json +0 -29
  166. package/dist/schemas/get-context.json +0 -17
  167. package/dist/schemas/get-relevant-content.json +0 -26
  168. package/dist/schemas/knowledge-gaps.json +0 -14
  169. package/dist/schemas/record-feedback.json +0 -24
  170. package/dist/schemas/upgrade-planner.json +0 -22
  171. package/dist/schemas/vulnerability-scan.json +0 -26
  172. package/dist/schemas/what-should-i-know.json +0 -19
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@4da/mcp-server",
3
- "version": "5.0.4",
3
+ "version": "6.0.0",
4
4
  "mcpName": "io.github.4DA-Systems/4da-mcp-server",
5
- "description": "Dependency intelligence for AI coding agents. Live CVE scanning, dependency health, upgrade planning, ecosystem news, decision memory — zero config, privacy-first. 9 tools standalone, 14 total with desktop app.",
5
+ "description": "Upgrade intelligence for AI coding agents: what changes between your installed and target version (changelog, breaking changes, the files you import it from), a pre-install verdict on each bump, vulnerability scanning at osv-scanner parity across npm/pnpm/yarn, Cargo, Python and Go lockfiles, ranked upgrade plans, task-scoped briefings, decision memory. Local, no account. 11 tools standalone, 16 with the desktop app.",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
8
8
  "bin": {
@@ -16,12 +16,12 @@
16
16
  "!dist/test-setup.*",
17
17
  "!dist/**/*.map",
18
18
  "README.md",
19
+ "CHANGELOG.md",
19
20
  "LICENSE"
20
21
  ],
21
22
  "scripts": {
22
23
  "clean": "node -e \"const fs=require('fs');fs.rmSync('dist',{recursive:true,force:true})\"",
23
- "build": "pnpm run clean && tsc && pnpm run copy-schemas",
24
- "copy-schemas": "node -e \"const fs=require('fs');const path=require('path');const src='src/schemas';const dst='dist/schemas';if(!fs.existsSync(dst))fs.mkdirSync(dst,{recursive:true});fs.readdirSync(src).filter(f=>f.endsWith('.json')).forEach(f=>fs.copyFileSync(path.join(src,f),path.join(dst,f)))\"",
24
+ "build": "pnpm run clean && tsc",
25
25
  "dev": "tsc --watch",
26
26
  "start": "node dist/index.js",
27
27
  "inspect": "npx @modelcontextprotocol/inspector node dist/index.js",
@@ -41,33 +41,30 @@
41
41
  "windsurf",
42
42
  "copilot",
43
43
  "vscode",
44
- "ai-tools",
45
44
  "ai-agent",
46
45
  "ai-coding",
47
46
  "developer-tools",
48
- "developer-intelligence",
49
- "developer-productivity",
50
- "developer-context",
51
- "codebase-awareness",
52
- "codebase-context",
53
- "code-context",
54
- "code-intelligence",
55
- "content-scoring",
56
- "relevance-scoring",
57
- "privacy-first",
58
- "local-first",
59
- "offline",
60
- "hacker-news",
61
- "arxiv",
62
- "reddit",
63
- "github",
64
- "knowledge-gaps",
65
- "tech-radar",
47
+ "dependencies",
48
+ "dependency-upgrade",
49
+ "upgrade",
50
+ "changelog",
51
+ "breaking-changes",
52
+ "vulnerability",
53
+ "vulnerability-scanner",
54
+ "security",
55
+ "cve",
56
+ "osv",
57
+ "supply-chain",
58
+ "lockfile",
59
+ "npm",
60
+ "cargo",
61
+ "pypi",
62
+ "go-modules",
66
63
  "decision-memory",
67
- "dependency-tracking",
68
- "security-advisories",
69
64
  "agent-memory",
70
- "sqlite"
65
+ "privacy-first",
66
+ "local-first",
67
+ "offline"
71
68
  ],
72
69
  "author": "4DA",
73
70
  "license": "Apache-2.0",
@@ -81,20 +78,20 @@
81
78
  "url": "https://github.com/4DA-Systems/4DA/issues"
82
79
  },
83
80
  "dependencies": {
84
- "better-sqlite3": "^12.9.0",
85
81
  "@modelcontextprotocol/node": "^2.0.0",
86
82
  "@modelcontextprotocol/server": "^2.0.0",
83
+ "better-sqlite3": "^12.9.0",
87
84
  "hono": "^4.12.34"
88
85
  },
89
86
  "devDependencies": {
90
87
  "@types/better-sqlite3": "^7.6.11",
91
88
  "@types/node": "^26.0.1",
92
- "typescript": "^5.3.0",
89
+ "typescript": "^7.0.2",
93
90
  "vite": "~7.3.5",
94
- "vitest": "^4.1.5"
91
+ "vitest": "^5.0.1"
95
92
  },
96
93
  "engines": {
97
- "node": ">=20.0.0"
94
+ "node": ">=22.0.0"
98
95
  },
99
96
  "pnpm": {
100
97
  "onlyBuiltDependencies": [
@@ -1,49 +0,0 @@
1
- {
2
- "name": "agent_memory",
3
- "description": "Cross-agent persistent memory — store and recall discoveries, decisions, context, and warnings across sessions and tools.\n\nEnables AI agents to build institutional knowledge that persists beyond individual conversations. Supports storing, recalling by topic, filtering by tags, and retrieving recent entries. Call to store a discovery, decision, or warning worth keeping, or to recall prior context before starting work.",
4
- "inputSchema": {
5
- "type": "object",
6
- "properties": {
7
- "action": {
8
- "type": "string",
9
- "enum": ["store", "recall", "recall_by_tags", "get_recent"],
10
- "description": "Action to perform"
11
- },
12
- "session_id": {
13
- "type": "string",
14
- "description": "Session identifier (for store)"
15
- },
16
- "agent_type": {
17
- "type": "string",
18
- "description": "Agent identifier, e.g. claude_code, cursor, windsurf (for store)"
19
- },
20
- "memory_type": {
21
- "type": "string",
22
- "enum": ["discovery", "decision", "context", "warning", "preference"],
23
- "description": "Type of memory (for store). Default: context"
24
- },
25
- "content": {
26
- "type": "string",
27
- "description": "Memory content text (for store)"
28
- },
29
- "tags": {
30
- "type": "array",
31
- "items": { "type": "string" },
32
- "description": "Tags for categorization and retrieval"
33
- },
34
- "confidence": {
35
- "type": "number",
36
- "description": "Confidence level 0.0-1.0 (for store)"
37
- },
38
- "topic": {
39
- "type": "string",
40
- "description": "Topic to recall memories about (for recall)"
41
- },
42
- "limit": {
43
- "type": "number",
44
- "description": "Maximum memories to return (for recall/get_recent). Default: 10"
45
- }
46
- },
47
- "required": ["action"]
48
- }
49
- }
@@ -1,22 +0,0 @@
1
- {
2
- "name": "check_decision_alignment",
3
- "description": "Check if a technology or pattern aligns with active decisions before suggesting changes.\n\nPrevents AI agents from recommending technologies or patterns that contradict settled developer decisions. Returns alignment status and relevant decisions. Call BEFORE suggesting a major tech change, new library, or architecture shift, to avoid contradicting settled decisions.",
4
- "inputSchema": {
5
- "type": "object",
6
- "properties": {
7
- "technology": {
8
- "type": "string",
9
- "description": "Technology name to check (e.g., 'postgresql', 'redis', 'graphql')"
10
- },
11
- "pattern": {
12
- "type": "string",
13
- "description": "Architecture pattern to check (e.g., 'microservices', 'event-driven')"
14
- },
15
- "context": {
16
- "type": "string",
17
- "description": "Additional context about the proposed change"
18
- }
19
- },
20
- "required": ["technology"]
21
- }
22
- }
@@ -1,54 +0,0 @@
1
- {
2
- "name": "decision_memory",
3
- "description": "Manage developer decisions — record, list, check alignment, update, or supersede.\n\nPersistent decision memory that tracks technology choices, architecture patterns, and workflow preferences. Prevents re-litigation of settled decisions across sessions. Call when the user makes, changes, or asks about a settled decision, choice, or convention.",
4
- "inputSchema": {
5
- "type": "object",
6
- "properties": {
7
- "action": {
8
- "type": "string",
9
- "enum": ["record", "list", "check_alignment", "update", "supersede"],
10
- "description": "Action to perform"
11
- },
12
- "decision_type": {
13
- "type": "string",
14
- "enum": ["tech_choice", "architecture", "workflow", "pattern", "dependency"],
15
- "description": "Type of decision (for record)"
16
- },
17
- "subject": {
18
- "type": "string",
19
- "description": "Subject of the decision (e.g., 'database', 'auth-strategy')"
20
- },
21
- "decision": {
22
- "type": "string",
23
- "description": "The decision made (for record)"
24
- },
25
- "rationale": {
26
- "type": "string",
27
- "description": "Why this decision was made (for record)"
28
- },
29
- "alternatives_rejected": {
30
- "type": "array",
31
- "items": { "type": "string" },
32
- "description": "Alternatives that were considered and rejected"
33
- },
34
- "context_tags": {
35
- "type": "array",
36
- "items": { "type": "string" },
37
- "description": "Tags for filtering and retrieval"
38
- },
39
- "confidence": {
40
- "type": "number",
41
- "description": "Confidence level 0.0-1.0 (for record)"
42
- },
43
- "id": {
44
- "type": "number",
45
- "description": "Decision ID (for update/supersede)"
46
- },
47
- "technology": {
48
- "type": "string",
49
- "description": "Technology to check alignment for (check_alignment action)"
50
- }
51
- },
52
- "required": ["action"]
53
- }
54
- }
@@ -1,27 +0,0 @@
1
- {
2
- "name": "dependency_health",
3
- "description": "Assess health of project dependencies — version freshness, deprecation status, known CVEs across npm, Rust, Python, and Go. Auto-detects from lock files.\n\nReturns a health score (0-100), outdated/deprecated/vulnerable counts, and per-dependency details including semver distance and registry metadata.\n\nPrivacy: sends only package names (public manifest data). No code or personal data transmitted. Call when the user asks whether their dependencies are outdated, stale, deprecated, or need updating.",
4
- "inputSchema": {
5
- "type": "object",
6
- "properties": {
7
- "include_dev": {
8
- "type": "boolean",
9
- "description": "Include devDependencies in health check. Default: false."
10
- },
11
- "ecosystem_filter": {
12
- "type": "string",
13
- "enum": ["npm", "crates.io", "PyPI", "Go"],
14
- "description": "Only show dependencies from this ecosystem."
15
- },
16
- "sort_by": {
17
- "type": "string",
18
- "enum": ["risk", "name", "outdated"],
19
- "description": "Sort order. 'risk' prioritizes vulnerable+deprecated+outdated. Default: risk."
20
- },
21
- "limit": {
22
- "type": "number",
23
- "description": "Maximum dependencies to return. Default: 50."
24
- }
25
- }
26
- }
27
- }
@@ -1,219 +0,0 @@
1
- {
2
- "name": "developer_dna",
3
- "description": "Export your Developer DNA — a comprehensive profile of your tech identity built from project scans, explicit interests, and local interaction history. Includes primary stack, adjacent tech, top dependencies, engaged topics, blind spots, source engagement rates, and aggregate stats. Call when the user asks for a summary of their developer profile, identity, or tech fingerprint.",
4
- "inputSchema": {
5
- "type": "object",
6
- "properties": {
7
- "include_blind_spots": {
8
- "type": "boolean",
9
- "description": "Include blind spot analysis (dependencies with stale engagement). Default: true",
10
- "default": true
11
- },
12
- "max_dependencies": {
13
- "type": "number",
14
- "description": "Maximum dependencies to include. Default: 30",
15
- "default": 30
16
- },
17
- "max_topics": {
18
- "type": "number",
19
- "description": "Maximum engaged topics to include. Default: 20",
20
- "default": 20
21
- }
22
- }
23
- },
24
- "outputSchema": {
25
- "$schema": "http://json-schema.org/draft-07/schema#",
26
- "title": "DeveloperDna",
27
- "description": "Comprehensive developer identity profile built from local project data and engagement signals.",
28
- "type": "object",
29
- "required": [
30
- "generated_at",
31
- "primary_stack",
32
- "adjacent_tech",
33
- "top_dependencies",
34
- "interests",
35
- "top_engaged_topics",
36
- "blind_spots",
37
- "source_engagement",
38
- "stats",
39
- "identity_summary"
40
- ],
41
- "properties": {
42
- "generated_at": {
43
- "type": "string",
44
- "format": "date-time",
45
- "description": "ISO 8601 timestamp when this DNA profile was generated."
46
- },
47
- "primary_stack": {
48
- "type": "array",
49
- "items": { "type": "string" },
50
- "description": "Technologies from the user's declared tech stack (user_identity + tech_stack tables)."
51
- },
52
- "adjacent_tech": {
53
- "type": "array",
54
- "items": { "type": "string" },
55
- "description": "Technologies detected by ACE in local projects but not in the declared stack."
56
- },
57
- "top_dependencies": {
58
- "type": "array",
59
- "items": { "$ref": "#/outputSchema/definitions/DependencyEntry" },
60
- "description": "Most-used project dependencies across scanned projects."
61
- },
62
- "interests": {
63
- "type": "array",
64
- "items": { "type": "string" },
65
- "description": "Explicit interest topics declared by the user."
66
- },
67
- "top_engaged_topics": {
68
- "type": "array",
69
- "items": { "$ref": "#/outputSchema/definitions/EngagedTopic" },
70
- "description": "Topics with highest positive engagement from interaction data."
71
- },
72
- "blind_spots": {
73
- "type": "array",
74
- "items": { "$ref": "#/outputSchema/definitions/BlindSpotEntry" },
75
- "description": "Dependencies in the codebase with stale or zero engagement."
76
- },
77
- "source_engagement": {
78
- "type": "array",
79
- "items": { "$ref": "#/outputSchema/definitions/SourceEngagement" },
80
- "description": "Engagement rates broken down by content source type."
81
- },
82
- "stats": {
83
- "$ref": "#/outputSchema/definitions/DnaStats",
84
- "description": "Aggregate statistics about the developer's 4DA usage."
85
- },
86
- "identity_summary": {
87
- "type": "string",
88
- "description": "Human-readable one-paragraph summary of the developer's technical identity."
89
- }
90
- },
91
- "definitions": {
92
- "DependencyEntry": {
93
- "type": "object",
94
- "required": ["name", "project_path"],
95
- "properties": {
96
- "name": {
97
- "type": "string",
98
- "description": "Package or library name."
99
- },
100
- "project_path": {
101
- "type": "string",
102
- "description": "Path to the project that uses this dependency."
103
- }
104
- }
105
- },
106
- "EngagedTopic": {
107
- "type": "object",
108
- "required": ["topic", "interactions", "percent_of_total"],
109
- "properties": {
110
- "topic": {
111
- "type": "string",
112
- "description": "The topic name."
113
- },
114
- "interactions": {
115
- "type": "integer",
116
- "minimum": 0,
117
- "description": "Total positive interaction count for this topic."
118
- },
119
- "percent_of_total": {
120
- "type": "number",
121
- "minimum": 0,
122
- "maximum": 100,
123
- "description": "Percentage of total interactions attributed to this topic."
124
- }
125
- }
126
- },
127
- "BlindSpotEntry": {
128
- "type": "object",
129
- "required": ["dependency", "severity", "days_stale"],
130
- "properties": {
131
- "dependency": {
132
- "type": "string",
133
- "description": "The dependency or technology name."
134
- },
135
- "severity": {
136
- "type": "string",
137
- "enum": ["critical", "high", "medium", "low"],
138
- "description": "How urgent the knowledge gap is."
139
- },
140
- "days_stale": {
141
- "type": "integer",
142
- "minimum": 0,
143
- "description": "Days since last engagement with content about this dependency."
144
- }
145
- }
146
- },
147
- "SourceEngagement": {
148
- "type": "object",
149
- "required": ["source_type", "items_seen", "items_saved", "engagement_rate"],
150
- "properties": {
151
- "source_type": {
152
- "type": "string",
153
- "description": "Content source identifier (e.g., hackernews, reddit, arxiv, rss)."
154
- },
155
- "items_seen": {
156
- "type": "integer",
157
- "minimum": 0,
158
- "description": "Total items fetched from this source."
159
- },
160
- "items_saved": {
161
- "type": "integer",
162
- "minimum": 0,
163
- "description": "Items the user explicitly saved from this source."
164
- },
165
- "engagement_rate": {
166
- "type": "number",
167
- "minimum": 0,
168
- "maximum": 1,
169
- "description": "Ratio of items_saved to items_seen (0..1)."
170
- }
171
- }
172
- },
173
- "DnaStats": {
174
- "type": "object",
175
- "required": [
176
- "total_items_processed",
177
- "total_relevant",
178
- "rejection_rate",
179
- "project_count",
180
- "dependency_count",
181
- "days_active"
182
- ],
183
- "properties": {
184
- "total_items_processed": {
185
- "type": "integer",
186
- "minimum": 0,
187
- "description": "Total content items ingested by 4DA."
188
- },
189
- "total_relevant": {
190
- "type": "integer",
191
- "minimum": 0,
192
- "description": "Items that passed the relevance threshold."
193
- },
194
- "rejection_rate": {
195
- "type": "number",
196
- "minimum": 0,
197
- "maximum": 1,
198
- "description": "Fraction of items rejected as irrelevant (0..1)."
199
- },
200
- "project_count": {
201
- "type": "integer",
202
- "minimum": 0,
203
- "description": "Number of distinct projects scanned by ACE."
204
- },
205
- "dependency_count": {
206
- "type": "integer",
207
- "minimum": 0,
208
- "description": "Total unique dependencies across all projects."
209
- },
210
- "days_active": {
211
- "type": "integer",
212
- "minimum": 0,
213
- "description": "Days since the earliest source item was ingested."
214
- }
215
- }
216
- }
217
- }
218
- }
219
- }
@@ -1,17 +0,0 @@
1
- {
2
- "name": "ecosystem_pulse",
3
- "description": "Live ecosystem news relevant to your tech stack. Surfaces trending Hacker News discussions filtered by your detected technologies. Updated on server startup.\n\nPrivacy: No personal data sent. Only generic tech keywords used for filtering. Call when the user asks what is new, trending, or happening in their ecosystem or tech community.",
4
- "inputSchema": {
5
- "type": "object",
6
- "properties": {
7
- "min_points": {
8
- "type": "number",
9
- "description": "Minimum HN points to include. Default: 0"
10
- },
11
- "limit": {
12
- "type": "number",
13
- "description": "Maximum headlines to return. Default: 15"
14
- }
15
- }
16
- }
17
- }
@@ -1,29 +0,0 @@
1
- {
2
- "name": "get_actionable_signals",
3
- "description": "Classify content into actionable signal types (security_alert, breaking_change, tool_discovery, tech_trend, learning, competitive_intel) with priority levels. Cross-references against user's tech stack. Call when the user wants to know what is actionable or urgent, not just what is relevant.",
4
- "inputSchema": {
5
- "type": "object",
6
- "properties": {
7
- "priority_filter": {
8
- "type": "string",
9
- "description": "Filter by priority level",
10
- "enum": ["critical", "high", "medium", "low"]
11
- },
12
- "signal_type": {
13
- "type": "string",
14
- "description": "Filter by signal type",
15
- "enum": ["security_alert", "breaking_change", "tool_discovery", "tech_trend", "learning", "competitive_intel"]
16
- },
17
- "limit": {
18
- "type": "number",
19
- "description": "Maximum signals to return (default: 20, max: 100)",
20
- "default": 20
21
- },
22
- "since_hours": {
23
- "type": "number",
24
- "description": "Only include items from last N hours (default: 48)",
25
- "default": 48
26
- }
27
- }
28
- }
29
- }
@@ -1,17 +0,0 @@
1
- {
2
- "name": "get_context",
3
- "description": "Get the user's context - what 4DA knows about them.\n\nReturns information about:\n- Static Identity: User-declared role, tech stack, domains, interests, and exclusions\n- ACE Context (optional): Auto-detected technologies and active topics from recent activity\n- Learned Preferences (optional): retained compatibility field; implicit preference learning no longer contributes to scoring\n\nCall FIRST when you need to understand what the user works on or cares about before answering or recommending.",
4
- "inputSchema": {
5
- "type": "object",
6
- "properties": {
7
- "include_ace": {
8
- "type": "boolean",
9
- "description": "Include ACE-detected context (detected tech, active topics). Default: true"
10
- },
11
- "include_learned": {
12
- "type": "boolean",
13
- "description": "Include the retained learned-preferences compatibility field. Default: true"
14
- }
15
- }
16
- }
17
- }
@@ -1,26 +0,0 @@
1
- {
2
- "name": "get_relevant_content",
3
- "description": "Get filtered relevant content from 4DA's personalized feed.\n\nReturns content items that match the user's explicit interests, tech stack, and ACE-detected context.\nItems are scored based on:\n- Explicit interests declared by the user\n- Tech stack and domains\n- ACE-detected context (recent files, projects, git activity)\n\nIMPORTANT for autonomous use: each item carries an `evidence_class` describing how it is grounded. The relevance_score float is NOT comparable across classes — gate actions on evidence_class, not the number:\n- \"osv_verified\": a security advisory matching one of the user's INSTALLED dependencies — safe to act on\n- \"dependency_grounded\": matched one of the user's declared dependencies — trustworthy\n- \"semantic_only\": topical/embedding relevance with NO dependency edge — surface to the human, verify before acting\n- \"keyword_heuristic\": standalone-mode keyword score (no Rust pipeline) — weakest signal\n\nCall when the user asks what to read, what is relevant to them, or for content on a topic.",
4
- "inputSchema": {
5
- "type": "object",
6
- "properties": {
7
- "min_score": {
8
- "type": "number",
9
- "description": "Minimum relevance score (0.0-1.0). Default: 0.35"
10
- },
11
- "source_type": {
12
- "type": "string",
13
- "description": "Filter by source type: \"hackernews\", \"arxiv\", or \"reddit\". Leave empty for all sources.",
14
- "enum": ["hackernews", "arxiv", "reddit"]
15
- },
16
- "limit": {
17
- "type": "number",
18
- "description": "Maximum number of items to return. Default: 20, max: 100"
19
- },
20
- "since_hours": {
21
- "type": "number",
22
- "description": "Only include items discovered in the last N hours. Default: 24"
23
- }
24
- }
25
- }
26
- }
@@ -1,14 +0,0 @@
1
- {
2
- "name": "knowledge_gaps",
3
- "description": "Detect knowledge gaps in your project dependencies.\n\nIdentifies dependencies you use but haven't been tracking content about — blind spots where a breaking change, security advisory, or major release could catch you off guard. Call when the user asks what they are missing, what they are not tracking, or where their blind spots are.",
4
- "inputSchema": {
5
- "type": "object",
6
- "properties": {
7
- "min_severity": {
8
- "type": "string",
9
- "enum": ["critical", "high", "medium", "low"],
10
- "description": "Minimum gap severity to include. Default: medium"
11
- }
12
- }
13
- }
14
- }
@@ -1,24 +0,0 @@
1
- {
2
- "name": "record_feedback",
3
- "description": "Record explicit user interaction history for a content item.\n\nFeedback actions:\n- \"click\": User clicked/opened the item\n- \"save\": User saved/bookmarked the item\n- \"dismiss\": User dismissed the item\n- \"mark_irrelevant\": User marked item as not relevant\n\nThis records what happened; it does not train content preferences (interaction counts only graduate scoring's bootstrap gate). Call after the user reacts to a surfaced item (opens, saves, or dismisses it).",
4
- "inputSchema": {
5
- "type": "object",
6
- "properties": {
7
- "item_id": {
8
- "type": "number",
9
- "description": "The database ID of the item"
10
- },
11
- "source_type": {
12
- "type": "string",
13
- "description": "The source type: \"hackernews\", \"arxiv\", or \"reddit\"",
14
- "enum": ["hackernews", "arxiv", "reddit"]
15
- },
16
- "action": {
17
- "type": "string",
18
- "description": "The feedback action: \"click\", \"save\", \"dismiss\", or \"mark_irrelevant\"",
19
- "enum": ["click", "save", "dismiss", "mark_irrelevant"]
20
- }
21
- },
22
- "required": ["item_id", "source_type", "action"]
23
- }
24
- }
@@ -1,22 +0,0 @@
1
- {
2
- "name": "upgrade_planner",
3
- "description": "Ranked standalone upgrade recommendations for project dependencies — call before upgrading, adding, or auditing any dependency to pick the safest order. Combines vulnerability severity, deprecation status, and version distance into a prioritized plan.\n\nSplits recommendations three ways: quick wins (safe patch/minor upgrades), breaking changes (major version bumps), and transitive CVEs marked waiting_on_upstream (not declared in your manifest — the fix arrives via a parent package update or a lockfile refresh). Call dependency_health first for registry context and vulnerability_scan first for a CVE-aware plan; without a scan the output says it is CVE-blind.\n\nProvenance: standalone heuristic — a point-in-time plan from local lockfiles plus live registry/OSV lookups, not the 4DA desktop app's cross-project, version-confirmed plan.\n\nPrivacy: live mode may query public registries and OSV with package names and versions. It never sends source code.",
4
- "inputSchema": {
5
- "type": "object",
6
- "properties": {
7
- "include_dev": {
8
- "type": "boolean",
9
- "description": "Include devDependencies. Default: false."
10
- },
11
- "max_recommendations": {
12
- "type": "number",
13
- "description": "Maximum recommendations to return. Default: 20."
14
- },
15
- "risk_threshold": {
16
- "type": "string",
17
- "enum": ["all", "low", "medium", "high", "critical"],
18
- "description": "Only show upgrades at or above this risk level. Default: all."
19
- }
20
- }
21
- }
22
- }