fodda-mcp 1.32.1 → 1.46.31

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 (186) hide show
  1. package/README.md +14 -16
  2. package/dist/a2aHandler.d.ts +33 -3
  3. package/dist/a2aHandler.d.ts.map +1 -1
  4. package/dist/a2aHandler.js +189 -36
  5. package/dist/a2aHandler.js.map +1 -1
  6. package/dist/agentFacts.d.ts +21 -0
  7. package/dist/agentFacts.d.ts.map +1 -0
  8. package/dist/agentFacts.js +72 -0
  9. package/dist/agentFacts.js.map +1 -0
  10. package/dist/agents/fodda-researcher/index.d.ts +6 -0
  11. package/dist/agents/fodda-researcher/index.d.ts.map +1 -1
  12. package/dist/agents/fodda-researcher/index.js +18 -0
  13. package/dist/agents/fodda-researcher/index.js.map +1 -1
  14. package/dist/agents/fodda-researcher/skills.d.ts +1 -1
  15. package/dist/agents/fodda-researcher/skills.d.ts.map +1 -1
  16. package/dist/agents/fodda-researcher/skills.js +8 -3
  17. package/dist/agents/fodda-researcher/skills.js.map +1 -1
  18. package/dist/brandTemplate.d.ts +1 -1
  19. package/dist/brandTemplate.d.ts.map +1 -1
  20. package/dist/brandTemplate.js +179 -11
  21. package/dist/brandTemplate.js.map +1 -1
  22. package/dist/catalogCache.d.ts +14 -13
  23. package/dist/catalogCache.d.ts.map +1 -1
  24. package/dist/catalogCache.js +266 -67
  25. package/dist/catalogCache.js.map +1 -1
  26. package/dist/coverageRelevance.d.ts +156 -0
  27. package/dist/coverageRelevance.d.ts.map +1 -0
  28. package/dist/coverageRelevance.js +1062 -0
  29. package/dist/coverageRelevance.js.map +1 -0
  30. package/dist/deepResearch.d.ts +43 -0
  31. package/dist/deepResearch.d.ts.map +1 -0
  32. package/dist/deepResearch.js +498 -0
  33. package/dist/deepResearch.js.map +1 -0
  34. package/dist/enrichment.d.ts.map +1 -1
  35. package/dist/enrichment.js +51 -1
  36. package/dist/enrichment.js.map +1 -1
  37. package/dist/errorHandling.d.ts +1 -1
  38. package/dist/errorHandling.d.ts.map +1 -1
  39. package/dist/errorHandling.js +26 -6
  40. package/dist/errorHandling.js.map +1 -1
  41. package/dist/index.d.ts +9 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +548 -38
  44. package/dist/index.js.map +1 -1
  45. package/dist/linkedinEngine.d.ts +150 -0
  46. package/dist/linkedinEngine.d.ts.map +1 -0
  47. package/dist/linkedinEngine.js +696 -0
  48. package/dist/linkedinEngine.js.map +1 -0
  49. package/dist/oauthRegisterShim.d.ts +13 -0
  50. package/dist/oauthRegisterShim.d.ts.map +1 -0
  51. package/dist/oauthRegisterShim.js +83 -0
  52. package/dist/oauthRegisterShim.js.map +1 -0
  53. package/dist/pricingCache.d.ts +6 -8
  54. package/dist/pricingCache.d.ts.map +1 -1
  55. package/dist/pricingCache.js +69 -13
  56. package/dist/pricingCache.js.map +1 -1
  57. package/dist/queryCache.d.ts +2 -0
  58. package/dist/queryCache.d.ts.map +1 -1
  59. package/dist/queryCache.js +11 -2
  60. package/dist/queryCache.js.map +1 -1
  61. package/dist/resources.d.ts +27 -0
  62. package/dist/resources.d.ts.map +1 -0
  63. package/dist/resources.js +126 -0
  64. package/dist/resources.js.map +1 -0
  65. package/dist/sessionTracker.d.ts +24 -2
  66. package/dist/sessionTracker.d.ts.map +1 -1
  67. package/dist/sessionTracker.js +198 -4
  68. package/dist/sessionTracker.js.map +1 -1
  69. package/dist/systemPrompt.d.ts +3 -3
  70. package/dist/systemPrompt.d.ts.map +1 -1
  71. package/dist/systemPrompt.js +81 -61
  72. package/dist/systemPrompt.js.map +1 -1
  73. package/dist/telemetry.d.ts +43 -0
  74. package/dist/telemetry.d.ts.map +1 -0
  75. package/dist/telemetry.js +101 -0
  76. package/dist/telemetry.js.map +1 -0
  77. package/dist/test_analyst.js +2 -2
  78. package/dist/test_analyst.js.map +1 -1
  79. package/dist/test_book_a_call_live.d.ts +2 -0
  80. package/dist/test_book_a_call_live.d.ts.map +1 -0
  81. package/dist/test_book_a_call_live.js +148 -0
  82. package/dist/test_book_a_call_live.js.map +1 -0
  83. package/dist/test_brand_intelligence_endpoint.d.ts +2 -0
  84. package/dist/test_brand_intelligence_endpoint.d.ts.map +1 -0
  85. package/dist/test_brand_intelligence_endpoint.js +20 -0
  86. package/dist/test_brand_intelligence_endpoint.js.map +1 -0
  87. package/dist/test_coverage_relevance.d.ts +12 -0
  88. package/dist/test_coverage_relevance.d.ts.map +1 -0
  89. package/dist/test_coverage_relevance.js +121 -0
  90. package/dist/test_coverage_relevance.js.map +1 -0
  91. package/dist/test_dcr_and_legacy_deprecation.d.ts +2 -0
  92. package/dist/test_dcr_and_legacy_deprecation.d.ts.map +1 -0
  93. package/dist/test_dcr_and_legacy_deprecation.js +148 -0
  94. package/dist/test_dcr_and_legacy_deprecation.js.map +1 -0
  95. package/dist/test_financial_snapshot_render.d.ts +2 -0
  96. package/dist/test_financial_snapshot_render.d.ts.map +1 -0
  97. package/dist/test_financial_snapshot_render.js +167 -0
  98. package/dist/test_financial_snapshot_render.js.map +1 -0
  99. package/dist/test_gap_alert.d.ts +12 -0
  100. package/dist/test_gap_alert.d.ts.map +1 -0
  101. package/dist/test_gap_alert.js +43 -0
  102. package/dist/test_gap_alert.js.map +1 -0
  103. package/dist/test_list_graphs_topics.d.ts +2 -0
  104. package/dist/test_list_graphs_topics.d.ts.map +1 -0
  105. package/dist/test_list_graphs_topics.js +26 -0
  106. package/dist/test_list_graphs_topics.js.map +1 -0
  107. package/dist/test_live_endpoint_runner.d.ts +2 -0
  108. package/dist/test_live_endpoint_runner.d.ts.map +1 -0
  109. package/dist/test_live_endpoint_runner.js +65 -0
  110. package/dist/test_live_endpoint_runner.js.map +1 -0
  111. package/dist/test_local_list_graphs.d.ts +2 -0
  112. package/dist/test_local_list_graphs.d.ts.map +1 -0
  113. package/dist/test_local_list_graphs.js +53 -0
  114. package/dist/test_local_list_graphs.js.map +1 -0
  115. package/dist/test_next_moves.d.ts +2 -0
  116. package/dist/test_next_moves.d.ts.map +1 -0
  117. package/dist/test_next_moves.js +349 -0
  118. package/dist/test_next_moves.js.map +1 -0
  119. package/dist/test_next_moves_transcripts.d.ts +2 -0
  120. package/dist/test_next_moves_transcripts.d.ts.map +1 -0
  121. package/dist/test_next_moves_transcripts.js +413 -0
  122. package/dist/test_next_moves_transcripts.js.map +1 -0
  123. package/dist/test_nike_cmo_alias.d.ts +2 -0
  124. package/dist/test_nike_cmo_alias.d.ts.map +1 -0
  125. package/dist/test_nike_cmo_alias.js +76 -0
  126. package/dist/test_nike_cmo_alias.js.map +1 -0
  127. package/dist/test_session_next_moves_telemetry.d.ts +2 -0
  128. package/dist/test_session_next_moves_telemetry.d.ts.map +1 -0
  129. package/dist/test_session_next_moves_telemetry.js +100 -0
  130. package/dist/test_session_next_moves_telemetry.js.map +1 -0
  131. package/dist/test_token_resolution.d.ts +2 -0
  132. package/dist/test_token_resolution.d.ts.map +1 -0
  133. package/dist/test_token_resolution.js +82 -0
  134. package/dist/test_token_resolution.js.map +1 -0
  135. package/dist/toolHandlers.d.ts +7 -3
  136. package/dist/toolHandlers.d.ts.map +1 -1
  137. package/dist/toolHandlers.js +1678 -364
  138. package/dist/toolHandlers.js.map +1 -1
  139. package/dist/tools.d.ts +7 -2
  140. package/dist/tools.d.ts.map +1 -1
  141. package/dist/tools.js +12 -3
  142. package/dist/tools.js.map +1 -1
  143. package/dist/types.d.ts +9 -46
  144. package/dist/types.d.ts.map +1 -1
  145. package/dist/types.js +6 -0
  146. package/dist/types.js.map +1 -1
  147. package/dist/verify_tools_endpoint.js +4 -3
  148. package/dist/verify_tools_endpoint.js.map +1 -1
  149. package/package.json +5 -2
  150. package/server.json +16 -3
  151. package/dist/scripts/simulate_gemini.d.ts +0 -2
  152. package/dist/scripts/simulate_gemini.d.ts.map +0 -1
  153. package/dist/scripts/simulate_gemini.js +0 -100
  154. package/dist/scripts/simulate_gemini.js.map +0 -1
  155. package/dist/scripts/verify_registry.d.ts +0 -2
  156. package/dist/scripts/verify_registry.d.ts.map +0 -1
  157. package/dist/scripts/verify_registry.js +0 -77
  158. package/dist/scripts/verify_registry.js.map +0 -1
  159. package/dist/src/index.d.ts +0 -2
  160. package/dist/src/index.d.ts.map +0 -1
  161. package/dist/src/index.js +0 -332
  162. package/dist/src/index.js.map +0 -1
  163. package/dist/src/tools.d.ts +0 -12
  164. package/dist/src/tools.d.ts.map +0 -1
  165. package/dist/src/tools.js +0 -104
  166. package/dist/src/tools.js.map +0 -1
  167. package/dist/src/types.d.ts +0 -44
  168. package/dist/src/types.d.ts.map +0 -1
  169. package/dist/src/types.js +0 -2
  170. package/dist/src/types.js.map +0 -1
  171. package/dist/src/verify.d.ts +0 -2
  172. package/dist/src/verify.d.ts.map +0 -1
  173. package/dist/src/verify.js +0 -47
  174. package/dist/src/verify.js.map +0 -1
  175. package/dist/src/verify_hmac.d.ts +0 -2
  176. package/dist/src/verify_hmac.d.ts.map +0 -1
  177. package/dist/src/verify_hmac.js +0 -106
  178. package/dist/src/verify_hmac.js.map +0 -1
  179. package/dist/src/verify_tools_endpoint.d.ts +0 -2
  180. package/dist/src/verify_tools_endpoint.d.ts.map +0 -1
  181. package/dist/src/verify_tools_endpoint.js +0 -40
  182. package/dist/src/verify_tools_endpoint.js.map +0 -1
  183. package/dist/test-waverunner-response.d.ts +0 -2
  184. package/dist/test-waverunner-response.d.ts.map +0 -1
  185. package/dist/test-waverunner-response.js +0 -20
  186. package/dist/test-waverunner-response.js.map +0 -1
package/dist/src/index.js DELETED
@@ -1,332 +0,0 @@
1
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
- import crypto from "crypto";
4
- import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
- import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
6
- import express from "express";
7
- import axios from "axios";
8
- import dotenv from "dotenv";
9
- import { TOOLS, MCP_SERVER_VERSION } from "./tools.js";
10
- dotenv.config();
11
- const API_BASE_URL = process.env.FODDA_API_URL || "https://api.fodda.ai";
12
- const IS_DEV = process.env.NODE_ENV === "development";
13
- const DUMMY_API_KEY = "dummy-test-key";
14
- const DUMMY_USER_ID = "dummy-test-user";
15
- const server = new Server({
16
- name: "fodda-mcp",
17
- version: MCP_SERVER_VERSION,
18
- }, {
19
- capabilities: {
20
- tools: {},
21
- },
22
- });
23
- /**
24
- * List available tools.
25
- */
26
- server.setRequestHandler(ListToolsRequestSchema, async () => {
27
- return {
28
- tools: TOOLS,
29
- };
30
- });
31
- /**
32
- * Handle tool calls.
33
- */
34
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
35
- const { name, arguments: args } = request.params;
36
- const graphId = args?.graphId;
37
- let userId = args?.userId;
38
- // Validate graphId for tools that require it
39
- if (name !== "psfk_overview" && !graphId) {
40
- throw new Error("graphId is required for all Fodda tools except psfk_overview.");
41
- }
42
- // Extract Bearer Token from _meta
43
- const authHeader = request.params._meta?.authorization || "";
44
- let apiKey = typeof authHeader === 'string' && authHeader.startsWith("Bearer ") ? authHeader.substring(7) : null;
45
- // Strict Enforcement / Dev Mode Fallback
46
- if (!apiKey) {
47
- if (IS_DEV) {
48
- apiKey = DUMMY_API_KEY;
49
- }
50
- else {
51
- return {
52
- isError: true,
53
- content: [{ type: "text", text: "Error: No API Key provided. Please include a Bearer token in the 'authorization' field of the MCP request _meta." }],
54
- };
55
- }
56
- }
57
- if (!userId) {
58
- if (IS_DEV) {
59
- userId = DUMMY_USER_ID;
60
- }
61
- else {
62
- return {
63
- isError: true,
64
- content: [{ type: "text", text: "Error: No userId provided. This field is required for tracking and billing." }],
65
- };
66
- }
67
- }
68
- // Enterprise Readiness: Simulated Gemini Tool Invocation Mode
69
- // strictly enforced production constraints
70
- const meta = request.params._meta || {};
71
- const testMode = meta.test_mode;
72
- if (testMode) {
73
- // 1. Strict Value Check
74
- if (testMode !== "gemini_echo") {
75
- // Silently ignore unknown test modes or throw error?
76
- // "Reject unknown test modes" -> Throwing error is safer to signal invalid usage
77
- return {
78
- isError: true,
79
- content: [{ type: "text", text: `Error: Invalid test_mode '${testMode}'. Only 'gemini_echo' is supported.` }]
80
- };
81
- }
82
- // 2. Production Guardrails
83
- // Simulation is ignored (treated as normal unauthorized/error if it falls through, or just explicitly blocked here)
84
- // unless ENV != production OR API key has role internal_testing.
85
- // We assume 'apiKey' variable holds the extracted key.
86
- // Since we can't check roles dynamically without a DB call, we'll use a placeholder logic or ENV var for now.
87
- const isInternalKey = process.env.INTERNAL_TEST_KEYS?.split(',').includes(apiKey || "");
88
- const isProduction = process.env.NODE_ENV === "production";
89
- if (isProduction && !isInternalKey) {
90
- // In production, matching keys are required to use simulation.
91
- // If not internal key, we pretend simulation doesn't exist or return error?
92
- // "Be ignored unless..." -> Proceed to normal execution path (which handles auth/tool call normally)
93
- // But wait, if we proceed, it tries to execute the tool for real.
94
- // If the intention is to SAFEGUARD against accidental real execution, we should probably BLOCK if test_mode is present but unauthorized.
95
- // However, "Be ignored" implies falling back to normal behavior OR just doing nothing.
96
- // Safest Enterprise approach: If you ASK for test_mode but aren't allowed, FAIL. Don't fall back to real execution which might cost money.
97
- return {
98
- isError: true,
99
- content: [{ type: "text", text: "Error: Simulation mode not permitted in production without internal privileges." }]
100
- };
101
- }
102
- // 3. Structured Logging
103
- console.error(JSON.stringify({
104
- event: "mcp.tool_call.simulation",
105
- simulation_mode: true,
106
- simulation_type: "gemini_echo",
107
- tool: name,
108
- graphId,
109
- userId
110
- }));
111
- // 4. Gemini Echo Response
112
- return {
113
- content: [{
114
- type: "text",
115
- text: JSON.stringify({
116
- tool_calls: [{
117
- name: name,
118
- arguments: args
119
- }]
120
- }, null, 2)
121
- }]
122
- };
123
- }
124
- const timestamp = Date.now().toString();
125
- const headers = {
126
- "X-API-Key": apiKey,
127
- "X-User-Id": userId,
128
- "X-Fodda-Mode": "deterministic",
129
- "X-Fodda-Timestamp": timestamp,
130
- "Content-Type": "application/json",
131
- };
132
- // Helper to sign payload
133
- const signRequest = (body) => {
134
- const secret = process.env.FODDA_MCP_SECRET;
135
- if (secret) {
136
- const payload = timestamp + "." + JSON.stringify(body);
137
- const signature = crypto.createHmac("sha256", secret).update(payload).digest("hex");
138
- headers["X-Fodda-Signature"] = signature;
139
- }
140
- };
141
- const startTime = Date.now();
142
- try {
143
- let response;
144
- switch (name) {
145
- case "search_graph": {
146
- const limit = Math.min(Number(args?.limit) || 25, 50); // Defense in Depth: Cap results
147
- const body = {
148
- query: args?.query,
149
- limit: limit,
150
- use_semantic: args?.use_semantic !== false,
151
- };
152
- signRequest(body);
153
- response = await axios.post(`${API_BASE_URL}/v1/graphs/${graphId}/search`, body, { headers });
154
- break;
155
- }
156
- case "get_neighbors": {
157
- const depth = Math.min(Number(args?.depth) || 1, 2); // Defense in Depth: Cap traversal depth
158
- const limit = Math.min(Number(args?.limit) || 50, 50); // Defense in Depth: Cap results
159
- const body = {
160
- seed_node_ids: args?.seed_node_ids,
161
- relationship_types: args?.relationship_types,
162
- depth: depth,
163
- limit: limit,
164
- };
165
- signRequest(body);
166
- response = await axios.post(`${API_BASE_URL}/v1/graphs/${graphId}/neighbors`, body, { headers });
167
- break;
168
- }
169
- case "get_evidence": {
170
- const top_k = Math.min(Number(args?.top_k) || 5, 10); // Defense in Depth: Cap evidence sources
171
- const body = {
172
- for_node_id: args?.for_node_id,
173
- top_k: top_k,
174
- };
175
- signRequest(body);
176
- response = await axios.post(`${API_BASE_URL}/v1/graphs/${graphId}/evidence`, body, { headers });
177
- break;
178
- }
179
- case "get_node": {
180
- response = await axios.get(`${API_BASE_URL}/v1/graphs/${graphId}/nodes/${args?.nodeId}`, { headers });
181
- break;
182
- }
183
- case "get_label_values": {
184
- response = await axios.get(`${API_BASE_URL}/v1/graphs/${graphId}/labels/${args?.label}/values`, { headers });
185
- break;
186
- }
187
- case "psfk_overview": {
188
- // Logic: At least one of industry or sector is required
189
- const industry = args?.industry;
190
- const sector = args?.sector;
191
- if (!industry && !sector) {
192
- throw new Error("At least one of 'industry' or 'sector' must be provided for psfk_overview.");
193
- }
194
- const body = {
195
- industry,
196
- sector,
197
- region: args?.region,
198
- timeframe: args?.timeframe,
199
- };
200
- signRequest(body);
201
- response = await axios.post(`${API_BASE_URL}/v1/psfk/overview`, body, { headers });
202
- break;
203
- }
204
- default:
205
- throw new Error(`Unknown tool: ${name}`);
206
- }
207
- const durationMs = Date.now() - startTime;
208
- const usage = response.data.usage || { total_billable_units: 0 };
209
- // Structured Audit Log for Enterprise Traceability (Refined for Security Compliance)
210
- console.error(JSON.stringify({
211
- event: "mcp.tool_call",
212
- tool: name,
213
- graphId,
214
- userId, // Corresponds to tenant/user identity
215
- status: response.status,
216
- durationMs,
217
- billable_units: usage.total_billable_units,
218
- deterministic: true,
219
- layer: "mcp_proxy"
220
- }));
221
- return {
222
- content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }]
223
- };
224
- }
225
- catch (error) {
226
- const durationMs = Date.now() - startTime;
227
- console.error(JSON.stringify({
228
- event: "mcp.tool_error",
229
- tool: name,
230
- graphId,
231
- userId,
232
- status: error.response?.status || 500,
233
- durationMs,
234
- error: error.response?.data?.message || error.message
235
- }));
236
- return {
237
- isError: true,
238
- content: [{ type: "text", text: `Error calling Fodda API: ${error.response?.data?.message || error.message}` }],
239
- };
240
- }
241
- });
242
- /**
243
- * Start the server.
244
- */
245
- async function main() {
246
- if (process.env.PORT) {
247
- const app = express();
248
- const port = parseInt(process.env.PORT) || 8080;
249
- let transport = null;
250
- // Security: HMAC Signature Verification Middleware
251
- const verifySignature = (req, res, next) => {
252
- // Skip verification for public endpoints (like tools registry)
253
- console.error(`[DEBUG] Middleware hit: ${req.method} ${req.path}`);
254
- if (req.path === "/mcp/tools" && req.method === "GET") {
255
- console.error(`[DEBUG] Skipping verification for /mcp/tools`);
256
- return next();
257
- }
258
- const signature = req.headers["x-fodda-signature"];
259
- const secret = process.env.FODDA_MCP_SECRET;
260
- if (!secret) {
261
- console.error("❌ CRTICAL: FODDA_MCP_SECRET not set in environment.");
262
- return res.status(500).json({ error: "Server misconfiguration" });
263
- }
264
- if (!signature || typeof signature !== 'string') {
265
- console.error(`[DEBUG] Missing signature. Header:`, req.headers["x-fodda-signature"]);
266
- return res.status(401).json({ error: "Missing or invalid signature" });
267
- }
268
- // In a real Express setup with body-parser, req.body is an object.
269
- // We need the raw body for HMAC.
270
- // However, with MCP SDK, we might be using standard express json parser.
271
- // If body is already parsed, JSON.stringify might not match exact raw body sent.
272
- // BEST PRACTICE: Use a raw body parser or verify locally.
273
- // For this implementation, assuming JSON body parser is used upstream or we need to add it.
274
- // Let's assume standard JSON body for now, but note the fragility.
275
- // Ideally: app.use(express.json({ verify: ... })) to capture raw body.
276
- // For simplicity in this task, we will attempt to reconstruct or use a rawBody property if available,
277
- // otherwise falling back to JSON.stringify (which is fragile but often sufficient for simple JSON RPC).
278
- const payload = JSON.stringify(req.body);
279
- const expectedSignature = crypto
280
- .createHmac("sha256", secret)
281
- .update(payload)
282
- .digest("hex");
283
- // Timing-safe comparison
284
- const trusted = Buffer.from(expectedSignature, 'ascii');
285
- const untrusted = Buffer.from(signature, 'ascii');
286
- if (trusted.length !== untrusted.length || !crypto.timingSafeEqual(trusted, untrusted)) {
287
- console.error("❌ Invalid Signature:", signature, "Expected:", expectedSignature);
288
- return res.status(401).json({ error: "Invalid signature" });
289
- }
290
- next();
291
- };
292
- // Parse JSON bodies (required for signature verification)
293
- app.use(express.json());
294
- // Apply HMAC middleware globally (except avoided paths inside middleware logic)
295
- console.error("[DEBUG] Registering verifySignature middleware");
296
- app.use(verifySignature);
297
- app.get("/sse", async (req, res) => {
298
- console.error("New SSE connection established");
299
- transport = new SSEServerTransport("/messages", res);
300
- await server.connect(transport);
301
- });
302
- app.post("/messages", async (req, res) => {
303
- if (transport) {
304
- await transport.handlePostMessage(req, res);
305
- }
306
- else {
307
- res.status(400).send("SSE connection not established");
308
- }
309
- });
310
- // Enterprise Transparency: Tool Capability Registry
311
- app.get("/mcp/tools", (req, res) => {
312
- res.json({
313
- tools: TOOLS,
314
- count: TOOLS.length,
315
- version: MCP_SERVER_VERSION
316
- });
317
- });
318
- app.listen(port, () => {
319
- console.error(`Fodda MCP server running on SSE at http://localhost:${port}/sse`);
320
- });
321
- }
322
- else {
323
- const transport = new StdioServerTransport();
324
- await server.connect(transport);
325
- console.error("Fodda MCP server running on stdio");
326
- }
327
- }
328
- main().catch((error) => {
329
- console.error("Server error:", error);
330
- process.exit(1);
331
- });
332
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import type { ExtendedTool } from "./types.js";
2
- export declare const MCP_SERVER_VERSION = "1.1.0";
3
- export declare const TOOL_VERSIONS: {
4
- search_graph: string;
5
- get_neighbors: string;
6
- get_evidence: string;
7
- get_node: string;
8
- get_label_values: string;
9
- psfk_overview: string;
10
- };
11
- export declare const TOOLS: ExtendedTool[];
12
- //# sourceMappingURL=tools.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAC1C,eAAO,MAAM,aAAa;;;;;;;CAOzB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,YAAY,EA6F/B,CAAC"}
package/dist/src/tools.js DELETED
@@ -1,104 +0,0 @@
1
- export const MCP_SERVER_VERSION = "1.1.0";
2
- export const TOOL_VERSIONS = {
3
- search_graph: "1.0.0",
4
- get_neighbors: "1.0.0",
5
- get_evidence: "1.0.0",
6
- get_node: "1.0.0",
7
- get_label_values: "1.0.0",
8
- psfk_overview: "1.0.0",
9
- };
10
- export const TOOLS = [
11
- {
12
- name: "search_graph",
13
- description: "Perform hybrid (keyword + semantic) search on a Fodda knowledge graph. Use this to find trends, articles, and concepts. Highly recommended for natural language discovery.",
14
- inputSchema: {
15
- type: "object",
16
- properties: {
17
- graphId: { type: "string", description: "The graph ID (e.g., 'psfk', 'waldo', 'sic')" },
18
- query: { type: "string", description: "The search query" },
19
- userId: { type: "string", description: "Unique identifier for the user (Required)" },
20
- limit: { type: "number", description: "Maximum number of results (default 25, max 50)" },
21
- use_semantic: { type: "boolean", description: "Whether to use semantic search (default true)" },
22
- },
23
- required: ["graphId", "query", "userId"],
24
- },
25
- isDeterministic: false, // Search results can change as data updates
26
- },
27
- {
28
- name: "get_neighbors",
29
- description: "Traverse the graph from seed nodes to find related concepts and relationships. Useful for depth-first discovery.",
30
- inputSchema: {
31
- type: "object",
32
- properties: {
33
- graphId: { type: "string", description: "The graph ID" },
34
- seed_node_ids: { type: "array", items: { type: "string" }, description: "Array of node IDs to start traversal from" },
35
- userId: { type: "string", description: "Unique identifier for the user (Required)" },
36
- relationship_types: { type: "array", items: { type: "string" }, description: "Filter by relationship types" },
37
- depth: { type: "number", description: "Traversal depth (default 1, max 2)" },
38
- limit: { type: "number", description: "Maximum results (default 50)" },
39
- },
40
- required: ["graphId", "seed_node_ids", "userId"],
41
- },
42
- isDeterministic: true, // Graph structure is relatively stable for traversal
43
- },
44
- {
45
- name: "get_evidence",
46
- description: "Get source signals, articles, and evidentiary depth for a specific node. Essential for provenance and fact-checking.",
47
- inputSchema: {
48
- type: "object",
49
- properties: {
50
- graphId: { type: "string", description: "The graph ID" },
51
- for_node_id: { type: "string", description: " The ID of the node (Trend or Article)" },
52
- userId: { type: "string", description: "Unique identifier for the user (Required)" },
53
- top_k: { type: "number", description: "Number of evidence items to return (default 5)" },
54
- },
55
- required: ["graphId", "for_node_id", "userId"],
56
- },
57
- isDeterministic: true,
58
- },
59
- {
60
- name: "get_node",
61
- description: "Directly retrieve metadata and properties for a single node by its ID.",
62
- inputSchema: {
63
- type: "object",
64
- properties: {
65
- graphId: { type: "string", description: "The graph ID" },
66
- nodeId: { type: "string", description: "The ID of the node" },
67
- userId: { type: "string", description: "Unique identifier for the user (Required)" },
68
- },
69
- required: ["graphId", "nodeId", "userId"],
70
- },
71
- isDeterministic: true,
72
- },
73
- {
74
- name: "get_label_values",
75
- description: "Discover valid values for a specific node label (e.g., RetailerType, Technology). Use for discovery, UI filters, and category exploration.",
76
- inputSchema: {
77
- type: "object",
78
- properties: {
79
- graphId: { type: "string", description: "The graph ID" },
80
- label: { type: "string", description: "The label to fetch values for" },
81
- userId: { type: "string", description: "Unique identifier for the user (Required)" },
82
- },
83
- required: ["graphId", "label", "userId"],
84
- },
85
- isDeterministic: true,
86
- },
87
- {
88
- name: "psfk_overview",
89
- description: "Get a structured macro overview from the PSFK Graph. Returns up to 3 meta_patterns. Useful for top-level briefings before deeper exploration.",
90
- inputSchema: {
91
- type: "object",
92
- properties: {
93
- industry: { type: "string", description: "Filter by industry (e.g. 'Retail', 'Health')" },
94
- sector: { type: "string", description: "Filter by sector" },
95
- region: { type: "string", description: "Filter by region" },
96
- timeframe: { type: "string", description: "Timeframe for the overview" },
97
- userId: { type: "string", description: "Unique identifier for the user (Required)" },
98
- },
99
- required: ["userId"], // industry or sector required by logic, but not schema strictness to allow either
100
- },
101
- isDeterministic: false, // Macro overviews are generated and may evolve
102
- },
103
- ];
104
- //# sourceMappingURL=tools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- import type { Tool } from "@modelcontextprotocol/sdk/types.js";
2
- export interface ExtendedTool extends Tool {
3
- isDeterministic: boolean;
4
- }
5
- export interface FoddaSearchRequest {
6
- query: string;
7
- limit?: number;
8
- use_semantic?: boolean;
9
- }
10
- export interface FoddaNeighborsRequest {
11
- seed_node_ids: string[];
12
- relationship_types?: string[];
13
- direction?: 'in' | 'out' | 'both';
14
- depth?: number;
15
- limit?: number;
16
- }
17
- export interface FoddaEvidenceRequest {
18
- for_node_id: string;
19
- top_k?: number;
20
- }
21
- export interface FoddaGraph {
22
- graph_id: string;
23
- name: string;
24
- version: string;
25
- description: string;
26
- node_types: string[];
27
- relationship_types: string[];
28
- }
29
- export interface FoddaScanNode {
30
- id: string;
31
- display: string;
32
- labels: string[];
33
- properties: Record<string, any>;
34
- _score?: number;
35
- }
36
- export interface FoddaEvidence {
37
- id: string;
38
- title: string;
39
- sourceUrl: string;
40
- snippet: string;
41
- publishedAt?: string;
42
- relevance?: number;
43
- }
44
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,MAAM,WAAW,YAAa,SAAQ,IAAI;IACxC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
package/dist/src/types.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=verify.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/verify.ts"],"names":[],"mappings":""}
@@ -1,47 +0,0 @@
1
- import { spawn } from 'child_process';
2
- import { createInterface } from 'readline';
3
- async function runTest() {
4
- console.log('Starting Fodda MCP server verification...');
5
- const mcp = spawn('node', ['dist/index.js']);
6
- const rl = createInterface({
7
- input: mcp.stdout,
8
- terminal: false
9
- });
10
- mcp.stderr.on('data', (data) => {
11
- console.error(`[Server Log]: ${data}`);
12
- });
13
- const sendRequest = (req) => {
14
- mcp.stdin.write(JSON.stringify(req) + '\n');
15
- };
16
- const waitForResponse = () => {
17
- return new Promise((resolve) => {
18
- rl.once('line', (line) => {
19
- resolve(JSON.parse(line));
20
- });
21
- });
22
- };
23
- // Wait for server to be ready
24
- await new Promise(resolve => setTimeout(resolve, 1500));
25
- console.log('Testing tools/list...');
26
- sendRequest({
27
- jsonrpc: '2.0',
28
- id: 1,
29
- method: 'tools/list',
30
- params: {}
31
- });
32
- const listToolsRes = await waitForResponse();
33
- if (listToolsRes.result?.tools) {
34
- console.log('✅ Tools registered:', listToolsRes.result.tools.map((t) => t.name).join(', '));
35
- }
36
- else {
37
- console.error('❌ Failed to list tools:', JSON.stringify(listToolsRes));
38
- }
39
- // Cleanup
40
- mcp.kill();
41
- process.exit(0);
42
- }
43
- runTest().catch(err => {
44
- console.error('Test failed:', err);
45
- process.exit(1);
46
- });
47
- //# sourceMappingURL=verify.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,KAAK,UAAU,OAAO;IAClB,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAG,eAAe,CAAC;QACvB,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,QAAQ,EAAE,KAAK;KAClB,CAAC,CAAC;IAEH,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3B,OAAO,CAAC,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAE,EAAE;QAC7B,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,GAAiB,EAAE;QACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACrB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,8BAA8B;IAC9B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAExD,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,WAAW,CAAC;QACR,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,CAAC;QACL,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,EAAE;KACb,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAC;IAC7C,IAAI,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrG,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,UAAU;IACV,GAAG,CAAC,IAAI,EAAE,CAAC;IACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IAClB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=verify_hmac.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify_hmac.d.ts","sourceRoot":"","sources":["../../src/verify_hmac.ts"],"names":[],"mappings":""}