@dcyfr/ai 1.0.3 → 1.0.4

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 (83) hide show
  1. package/LICENSE +27 -1
  2. package/README.md +343 -4
  3. package/dist/ai/index.d.ts +2 -0
  4. package/dist/ai/index.d.ts.map +1 -1
  5. package/dist/ai/index.js +2 -0
  6. package/dist/ai/index.js.map +1 -1
  7. package/dist/ai/mcp/index.d.ts +14 -2
  8. package/dist/ai/mcp/index.d.ts.map +1 -1
  9. package/dist/ai/mcp/index.js +11 -1
  10. package/dist/ai/mcp/index.js.map +1 -1
  11. package/dist/ai/mcp/servers/analytics/index.d.ts +19 -0
  12. package/dist/ai/mcp/servers/analytics/index.d.ts.map +1 -0
  13. package/dist/ai/mcp/servers/analytics/index.js +556 -0
  14. package/dist/ai/mcp/servers/analytics/index.js.map +1 -0
  15. package/dist/ai/mcp/servers/content-manager/content-provider.d.ts +61 -0
  16. package/dist/ai/mcp/servers/content-manager/content-provider.d.ts.map +1 -0
  17. package/dist/ai/mcp/servers/content-manager/content-provider.js +8 -0
  18. package/dist/ai/mcp/servers/content-manager/content-provider.js.map +1 -0
  19. package/dist/ai/mcp/servers/content-manager/index.d.ts +19 -0
  20. package/dist/ai/mcp/servers/content-manager/index.d.ts.map +1 -0
  21. package/dist/ai/mcp/servers/content-manager/index.js +236 -0
  22. package/dist/ai/mcp/servers/content-manager/index.js.map +1 -0
  23. package/dist/ai/mcp/servers/design-tokens/index.d.ts +19 -0
  24. package/dist/ai/mcp/servers/design-tokens/index.d.ts.map +1 -0
  25. package/dist/ai/mcp/servers/design-tokens/index.js +422 -0
  26. package/dist/ai/mcp/servers/design-tokens/index.js.map +1 -0
  27. package/dist/ai/mcp/servers/design-tokens/token-provider.d.ts +59 -0
  28. package/dist/ai/mcp/servers/design-tokens/token-provider.d.ts.map +1 -0
  29. package/dist/ai/mcp/servers/design-tokens/token-provider.js +8 -0
  30. package/dist/ai/mcp/servers/design-tokens/token-provider.js.map +1 -0
  31. package/dist/ai/mcp/servers/promptintel/index.d.ts +19 -0
  32. package/dist/ai/mcp/servers/promptintel/index.d.ts.map +1 -0
  33. package/dist/ai/mcp/servers/promptintel/index.js +323 -0
  34. package/dist/ai/mcp/servers/promptintel/index.js.map +1 -0
  35. package/dist/ai/mcp/servers/shared/cache.d.ts +62 -0
  36. package/dist/ai/mcp/servers/shared/cache.d.ts.map +1 -0
  37. package/dist/ai/mcp/servers/shared/cache.js +117 -0
  38. package/dist/ai/mcp/servers/shared/cache.js.map +1 -0
  39. package/dist/ai/mcp/servers/shared/promptintel-client.d.ts +53 -0
  40. package/dist/ai/mcp/servers/shared/promptintel-client.d.ts.map +1 -0
  41. package/dist/ai/mcp/servers/shared/promptintel-client.js +185 -0
  42. package/dist/ai/mcp/servers/shared/promptintel-client.js.map +1 -0
  43. package/dist/ai/mcp/servers/shared/promptintel-types.d.ts +85 -0
  44. package/dist/ai/mcp/servers/shared/promptintel-types.d.ts.map +1 -0
  45. package/dist/ai/mcp/servers/shared/promptintel-types.js +7 -0
  46. package/dist/ai/mcp/servers/shared/promptintel-types.js.map +1 -0
  47. package/dist/ai/mcp/servers/shared/rate-limiter.d.ts +54 -0
  48. package/dist/ai/mcp/servers/shared/rate-limiter.d.ts.map +1 -0
  49. package/dist/ai/mcp/servers/shared/rate-limiter.js +122 -0
  50. package/dist/ai/mcp/servers/shared/rate-limiter.js.map +1 -0
  51. package/dist/ai/mcp/servers/shared/redis-client.d.ts +54 -0
  52. package/dist/ai/mcp/servers/shared/redis-client.d.ts.map +1 -0
  53. package/dist/ai/mcp/servers/shared/redis-client.js +225 -0
  54. package/dist/ai/mcp/servers/shared/redis-client.js.map +1 -0
  55. package/dist/ai/mcp/servers/shared/types.d.ts +292 -0
  56. package/dist/ai/mcp/servers/shared/types.d.ts.map +1 -0
  57. package/dist/ai/mcp/servers/shared/types.js +6 -0
  58. package/dist/ai/mcp/servers/shared/types.js.map +1 -0
  59. package/dist/ai/mcp/servers/shared/utils.d.ts +41 -0
  60. package/dist/ai/mcp/servers/shared/utils.d.ts.map +1 -0
  61. package/dist/ai/mcp/servers/shared/utils.js +183 -0
  62. package/dist/ai/mcp/servers/shared/utils.js.map +1 -0
  63. package/dist/ai/memory/config.d.ts +87 -0
  64. package/dist/ai/memory/config.d.ts.map +1 -0
  65. package/dist/ai/memory/config.js +154 -0
  66. package/dist/ai/memory/config.js.map +1 -0
  67. package/dist/ai/memory/dcyfr-memory.d.ts +63 -0
  68. package/dist/ai/memory/dcyfr-memory.d.ts.map +1 -0
  69. package/dist/ai/memory/dcyfr-memory.js +270 -0
  70. package/dist/ai/memory/dcyfr-memory.js.map +1 -0
  71. package/dist/ai/memory/index.d.ts +15 -0
  72. package/dist/ai/memory/index.d.ts.map +1 -0
  73. package/dist/ai/memory/index.js +15 -0
  74. package/dist/ai/memory/index.js.map +1 -0
  75. package/dist/ai/memory/mem0-client.d.ts +108 -0
  76. package/dist/ai/memory/mem0-client.d.ts.map +1 -0
  77. package/dist/ai/memory/mem0-client.js +166 -0
  78. package/dist/ai/memory/mem0-client.js.map +1 -0
  79. package/dist/ai/memory/types.d.ts +175 -0
  80. package/dist/ai/memory/types.d.ts.map +1 -0
  81. package/dist/ai/memory/types.js +10 -0
  82. package/dist/ai/memory/types.js.map +1 -0
  83. package/package.json +24 -2
@@ -0,0 +1,323 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * PromptIntel MCP Server
4
+ *
5
+ * Provides AI assistants with direct access to PromptIntel threat intelligence database.
6
+ * Enables real-time security scanning, threat detection, and vulnerability reporting.
7
+ *
8
+ * Tools:
9
+ * - promptintel:searchThreats - Search IoPC database for adversarial prompt patterns
10
+ * - promptintel:getTaxonomy - Fetch threat attack technique taxonomy
11
+ * - promptintel:submitReport - Submit security finding or vulnerability
12
+ *
13
+ * Resources:
14
+ * - promptintel://threats/critical - Critical severity threats
15
+ * - promptintel://taxonomy - Full threat taxonomy
16
+ * - promptintel://health - API health status
17
+ */
18
+ import { FastMCP } from 'fastmcp';
19
+ import { z } from 'zod';
20
+ import { PromptIntelClient } from '../shared/promptintel-client.js';
21
+ import { handleToolError, logToolExecution, measurePerformance, } from '../shared/utils.js';
22
+ import { SimpleCache } from '../shared/cache.js';
23
+ // ============================================================================
24
+ // Server Configuration
25
+ // ============================================================================
26
+ const server = new FastMCP({
27
+ name: 'dcyfr-promptintel',
28
+ version: '1.0.0',
29
+ instructions: 'Provides access to PromptIntel threat intelligence platform. Use these tools to search IoPC (Indicators of Prompt Compromise), analyze attack patterns, and submit security findings. All data is from collaborative threat intelligence community.',
30
+ });
31
+ // ============================================================================
32
+ // Client Initialization
33
+ // ============================================================================
34
+ const apiKey = process.env.PROMPTINTEL_API_KEY;
35
+ if (!apiKey) {
36
+ throw new Error('PROMPTINTEL_API_KEY environment variable is required. Get your key from https://promptintel.novahunting.ai/account/api-keys');
37
+ }
38
+ const client = new PromptIntelClient({
39
+ apiKey,
40
+ baseUrl: 'https://api.promptintel.novahunting.ai/api/v1',
41
+ timeout: 15000,
42
+ });
43
+ // ============================================================================
44
+ // Cache Configuration (5-minute TTL)
45
+ // ============================================================================
46
+ const promptIntelCache = new SimpleCache(300000);
47
+ // ============================================================================
48
+ // Tool 1: Search Threats
49
+ // ============================================================================
50
+ server.addTool({
51
+ name: 'promptintel:searchThreats',
52
+ description: 'Search IoPC (Indicators of Prompt Compromise) database for adversarial prompt patterns and attack techniques. Filter by severity and category to find relevant threats.',
53
+ parameters: z.object({
54
+ severity: z
55
+ .enum(['critical', 'high', 'medium', 'low', 'info'])
56
+ .optional()
57
+ .describe('Filter by severity level'),
58
+ category: z
59
+ .string()
60
+ .optional()
61
+ .describe('Filter by threat category (e.g., injection, manipulation)'),
62
+ limit: z
63
+ .number()
64
+ .optional()
65
+ .default(20)
66
+ .describe('Maximum number of results (max 100)'),
67
+ }),
68
+ annotations: {
69
+ readOnlyHint: true,
70
+ openWorldHint: false,
71
+ },
72
+ execute: async (args, { log }) => {
73
+ try {
74
+ const { result, durationMs } = await measurePerformance(async () => {
75
+ const cacheKey = `threats:${args.severity}:${args.category}:${args.limit}`;
76
+ const cached = promptIntelCache.get(cacheKey);
77
+ if (cached) {
78
+ log.info('Returning cached threats');
79
+ return cached;
80
+ }
81
+ const threats = await client.getPrompts({
82
+ severity: args.severity,
83
+ category: args.category,
84
+ limit: Math.min(args.limit || 20, 100),
85
+ });
86
+ promptIntelCache.set(cacheKey, threats);
87
+ return threats;
88
+ }, 'searchThreats');
89
+ logToolExecution('promptintel:searchThreats', { severity: args.severity, category: args.category, limit: args.limit }, true, durationMs);
90
+ return JSON.stringify({
91
+ count: Array.isArray(result) ? result.length : 0,
92
+ threats: result,
93
+ }, null, 2);
94
+ }
95
+ catch (error) {
96
+ logToolExecution('promptintel:searchThreats', { severity: args.severity, category: args.category }, false);
97
+ return handleToolError(error);
98
+ }
99
+ },
100
+ });
101
+ // ============================================================================
102
+ // Tool 2: Get Taxonomy
103
+ // ============================================================================
104
+ server.addTool({
105
+ name: 'promptintel:getTaxonomy',
106
+ description: 'Fetch threat taxonomy - hierarchical classification of attack techniques, defense strategies, and security categories.',
107
+ parameters: z.object({
108
+ limit: z
109
+ .number()
110
+ .optional()
111
+ .default(50)
112
+ .describe('Maximum number of taxonomy entries (max 100)'),
113
+ }),
114
+ annotations: {
115
+ readOnlyHint: true,
116
+ openWorldHint: false,
117
+ },
118
+ execute: async (args, { log }) => {
119
+ try {
120
+ const { result, durationMs } = await measurePerformance(async () => {
121
+ const cacheKey = `taxonomy:${args.limit}`;
122
+ const cached = promptIntelCache.get(cacheKey);
123
+ if (cached) {
124
+ log.info('Returning cached taxonomy');
125
+ return cached;
126
+ }
127
+ const taxonomy = await client.getTaxonomy({
128
+ limit: Math.min(args.limit || 50, 100),
129
+ });
130
+ promptIntelCache.set(cacheKey, taxonomy);
131
+ return taxonomy;
132
+ }, 'getTaxonomy');
133
+ const taxonomyArray = Array.isArray(result) ? result : [result];
134
+ const categories = new Set();
135
+ for (const item of taxonomyArray) {
136
+ if (typeof item === 'object' && item !== null && 'category_type' in item) {
137
+ const categoryType = item.category_type;
138
+ if (typeof categoryType === 'string') {
139
+ categories.add(categoryType);
140
+ }
141
+ }
142
+ }
143
+ logToolExecution('promptintel:getTaxonomy', { limit: args.limit }, true, durationMs);
144
+ return JSON.stringify({
145
+ count: taxonomyArray.length,
146
+ categories: Array.from(categories),
147
+ taxonomy: result,
148
+ }, null, 2);
149
+ }
150
+ catch (error) {
151
+ logToolExecution('promptintel:getTaxonomy', { limit: args.limit }, false);
152
+ return handleToolError(error);
153
+ }
154
+ },
155
+ });
156
+ // ============================================================================
157
+ // Tool 3: Submit Report
158
+ // ============================================================================
159
+ server.addTool({
160
+ name: 'promptintel:submitReport',
161
+ description: 'Submit a security finding or vulnerability report to PromptIntel community. Helps contribute to collaborative threat intelligence.',
162
+ parameters: z.object({
163
+ agentName: z
164
+ .string()
165
+ .describe('Name of the agent or system being reported'),
166
+ title: z.string().describe('Brief title of the finding'),
167
+ description: z.string().describe('Detailed description of the vulnerability'),
168
+ severity: z
169
+ .enum(['critical', 'high', 'medium', 'low'])
170
+ .describe('Severity level'),
171
+ findings: z
172
+ .record(z.unknown())
173
+ .describe('Structured findings data (JSON object)'),
174
+ metadata: z
175
+ .record(z.unknown())
176
+ .optional()
177
+ .describe('Additional metadata'),
178
+ }),
179
+ annotations: {
180
+ readOnlyHint: false,
181
+ openWorldHint: true,
182
+ },
183
+ execute: async (args, { log }) => {
184
+ try {
185
+ const { result, durationMs } = await measurePerformance(async () => {
186
+ return await client.submitReport({
187
+ agent_name: args.agentName,
188
+ title: args.title,
189
+ description: args.description,
190
+ severity: args.severity,
191
+ findings: args.findings,
192
+ metadata: args.metadata || {},
193
+ });
194
+ }, 'submitReport');
195
+ logToolExecution('promptintel:submitReport', { title: args.title, severity: args.severity }, true, durationMs);
196
+ return JSON.stringify({
197
+ success: true,
198
+ report: {
199
+ id: result?.id ?? 'unknown',
200
+ title: result?.title ?? args.title,
201
+ created_at: result?.created_at ?? new Date().toISOString(),
202
+ },
203
+ message: 'Report submitted successfully to PromptIntel community',
204
+ }, null, 2);
205
+ }
206
+ catch (error) {
207
+ logToolExecution('promptintel:submitReport', { title: args.title, severity: args.severity }, false);
208
+ return handleToolError(error);
209
+ }
210
+ },
211
+ });
212
+ // ============================================================================
213
+ // Resource 1: Critical Threats
214
+ // ============================================================================
215
+ server.addResource({
216
+ uri: 'promptintel://threats/critical',
217
+ name: 'Critical Threats',
218
+ description: 'Critical severity threats from PromptIntel',
219
+ mimeType: 'application/json',
220
+ async load() {
221
+ try {
222
+ const cacheKey = 'resource:critical-threats';
223
+ const cached = promptIntelCache.get(cacheKey);
224
+ if (cached) {
225
+ return {
226
+ text: JSON.stringify(cached, null, 2),
227
+ };
228
+ }
229
+ const threats = await client.getPrompts({
230
+ severity: 'critical',
231
+ limit: 10,
232
+ order: 'created_at.desc',
233
+ });
234
+ promptIntelCache.set(cacheKey, threats);
235
+ return {
236
+ text: JSON.stringify(threats, null, 2),
237
+ };
238
+ }
239
+ catch (error) {
240
+ return {
241
+ text: JSON.stringify({
242
+ error: 'Failed to fetch critical threats',
243
+ message: error instanceof Error ? error.message : String(error),
244
+ }, null, 2),
245
+ };
246
+ }
247
+ },
248
+ });
249
+ // ============================================================================
250
+ // Resource 2: Threat Taxonomy
251
+ // ============================================================================
252
+ server.addResource({
253
+ uri: 'promptintel://taxonomy',
254
+ name: 'Threat Taxonomy',
255
+ description: 'Attack techniques and defense strategies taxonomy',
256
+ mimeType: 'application/json',
257
+ async load() {
258
+ try {
259
+ const cacheKey = 'resource:taxonomy';
260
+ const cached = promptIntelCache.get(cacheKey);
261
+ if (cached) {
262
+ return {
263
+ text: JSON.stringify(cached, null, 2),
264
+ };
265
+ }
266
+ const taxonomy = await client.getTaxonomy({ limit: 50 });
267
+ promptIntelCache.set(cacheKey, taxonomy);
268
+ return {
269
+ text: JSON.stringify(taxonomy, null, 2),
270
+ };
271
+ }
272
+ catch (error) {
273
+ return {
274
+ text: JSON.stringify({
275
+ error: 'Failed to fetch taxonomy',
276
+ message: error instanceof Error ? error.message : String(error),
277
+ }, null, 2),
278
+ };
279
+ }
280
+ },
281
+ });
282
+ // ============================================================================
283
+ // Resource 3: API Health Status
284
+ // ============================================================================
285
+ server.addResource({
286
+ uri: 'promptintel://health',
287
+ name: 'PromptIntel API Health',
288
+ description: 'Current status and health of PromptIntel API',
289
+ mimeType: 'application/json',
290
+ async load() {
291
+ try {
292
+ const cacheKey = 'resource:health';
293
+ const cached = promptIntelCache.get(cacheKey);
294
+ if (cached) {
295
+ return {
296
+ text: JSON.stringify(cached, null, 2),
297
+ };
298
+ }
299
+ const health = await client.healthCheck();
300
+ promptIntelCache.set(cacheKey, health);
301
+ return {
302
+ text: JSON.stringify(health, null, 2),
303
+ };
304
+ }
305
+ catch (error) {
306
+ return {
307
+ text: JSON.stringify({
308
+ status: 'down',
309
+ message: error instanceof Error ? error.message : 'Unknown error',
310
+ timestamp: new Date().toISOString(),
311
+ }, null, 2),
312
+ };
313
+ }
314
+ },
315
+ });
316
+ // ============================================================================
317
+ // Start Server
318
+ // ============================================================================
319
+ server.start({
320
+ transportType: 'stdio',
321
+ });
322
+ console.warn('✅ PromptIntel MCP Server started (stdio mode)');
323
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/promptintel/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Simple in-memory cache for MCP servers
3
+ * Reduces load on Redis and file system for frequently accessed data
4
+ */
5
+ export declare class SimpleCache<T> {
6
+ private cache;
7
+ private defaultTtl;
8
+ constructor(defaultTtl?: number);
9
+ /**
10
+ * Set a cache entry
11
+ */
12
+ set(key: string, data: T, ttl?: number): void;
13
+ /**
14
+ * Get a cache entry if valid, null if expired or missing
15
+ */
16
+ get(key: string): T | null;
17
+ /**
18
+ * Get or compute a cache entry
19
+ */
20
+ getOrCompute(key: string, compute: () => Promise<T>, ttl?: number): Promise<T>;
21
+ /**
22
+ * Check if cache has a valid entry
23
+ */
24
+ has(key: string): boolean;
25
+ /**
26
+ * Clear a specific cache entry
27
+ */
28
+ delete(key: string): void;
29
+ /**
30
+ * Clear all cache entries
31
+ */
32
+ clear(): void;
33
+ /**
34
+ * Clear expired entries
35
+ */
36
+ clearExpired(): void;
37
+ /**
38
+ * Get cache statistics
39
+ */
40
+ getStats(): {
41
+ total: number;
42
+ valid: number;
43
+ expired: number;
44
+ };
45
+ }
46
+ /**
47
+ * Global cache instances for each MCP server
48
+ */
49
+ export declare const analyticsCache: SimpleCache<unknown>;
50
+ export declare const tokensCache: SimpleCache<unknown>;
51
+ export declare const contentCache: SimpleCache<unknown>;
52
+ /**
53
+ * Semantic Scholar MCP cache instances
54
+ * - scholarPapersCache: Hot cache for paper metadata (1 minute)
55
+ * - scholarSearchCache: Search results cache (5 minutes)
56
+ * - scholarAuthorsCache: Author metadata cache (5 minutes)
57
+ * Note: Long-term persistence (90 days) is handled via Redis in the MCP server
58
+ */
59
+ export declare const scholarPapersCache: SimpleCache<unknown>;
60
+ export declare const scholarSearchCache: SimpleCache<unknown>;
61
+ export declare const scholarAuthorsCache: SimpleCache<unknown>;
62
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/shared/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,qBAAa,WAAW,CAAC,CAAC;IACxB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,GAAE,MAAc;IAKtC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAU7C;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAiB1B;;OAEG;IACG,YAAY,CAChB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,CAAC;IAab;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,YAAY,IAAI,IAAI;IAUpB;;OAEG;IACH,QAAQ;;;;;CAmBT;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,sBAAyB,CAAC;AACrD,eAAO,MAAM,WAAW,sBAA0B,CAAC;AACnD,eAAO,MAAM,YAAY,sBAA0B,CAAC;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,sBAAyB,CAAC;AACzD,eAAO,MAAM,kBAAkB,sBAA0B,CAAC;AAC1D,eAAO,MAAM,mBAAmB,sBAA0B,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Simple in-memory cache for MCP servers
3
+ * Reduces load on Redis and file system for frequently accessed data
4
+ */
5
+ export class SimpleCache {
6
+ cache = new Map();
7
+ defaultTtl;
8
+ constructor(defaultTtl = 60000) {
9
+ // Default 1 minute
10
+ this.defaultTtl = defaultTtl;
11
+ }
12
+ /**
13
+ * Set a cache entry
14
+ */
15
+ set(key, data, ttl) {
16
+ const entry = {
17
+ data,
18
+ cachedAt: Date.now(),
19
+ ttl: ttl ?? this.defaultTtl,
20
+ };
21
+ this.cache.set(key, entry);
22
+ }
23
+ /**
24
+ * Get a cache entry if valid, null if expired or missing
25
+ */
26
+ get(key) {
27
+ const entry = this.cache.get(key);
28
+ if (!entry) {
29
+ return null;
30
+ }
31
+ const isExpired = Date.now() - entry.cachedAt > entry.ttl;
32
+ if (isExpired) {
33
+ this.cache.delete(key);
34
+ return null;
35
+ }
36
+ return entry.data;
37
+ }
38
+ /**
39
+ * Get or compute a cache entry
40
+ */
41
+ async getOrCompute(key, compute, ttl) {
42
+ const cached = this.get(key);
43
+ if (cached !== null) {
44
+ return cached;
45
+ }
46
+ const data = await compute();
47
+ this.set(key, data, ttl);
48
+ return data;
49
+ }
50
+ /**
51
+ * Check if cache has a valid entry
52
+ */
53
+ has(key) {
54
+ return this.get(key) !== null;
55
+ }
56
+ /**
57
+ * Clear a specific cache entry
58
+ */
59
+ delete(key) {
60
+ this.cache.delete(key);
61
+ }
62
+ /**
63
+ * Clear all cache entries
64
+ */
65
+ clear() {
66
+ this.cache.clear();
67
+ }
68
+ /**
69
+ * Clear expired entries
70
+ */
71
+ clearExpired() {
72
+ const now = Date.now();
73
+ for (const [key, entry] of this.cache.entries()) {
74
+ if (now - entry.cachedAt > entry.ttl) {
75
+ this.cache.delete(key);
76
+ }
77
+ }
78
+ }
79
+ /**
80
+ * Get cache statistics
81
+ */
82
+ getStats() {
83
+ let validCount = 0;
84
+ let expiredCount = 0;
85
+ const now = Date.now();
86
+ for (const entry of this.cache.values()) {
87
+ if (now - entry.cachedAt > entry.ttl) {
88
+ expiredCount++;
89
+ }
90
+ else {
91
+ validCount++;
92
+ }
93
+ }
94
+ return {
95
+ total: this.cache.size,
96
+ valid: validCount,
97
+ expired: expiredCount,
98
+ };
99
+ }
100
+ }
101
+ /**
102
+ * Global cache instances for each MCP server
103
+ */
104
+ export const analyticsCache = new SimpleCache(60000); // 1 minute
105
+ export const tokensCache = new SimpleCache(300000); // 5 minutes
106
+ export const contentCache = new SimpleCache(300000); // 5 minutes
107
+ /**
108
+ * Semantic Scholar MCP cache instances
109
+ * - scholarPapersCache: Hot cache for paper metadata (1 minute)
110
+ * - scholarSearchCache: Search results cache (5 minutes)
111
+ * - scholarAuthorsCache: Author metadata cache (5 minutes)
112
+ * Note: Long-term persistence (90 days) is handled via Redis in the MCP server
113
+ */
114
+ export const scholarPapersCache = new SimpleCache(60000); // 1 minute
115
+ export const scholarSearchCache = new SimpleCache(300000); // 5 minutes
116
+ export const scholarAuthorsCache = new SimpleCache(300000); // 5 minutes
117
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/shared/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * PromptIntel API Client
3
+ * Handles authentication, rate limiting, and error handling for PostgREST API
4
+ * Supports filtering, ordering, and pagination via PostgREST query parameters
5
+ */
6
+ import type { PromptIntelIoPC, PromptIntelTaxonomy, PromptIntelAgentReport, PromptIntelSearchParams, PromptIntelClientConfig, PromptIntelHealthResponse } from './promptintel-types.js';
7
+ export declare class PromptIntelClient {
8
+ private baseUrl;
9
+ private apiKey;
10
+ private timeout;
11
+ constructor(config: PromptIntelClientConfig);
12
+ /**
13
+ * Build request headers with authentication
14
+ */
15
+ private buildHeaders;
16
+ /**
17
+ * Build URL with PostgREST query parameters
18
+ * Supports filtering, ordering, pagination, and column selection
19
+ */
20
+ private buildUrl;
21
+ /**
22
+ * Fetch with timeout support
23
+ */
24
+ private fetchWithTimeout;
25
+ /**
26
+ * Handle error responses
27
+ */
28
+ private handleErrorResponse;
29
+ /**
30
+ * Fetch IoPC (Indicators of Prompt Compromise)
31
+ * Returns adversarial prompt patterns and attack indicators
32
+ */
33
+ getPrompts(params?: PromptIntelSearchParams): Promise<PromptIntelIoPC[]>;
34
+ /**
35
+ * Fetch threat taxonomy
36
+ * Returns hierarchical classification of attack techniques
37
+ */
38
+ getTaxonomy(params?: PromptIntelSearchParams): Promise<PromptIntelTaxonomy[]>;
39
+ /**
40
+ * Fetch agent reports (all or user's own)
41
+ */
42
+ getAgentReports(mine?: boolean, params?: PromptIntelSearchParams): Promise<PromptIntelAgentReport[]>;
43
+ /**
44
+ * Submit a new security finding or vulnerability report
45
+ */
46
+ submitReport(report: Omit<PromptIntelAgentReport, 'id' | 'created_at'>): Promise<PromptIntelAgentReport>;
47
+ /**
48
+ * Check API health and connectivity
49
+ * Does not require authentication
50
+ */
51
+ healthCheck(): Promise<PromptIntelHealthResponse>;
52
+ }
53
+ //# sourceMappingURL=promptintel-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptintel-client.d.ts","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/shared/promptintel-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EAE1B,MAAM,wBAAwB,CAAC;AAEhC,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,uBAAuB;IAU3C;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAoChB;;OAEG;YACW,gBAAgB;IAoB9B;;OAEG;YACW,mBAAmB;IAuBjC;;;OAGG;IACG,UAAU,CAAC,MAAM,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAgB9E;;;OAGG;IACG,WAAW,CAAC,MAAM,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAgBnF;;OAEG;IACG,eAAe,CACnB,IAAI,UAAQ,EACZ,MAAM,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAiBpC;;OAEG;IACG,YAAY,CAChB,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,GAAG,YAAY,CAAC,GACxD,OAAO,CAAC,sBAAsB,CAAC;IAoBlC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,yBAAyB,CAAC;CAaxD"}