@reveldigital/mcp-graphql-proxy 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cli.d.ts +6 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +7 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/core/cache.d.ts +61 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +147 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/graphql-client.d.ts +48 -0
- package/dist/core/graphql-client.d.ts.map +1 -0
- package/dist/core/graphql-client.js +210 -0
- package/dist/core/graphql-client.js.map +1 -0
- package/dist/core/query-builder.d.ts +90 -0
- package/dist/core/query-builder.d.ts.map +1 -0
- package/dist/core/query-builder.js +259 -0
- package/dist/core/query-builder.js.map +1 -0
- package/dist/core/response-optimizer.d.ts +59 -0
- package/dist/core/response-optimizer.d.ts.map +1 -0
- package/dist/core/response-optimizer.js +197 -0
- package/dist/core/response-optimizer.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +377 -0
- package/dist/index.js.map +1 -0
- package/dist/types/auth.d.ts +146 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +22 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/cache.d.ts +162 -0
- package/dist/types/cache.d.ts.map +1 -0
- package/dist/types/cache.js +34 -0
- package/dist/types/cache.js.map +1 -0
- package/dist/types/config.d.ts +108 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +37 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/graphql-proxy.d.ts +243 -0
- package/dist/types/graphql-proxy.d.ts.map +1 -0
- package/dist/types/graphql-proxy.js +142 -0
- package/dist/types/graphql-proxy.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/logging.d.ts +223 -0
- package/dist/types/logging.d.ts.map +1 -0
- package/dist/types/logging.js +67 -0
- package/dist/types/logging.js.map +1 -0
- package/dist/types/mcp.d.ts +160 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +126 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/metrics.d.ts +237 -0
- package/dist/types/metrics.d.ts.map +1 -0
- package/dist/types/metrics.js +26 -0
- package/dist/types/metrics.js.map +1 -0
- package/dist/types/rate-limit.d.ts +144 -0
- package/dist/types/rate-limit.d.ts.map +1 -0
- package/dist/types/rate-limit.js +43 -0
- package/dist/types/rate-limit.js.map +1 -0
- package/dist/types/tenant.d.ts +176 -0
- package/dist/types/tenant.d.ts.map +1 -0
- package/dist/types/tenant.js +63 -0
- package/dist/types/tenant.js.map +1 -0
- package/dist/types/transformation.d.ts +198 -0
- package/dist/types/transformation.d.ts.map +1 -0
- package/dist/types/transformation.js +51 -0
- package/dist/types/transformation.js.map +1 -0
- package/package.json +77 -0
- package/src/types/schema.graphql +2712 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Revel Digital MCP GraphQL Proxy Server
|
|
4
|
+
*
|
|
5
|
+
* An MCP server that enables AI agents to interact with the Revel Digital
|
|
6
|
+
* GraphQL API for digital signage management.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Execute custom GraphQL queries
|
|
10
|
+
* - Build optimized queries with field selection
|
|
11
|
+
* - Authentication header proxying
|
|
12
|
+
* - Response caching
|
|
13
|
+
* - Context window optimization
|
|
14
|
+
*/
|
|
15
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
16
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
17
|
+
import { z } from 'zod';
|
|
18
|
+
import { GraphQLClient } from './core/graphql-client.js';
|
|
19
|
+
import { ResponseCache } from './core/cache.js';
|
|
20
|
+
import { QueryBuilder } from './core/query-builder.js';
|
|
21
|
+
import { ResponseOptimizer } from './core/response-optimizer.js';
|
|
22
|
+
import { defaultGraphQLProxyConfig, } from './types/graphql-proxy.js';
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// Server Configuration
|
|
25
|
+
// ============================================================================
|
|
26
|
+
const config = {
|
|
27
|
+
...defaultGraphQLProxyConfig,
|
|
28
|
+
endpoint: process.env.REVELDIGITAL_GRAPHQL_ENDPOINT ?? defaultGraphQLProxyConfig.endpoint,
|
|
29
|
+
// REVELDIGITAL_AUTH_TOKEN → Authorization: Bearer header
|
|
30
|
+
authToken: process.env.REVELDIGITAL_AUTH_TOKEN,
|
|
31
|
+
timeout: parseInt(process.env.REQUEST_TIMEOUT ?? '30000', 10),
|
|
32
|
+
enableCache: process.env.ENABLE_CACHE !== 'false',
|
|
33
|
+
cacheTtl: parseInt(process.env.CACHE_TTL ?? '300', 10),
|
|
34
|
+
maxResponseSize: parseInt(process.env.MAX_RESPONSE_SIZE ?? '50000', 10),
|
|
35
|
+
debug: process.env.DEBUG === 'true',
|
|
36
|
+
};
|
|
37
|
+
// ============================================================================
|
|
38
|
+
// Initialize Components
|
|
39
|
+
// ============================================================================
|
|
40
|
+
const graphqlClient = new GraphQLClient(config);
|
|
41
|
+
const cache = new ResponseCache(config.cacheTtl);
|
|
42
|
+
const optimizer = new ResponseOptimizer(config.maxResponseSize);
|
|
43
|
+
// ============================================================================
|
|
44
|
+
// MCP Server Setup
|
|
45
|
+
// ============================================================================
|
|
46
|
+
const server = new McpServer({
|
|
47
|
+
name: 'reveldigital-graphql-proxy',
|
|
48
|
+
version: '1.0.0',
|
|
49
|
+
});
|
|
50
|
+
// ============================================================================
|
|
51
|
+
// Tool: Execute GraphQL Query
|
|
52
|
+
// ============================================================================
|
|
53
|
+
server.tool('execute_query', 'Execute a GraphQL query against the Revel Digital API. Supports custom queries with variables.', {
|
|
54
|
+
query: z.string().describe('The GraphQL query string to execute'),
|
|
55
|
+
variables: z.record(z.unknown()).optional().describe('Query variables as a JSON object'),
|
|
56
|
+
operationName: z.string().optional().describe('Operation name if query contains multiple operations'),
|
|
57
|
+
useCache: z.boolean().optional().default(true).describe('Whether to use cached results if available'),
|
|
58
|
+
}, async (args) => {
|
|
59
|
+
const startTime = Date.now();
|
|
60
|
+
try {
|
|
61
|
+
// Check cache first
|
|
62
|
+
if (args.useCache && config.enableCache) {
|
|
63
|
+
const cached = cache.get(args.query, args.variables);
|
|
64
|
+
if (cached) {
|
|
65
|
+
const result = {
|
|
66
|
+
success: true,
|
|
67
|
+
data: cached,
|
|
68
|
+
metadata: {
|
|
69
|
+
queryTime: Date.now() - startTime,
|
|
70
|
+
cached: true,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Execute query
|
|
77
|
+
const response = await graphqlClient.query(args.query, args.variables, args.operationName);
|
|
78
|
+
// Handle errors
|
|
79
|
+
if (response.errors && response.errors.length > 0) {
|
|
80
|
+
const result = {
|
|
81
|
+
success: false,
|
|
82
|
+
error: response.errors.map((e) => e.message).join('; '),
|
|
83
|
+
data: response.data,
|
|
84
|
+
};
|
|
85
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
86
|
+
}
|
|
87
|
+
// Cache successful response
|
|
88
|
+
if (args.useCache && config.enableCache && response.data) {
|
|
89
|
+
cache.set(args.query, args.variables, response.data);
|
|
90
|
+
}
|
|
91
|
+
// Optimize response for context window
|
|
92
|
+
const optimized = optimizer.optimize(response.data);
|
|
93
|
+
const result = {
|
|
94
|
+
success: true,
|
|
95
|
+
data: optimized.data,
|
|
96
|
+
metadata: {
|
|
97
|
+
queryTime: Date.now() - startTime,
|
|
98
|
+
cached: false,
|
|
99
|
+
...optimized.metadata,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
const result = {
|
|
106
|
+
success: false,
|
|
107
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
108
|
+
};
|
|
109
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
// ============================================================================
|
|
113
|
+
// Tool: Build Optimized Query
|
|
114
|
+
// ============================================================================
|
|
115
|
+
server.tool('build_query', 'Build an optimized GraphQL query with field selection, filtering, and sorting. Returns query and variables ready for execution.', {
|
|
116
|
+
operation: z.enum([
|
|
117
|
+
'device', 'deviceGroups', 'media', 'mediaGroups',
|
|
118
|
+
'playlist', 'playlistGroups', 'schedule', 'scheduleGroups',
|
|
119
|
+
'template', 'templateGroups', 'user',
|
|
120
|
+
'playLogs', 'pingLogs', 'eventLogs', 'impressions',
|
|
121
|
+
'deviceMetrics', 'audienceMetrics', 'mediaPlayStats',
|
|
122
|
+
]).describe('The query operation to perform'),
|
|
123
|
+
fields: z.array(z.string()).describe('Fields to select. Use dot notation for nested fields (e.g., "pingData.cpuUsage")'),
|
|
124
|
+
preset: z.enum(['minimal', 'basic', 'status', 'location', 'full']).optional()
|
|
125
|
+
.describe('Use a predefined field set instead of specifying fields'),
|
|
126
|
+
filter: z.record(z.unknown()).optional().describe('Filter conditions (e.g., {"isOnline": true})'),
|
|
127
|
+
limit: z.number().optional().describe('Maximum number of results to return'),
|
|
128
|
+
orderBy: z.string().optional().describe('Field to sort by'),
|
|
129
|
+
orderDirection: z.enum(['ASC', 'DESC']).optional().default('ASC').describe('Sort direction'),
|
|
130
|
+
startDate: z.string().optional().describe('Start date for analytics queries (ISO 8601 format)'),
|
|
131
|
+
endDate: z.string().optional().describe('End date for analytics queries (ISO 8601 format)'),
|
|
132
|
+
deviceId: z.array(z.string()).optional().describe('Filter by device IDs (for analytics)'),
|
|
133
|
+
}, async (args) => {
|
|
134
|
+
try {
|
|
135
|
+
const queryArgs = {};
|
|
136
|
+
// Add date range for analytics queries
|
|
137
|
+
if (args.startDate)
|
|
138
|
+
queryArgs.startDate = args.startDate;
|
|
139
|
+
if (args.endDate)
|
|
140
|
+
queryArgs.endDate = args.endDate;
|
|
141
|
+
if (args.deviceId)
|
|
142
|
+
queryArgs.deviceId = args.deviceId;
|
|
143
|
+
if (args.limit)
|
|
144
|
+
queryArgs.limit = args.limit;
|
|
145
|
+
const { query, variables } = QueryBuilder.build({
|
|
146
|
+
operation: args.operation,
|
|
147
|
+
fields: args.fields ?? [],
|
|
148
|
+
preset: args.preset,
|
|
149
|
+
arguments: queryArgs,
|
|
150
|
+
filter: args.filter,
|
|
151
|
+
orderBy: args.orderBy ? { field: args.orderBy, direction: args.orderDirection ?? 'ASC' } : undefined,
|
|
152
|
+
});
|
|
153
|
+
const result = {
|
|
154
|
+
success: true,
|
|
155
|
+
query,
|
|
156
|
+
variables,
|
|
157
|
+
tip: 'Use execute_query tool with this query and variables to run it.',
|
|
158
|
+
};
|
|
159
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
const result = {
|
|
163
|
+
success: false,
|
|
164
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
165
|
+
};
|
|
166
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
// ============================================================================
|
|
170
|
+
// Tool: Introspect Schema
|
|
171
|
+
// ============================================================================
|
|
172
|
+
server.tool('introspect_schema', 'Get information about the Revel Digital GraphQL schema. Use this to discover available types, fields, and query parameters.', {
|
|
173
|
+
typeName: z.string().optional().describe('Specific type name to introspect (e.g., "Device", "Media"). If not provided, returns overview.'),
|
|
174
|
+
}, async (args) => {
|
|
175
|
+
try {
|
|
176
|
+
let response;
|
|
177
|
+
if (args.typeName) {
|
|
178
|
+
response = await graphqlClient.introspectType(args.typeName);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
// Return a summary of available queries instead of full introspection
|
|
182
|
+
const operations = QueryBuilder.getOperations();
|
|
183
|
+
const result = {
|
|
184
|
+
success: true,
|
|
185
|
+
data: {
|
|
186
|
+
availableQueries: operations,
|
|
187
|
+
contentManagement: ['device', 'deviceGroups', 'media', 'mediaGroups', 'playlist', 'playlistGroups', 'schedule', 'scheduleGroups', 'template', 'templateGroups', 'user'],
|
|
188
|
+
analytics: ['playLogs', 'pingLogs', 'eventLogs', 'impressions', 'deviceMetrics', 'audienceMetrics', 'mediaPlayStats'],
|
|
189
|
+
fieldPresets: {
|
|
190
|
+
device: Object.keys(QueryBuilder.getFieldPresets('device') ?? {}),
|
|
191
|
+
media: Object.keys(QueryBuilder.getFieldPresets('media') ?? {}),
|
|
192
|
+
playlist: Object.keys(QueryBuilder.getFieldPresets('playlist') ?? {}),
|
|
193
|
+
schedule: Object.keys(QueryBuilder.getFieldPresets('schedule') ?? {}),
|
|
194
|
+
},
|
|
195
|
+
tip: 'Use introspect_schema with typeName parameter to get details about specific types.',
|
|
196
|
+
},
|
|
197
|
+
};
|
|
198
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
199
|
+
}
|
|
200
|
+
// Optimize introspection response
|
|
201
|
+
const optimized = optimizer.optimize(response.data, { maxSize: 30000 });
|
|
202
|
+
const result = {
|
|
203
|
+
success: true,
|
|
204
|
+
data: optimized.data,
|
|
205
|
+
metadata: optimized.metadata,
|
|
206
|
+
};
|
|
207
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
const result = {
|
|
211
|
+
success: false,
|
|
212
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
213
|
+
};
|
|
214
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
// ============================================================================
|
|
218
|
+
// Tool: Quick Queries
|
|
219
|
+
// ============================================================================
|
|
220
|
+
server.tool('quick_query', 'Execute common pre-built queries for typical use cases.', {
|
|
221
|
+
queryType: z.enum([
|
|
222
|
+
'devices_status',
|
|
223
|
+
'online_devices',
|
|
224
|
+
'recent_media',
|
|
225
|
+
'active_schedules',
|
|
226
|
+
'play_logs',
|
|
227
|
+
]).describe('Type of quick query to execute'),
|
|
228
|
+
startDate: z.string().optional().describe('Start date for analytics (required for play_logs)'),
|
|
229
|
+
endDate: z.string().optional().describe('End date for analytics (required for play_logs)'),
|
|
230
|
+
deviceId: z.array(z.string()).optional().describe('Device IDs to filter by (for play_logs)'),
|
|
231
|
+
limit: z.number().optional().default(50).describe('Maximum results to return'),
|
|
232
|
+
}, async (args) => {
|
|
233
|
+
try {
|
|
234
|
+
let queryConfig;
|
|
235
|
+
switch (args.queryType) {
|
|
236
|
+
case 'devices_status':
|
|
237
|
+
queryConfig = QueryBuilder.quick.devicesStatus();
|
|
238
|
+
break;
|
|
239
|
+
case 'online_devices':
|
|
240
|
+
queryConfig = QueryBuilder.quick.onlineDevices();
|
|
241
|
+
break;
|
|
242
|
+
case 'recent_media':
|
|
243
|
+
queryConfig = QueryBuilder.quick.recentMedia(args.limit);
|
|
244
|
+
break;
|
|
245
|
+
case 'active_schedules':
|
|
246
|
+
queryConfig = QueryBuilder.quick.activeSchedules();
|
|
247
|
+
break;
|
|
248
|
+
case 'play_logs':
|
|
249
|
+
if (!args.startDate || !args.endDate) {
|
|
250
|
+
throw new Error('play_logs requires startDate and endDate');
|
|
251
|
+
}
|
|
252
|
+
queryConfig = QueryBuilder.quick.playLogs(args.startDate, args.endDate, args.deviceId);
|
|
253
|
+
break;
|
|
254
|
+
default:
|
|
255
|
+
throw new Error(`Unknown query type: ${args.queryType}`);
|
|
256
|
+
}
|
|
257
|
+
const response = await graphqlClient.query(queryConfig.query, queryConfig.variables);
|
|
258
|
+
if (response.errors && response.errors.length > 0) {
|
|
259
|
+
const result = {
|
|
260
|
+
success: false,
|
|
261
|
+
error: response.errors.map((e) => e.message).join('; '),
|
|
262
|
+
};
|
|
263
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
264
|
+
}
|
|
265
|
+
const optimized = optimizer.optimize(response.data);
|
|
266
|
+
const result = {
|
|
267
|
+
success: true,
|
|
268
|
+
data: optimized.data,
|
|
269
|
+
metadata: optimized.metadata,
|
|
270
|
+
};
|
|
271
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
const result = {
|
|
275
|
+
success: false,
|
|
276
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
277
|
+
};
|
|
278
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
// ============================================================================
|
|
282
|
+
// Tool: Cache Management
|
|
283
|
+
// ============================================================================
|
|
284
|
+
server.tool('manage_cache', 'Manage the response cache - view statistics or clear cached data.', {
|
|
285
|
+
action: z.enum(['stats', 'clear', 'cleanup']).describe('Cache action to perform'),
|
|
286
|
+
}, async (args) => {
|
|
287
|
+
switch (args.action) {
|
|
288
|
+
case 'stats': {
|
|
289
|
+
const stats = cache.getStats();
|
|
290
|
+
const hitRate = cache.getHitRate();
|
|
291
|
+
const result = {
|
|
292
|
+
success: true,
|
|
293
|
+
data: {
|
|
294
|
+
...stats,
|
|
295
|
+
hitRate: `${(hitRate * 100).toFixed(1)}%`,
|
|
296
|
+
sizeFormatted: ResponseOptimizer.formatSize(stats.size),
|
|
297
|
+
},
|
|
298
|
+
};
|
|
299
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
300
|
+
}
|
|
301
|
+
case 'clear':
|
|
302
|
+
cache.clear();
|
|
303
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: true, message: 'Cache cleared' }, null, 2) }] };
|
|
304
|
+
case 'cleanup': {
|
|
305
|
+
const removed = cache.cleanup();
|
|
306
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: true, message: `Removed ${removed} expired entries` }, null, 2) }] };
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
// ============================================================================
|
|
311
|
+
// Resources: Schema Documentation
|
|
312
|
+
// ============================================================================
|
|
313
|
+
server.resource('schema://reveldigital/graphql', 'Revel Digital GraphQL Schema', async () => {
|
|
314
|
+
const schemaContent = `# Revel Digital GraphQL API
|
|
315
|
+
|
|
316
|
+
## Available Queries
|
|
317
|
+
|
|
318
|
+
### Content Management
|
|
319
|
+
- device - Query devices (players)
|
|
320
|
+
- deviceGroups - Query device groups
|
|
321
|
+
- media - Query media files
|
|
322
|
+
- mediaGroups - Query media groups
|
|
323
|
+
- playlist - Query playlists
|
|
324
|
+
- playlistGroups - Query playlist groups
|
|
325
|
+
- schedule - Query schedules
|
|
326
|
+
- scheduleGroups - Query schedule groups
|
|
327
|
+
- template - Query templates
|
|
328
|
+
- templateGroups - Query template groups
|
|
329
|
+
- user - Query users
|
|
330
|
+
|
|
331
|
+
### Analytics (require date range)
|
|
332
|
+
- playLogs - Content playback records
|
|
333
|
+
- pingLogs - Device health/heartbeat logs
|
|
334
|
+
- eventLogs - Custom event logs
|
|
335
|
+
- impressions - Audience detection data
|
|
336
|
+
- deviceMetrics - Aggregated device health
|
|
337
|
+
- audienceMetrics - Aggregated audience data
|
|
338
|
+
- mediaPlayStats - Media performance stats
|
|
339
|
+
|
|
340
|
+
## Field Presets
|
|
341
|
+
Use the build_query tool with preset parameter:
|
|
342
|
+
- minimal - Just ID and name
|
|
343
|
+
- basic - Common fields
|
|
344
|
+
- status - Include health/status data
|
|
345
|
+
- location - Include location data
|
|
346
|
+
- full - All available fields
|
|
347
|
+
|
|
348
|
+
## Authentication
|
|
349
|
+
Set API key via environment variable REVELDIGITAL_API_KEY
|
|
350
|
+
or use set_auth tool at runtime.
|
|
351
|
+
`;
|
|
352
|
+
return {
|
|
353
|
+
contents: [{
|
|
354
|
+
uri: 'schema://reveldigital/graphql',
|
|
355
|
+
text: schemaContent,
|
|
356
|
+
mimeType: 'text/markdown'
|
|
357
|
+
}]
|
|
358
|
+
};
|
|
359
|
+
});
|
|
360
|
+
// ============================================================================
|
|
361
|
+
// Start Server
|
|
362
|
+
// ============================================================================
|
|
363
|
+
async function main() {
|
|
364
|
+
const transport = new StdioServerTransport();
|
|
365
|
+
if (config.debug) {
|
|
366
|
+
console.error('[MCP] Starting Revel Digital GraphQL Proxy Server');
|
|
367
|
+
console.error(`[MCP] Endpoint: ${config.endpoint}`);
|
|
368
|
+
console.error(`[MCP] Cache enabled: ${config.enableCache}`);
|
|
369
|
+
console.error(`[MCP] Auth Token (Bearer): ${config.authToken ? 'configured' : 'NOT SET - authentication required!'}`);
|
|
370
|
+
}
|
|
371
|
+
await server.connect(transport);
|
|
372
|
+
}
|
|
373
|
+
main().catch((error) => {
|
|
374
|
+
console.error('[MCP] Fatal error:', error);
|
|
375
|
+
process.exit(1);
|
|
376
|
+
});
|
|
377
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication Types
|
|
3
|
+
*
|
|
4
|
+
* Authentication configuration and runtime context interfaces.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Authentication configuration
|
|
8
|
+
*/
|
|
9
|
+
export interface AuthConfig {
|
|
10
|
+
/** Default authentication method */
|
|
11
|
+
defaultMethod: AuthMethod;
|
|
12
|
+
/** API key configurations (for multi-tenant) */
|
|
13
|
+
apiKeys: ApiKeyConfig[];
|
|
14
|
+
/** Header injection settings */
|
|
15
|
+
headerInjection: HeaderInjectionConfig;
|
|
16
|
+
/** Session management */
|
|
17
|
+
session: SessionConfig;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Supported authentication methods for Revel Digital API
|
|
21
|
+
*/
|
|
22
|
+
export type AuthMethod = 'bearer' | 'api-key-header' | 'query-param';
|
|
23
|
+
/**
|
|
24
|
+
* API key configuration for a tenant or client
|
|
25
|
+
*/
|
|
26
|
+
export interface ApiKeyConfig {
|
|
27
|
+
/** Unique identifier for this API key configuration */
|
|
28
|
+
id: string;
|
|
29
|
+
/** Display name */
|
|
30
|
+
name: string;
|
|
31
|
+
/** The actual API key (or reference to secret store) */
|
|
32
|
+
key: string;
|
|
33
|
+
/** Associated tenant ID */
|
|
34
|
+
tenantId?: string;
|
|
35
|
+
/** Authentication method to use */
|
|
36
|
+
method: AuthMethod;
|
|
37
|
+
/** Custom header name for api-key-header method (default: X-RevelDigital-API) */
|
|
38
|
+
headerName?: string;
|
|
39
|
+
/** Query parameter name for query-param method (default: apiKey) */
|
|
40
|
+
queryParam?: string;
|
|
41
|
+
/** Scopes/permissions for this key */
|
|
42
|
+
scopes?: string[];
|
|
43
|
+
/** Expiration timestamp */
|
|
44
|
+
expiresAt?: Date;
|
|
45
|
+
/** Is this key active? */
|
|
46
|
+
active: boolean;
|
|
47
|
+
/** Key metadata */
|
|
48
|
+
metadata?: Record<string, unknown>;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Header injection configuration
|
|
52
|
+
*/
|
|
53
|
+
export interface HeaderInjectionConfig {
|
|
54
|
+
/** Headers to inject on every request */
|
|
55
|
+
static: Record<string, string>;
|
|
56
|
+
/** Dynamic header generation rules */
|
|
57
|
+
dynamic: DynamicHeaderRule[];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Dynamic header generation rule
|
|
61
|
+
*/
|
|
62
|
+
export interface DynamicHeaderRule {
|
|
63
|
+
/** Header name to inject */
|
|
64
|
+
name: string;
|
|
65
|
+
/** Source of the value */
|
|
66
|
+
source: HeaderValueSource;
|
|
67
|
+
/** Source path or key */
|
|
68
|
+
path: string;
|
|
69
|
+
/** Transformation to apply */
|
|
70
|
+
transform?: string;
|
|
71
|
+
/** Condition for applying this header */
|
|
72
|
+
condition?: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Sources for dynamic header values
|
|
76
|
+
*/
|
|
77
|
+
export type HeaderValueSource = 'env' | 'config' | 'request' | 'computed' | 'context';
|
|
78
|
+
/**
|
|
79
|
+
* Session management configuration
|
|
80
|
+
*/
|
|
81
|
+
export interface SessionConfig {
|
|
82
|
+
/** Enable session tracking */
|
|
83
|
+
enabled: boolean;
|
|
84
|
+
/** Session timeout in milliseconds */
|
|
85
|
+
timeoutMs: number;
|
|
86
|
+
/** Session storage type */
|
|
87
|
+
storage: 'memory' | 'redis';
|
|
88
|
+
/** Redis connection options if storage is 'redis' */
|
|
89
|
+
redisOptions?: RedisSessionOptions;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Redis session storage options
|
|
93
|
+
*/
|
|
94
|
+
export interface RedisSessionOptions {
|
|
95
|
+
/** Redis host */
|
|
96
|
+
host: string;
|
|
97
|
+
/** Redis port */
|
|
98
|
+
port: number;
|
|
99
|
+
/** Redis password */
|
|
100
|
+
password?: string;
|
|
101
|
+
/** Redis database number */
|
|
102
|
+
db?: number;
|
|
103
|
+
/** Key prefix for session data */
|
|
104
|
+
keyPrefix?: string;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Runtime authentication context resolved for a request
|
|
108
|
+
*/
|
|
109
|
+
export interface AuthContext {
|
|
110
|
+
/** Resolved tenant ID */
|
|
111
|
+
tenantId: string;
|
|
112
|
+
/** API key configuration used */
|
|
113
|
+
apiKeyConfig: ApiKeyConfig;
|
|
114
|
+
/** Session ID if sessions enabled */
|
|
115
|
+
sessionId?: string;
|
|
116
|
+
/** Scopes available in this context */
|
|
117
|
+
scopes: string[];
|
|
118
|
+
/** Timestamp of authentication */
|
|
119
|
+
authenticatedAt: Date;
|
|
120
|
+
/** Is the authentication valid? */
|
|
121
|
+
isValid: boolean;
|
|
122
|
+
/** Error message if not valid */
|
|
123
|
+
errorMessage?: string;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Authentication result from validation
|
|
127
|
+
*/
|
|
128
|
+
export interface AuthResult {
|
|
129
|
+
/** Was authentication successful? */
|
|
130
|
+
success: boolean;
|
|
131
|
+
/** Auth context if successful */
|
|
132
|
+
context?: AuthContext;
|
|
133
|
+
/** Error code if failed */
|
|
134
|
+
errorCode?: AuthErrorCode;
|
|
135
|
+
/** Error message if failed */
|
|
136
|
+
errorMessage?: string;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Authentication error codes
|
|
140
|
+
*/
|
|
141
|
+
export type AuthErrorCode = 'MISSING_CREDENTIALS' | 'INVALID_API_KEY' | 'EXPIRED_API_KEY' | 'INACTIVE_API_KEY' | 'INSUFFICIENT_SCOPE' | 'INVALID_SESSION' | 'SESSION_EXPIRED';
|
|
142
|
+
/**
|
|
143
|
+
* Default authentication configuration
|
|
144
|
+
*/
|
|
145
|
+
export declare const DEFAULT_AUTH_CONFIG: AuthConfig;
|
|
146
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication Types
|
|
3
|
+
*
|
|
4
|
+
* Authentication configuration and runtime context interfaces.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Default authentication configuration
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_AUTH_CONFIG = {
|
|
10
|
+
defaultMethod: 'api-key-header',
|
|
11
|
+
apiKeys: [],
|
|
12
|
+
headerInjection: {
|
|
13
|
+
static: {},
|
|
14
|
+
dynamic: [],
|
|
15
|
+
},
|
|
16
|
+
session: {
|
|
17
|
+
enabled: false,
|
|
18
|
+
timeoutMs: 3600000, // 1 hour
|
|
19
|
+
storage: 'memory',
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8LH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,aAAa,EAAE,gBAAgB;IAC/B,OAAO,EAAE,EAAE;IACX,eAAe,EAAE;QACf,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;KACZ;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,OAAO,EAAE,QAAQ;KAClB;CACF,CAAC"}
|