equilibria-mcp-server 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/CHANGELOG.md +142 -0
- package/LICENSE +21 -0
- package/README.md +240 -0
- package/dist/builders/YAMLBuilder.d.ts +77 -0
- package/dist/builders/YAMLBuilder.d.ts.map +1 -0
- package/dist/builders/YAMLBuilder.js +251 -0
- package/dist/builders/YAMLBuilder.js.map +1 -0
- package/dist/economics/constants.d.ts +39 -0
- package/dist/economics/constants.d.ts.map +1 -0
- package/dist/economics/constants.js +46 -0
- package/dist/economics/constants.js.map +1 -0
- package/dist/economics/formulas.d.ts +19 -0
- package/dist/economics/formulas.d.ts.map +1 -0
- package/dist/economics/formulas.js +260 -0
- package/dist/economics/formulas.js.map +1 -0
- package/dist/economics/index.d.ts +9 -0
- package/dist/economics/index.d.ts.map +1 -0
- package/dist/economics/index.js +9 -0
- package/dist/economics/index.js.map +1 -0
- package/dist/economics/validators.d.ts +18 -0
- package/dist/economics/validators.d.ts.map +1 -0
- package/dist/economics/validators.js +111 -0
- package/dist/economics/validators.js.map +1 -0
- package/dist/errors/index.d.ts +172 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +313 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/formatters/index.d.ts +8 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +8 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/redux.d.ts +15 -0
- package/dist/formatters/redux.d.ts.map +1 -0
- package/dist/formatters/redux.js +35 -0
- package/dist/formatters/redux.js.map +1 -0
- package/dist/formatters/yaml.d.ts +18 -0
- package/dist/formatters/yaml.d.ts.map +1 -0
- package/dist/formatters/yaml.js +40 -0
- package/dist/formatters/yaml.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +14 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +86 -0
- package/dist/server.js.map +1 -0
- package/dist/templates/advancedMicro.d.ts +8 -0
- package/dist/templates/advancedMicro.d.ts.map +1 -0
- package/dist/templates/advancedMicro.js +834 -0
- package/dist/templates/advancedMicro.js.map +1 -0
- package/dist/templates/consumer.d.ts +12 -0
- package/dist/templates/consumer.d.ts.map +1 -0
- package/dist/templates/consumer.js +1978 -0
- package/dist/templates/consumer.js.map +1 -0
- package/dist/templates/elasticity.d.ts +8 -0
- package/dist/templates/elasticity.d.ts.map +1 -0
- package/dist/templates/elasticity.js +500 -0
- package/dist/templates/elasticity.js.map +1 -0
- package/dist/templates/externalities.d.ts +11 -0
- package/dist/templates/externalities.d.ts.map +1 -0
- package/dist/templates/externalities.js +997 -0
- package/dist/templates/externalities.js.map +1 -0
- package/dist/templates/financeBehavioral.d.ts +8 -0
- package/dist/templates/financeBehavioral.d.ts.map +1 -0
- package/dist/templates/financeBehavioral.js +860 -0
- package/dist/templates/financeBehavioral.js.map +1 -0
- package/dist/templates/growth.d.ts +8 -0
- package/dist/templates/growth.d.ts.map +1 -0
- package/dist/templates/growth.js +740 -0
- package/dist/templates/growth.js.map +1 -0
- package/dist/templates/index.d.ts +31 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +91 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/inequality.d.ts +8 -0
- package/dist/templates/inequality.d.ts.map +1 -0
- package/dist/templates/inequality.js +562 -0
- package/dist/templates/inequality.js.map +1 -0
- package/dist/templates/intertemporalMacro.d.ts +8 -0
- package/dist/templates/intertemporalMacro.d.ts.map +1 -0
- package/dist/templates/intertemporalMacro.js +550 -0
- package/dist/templates/intertemporalMacro.js.map +1 -0
- package/dist/templates/isLM.d.ts +8 -0
- package/dist/templates/isLM.d.ts.map +1 -0
- package/dist/templates/isLM.js +747 -0
- package/dist/templates/isLM.js.map +1 -0
- package/dist/templates/macro.d.ts +8 -0
- package/dist/templates/macro.d.ts.map +1 -0
- package/dist/templates/macro.js +600 -0
- package/dist/templates/macro.js.map +1 -0
- package/dist/templates/marketStructures.d.ts +11 -0
- package/dist/templates/marketStructures.d.ts.map +1 -0
- package/dist/templates/marketStructures.js +1135 -0
- package/dist/templates/marketStructures.js.map +1 -0
- package/dist/templates/newKeynesian.d.ts +8 -0
- package/dist/templates/newKeynesian.d.ts.map +1 -0
- package/dist/templates/newKeynesian.js +633 -0
- package/dist/templates/newKeynesian.js.map +1 -0
- package/dist/templates/oligopoly.d.ts +11 -0
- package/dist/templates/oligopoly.d.ts.map +1 -0
- package/dist/templates/oligopoly.js +1113 -0
- package/dist/templates/oligopoly.js.map +1 -0
- package/dist/templates/ppf.d.ts +8 -0
- package/dist/templates/ppf.d.ts.map +1 -0
- package/dist/templates/ppf.js +439 -0
- package/dist/templates/ppf.js.map +1 -0
- package/dist/templates/producer.d.ts +11 -0
- package/dist/templates/producer.d.ts.map +1 -0
- package/dist/templates/producer.js +979 -0
- package/dist/templates/producer.js.map +1 -0
- package/dist/templates/production.d.ts +8 -0
- package/dist/templates/production.d.ts.map +1 -0
- package/dist/templates/production.js +574 -0
- package/dist/templates/production.js.map +1 -0
- package/dist/templates/supplyDemand.d.ts +8 -0
- package/dist/templates/supplyDemand.d.ts.map +1 -0
- package/dist/templates/supplyDemand.js +1282 -0
- package/dist/templates/supplyDemand.js.map +1 -0
- package/dist/templates/tradeGrowth.d.ts +8 -0
- package/dist/templates/tradeGrowth.d.ts.map +1 -0
- package/dist/templates/tradeGrowth.js +637 -0
- package/dist/templates/tradeGrowth.js.map +1 -0
- package/dist/tools/index.d.ts +25 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +54 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/models.d.ts +8 -0
- package/dist/tools/models.d.ts.map +1 -0
- package/dist/tools/models.js +828 -0
- package/dist/tools/models.js.map +1 -0
- package/dist/tools/output.d.ts +8 -0
- package/dist/tools/output.d.ts.map +1 -0
- package/dist/tools/output.js +236 -0
- package/dist/tools/output.js.map +1 -0
- package/dist/tools/templates.d.ts +8 -0
- package/dist/tools/templates.d.ts.map +1 -0
- package/dist/tools/templates.js +247 -0
- package/dist/tools/templates.js.map +1 -0
- package/dist/tools/validation.d.ts +8 -0
- package/dist/tools/validation.d.ts.map +1 -0
- package/dist/tools/validation.js +181 -0
- package/dist/tools/validation.js.map +1 -0
- package/dist/types/index.d.ts +187 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/cache.d.ts +99 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +192 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +128 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +251 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/validation/index.d.ts +42 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +282 -0
- package/dist/validation/index.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Module
|
|
3
|
+
*
|
|
4
|
+
* Provides validation utilities for expressions, documents, and dependencies.
|
|
5
|
+
* Enhanced with caching and improved error messages.
|
|
6
|
+
*/
|
|
7
|
+
import { DocumentSchema, validateExpressionSyntax as engineValidateExpression, extractSymbolsFromExpression, validateDocumentReferences, parseYAML, } from 'equilibria-engine';
|
|
8
|
+
import { expressionCache, documentCache } from '../utils/cache.js';
|
|
9
|
+
import { logger } from '../utils/logger.js';
|
|
10
|
+
import { Errors } from '../errors/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Built-in Math.js functions and constants
|
|
13
|
+
*/
|
|
14
|
+
const MATHJS_BUILTINS = new Set([
|
|
15
|
+
'pi', 'e', 'i', 'Infinity', 'NaN',
|
|
16
|
+
'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
|
|
17
|
+
'sinh', 'cosh', 'tanh',
|
|
18
|
+
'abs', 'ceil', 'floor', 'round', 'sign', 'sqrt', 'cbrt',
|
|
19
|
+
'exp', 'log', 'log10', 'log2', 'pow',
|
|
20
|
+
'min', 'max', 'mean', 'sum',
|
|
21
|
+
'mod', 'gcd', 'lcm',
|
|
22
|
+
'if', 'ifelse',
|
|
23
|
+
]);
|
|
24
|
+
/**
|
|
25
|
+
* Validate a mathematical expression
|
|
26
|
+
* Results are cached to improve performance for repeated validations.
|
|
27
|
+
*/
|
|
28
|
+
export function validateExpression(expression, availableParameters = [], allowX = true, allowT = false) {
|
|
29
|
+
// Create cache key from all inputs
|
|
30
|
+
const cacheKey = JSON.stringify({ expression, availableParameters, allowX, allowT });
|
|
31
|
+
// Check cache first
|
|
32
|
+
const cached = expressionCache.get(cacheKey);
|
|
33
|
+
if (cached) {
|
|
34
|
+
logger.debug('Expression validation cache hit', { expression });
|
|
35
|
+
return cached;
|
|
36
|
+
}
|
|
37
|
+
logger.debug('Validating expression', { expression });
|
|
38
|
+
const errors = [];
|
|
39
|
+
let symbols = [];
|
|
40
|
+
// Check syntax
|
|
41
|
+
const syntaxResult = engineValidateExpression(expression);
|
|
42
|
+
if (!syntaxResult.isValid) {
|
|
43
|
+
const enhancedError = Errors.invalidExpression(expression, syntaxResult.error || 'Invalid syntax');
|
|
44
|
+
errors.push({
|
|
45
|
+
path: enhancedError.path,
|
|
46
|
+
message: enhancedError.message,
|
|
47
|
+
suggestion: enhancedError.suggestion,
|
|
48
|
+
});
|
|
49
|
+
const result = { valid: false, errors, symbols };
|
|
50
|
+
expressionCache.set(cacheKey, result);
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
// Extract symbols
|
|
54
|
+
symbols = extractSymbolsFromExpression(expression);
|
|
55
|
+
// Check for unknown parameters
|
|
56
|
+
const availableSet = new Set(availableParameters);
|
|
57
|
+
if (allowX)
|
|
58
|
+
availableSet.add('x');
|
|
59
|
+
if (allowT)
|
|
60
|
+
availableSet.add('t');
|
|
61
|
+
for (const sym of symbols) {
|
|
62
|
+
if (!availableSet.has(sym) && !MATHJS_BUILTINS.has(sym)) {
|
|
63
|
+
const suggestion = findClosestMatch(sym, availableParameters);
|
|
64
|
+
const enhancedError = Errors.unknownParameter(sym, suggestion || undefined);
|
|
65
|
+
errors.push({
|
|
66
|
+
path: enhancedError.path,
|
|
67
|
+
message: enhancedError.message,
|
|
68
|
+
suggestion: enhancedError.suggestion,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const result = {
|
|
73
|
+
valid: errors.length === 0,
|
|
74
|
+
errors,
|
|
75
|
+
symbols: symbols.filter((s) => !MATHJS_BUILTINS.has(s)),
|
|
76
|
+
};
|
|
77
|
+
// Cache the result
|
|
78
|
+
expressionCache.set(cacheKey, result);
|
|
79
|
+
logger.validation('expression', result.valid, result.errors);
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Validate a complete YAML document
|
|
84
|
+
* Results are cached with a short TTL.
|
|
85
|
+
*/
|
|
86
|
+
export function validateDocument(yamlContent) {
|
|
87
|
+
// Check cache first
|
|
88
|
+
const cached = documentCache.get(yamlContent);
|
|
89
|
+
if (cached) {
|
|
90
|
+
logger.debug('Document validation cache hit');
|
|
91
|
+
return cached;
|
|
92
|
+
}
|
|
93
|
+
logger.debug('Validating document', { length: yamlContent.length });
|
|
94
|
+
const errors = [];
|
|
95
|
+
const warnings = [];
|
|
96
|
+
try {
|
|
97
|
+
// Parse YAML
|
|
98
|
+
const document = parseYAML(yamlContent);
|
|
99
|
+
// Validate with Zod schema
|
|
100
|
+
const schemaResult = DocumentSchema.safeParse(document);
|
|
101
|
+
if (!schemaResult.success) {
|
|
102
|
+
for (const issue of schemaResult.error.issues) {
|
|
103
|
+
const path = issue.path.join('.');
|
|
104
|
+
const enhancedMessage = enhanceZodError(issue);
|
|
105
|
+
errors.push({
|
|
106
|
+
path,
|
|
107
|
+
message: enhancedMessage.message,
|
|
108
|
+
suggestion: enhancedMessage.suggestion,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
const result = { valid: false, errors, warnings };
|
|
112
|
+
documentCache.set(yamlContent, result);
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
// Validate cross-references
|
|
116
|
+
const refErrors = validateDocumentReferences(schemaResult.data);
|
|
117
|
+
for (const refError of refErrors) {
|
|
118
|
+
errors.push({
|
|
119
|
+
path: 'references',
|
|
120
|
+
message: refError,
|
|
121
|
+
suggestion: 'Check that all referenced IDs exist in the document',
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
const result = {
|
|
125
|
+
valid: errors.length === 0,
|
|
126
|
+
errors,
|
|
127
|
+
warnings,
|
|
128
|
+
};
|
|
129
|
+
documentCache.set(yamlContent, result);
|
|
130
|
+
logger.validation('document', result.valid, result.errors);
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
const message = error instanceof Error ? error.message : 'Failed to parse document';
|
|
135
|
+
errors.push({
|
|
136
|
+
path: 'document',
|
|
137
|
+
message,
|
|
138
|
+
suggestion: 'Check YAML syntax: proper indentation, colons after keys, quotes around strings with special characters',
|
|
139
|
+
});
|
|
140
|
+
const result = { valid: false, errors, warnings };
|
|
141
|
+
documentCache.set(yamlContent, result);
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Enhance Zod error with better messages
|
|
147
|
+
*/
|
|
148
|
+
function enhanceZodError(issue) {
|
|
149
|
+
const path = issue.path.join('.');
|
|
150
|
+
switch (issue.code) {
|
|
151
|
+
case 'invalid_type':
|
|
152
|
+
return {
|
|
153
|
+
message: issue.message,
|
|
154
|
+
suggestion: `Check the type of "${path}". Common issues: numbers in quotes, missing quotes on strings.`,
|
|
155
|
+
};
|
|
156
|
+
case 'unrecognized_keys':
|
|
157
|
+
return {
|
|
158
|
+
message: issue.message,
|
|
159
|
+
suggestion: 'Remove unknown fields or check spelling.',
|
|
160
|
+
};
|
|
161
|
+
case 'invalid_enum_value':
|
|
162
|
+
return {
|
|
163
|
+
message: issue.message,
|
|
164
|
+
suggestion: 'Use one of the allowed values listed in the error.',
|
|
165
|
+
};
|
|
166
|
+
case 'too_small':
|
|
167
|
+
return {
|
|
168
|
+
message: issue.message,
|
|
169
|
+
suggestion: `Increase the value for "${path}" to meet the minimum requirement.`,
|
|
170
|
+
};
|
|
171
|
+
case 'too_big':
|
|
172
|
+
return {
|
|
173
|
+
message: issue.message,
|
|
174
|
+
suggestion: `Decrease the value for "${path}" to meet the maximum requirement.`,
|
|
175
|
+
};
|
|
176
|
+
default:
|
|
177
|
+
return {
|
|
178
|
+
message: issue.message,
|
|
179
|
+
suggestion: undefined,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Check for circular dependencies in parameter expressions
|
|
185
|
+
*/
|
|
186
|
+
export function checkCircularDependencies(parameters) {
|
|
187
|
+
const graph = new Map();
|
|
188
|
+
// Build dependency graph
|
|
189
|
+
for (const [name, expression] of Object.entries(parameters)) {
|
|
190
|
+
const deps = extractSymbolsFromExpression(expression).filter((s) => !MATHJS_BUILTINS.has(s) && s !== 'x' && s !== 't');
|
|
191
|
+
graph.set(name, new Set(deps));
|
|
192
|
+
}
|
|
193
|
+
// Topological sort with cycle detection
|
|
194
|
+
const visited = new Set();
|
|
195
|
+
const visiting = new Set();
|
|
196
|
+
const order = [];
|
|
197
|
+
let cycle = [];
|
|
198
|
+
function visit(node, path) {
|
|
199
|
+
if (visiting.has(node)) {
|
|
200
|
+
// Found cycle
|
|
201
|
+
const cycleStart = path.indexOf(node);
|
|
202
|
+
cycle = path.slice(cycleStart);
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
if (visited.has(node)) {
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
visiting.add(node);
|
|
209
|
+
const deps = graph.get(node) || new Set();
|
|
210
|
+
for (const dep of deps) {
|
|
211
|
+
if (graph.has(dep) && !visit(dep, [...path, node])) {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
visiting.delete(node);
|
|
216
|
+
visited.add(node);
|
|
217
|
+
order.push(node);
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
for (const node of graph.keys()) {
|
|
221
|
+
if (!visited.has(node) && !visit(node, [])) {
|
|
222
|
+
return { valid: false, cycle, order: [] };
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return { valid: true, cycle: [], order };
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Find closest match using Levenshtein distance
|
|
229
|
+
*/
|
|
230
|
+
function findClosestMatch(input, options, maxDistance = 3) {
|
|
231
|
+
let closest = null;
|
|
232
|
+
let minDist = Infinity;
|
|
233
|
+
for (const opt of options) {
|
|
234
|
+
const dist = levenshteinDistance(input.toLowerCase(), opt.toLowerCase());
|
|
235
|
+
if (dist < minDist && dist <= maxDistance) {
|
|
236
|
+
minDist = dist;
|
|
237
|
+
closest = opt;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return closest;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Calculate Levenshtein distance
|
|
244
|
+
*/
|
|
245
|
+
function levenshteinDistance(a, b) {
|
|
246
|
+
const matrix = [];
|
|
247
|
+
for (let i = 0; i <= b.length; i++) {
|
|
248
|
+
matrix[i] = [i];
|
|
249
|
+
}
|
|
250
|
+
for (let j = 0; j <= a.length; j++) {
|
|
251
|
+
matrix[0][j] = j;
|
|
252
|
+
}
|
|
253
|
+
for (let i = 1; i <= b.length; i++) {
|
|
254
|
+
for (let j = 1; j <= a.length; j++) {
|
|
255
|
+
if (b[i - 1] === a[j - 1]) {
|
|
256
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return matrix[b.length][a.length];
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Clear all validation caches
|
|
267
|
+
*/
|
|
268
|
+
export function clearValidationCaches() {
|
|
269
|
+
expressionCache.clear();
|
|
270
|
+
documentCache.clear();
|
|
271
|
+
logger.debug('Validation caches cleared');
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Get validation cache statistics
|
|
275
|
+
*/
|
|
276
|
+
export function getValidationCacheStats() {
|
|
277
|
+
return {
|
|
278
|
+
expression: expressionCache.getStats(),
|
|
279
|
+
document: documentCache.getStats(),
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "equilibria-mcp-server",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Model Context Protocol server for generating economic visualizations with the Equilibria Engine",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Kinetonomics",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/DingleDongle93/Equilibria.git",
|
|
10
|
+
"directory": "packages/equilibria-mcp-server"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/DingleDongle93/Equilibria#readme",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/DingleDongle93/Equilibria/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"mcp",
|
|
18
|
+
"model-context-protocol",
|
|
19
|
+
"economics",
|
|
20
|
+
"visualization",
|
|
21
|
+
"equilibria",
|
|
22
|
+
"charts",
|
|
23
|
+
"graphs",
|
|
24
|
+
"ai",
|
|
25
|
+
"claude"
|
|
26
|
+
],
|
|
27
|
+
"type": "module",
|
|
28
|
+
"main": "dist/index.js",
|
|
29
|
+
"types": "dist/index.d.ts",
|
|
30
|
+
"bin": {
|
|
31
|
+
"equilibria-mcp-server": "./dist/index.js"
|
|
32
|
+
},
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"types": "./dist/index.d.ts",
|
|
36
|
+
"import": "./dist/index.js"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"dist/",
|
|
41
|
+
"README.md",
|
|
42
|
+
"CHANGELOG.md",
|
|
43
|
+
"LICENSE"
|
|
44
|
+
],
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "tsc",
|
|
47
|
+
"dev": "tsx watch src/index.ts",
|
|
48
|
+
"start": "node dist/index.js",
|
|
49
|
+
"test": "vitest run",
|
|
50
|
+
"test:watch": "vitest",
|
|
51
|
+
"type-check": "tsc --noEmit",
|
|
52
|
+
"lint": "eslint src/",
|
|
53
|
+
"clean": "rm -rf dist",
|
|
54
|
+
"prepublishOnly": "pnpm run build"
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
58
|
+
"equilibria-engine": "^1.4.2",
|
|
59
|
+
"mathjs": "^15.0.0",
|
|
60
|
+
"zod": "^3.25.76",
|
|
61
|
+
"js-yaml": "^4.1.0"
|
|
62
|
+
},
|
|
63
|
+
"devDependencies": {
|
|
64
|
+
"@types/js-yaml": "^4.0.9",
|
|
65
|
+
"@types/node": "^22.19.1",
|
|
66
|
+
"tsx": "^4.19.4",
|
|
67
|
+
"typescript": "^5.9.3",
|
|
68
|
+
"vitest": "^0.34.0"
|
|
69
|
+
},
|
|
70
|
+
"engines": {
|
|
71
|
+
"node": ">=18.0.0"
|
|
72
|
+
}
|
|
73
|
+
}
|