fodda-mcp 1.3.1 → 1.7.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 +22 -8
- package/dist/index.js +202 -31
- package/dist/index.js.map +1 -1
- package/dist/test_live_mcp.d.ts +2 -0
- package/dist/test_live_mcp.d.ts.map +1 -0
- package/dist/test_live_mcp.js +49 -0
- package/dist/test_live_mcp.js.map +1 -0
- package/dist/tools.d.ts +3 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +133 -23
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/server.json +5 -19
package/README.md
CHANGED
|
@@ -1,21 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
<img src="https://ucarecdn.com/6e7893d7-6b14-426b-83bc-574a3f72d6bc/foddaminilogo.png" alt="Fodda Logo" width="120"/>
|
|
3
|
+
|
|
4
|
+
# Fodda MCP Server
|
|
2
5
|
|
|
3
|
-
**Expert-curated knowledge graphs for AI agents** — PSFK Retail, Beauty, Sports and partner datasets via the Model Context Protocol.
|
|
6
|
+
**Expert-curated knowledge graphs for AI agents** — PSFK Retail, Beauty, Sports and partner datasets via the Model Context Protocol.
|
|
4
7
|
|
|
5
|
-
[](https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.piers-fawkes/fodda)
|
|
9
|
+
[](https://www.npmjs.com/package/fodda-mcp)
|
|
10
|
+
[](./CHANGELOG.md)
|
|
11
|
+
[](https://fodda.ai)
|
|
12
|
+
|
|
13
|
+
</div>
|
|
7
14
|
|
|
8
15
|
---
|
|
9
16
|
|
|
10
17
|
## Quick Start
|
|
11
18
|
|
|
12
|
-
### Claude Code
|
|
19
|
+
### Claude Code (Streamable HTTP fallback to SSE)
|
|
13
20
|
|
|
14
21
|
```bash
|
|
15
22
|
claude mcp add --transport sse fodda https://mcp.fodda.ai/sse \
|
|
16
23
|
--header "Authorization: Bearer YOUR_API_KEY"
|
|
17
24
|
```
|
|
18
25
|
|
|
26
|
+
### OpenAI Frontier or Streamable HTTP Client
|
|
27
|
+
Connect to the `/mcp` endpoint using HTTP `GET` to establish a stream and `POST` to execute:
|
|
28
|
+
```bash
|
|
29
|
+
https://mcp.fodda.ai/mcp
|
|
30
|
+
```
|
|
31
|
+
|
|
19
32
|
### Gemini CLI
|
|
20
33
|
|
|
21
34
|
```json
|
|
@@ -77,9 +90,10 @@ In MCP request `_meta`:
|
|
|
77
90
|
|
|
78
91
|
| Variable | Description | Default |
|
|
79
92
|
|----------|-------------|---------|
|
|
80
|
-
| `PORT` |
|
|
93
|
+
| `PORT` | HTTP server port (omit for stdio mode) | — |
|
|
81
94
|
| `FODDA_API_URL` | Upstream API base URL | `https://api.fodda.ai` |
|
|
82
95
|
| `FODDA_MCP_SECRET` | HMAC signing secret | — |
|
|
96
|
+
| `ALLOWED_TOOLS` | Comma-separated allowlist of Enterprise Tool scope | `search_graph,get_node,...` |
|
|
83
97
|
| `NODE_ENV` | Environment (`development` / `production`) | `production` |
|
|
84
98
|
| `INTERNAL_TEST_KEYS` | Comma-separated keys for simulation mode | — |
|
|
85
99
|
| `RATE_LIMIT_RPM` | Requests per minute per API key | `60` |
|
|
@@ -110,11 +124,11 @@ PORT=8080 npm start
|
|
|
110
124
|
|
|
111
125
|
## MCP Registry
|
|
112
126
|
|
|
113
|
-
This server is published to the [Official MCP Registry](https://registry.modelcontextprotocol.io) as `
|
|
127
|
+
This server is published to the [Official MCP Registry](https://registry.modelcontextprotocol.io) as `io.github.piers-fawkes/fodda`.
|
|
114
128
|
|
|
115
129
|
```bash
|
|
116
130
|
# Verify listing
|
|
117
|
-
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=
|
|
131
|
+
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.piers-fawkes/fodda"
|
|
118
132
|
```
|
|
119
133
|
|
|
120
134
|
---
|
package/dist/index.js
CHANGED
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import crypto from "crypto";
|
|
5
|
-
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
|
|
6
6
|
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
|
|
7
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
8
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
7
9
|
import express from "express";
|
|
8
10
|
import axios from "axios";
|
|
9
|
-
import dotenv from "dotenv";
|
|
11
|
+
import * as dotenv from "dotenv";
|
|
10
12
|
import { TOOLS, MCP_SERVER_VERSION } from "./tools.js";
|
|
13
|
+
const requestContext = new AsyncLocalStorage();
|
|
11
14
|
dotenv.config();
|
|
12
15
|
const API_BASE_URL = process.env.FODDA_API_URL || "https://api.fodda.ai";
|
|
13
16
|
const IS_DEV = process.env.NODE_ENV === "development";
|
|
@@ -33,25 +36,58 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
33
36
|
* Handle tool calls.
|
|
34
37
|
*/
|
|
35
38
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
39
|
+
const context = requestContext.getStore();
|
|
40
|
+
const requestId = context?.requestId || crypto.randomUUID();
|
|
41
|
+
const traceId = context?.traceId;
|
|
36
42
|
const { name, arguments: args } = request.params;
|
|
37
43
|
const graphId = args?.graphId;
|
|
38
44
|
let userId = args?.userId;
|
|
45
|
+
// 2. Tool Filtering Enforcement
|
|
46
|
+
// Ensure the requested tool is explicitly within ALLOWED_TOOLS
|
|
47
|
+
if (!TOOLS.find(t => t.name === name)) {
|
|
48
|
+
return {
|
|
49
|
+
isError: true,
|
|
50
|
+
content: [{ type: "text", text: JSON.stringify({ error: { code: "FORBIDDEN_TOOL", message: `Tool '${name}' is not in the allowed enterprise toolset.`, requestId } }) }]
|
|
51
|
+
};
|
|
52
|
+
}
|
|
39
53
|
// Validate graphId for tools that require it
|
|
40
|
-
if (name !== "psfk_overview" && !graphId) {
|
|
41
|
-
|
|
54
|
+
if (name !== "psfk_overview" && name !== "list_graphs" && !graphId) {
|
|
55
|
+
return {
|
|
56
|
+
isError: true,
|
|
57
|
+
content: [{ type: "text", text: JSON.stringify({ error: { code: "INVALID_PARAMS", message: "graphId is required for all Fodda tools except psfk_overview and list_graphs.", requestId } }) }]
|
|
58
|
+
};
|
|
42
59
|
}
|
|
43
|
-
|
|
44
|
-
const authHeader =
|
|
45
|
-
let apiKey =
|
|
46
|
-
//
|
|
47
|
-
if (
|
|
60
|
+
const meta = request.params._meta || {};
|
|
61
|
+
const authHeader = meta.authorization;
|
|
62
|
+
let apiKey = null;
|
|
63
|
+
// 1. Auth Fallback Enforcement
|
|
64
|
+
if (authHeader !== undefined) {
|
|
65
|
+
if (typeof authHeader === 'string' && authHeader.startsWith("Bearer ")) {
|
|
66
|
+
const token = authHeader.substring(7);
|
|
67
|
+
if (token.trim() === "") {
|
|
68
|
+
return {
|
|
69
|
+
isError: true,
|
|
70
|
+
content: [{ type: "text", text: JSON.stringify({ error: { code: "UNAUTHORIZED", message: "Empty Bearer token provided.", requestId } }) }],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
apiKey = token;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
return {
|
|
77
|
+
isError: true,
|
|
78
|
+
content: [{ type: "text", text: JSON.stringify({ error: { code: "UNAUTHORIZED", message: "Invalid authorization header format. Expected 'Bearer <token>'.", requestId } }) }],
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Fallback to DEV KEY only if auth metadata is completely absent and in IS_DEV
|
|
48
84
|
if (IS_DEV) {
|
|
49
85
|
apiKey = DUMMY_API_KEY;
|
|
50
86
|
}
|
|
51
87
|
else {
|
|
52
88
|
return {
|
|
53
89
|
isError: true,
|
|
54
|
-
content: [{ type: "text", text:
|
|
90
|
+
content: [{ type: "text", text: JSON.stringify({ error: { code: "UNAUTHORIZED", message: "No Authorization metadata provided.", requestId } }) }],
|
|
55
91
|
};
|
|
56
92
|
}
|
|
57
93
|
}
|
|
@@ -62,13 +98,12 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
62
98
|
else {
|
|
63
99
|
return {
|
|
64
100
|
isError: true,
|
|
65
|
-
content: [{ type: "text", text: "Error: No userId provided. This field is required for tracking and billing." }],
|
|
101
|
+
content: [{ type: "text", text: JSON.stringify({ error: { code: "INVALID_PARAMS", message: "Error: No userId provided. This field is required for tracking and billing.", requestId } }) }],
|
|
66
102
|
};
|
|
67
103
|
}
|
|
68
104
|
}
|
|
69
105
|
// Enterprise Readiness: Simulated Gemini Tool Invocation Mode
|
|
70
106
|
// strictly enforced production constraints
|
|
71
|
-
const meta = request.params._meta || {};
|
|
72
107
|
const testMode = meta.test_mode;
|
|
73
108
|
if (testMode) {
|
|
74
109
|
// 1. Strict Value Check
|
|
@@ -77,7 +112,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
77
112
|
// "Reject unknown test modes" -> Throwing error is safer to signal invalid usage
|
|
78
113
|
return {
|
|
79
114
|
isError: true,
|
|
80
|
-
content: [{ type: "text", text: `Error: Invalid test_mode '${testMode}'. Only 'gemini_echo' is supported
|
|
115
|
+
content: [{ type: "text", text: JSON.stringify({ error: { code: "INVALID_PARAMS", message: `Error: Invalid test_mode '${testMode}'. Only 'gemini_echo' is supported.`, requestId } }) }]
|
|
81
116
|
};
|
|
82
117
|
}
|
|
83
118
|
// 2. Production Guardrails
|
|
@@ -97,7 +132,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
97
132
|
// 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.
|
|
98
133
|
return {
|
|
99
134
|
isError: true,
|
|
100
|
-
content: [{ type: "text", text: "Error: Simulation mode not permitted in production without internal privileges." }]
|
|
135
|
+
content: [{ type: "text", text: JSON.stringify({ error: { code: "FORBIDDEN", message: "Error: Simulation mode not permitted in production without internal privileges.", requestId } }) }]
|
|
101
136
|
};
|
|
102
137
|
}
|
|
103
138
|
// 3. Structured Logging
|
|
@@ -128,7 +163,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
128
163
|
"X-User-Id": userId,
|
|
129
164
|
"X-Fodda-Timestamp": timestamp,
|
|
130
165
|
"Content-Type": "application/json",
|
|
166
|
+
"X-Request-Id": requestId,
|
|
131
167
|
};
|
|
168
|
+
if (traceId) {
|
|
169
|
+
headers["traceparent"] = traceId;
|
|
170
|
+
}
|
|
171
|
+
// Internal Service Key: bypass credit checks for internal/admin usage
|
|
172
|
+
const internalServiceKey = process.env.INTERNAL_SERVICE_KEY || process.env.FODDA_INTERNAL_KEY;
|
|
173
|
+
if (internalServiceKey && apiKey === internalServiceKey) {
|
|
174
|
+
headers["fodda-internal-service-key"] = internalServiceKey;
|
|
175
|
+
}
|
|
132
176
|
// Helper to sign payload
|
|
133
177
|
const signRequest = (body) => {
|
|
134
178
|
const secret = process.env.FODDA_MCP_SECRET;
|
|
@@ -149,6 +193,14 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
149
193
|
limit: limit,
|
|
150
194
|
use_semantic: args?.use_semantic !== false,
|
|
151
195
|
};
|
|
196
|
+
if (args?.filters)
|
|
197
|
+
body.filters = args.filters;
|
|
198
|
+
if (args?.include_evidence !== undefined) {
|
|
199
|
+
body.include_evidence = args.include_evidence;
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
body.include_evidence = true; // Default to true — most agent use cases benefit from inline evidence
|
|
203
|
+
}
|
|
152
204
|
signRequest(body);
|
|
153
205
|
response = await axios.post(`${API_BASE_URL}/v1/graphs/${graphId}/search`, body, { headers });
|
|
154
206
|
break;
|
|
@@ -162,6 +214,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
162
214
|
depth: depth,
|
|
163
215
|
limit: limit,
|
|
164
216
|
};
|
|
217
|
+
if (args?.direction)
|
|
218
|
+
body.direction = args.direction;
|
|
165
219
|
signRequest(body);
|
|
166
220
|
response = await axios.post(`${API_BASE_URL}/v1/graphs/${graphId}/neighbors`, body, { headers });
|
|
167
221
|
break;
|
|
@@ -188,7 +242,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
188
242
|
break;
|
|
189
243
|
}
|
|
190
244
|
case "get_label_values": {
|
|
191
|
-
const
|
|
245
|
+
const propertyParam = args?.property ? `?property=${encodeURIComponent(String(args.property))}` : '';
|
|
246
|
+
const getLabelPath = `/v1/graphs/${graphId}/labels/${args?.label}/values${propertyParam}`;
|
|
192
247
|
const getLabelSecret = process.env.FODDA_MCP_SECRET;
|
|
193
248
|
if (getLabelSecret) {
|
|
194
249
|
const payload = timestamp + "." + getLabelPath;
|
|
@@ -199,12 +254,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
199
254
|
break;
|
|
200
255
|
}
|
|
201
256
|
case "psfk_overview": {
|
|
202
|
-
// Logic: At least one of industry or sector is required
|
|
203
257
|
const industry = args?.industry;
|
|
204
258
|
const sector = args?.sector;
|
|
205
|
-
if (!industry && !sector) {
|
|
206
|
-
throw new Error("At least one of 'industry' or 'sector' must be provided for psfk_overview.");
|
|
207
|
-
}
|
|
208
259
|
const body = {
|
|
209
260
|
industry,
|
|
210
261
|
sector,
|
|
@@ -215,6 +266,35 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
215
266
|
response = await axios.post(`${API_BASE_URL}/v1/psfk/overview`, body, { headers });
|
|
216
267
|
break;
|
|
217
268
|
}
|
|
269
|
+
case "discover_adjacent_trends": {
|
|
270
|
+
const adjParams = new URLSearchParams({ node_id: String(args?.trend_id) });
|
|
271
|
+
if (args?.min_score !== undefined)
|
|
272
|
+
adjParams.set("min_score", String(args.min_score));
|
|
273
|
+
const adjLimit = Math.min(Number(args?.limit) || 10, 20); // Defense in Depth: Cap adjacent results
|
|
274
|
+
adjParams.set("limit", String(adjLimit));
|
|
275
|
+
if (args?.include_editorial !== undefined)
|
|
276
|
+
adjParams.set("include_editorial", String(args.include_editorial));
|
|
277
|
+
const adjPath = `/v1/graphs/${graphId}/adjacent?${adjParams.toString()}`;
|
|
278
|
+
const adjSecret = process.env.FODDA_MCP_SECRET;
|
|
279
|
+
if (adjSecret) {
|
|
280
|
+
const payload = timestamp + "." + adjPath;
|
|
281
|
+
const signature = crypto.createHmac("sha256", adjSecret).update(payload).digest("hex");
|
|
282
|
+
headers["X-Fodda-Signature"] = signature;
|
|
283
|
+
}
|
|
284
|
+
response = await axios.get(`${API_BASE_URL}${adjPath}`, { headers });
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
case "list_graphs": {
|
|
288
|
+
const listGraphsPath = `/v1/graphs`;
|
|
289
|
+
const listGraphsSecret = process.env.FODDA_MCP_SECRET;
|
|
290
|
+
if (listGraphsSecret) {
|
|
291
|
+
const payload = timestamp + "." + listGraphsPath;
|
|
292
|
+
const signature = crypto.createHmac("sha256", listGraphsSecret).update(payload).digest("hex");
|
|
293
|
+
headers["X-Fodda-Signature"] = signature;
|
|
294
|
+
}
|
|
295
|
+
response = await axios.get(`${API_BASE_URL}${listGraphsPath}`, { headers });
|
|
296
|
+
break;
|
|
297
|
+
}
|
|
218
298
|
default:
|
|
219
299
|
throw new Error(`Unknown tool: ${name}`);
|
|
220
300
|
}
|
|
@@ -230,26 +310,66 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
230
310
|
durationMs,
|
|
231
311
|
billable_units: usage.total_billable_units,
|
|
232
312
|
deterministic: false,
|
|
233
|
-
layer: "mcp_proxy"
|
|
313
|
+
layer: "mcp_proxy",
|
|
314
|
+
requestId,
|
|
315
|
+
traceId
|
|
234
316
|
}));
|
|
317
|
+
const resultData = { ...response.data, meta: { requestId } };
|
|
318
|
+
const resultString = JSON.stringify(resultData, null, 2);
|
|
319
|
+
const MAX_RESPONSE_BYTES = process.env.MAX_RESPONSE_BYTES ? parseInt(process.env.MAX_RESPONSE_BYTES, 10) : 2 * 1024 * 1024;
|
|
320
|
+
if (Buffer.byteLength(resultString, 'utf8') > MAX_RESPONSE_BYTES) {
|
|
321
|
+
console.error(JSON.stringify({
|
|
322
|
+
event: "mcp.tool_error",
|
|
323
|
+
tool: name,
|
|
324
|
+
graphId,
|
|
325
|
+
userId,
|
|
326
|
+
status: 413,
|
|
327
|
+
durationMs,
|
|
328
|
+
error: "Response exceeded maximum size limit",
|
|
329
|
+
requestId,
|
|
330
|
+
traceId
|
|
331
|
+
}));
|
|
332
|
+
return {
|
|
333
|
+
isError: true,
|
|
334
|
+
content: [{ type: "text", text: JSON.stringify({ error: { code: "PAYLOAD_TOO_LARGE", message: `Response exceeded maximum size of ${MAX_RESPONSE_BYTES} bytes.`, requestId } }) }]
|
|
335
|
+
};
|
|
336
|
+
}
|
|
235
337
|
return {
|
|
236
|
-
content: [{ type: "text", text:
|
|
338
|
+
content: [{ type: "text", text: resultString }]
|
|
237
339
|
};
|
|
238
340
|
}
|
|
239
341
|
catch (error) {
|
|
240
342
|
const durationMs = Date.now() - startTime;
|
|
343
|
+
const status = error.status || error.response?.status || 500;
|
|
241
344
|
console.error(JSON.stringify({
|
|
242
345
|
event: "mcp.tool_error",
|
|
243
346
|
tool: name,
|
|
244
347
|
graphId,
|
|
245
348
|
userId,
|
|
246
|
-
status
|
|
349
|
+
status,
|
|
247
350
|
durationMs,
|
|
248
|
-
error: error.response?.data?.message || error.message
|
|
351
|
+
error: error.response?.data?.message || error.message,
|
|
352
|
+
requestId,
|
|
353
|
+
traceId
|
|
249
354
|
}));
|
|
355
|
+
let code = "UPSTREAM_ERROR";
|
|
356
|
+
if (status === 400)
|
|
357
|
+
code = "INVALID_PARAMS";
|
|
358
|
+
else if (status === 401)
|
|
359
|
+
code = "INVALID_AUTH";
|
|
360
|
+
else if (status === 403)
|
|
361
|
+
code = "FORBIDDEN";
|
|
362
|
+
else if (status === 404)
|
|
363
|
+
code = "GRAPH_NOT_FOUND";
|
|
364
|
+
else if (status === 429)
|
|
365
|
+
code = "RATE_LIMITED";
|
|
366
|
+
else if (status === 504)
|
|
367
|
+
code = "BACKEND_TIMEOUT";
|
|
368
|
+
else if (error.message && error.message.includes("Unknown tool"))
|
|
369
|
+
code = "UNKNOWN_TOOL";
|
|
250
370
|
return {
|
|
251
371
|
isError: true,
|
|
252
|
-
content: [{ type: "text", text:
|
|
372
|
+
content: [{ type: "text", text: JSON.stringify({ error: { code, message: error.response?.data?.message || error.message, requestId } }) }],
|
|
253
373
|
};
|
|
254
374
|
}
|
|
255
375
|
});
|
|
@@ -262,6 +382,11 @@ async function main() {
|
|
|
262
382
|
app.set("trust proxy", true);
|
|
263
383
|
const port = parseInt(process.env.PORT) || 8080;
|
|
264
384
|
const transports = new Map();
|
|
385
|
+
app.use((req, res, next) => {
|
|
386
|
+
const requestId = req.headers["x-request-id"] || crypto.randomUUID();
|
|
387
|
+
const traceId = req.headers["traceparent"];
|
|
388
|
+
requestContext.run({ requestId, traceId }, () => next());
|
|
389
|
+
});
|
|
265
390
|
// Security: HMAC Signature Verification Middleware
|
|
266
391
|
const verifySignature = (req, res, next) => {
|
|
267
392
|
// Skip verification for public/health endpoints
|
|
@@ -298,11 +423,11 @@ async function main() {
|
|
|
298
423
|
// Clean up expired entries every 5 minutes
|
|
299
424
|
setInterval(() => {
|
|
300
425
|
const now = Date.now();
|
|
301
|
-
|
|
426
|
+
rateLimitMap.forEach((entry, key) => {
|
|
302
427
|
if (now - entry.windowStart > RATE_LIMIT_WINDOW_MS * 2) {
|
|
303
428
|
rateLimitMap.delete(key);
|
|
304
429
|
}
|
|
305
|
-
}
|
|
430
|
+
});
|
|
306
431
|
}, 5 * 60_000);
|
|
307
432
|
const rateLimiter = (req, res, next) => {
|
|
308
433
|
// Skip rate limiting for public/health endpoints
|
|
@@ -321,15 +446,18 @@ async function main() {
|
|
|
321
446
|
entry.count++;
|
|
322
447
|
if (entry.count > RATE_LIMIT_MAX) {
|
|
323
448
|
const retryAfter = Math.ceil((entry.windowStart + RATE_LIMIT_WINDOW_MS - now) / 1000);
|
|
449
|
+
const context = requestContext.getStore();
|
|
450
|
+
const requestId = context?.requestId || req.headers["x-request-id"] || crypto.randomUUID();
|
|
324
451
|
console.error(JSON.stringify({
|
|
325
452
|
event: "mcp.rate_limit",
|
|
326
453
|
apiKey: apiKey.substring(0, 8) + "...",
|
|
327
454
|
count: entry.count,
|
|
328
455
|
limit: RATE_LIMIT_MAX,
|
|
456
|
+
requestId
|
|
329
457
|
}));
|
|
330
458
|
res.set("Retry-After", String(retryAfter));
|
|
331
459
|
return res.status(429).json({
|
|
332
|
-
error: "Rate limit exceeded",
|
|
460
|
+
error: { code: "RATE_LIMITED", message: "Rate limit exceeded", requestId },
|
|
333
461
|
limit: RATE_LIMIT_MAX,
|
|
334
462
|
window: "60s",
|
|
335
463
|
retry_after: retryAfter,
|
|
@@ -349,6 +477,44 @@ async function main() {
|
|
|
349
477
|
app.use(rateLimiter);
|
|
350
478
|
// HMAC Signature Verification
|
|
351
479
|
app.use(verifySignature);
|
|
480
|
+
app.all('/mcp', async (req, res) => {
|
|
481
|
+
try {
|
|
482
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
483
|
+
let transport;
|
|
484
|
+
if (sessionId && transports.has(sessionId)) {
|
|
485
|
+
transport = transports.get(sessionId);
|
|
486
|
+
if (!(transport instanceof StreamableHTTPServerTransport)) {
|
|
487
|
+
return res.status(400).json({ error: 'Session exists but uses a different transport protocol' });
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
else if (!sessionId && req.method === 'POST' && isInitializeRequest(req.body)) {
|
|
491
|
+
transport = new StreamableHTTPServerTransport({
|
|
492
|
+
sessionIdGenerator: () => crypto.randomUUID(),
|
|
493
|
+
onsessioninitialized: (sid) => {
|
|
494
|
+
console.error(`StreamableHTTP session initialized: ${sid}`);
|
|
495
|
+
transports.set(sid, transport);
|
|
496
|
+
}
|
|
497
|
+
});
|
|
498
|
+
transport.onclose = () => {
|
|
499
|
+
const sid = transport.sessionId;
|
|
500
|
+
if (sid && transports.has(sid)) {
|
|
501
|
+
console.error(`StreamableHTTP session ${sid} disconnected`);
|
|
502
|
+
transports.delete(sid);
|
|
503
|
+
}
|
|
504
|
+
};
|
|
505
|
+
await server.connect(transport);
|
|
506
|
+
}
|
|
507
|
+
else {
|
|
508
|
+
return res.status(400).json({ error: 'No valid session ID provided' });
|
|
509
|
+
}
|
|
510
|
+
await transport.handleRequest(req, res, req.body);
|
|
511
|
+
}
|
|
512
|
+
catch (error) {
|
|
513
|
+
console.error('Error handling HTTP MCP request:', error);
|
|
514
|
+
if (!res.headersSent)
|
|
515
|
+
res.status(500).json({ error: 'Internal server error' });
|
|
516
|
+
}
|
|
517
|
+
});
|
|
352
518
|
app.get("/sse", async (req, res) => {
|
|
353
519
|
const sessionId = crypto.randomUUID();
|
|
354
520
|
console.error(`New SSE connection established (session: ${sessionId})`);
|
|
@@ -369,7 +535,8 @@ async function main() {
|
|
|
369
535
|
}
|
|
370
536
|
else if (transports.size === 1) {
|
|
371
537
|
// Fallback: single-client mode
|
|
372
|
-
|
|
538
|
+
let transport;
|
|
539
|
+
transports.forEach((v) => { transport = v; });
|
|
373
540
|
await transport.handlePostMessage(req, res);
|
|
374
541
|
}
|
|
375
542
|
else if (transports.size === 0) {
|
|
@@ -396,11 +563,15 @@ async function main() {
|
|
|
396
563
|
res.json({
|
|
397
564
|
name: "ai.fodda/mcp-server",
|
|
398
565
|
title: "Fodda Knowledge Graphs",
|
|
399
|
-
description: "Expert-curated
|
|
566
|
+
description: "Fodda MCP — Expert-curated trend intelligence graphs exposed as structured context for AI agents.",
|
|
400
567
|
version: MCP_SERVER_VERSION,
|
|
401
568
|
transport: {
|
|
402
|
-
type: "
|
|
403
|
-
url: `${req.protocol}://${req.get("host")}/
|
|
569
|
+
type: "streamable-http",
|
|
570
|
+
url: `${req.protocol}://${req.get("host")}/mcp`,
|
|
571
|
+
fallback: {
|
|
572
|
+
type: "sse",
|
|
573
|
+
url: `${req.protocol}://${req.get("host")}/sse`
|
|
574
|
+
}
|
|
404
575
|
},
|
|
405
576
|
tools_endpoint: `${req.protocol}://${req.get("host")}/mcp/tools`,
|
|
406
577
|
health_endpoint: `${req.protocol}://${req.get("host")}/health`
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test_live_mcp.d.ts","sourceRoot":"","sources":["../src/test_live_mcp.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
2
|
+
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
3
|
+
async function main() {
|
|
4
|
+
console.log("Connecting to live Fodda MCP server over SSE...");
|
|
5
|
+
// Create an SSE transport pointed at the live Cloud Run endpoint
|
|
6
|
+
const transport = new SSEClientTransport(new URL("https://fodda-mcp-p3uz7zw7ja-uc.a.run.app/sse"));
|
|
7
|
+
// Initialize the client
|
|
8
|
+
const client = new Client({
|
|
9
|
+
name: "test-client",
|
|
10
|
+
version: "1.0.0"
|
|
11
|
+
}, { capabilities: {} });
|
|
12
|
+
try {
|
|
13
|
+
await client.connect(transport);
|
|
14
|
+
console.log("✅ Successfully connected to MCP Server transport");
|
|
15
|
+
// Test 1: List Tools
|
|
16
|
+
const toolsResult = await client.listTools();
|
|
17
|
+
console.log(`✅ Discovered ${toolsResult.tools.length} tools`);
|
|
18
|
+
toolsResult.tools.forEach(t => console.log(` - ${t.name}`));
|
|
19
|
+
// Test 2: Execute a Tool Call with API Key and tracing header
|
|
20
|
+
console.log("\nAttempting to invoke 'search_graph' to test rate limiting / auth boundaries...");
|
|
21
|
+
try {
|
|
22
|
+
const result = await client.callTool({
|
|
23
|
+
name: "search_graph",
|
|
24
|
+
arguments: {
|
|
25
|
+
graphId: "retail",
|
|
26
|
+
query: "test query",
|
|
27
|
+
userId: "self-test-user",
|
|
28
|
+
_meta: {
|
|
29
|
+
authorization: "Bearer fk_live_sample"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
console.log("\n✅ Tool result:");
|
|
34
|
+
console.log(JSON.stringify(result, null, 2));
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
console.error("\n❌ Tool Execution Caught Error:", err.message);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.error("Connection failed:", error);
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
// Close the connection
|
|
45
|
+
await client.close();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
main().catch(console.error);
|
|
49
|
+
//# sourceMappingURL=test_live_mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test_live_mcp.js","sourceRoot":"","sources":["../src/test_live_mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,KAAK,UAAU,IAAI;IACf,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAE/D,iEAAiE;IACjE,MAAM,SAAS,GAAG,IAAI,kBAAkB,CACpC,IAAI,GAAG,CAAC,+CAA+C,CAAC,CAC3D,CAAC;IAEF,wBAAwB;IACxB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACtB,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;KACnB,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;IAEzB,IAAI,CAAC;QACD,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAEhE,qBAAqB;QACrB,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;QAC9D,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAE9D,8DAA8D;QAC9D,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;QAEhG,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;gBACjC,IAAI,EAAE,cAAc;gBACpB,SAAS,EAAE;oBACP,OAAO,EAAE,QAAQ;oBACjB,KAAK,EAAE,YAAY;oBACnB,MAAM,EAAE,gBAAgB;oBACxB,KAAK,EAAE;wBACH,aAAa,EAAE,uBAAuB;qBACzC;iBACJ;aACJ,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACnE,CAAC;IAEL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;YAAS,CAAC;QACP,uBAAuB;QACvB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { ExtendedTool } from "./types.js";
|
|
2
|
-
export declare const MCP_SERVER_VERSION = "1.
|
|
2
|
+
export declare const MCP_SERVER_VERSION = "1.7.0";
|
|
3
3
|
export declare const TOOL_VERSIONS: {
|
|
4
|
+
list_graphs: string;
|
|
4
5
|
search_graph: string;
|
|
5
6
|
get_neighbors: string;
|
|
6
7
|
get_evidence: string;
|
|
7
8
|
get_node: string;
|
|
8
9
|
get_label_values: string;
|
|
9
10
|
psfk_overview: string;
|
|
11
|
+
discover_adjacent_trends: string;
|
|
10
12
|
};
|
|
11
13
|
export declare const TOOLS: ExtendedTool[];
|
|
12
14
|
//# sourceMappingURL=tools.d.ts.map
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
|
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;;;;;;;;;CASzB,CAAC;AAsSF,eAAO,MAAM,KAAK,gBAA6D,CAAC"}
|
package/dist/tools.js
CHANGED
|
@@ -1,24 +1,60 @@
|
|
|
1
|
-
export const MCP_SERVER_VERSION = "1.
|
|
1
|
+
export const MCP_SERVER_VERSION = "1.7.0";
|
|
2
2
|
export const TOOL_VERSIONS = {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
list_graphs: "1.0.0",
|
|
4
|
+
search_graph: "1.2.0",
|
|
5
|
+
get_neighbors: "1.2.0",
|
|
6
|
+
get_evidence: "1.1.0",
|
|
6
7
|
get_node: "1.0.0",
|
|
7
|
-
get_label_values: "1.
|
|
8
|
+
get_label_values: "1.2.0",
|
|
8
9
|
psfk_overview: "1.0.0",
|
|
10
|
+
discover_adjacent_trends: "1.0.0",
|
|
9
11
|
};
|
|
10
|
-
|
|
12
|
+
const GRAPH_ID_DESCRIPTION = "Select which curated graph to query. Use list_graphs to discover available options. Common values: 'retail', 'beauty', 'sports', 'psfk', 'sic', 'waldo', 'pew'.";
|
|
13
|
+
const ALL_TOOLS = [
|
|
14
|
+
{
|
|
15
|
+
name: "list_graphs",
|
|
16
|
+
description: "Discover available knowledge graphs and their schemas, including node types, relationship types, and versions. Use this tool first to find valid graphId values for other tools.",
|
|
17
|
+
inputSchema: {
|
|
18
|
+
type: "object",
|
|
19
|
+
properties: {
|
|
20
|
+
userId: { type: "string", description: "Unique identifier for the user (Required)" },
|
|
21
|
+
},
|
|
22
|
+
required: ["userId"],
|
|
23
|
+
},
|
|
24
|
+
outputSchema: {
|
|
25
|
+
type: "object",
|
|
26
|
+
properties: {
|
|
27
|
+
graphs: {
|
|
28
|
+
type: "array",
|
|
29
|
+
description: "Array of available graphs with their schemas",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
isDeterministic: true,
|
|
34
|
+
},
|
|
11
35
|
{
|
|
12
36
|
name: "search_graph",
|
|
13
|
-
description: "
|
|
37
|
+
description: "Search across expert-curated PSFK knowledge graphs (Retail, Beauty, Sports and partner datasets) to retrieve structured trend clusters, signals, and supporting articles relevant to a query. Note: a server-side relevance gate may reduce results for brand/entity-specific queries — results with low semantic scores that don't mention query terms are automatically filtered out.",
|
|
14
38
|
inputSchema: {
|
|
15
39
|
type: "object",
|
|
16
40
|
properties: {
|
|
17
|
-
graphId: { type: "string", description:
|
|
18
|
-
query: { type: "string", description: "The search query" },
|
|
41
|
+
graphId: { type: "string", description: GRAPH_ID_DESCRIPTION },
|
|
42
|
+
query: { type: "string", description: "The search query. Location terms (city/country names like 'London', 'Tokyo') are auto-detected and used to hard-filter results geographically. Geo terms auto-expand (e.g., 'London' also matches 'UK', 'England'). No additional parameters needed for location filtering." },
|
|
19
43
|
userId: { type: "string", description: "Unique identifier for the user (Required)" },
|
|
20
44
|
limit: { type: "number", description: "Maximum number of results (default 25, max 50)" },
|
|
21
45
|
use_semantic: { type: "boolean", description: "Whether to use semantic search (default true)" },
|
|
46
|
+
filters: {
|
|
47
|
+
type: "object",
|
|
48
|
+
description: "Optional filters to narrow search results",
|
|
49
|
+
properties: {
|
|
50
|
+
node_types: {
|
|
51
|
+
type: "array",
|
|
52
|
+
items: { type: "string" },
|
|
53
|
+
description: "Filter by node labels (e.g., ['Trend', 'Article'])"
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
include_evidence: { type: "boolean", description: "If true, batch-fetch supporting evidence articles inline with results. Saves a separate get_evidence call per trend. Default: true. Each evidence item includes: sourceUrl, place (geographic location), brandNames, snippet, and publishedAt." },
|
|
22
58
|
},
|
|
23
59
|
required: ["graphId", "query", "userId"],
|
|
24
60
|
},
|
|
@@ -27,10 +63,10 @@ export const TOOLS = [
|
|
|
27
63
|
properties: {
|
|
28
64
|
results: {
|
|
29
65
|
type: "array",
|
|
30
|
-
description: "Array of matching nodes (trends, articles)",
|
|
66
|
+
description: "Array of matching nodes (trends, articles), each optionally with an 'evidence' array if include_evidence=true. When evidence is included, each evidence item contains: sourceUrl (article link), place (geographic location of the article), brandNames (brands mentioned), snippet (relevant excerpt), and publishedAt (publication date).",
|
|
31
67
|
},
|
|
32
68
|
total: { type: "number", description: "Total number of results found" },
|
|
33
|
-
search_method: { type: "string", description: "Search method used: 'vector', 'keyword', or '
|
|
69
|
+
search_method: { type: "string", description: "Search method used: 'vector', 'keyword', 'hybrid', or 'all_fallback'" },
|
|
34
70
|
usage: {
|
|
35
71
|
type: "object",
|
|
36
72
|
description: "Billing/usage metadata",
|
|
@@ -44,14 +80,15 @@ export const TOOLS = [
|
|
|
44
80
|
},
|
|
45
81
|
{
|
|
46
82
|
name: "get_neighbors",
|
|
47
|
-
description: "
|
|
83
|
+
description: "Explore how a trend, brand, or technology connects to related signals, concepts, and adjacent innovation patterns within the selected graph. Traversal is depth-limited for focused discovery.",
|
|
48
84
|
inputSchema: {
|
|
49
85
|
type: "object",
|
|
50
86
|
properties: {
|
|
51
|
-
graphId: { type: "string", description:
|
|
87
|
+
graphId: { type: "string", description: GRAPH_ID_DESCRIPTION },
|
|
52
88
|
seed_node_ids: { type: "array", items: { type: "string" }, description: "Array of node IDs to start traversal from" },
|
|
53
89
|
userId: { type: "string", description: "Unique identifier for the user (Required)" },
|
|
54
|
-
relationship_types: { type: "array", items: { type: "string" }, description: "Filter by relationship types" },
|
|
90
|
+
relationship_types: { type: "array", items: { type: "string" }, description: "Filter by relationship types: 'EVIDENCED_BY', 'RELATED_TO', 'SEMANTICALLY_SIMILAR', 'ASSOCIATED_BRAND', 'MENTIONS_BRAND', 'IN_LOCATION'" },
|
|
91
|
+
direction: { type: "string", enum: ["in", "out"], description: "Traversal direction: 'out' (default) follows outgoing edges, 'in' follows incoming edges" },
|
|
55
92
|
depth: { type: "number", description: "Traversal depth (default 1, max 2)" },
|
|
56
93
|
limit: { type: "number", description: "Maximum results (default 50)" },
|
|
57
94
|
},
|
|
@@ -80,11 +117,11 @@ export const TOOLS = [
|
|
|
80
117
|
},
|
|
81
118
|
{
|
|
82
119
|
name: "get_evidence",
|
|
83
|
-
description: "
|
|
120
|
+
description: "Retrieve supporting signals, source articles, and structured evidence for a specific trend or concept. Designed for provenance, validation, and strategic briefing.",
|
|
84
121
|
inputSchema: {
|
|
85
122
|
type: "object",
|
|
86
123
|
properties: {
|
|
87
|
-
graphId: { type: "string", description:
|
|
124
|
+
graphId: { type: "string", description: GRAPH_ID_DESCRIPTION },
|
|
88
125
|
for_node_id: { type: "string", description: "The ID of the node (Trend or Article)" },
|
|
89
126
|
userId: { type: "string", description: "Unique identifier for the user (Required)" },
|
|
90
127
|
top_k: { type: "number", description: "Number of evidence items to return (default 5)" },
|
|
@@ -96,7 +133,7 @@ export const TOOLS = [
|
|
|
96
133
|
properties: {
|
|
97
134
|
evidence: {
|
|
98
135
|
type: "array",
|
|
99
|
-
description: "Array of evidence items with source URLs, titles, snippets, and
|
|
136
|
+
description: "Array of evidence items with source URLs, titles, snippets, relevance scores, place (geographic location of the article), and brand names",
|
|
100
137
|
},
|
|
101
138
|
node_id: { type: "string", description: "The node this evidence supports" },
|
|
102
139
|
usage: {
|
|
@@ -111,11 +148,11 @@ export const TOOLS = [
|
|
|
111
148
|
},
|
|
112
149
|
{
|
|
113
150
|
name: "get_node",
|
|
114
|
-
description: "
|
|
151
|
+
description: "Retrieve the full metadata and properties of a specific node within the knowledge graph, including labels and structured attributes.",
|
|
115
152
|
inputSchema: {
|
|
116
153
|
type: "object",
|
|
117
154
|
properties: {
|
|
118
|
-
graphId: { type: "string", description:
|
|
155
|
+
graphId: { type: "string", description: GRAPH_ID_DESCRIPTION },
|
|
119
156
|
nodeId: { type: "string", description: "The ID of the node" },
|
|
120
157
|
userId: { type: "string", description: "Unique identifier for the user (Required)" },
|
|
121
158
|
},
|
|
@@ -134,13 +171,14 @@ export const TOOLS = [
|
|
|
134
171
|
},
|
|
135
172
|
{
|
|
136
173
|
name: "get_label_values",
|
|
137
|
-
description: "Discover
|
|
174
|
+
description: "Discover available values for a specific category (e.g., Technology, Audience, RetailerType, Brand) to support structured filtering and exploration.",
|
|
138
175
|
inputSchema: {
|
|
139
176
|
type: "object",
|
|
140
177
|
properties: {
|
|
141
|
-
graphId: { type: "string", description:
|
|
142
|
-
label: { type: "string", description: "The label to fetch values for" },
|
|
178
|
+
graphId: { type: "string", description: GRAPH_ID_DESCRIPTION },
|
|
179
|
+
label: { type: "string", description: "The label to fetch values for (e.g., 'Brand', 'Location', 'Technology', 'Audience', 'RetailerType', 'Trend')" },
|
|
143
180
|
userId: { type: "string", description: "Unique identifier for the user (Required)" },
|
|
181
|
+
property: { type: "string", description: "Optional property to return values for. Defaults vary by label (Brand→name, Technology→slug, Audience→slug, Trend→trendName)" },
|
|
144
182
|
},
|
|
145
183
|
required: ["graphId", "label", "userId"],
|
|
146
184
|
},
|
|
@@ -148,6 +186,7 @@ export const TOOLS = [
|
|
|
148
186
|
type: "object",
|
|
149
187
|
properties: {
|
|
150
188
|
label: { type: "string", description: "The label queried" },
|
|
189
|
+
property: { type: "string", description: "The property values were fetched from" },
|
|
151
190
|
values: { type: "array", description: "Array of valid values for the label" },
|
|
152
191
|
count: { type: "number", description: "Number of values found" },
|
|
153
192
|
},
|
|
@@ -156,7 +195,7 @@ export const TOOLS = [
|
|
|
156
195
|
},
|
|
157
196
|
{
|
|
158
197
|
name: "psfk_overview",
|
|
159
|
-
description: "
|
|
198
|
+
description: "Generate a macro-level overview of a selected PSFK domain (e.g., Retail, Beauty, Sports), summarizing key meta-patterns and structured trend clusters for strategic briefing.",
|
|
160
199
|
inputSchema: {
|
|
161
200
|
type: "object",
|
|
162
201
|
properties: {
|
|
@@ -167,6 +206,10 @@ export const TOOLS = [
|
|
|
167
206
|
userId: { type: "string", description: "Unique identifier for the user (Required)" },
|
|
168
207
|
},
|
|
169
208
|
required: ["userId"],
|
|
209
|
+
anyOf: [
|
|
210
|
+
{ required: ["industry"] },
|
|
211
|
+
{ required: ["sector"] }
|
|
212
|
+
],
|
|
170
213
|
},
|
|
171
214
|
outputSchema: {
|
|
172
215
|
type: "object",
|
|
@@ -187,5 +230,72 @@ export const TOOLS = [
|
|
|
187
230
|
},
|
|
188
231
|
isDeterministic: false,
|
|
189
232
|
},
|
|
233
|
+
{
|
|
234
|
+
name: "discover_adjacent_trends",
|
|
235
|
+
description: "Find trends that are semantically similar to a given trend — useful for discovering 'what else should I be watching?' or expanding a research brief with related signals. Returns trends connected by AI-computed similarity, not editorial curation.",
|
|
236
|
+
inputSchema: {
|
|
237
|
+
type: "object",
|
|
238
|
+
properties: {
|
|
239
|
+
graphId: {
|
|
240
|
+
type: "string",
|
|
241
|
+
description: GRAPH_ID_DESCRIPTION
|
|
242
|
+
},
|
|
243
|
+
trend_id: {
|
|
244
|
+
type: "string",
|
|
245
|
+
description: "The trendId of the seed trend to find adjacent possibilities for"
|
|
246
|
+
},
|
|
247
|
+
userId: {
|
|
248
|
+
type: "string",
|
|
249
|
+
description: "Unique identifier for the user (Required)"
|
|
250
|
+
},
|
|
251
|
+
min_score: {
|
|
252
|
+
type: "number",
|
|
253
|
+
description: "Minimum similarity score threshold (0-1). Higher = more similar. Default: 0.80"
|
|
254
|
+
},
|
|
255
|
+
limit: {
|
|
256
|
+
type: "number",
|
|
257
|
+
description: "Maximum number of adjacent trends to return. Default: 10"
|
|
258
|
+
},
|
|
259
|
+
include_editorial: {
|
|
260
|
+
type: "boolean",
|
|
261
|
+
description: "If true, also include trends that are already editorially linked via RELATED_TO. Default: false (shows only AI-discovered connections)"
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
required: ["graphId", "trend_id", "userId"]
|
|
265
|
+
},
|
|
266
|
+
outputSchema: {
|
|
267
|
+
type: "object",
|
|
268
|
+
properties: {
|
|
269
|
+
adjacent: {
|
|
270
|
+
type: "array",
|
|
271
|
+
description: "Array of semantically similar trends with similarity scores",
|
|
272
|
+
},
|
|
273
|
+
node_id: { type: "string", description: "The seed trend ID queried" },
|
|
274
|
+
count: { type: "number", description: "Number of adjacent trends returned" },
|
|
275
|
+
min_score: { type: "number", description: "Minimum similarity threshold applied" },
|
|
276
|
+
usage: {
|
|
277
|
+
type: "object",
|
|
278
|
+
properties: {
|
|
279
|
+
total_billable_units: { type: "number" },
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
isDeterministic: true,
|
|
285
|
+
},
|
|
286
|
+
];
|
|
287
|
+
const DEFAULT_ENTERPRISE_TOOLS = [
|
|
288
|
+
"list_graphs",
|
|
289
|
+
"search_graph",
|
|
290
|
+
"get_node",
|
|
291
|
+
"get_evidence",
|
|
292
|
+
"get_neighbors",
|
|
293
|
+
"get_label_values",
|
|
294
|
+
"discover_adjacent_trends"
|
|
190
295
|
];
|
|
296
|
+
const allowedToolsStr = process.env.ALLOWED_TOOLS;
|
|
297
|
+
const allowedTools = allowedToolsStr
|
|
298
|
+
? allowedToolsStr.split(',').map(s => s.trim())
|
|
299
|
+
: DEFAULT_ENTERPRISE_TOOLS;
|
|
300
|
+
export const TOOLS = ALL_TOOLS.filter(tool => allowedTools.includes(tool.name));
|
|
191
301
|
//# sourceMappingURL=tools.js.map
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG;IACzB,YAAY,EAAE,OAAO;IACrB,aAAa,EAAE,OAAO;IACtB,YAAY,EAAE,OAAO;IACrB,QAAQ,EAAE,OAAO;IACjB,gBAAgB,EAAE,OAAO;IACzB,aAAa,EAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fodda-mcp",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"mcpName": "
|
|
3
|
+
"version": "1.7.0",
|
|
4
|
+
"mcpName": "io.github.piers-fawkes/fodda",
|
|
5
5
|
"description": "Fodda MCP Server for accessing knowledge graph insights.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"mcp",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
],
|
|
13
13
|
"repository": {
|
|
14
14
|
"type": "git",
|
|
15
|
-
"url": "https://github.com/fodda
|
|
15
|
+
"url": "https://github.com/piers-fawkes/fodda-mcp.git"
|
|
16
16
|
},
|
|
17
17
|
"author": "Fodda",
|
|
18
18
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"test": "npm run build && node dist/verify_tools_endpoint.js"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
36
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
37
37
|
"axios": "^1.13.5",
|
|
38
38
|
"dotenv": "^17.2.4",
|
|
39
39
|
"express": "^5.2.1"
|
package/server.json
CHANGED
|
@@ -1,32 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
-
"name": "
|
|
3
|
+
"name": "io.github.piers-fawkes/fodda",
|
|
4
4
|
"title": "Fodda Knowledge Graphs",
|
|
5
|
-
"description": "Expert-curated
|
|
6
|
-
"version": "1.
|
|
5
|
+
"description": "Fodda MCP — Expert-curated trend intelligence graphs exposed as structured context for AI agents.",
|
|
6
|
+
"version": "1.7.0",
|
|
7
7
|
"repository": {
|
|
8
|
-
"url": "https://github.com/fodda
|
|
8
|
+
"url": "https://github.com/piers-fawkes/fodda-mcp",
|
|
9
9
|
"source": "github"
|
|
10
10
|
},
|
|
11
|
-
"remotes": [
|
|
12
|
-
{
|
|
13
|
-
"type": "sse",
|
|
14
|
-
"url": "https://mcp.fodda.ai/sse",
|
|
15
|
-
"headers": [
|
|
16
|
-
{
|
|
17
|
-
"name": "Authorization",
|
|
18
|
-
"description": "Bearer token with your Fodda API key (e.g. 'Bearer fk_live_...')",
|
|
19
|
-
"isRequired": true,
|
|
20
|
-
"isSecret": true
|
|
21
|
-
}
|
|
22
|
-
]
|
|
23
|
-
}
|
|
24
|
-
],
|
|
25
11
|
"packages": [
|
|
26
12
|
{
|
|
27
13
|
"registryType": "npm",
|
|
28
14
|
"identifier": "fodda-mcp",
|
|
29
|
-
"version": "1.
|
|
15
|
+
"version": "1.7.0",
|
|
30
16
|
"transport": {
|
|
31
17
|
"type": "stdio"
|
|
32
18
|
},
|