ai-model-advisor-mcp 2.2.1 → 2.3.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.
Files changed (56) hide show
  1. package/README.md +17 -2
  2. package/build/server.d.ts +106 -0
  3. package/build/server.d.ts.map +1 -1
  4. package/build/server.js +55 -1
  5. package/build/server.js.map +1 -1
  6. package/build/tools/compare.js +2 -2
  7. package/build/tools/compare.js.map +1 -1
  8. package/build/tools/info.js +3 -3
  9. package/build/tools/info.js.map +1 -1
  10. package/build/tools/list.d.ts.map +1 -1
  11. package/build/tools/list.js +10 -2
  12. package/build/tools/list.js.map +1 -1
  13. package/build/tools/recommend.d.ts.map +1 -1
  14. package/build/tools/recommend.js +12 -5
  15. package/build/tools/recommend.js.map +1 -1
  16. package/build/tools/select.d.ts +113 -0
  17. package/build/tools/select.d.ts.map +1 -0
  18. package/build/tools/select.js +371 -0
  19. package/build/tools/select.js.map +1 -0
  20. package/package.json +3 -2
  21. package/build/data/fal-pricing.d.ts +0 -15
  22. package/build/data/fal-pricing.d.ts.map +0 -1
  23. package/build/data/fal-pricing.js +0 -145
  24. package/build/data/fal-pricing.js.map +0 -1
  25. package/build/data/fireworks-pricing.d.ts +0 -14
  26. package/build/data/fireworks-pricing.d.ts.map +0 -1
  27. package/build/data/fireworks-pricing.js +0 -57
  28. package/build/data/fireworks-pricing.js.map +0 -1
  29. package/build/data/replicate-pricing.d.ts +0 -16
  30. package/build/data/replicate-pricing.d.ts.map +0 -1
  31. package/build/data/replicate-pricing.js +0 -71
  32. package/build/data/replicate-pricing.js.map +0 -1
  33. package/build/data/together-pricing.d.ts +0 -14
  34. package/build/data/together-pricing.d.ts.map +0 -1
  35. package/build/data/together-pricing.js +0 -73
  36. package/build/data/together-pricing.js.map +0 -1
  37. package/build/providers/fal.d.ts +0 -3
  38. package/build/providers/fal.d.ts.map +0 -1
  39. package/build/providers/fal.js +0 -168
  40. package/build/providers/fal.js.map +0 -1
  41. package/build/providers/fireworks.d.ts +0 -3
  42. package/build/providers/fireworks.d.ts.map +0 -1
  43. package/build/providers/fireworks.js +0 -75
  44. package/build/providers/fireworks.js.map +0 -1
  45. package/build/providers/openrouter.d.ts +0 -3
  46. package/build/providers/openrouter.d.ts.map +0 -1
  47. package/build/providers/openrouter.js +0 -78
  48. package/build/providers/openrouter.js.map +0 -1
  49. package/build/providers/replicate.d.ts +0 -3
  50. package/build/providers/replicate.d.ts.map +0 -1
  51. package/build/providers/replicate.js +0 -129
  52. package/build/providers/replicate.js.map +0 -1
  53. package/build/providers/together.d.ts +0 -3
  54. package/build/providers/together.d.ts.map +0 -1
  55. package/build/providers/together.js +0 -93
  56. package/build/providers/together.js.map +0 -1
@@ -0,0 +1,113 @@
1
+ import type { ModelCategory, UnifiedModel } from "../types.js";
2
+ type SelectionGoal = "balanced" | "best" | "cheapest";
3
+ type Budget = "any" | "free" | "low";
4
+ interface UsageEstimate {
5
+ input_tokens?: number;
6
+ prompt_tokens?: number;
7
+ output_tokens?: number;
8
+ completion_tokens?: number;
9
+ requests?: number;
10
+ units?: number;
11
+ images?: number;
12
+ seconds?: number;
13
+ }
14
+ export declare function handleSelectModelForProject(models: UnifiedModel[], args: Record<string, unknown>): {
15
+ content: {
16
+ type: "text";
17
+ text: string;
18
+ }[];
19
+ isError: boolean;
20
+ structuredContent?: undefined;
21
+ } | {
22
+ content: {
23
+ type: "text";
24
+ text: string;
25
+ }[];
26
+ structuredContent: {
27
+ query: {
28
+ project: string;
29
+ task: string;
30
+ requirements: string[];
31
+ budget: Budget;
32
+ optimization_goal: SelectionGoal;
33
+ };
34
+ candidates: never[];
35
+ };
36
+ isError?: undefined;
37
+ } | {
38
+ content: {
39
+ type: "text";
40
+ text: string;
41
+ }[];
42
+ structuredContent: {
43
+ query: {
44
+ project: string;
45
+ task: string;
46
+ requirements: string[];
47
+ budget: Budget;
48
+ optimization_goal: SelectionGoal;
49
+ inferred_categories: ModelCategory[];
50
+ expected_usage: UsageEstimate;
51
+ };
52
+ best_overall: {
53
+ id: string;
54
+ name: string;
55
+ provider: import("../types.js").ProviderName;
56
+ category: ModelCategory;
57
+ qualityTier: import("../types.js").QualityTier | null;
58
+ pricing: string;
59
+ comparisonPrice: number | null;
60
+ estimatedCost: number | null;
61
+ score: number;
62
+ valueScore: number;
63
+ reasons: string[];
64
+ tradeoffs: string[];
65
+ };
66
+ cheapest_acceptable: {
67
+ id: string;
68
+ name: string;
69
+ provider: import("../types.js").ProviderName;
70
+ category: ModelCategory;
71
+ qualityTier: import("../types.js").QualityTier | null;
72
+ pricing: string;
73
+ comparisonPrice: number | null;
74
+ estimatedCost: number | null;
75
+ score: number;
76
+ valueScore: number;
77
+ reasons: string[];
78
+ tradeoffs: string[];
79
+ };
80
+ best_value: {
81
+ id: string;
82
+ name: string;
83
+ provider: import("../types.js").ProviderName;
84
+ category: ModelCategory;
85
+ qualityTier: import("../types.js").QualityTier | null;
86
+ pricing: string;
87
+ comparisonPrice: number | null;
88
+ estimatedCost: number | null;
89
+ score: number;
90
+ valueScore: number;
91
+ reasons: string[];
92
+ tradeoffs: string[];
93
+ };
94
+ candidates: {
95
+ id: string;
96
+ name: string;
97
+ provider: import("../types.js").ProviderName;
98
+ category: ModelCategory;
99
+ qualityTier: import("../types.js").QualityTier | null;
100
+ pricing: string;
101
+ comparisonPrice: number | null;
102
+ estimatedCost: number | null;
103
+ score: number;
104
+ valueScore: number;
105
+ reasons: string[];
106
+ tradeoffs: string[];
107
+ }[];
108
+ cost_basis: string;
109
+ };
110
+ isError?: undefined;
111
+ };
112
+ export {};
113
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/tools/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D,KAAK,aAAa,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;AACtD,KAAK,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAErC,UAAU,aAAa;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAuTD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,YAAY,EAAE,EACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwG9B"}
@@ -0,0 +1,371 @@
1
+ const CATEGORY_ALIASES = {
2
+ image: ["text-to-image", "image-to-image"],
3
+ "image generation": ["text-to-image"],
4
+ "image editing": ["image-to-image"],
5
+ img2img: ["image-to-image"],
6
+ video: ["text-to-video", "image-to-video", "video-to-video"],
7
+ "video generation": ["text-to-video"],
8
+ img2vid: ["image-to-video"],
9
+ tts: ["text-to-speech"],
10
+ voice: ["text-to-speech"],
11
+ speech: ["text-to-speech"],
12
+ stt: ["speech-to-text"],
13
+ transcription: ["speech-to-text"],
14
+ transcribe: ["speech-to-text"],
15
+ audio: ["text-to-audio"],
16
+ "3d": ["image-to-3d"],
17
+ embedding: ["embedding"],
18
+ embeddings: ["embedding"],
19
+ vision: ["vision", "llm"],
20
+ llm: ["llm"],
21
+ chat: ["llm"],
22
+ text: ["llm"],
23
+ code: ["llm"],
24
+ coding: ["llm"],
25
+ codebase: ["llm"],
26
+ repository: ["llm"],
27
+ repo: ["llm"],
28
+ typescript: ["llm"],
29
+ javascript: ["llm"],
30
+ python: ["llm"],
31
+ agent: ["llm"],
32
+ reasoning: ["llm"],
33
+ };
34
+ const REQUIREMENT_ALIASES = {
35
+ tool_use: ["tool_use", "tool", "tools", "function", "function calling"],
36
+ tools: ["tool_use", "tool", "tools", "function", "function calling"],
37
+ function: ["tool_use", "tool", "tools", "function", "function calling"],
38
+ reasoning: ["reasoning", "reason", "think", "thinking"],
39
+ coding: ["coding", "code", "programming"],
40
+ vision: ["vision", "visual", "image"],
41
+ "long context": ["long context", "context", "large context"],
42
+ long_context: ["long context", "context", "large context"],
43
+ structured_output: ["structured_output", "structured output", "json"],
44
+ json: ["structured_output", "structured output", "json"],
45
+ fast: ["fast", "speed", "low latency"],
46
+ cheap: ["cheap", "low cost", "budget"],
47
+ };
48
+ function stringArray(value) {
49
+ if (!Array.isArray(value))
50
+ return [];
51
+ return value.filter((item) => typeof item === "string");
52
+ }
53
+ function usageEstimate(value) {
54
+ if (!value || typeof value !== "object" || Array.isArray(value))
55
+ return {};
56
+ const usage = {};
57
+ for (const [key, raw] of Object.entries(value)) {
58
+ if (typeof raw === "number" && Number.isFinite(raw) && raw >= 0) {
59
+ usage[key] = raw;
60
+ }
61
+ }
62
+ return usage;
63
+ }
64
+ function selectionGoal(value) {
65
+ const goal = String(value ?? "balanced").toLowerCase();
66
+ return goal === "best" || goal === "cheapest" ? goal : "balanced";
67
+ }
68
+ function budgetConstraint(value) {
69
+ const budget = String(value ?? "any").toLowerCase();
70
+ return budget === "free" || budget === "low" ? budget : "any";
71
+ }
72
+ function resolveCategories(text) {
73
+ const lower = text.toLowerCase();
74
+ const categories = new Set();
75
+ for (const [alias, cats] of Object.entries(CATEGORY_ALIASES)) {
76
+ if (lower.includes(alias)) {
77
+ for (const category of cats)
78
+ categories.add(category);
79
+ }
80
+ }
81
+ return [...categories];
82
+ }
83
+ function expandRequirement(term) {
84
+ const lower = term.toLowerCase().replace(/_/g, " ").trim();
85
+ const direct = REQUIREMENT_ALIASES[term.toLowerCase()] ?? REQUIREMENT_ALIASES[lower];
86
+ return direct ?? [lower];
87
+ }
88
+ function modelText(model) {
89
+ return [
90
+ model.id,
91
+ model.name,
92
+ model.description,
93
+ model.category,
94
+ ...model.capabilities,
95
+ ...(model.tags ?? []),
96
+ ]
97
+ .join(" ")
98
+ .toLowerCase()
99
+ .replace(/_/g, " ");
100
+ }
101
+ function hasRequirement(model, requirement) {
102
+ const text = modelText(model);
103
+ return expandRequirement(requirement).some((term) => text.includes(term));
104
+ }
105
+ function tierScore(tier) {
106
+ switch (tier) {
107
+ case "S":
108
+ return 25;
109
+ case "A":
110
+ return 18;
111
+ case "B":
112
+ return 10;
113
+ case "C":
114
+ return 4;
115
+ default:
116
+ return 0;
117
+ }
118
+ }
119
+ function comparisonPrice(model, usage) {
120
+ if (model.pricing.unitPrice < 0)
121
+ return null;
122
+ const estimated = estimatedUsageCost(model, usage);
123
+ if (estimated !== null)
124
+ return estimated;
125
+ if (model.category === "llm") {
126
+ const input = model.pricing.inputPrice;
127
+ const output = model.pricing.outputPrice;
128
+ if (input == null && output == null)
129
+ return null;
130
+ const inputPerMillion = (input ?? model.pricing.unitPrice) * 1_000_000;
131
+ const outputPerMillion = (output ?? input ?? model.pricing.unitPrice) * 1_000_000;
132
+ return (inputPerMillion + outputPerMillion) / 2;
133
+ }
134
+ return model.pricing.unitPrice;
135
+ }
136
+ function estimatedUsageCost(model, usage) {
137
+ if (model.pricing.unitPrice < 0)
138
+ return null;
139
+ if (model.category === "llm") {
140
+ const inputTokens = usage.input_tokens ?? usage.prompt_tokens;
141
+ const outputTokens = usage.output_tokens ?? usage.completion_tokens;
142
+ if (inputTokens == null && outputTokens == null)
143
+ return null;
144
+ const requests = usage.requests ?? 1;
145
+ const inputCost = (inputTokens ?? 0) * (model.pricing.inputPrice ?? model.pricing.unitPrice);
146
+ const outputCost = (outputTokens ?? 0) * (model.pricing.outputPrice ?? model.pricing.unitPrice);
147
+ return (inputCost + outputCost) * requests;
148
+ }
149
+ const units = usage.units ?? usage.images ?? usage.seconds ?? usage.requests;
150
+ if (units == null)
151
+ return null;
152
+ return units * model.pricing.unitPrice;
153
+ }
154
+ function affordabilityScore(price) {
155
+ if (price === null)
156
+ return -20;
157
+ if (price === 0)
158
+ return 35;
159
+ return Math.max(0, 35 - Math.log10(price + 1) * 12);
160
+ }
161
+ function formatCost(cost) {
162
+ if (cost === null)
163
+ return "not estimated";
164
+ return `$${cost.toFixed(cost >= 1 ? 2 : 4)}`;
165
+ }
166
+ function summarizeCandidate(candidate) {
167
+ const { model } = candidate;
168
+ return {
169
+ id: model.id,
170
+ name: model.name,
171
+ provider: model.provider,
172
+ category: model.category,
173
+ qualityTier: model.qualityTier ?? null,
174
+ pricing: model.pricing.formatted,
175
+ comparisonPrice: candidate.comparisonPrice,
176
+ estimatedCost: candidate.estimatedCost,
177
+ score: Math.round(candidate.score),
178
+ valueScore: Math.round(candidate.valueScore),
179
+ reasons: candidate.reasons,
180
+ tradeoffs: candidate.tradeoffs,
181
+ };
182
+ }
183
+ function scoreModel(model, categories, terms, requirements, usage) {
184
+ let score = 0;
185
+ let isRelevant = false;
186
+ const reasons = [];
187
+ const tradeoffs = [];
188
+ const text = modelText(model);
189
+ if (categories.includes(model.category)) {
190
+ score += 30;
191
+ isRelevant = true;
192
+ reasons.push(`matches ${model.category} project category`);
193
+ }
194
+ for (const requirement of requirements) {
195
+ if (hasRequirement(model, requirement)) {
196
+ score += 35;
197
+ isRelevant = true;
198
+ reasons.push(`matches requirement: ${requirement}`);
199
+ }
200
+ else {
201
+ tradeoffs.push(`no clear ${requirement} signal`);
202
+ }
203
+ }
204
+ for (const term of terms) {
205
+ const normalized = term.toLowerCase().replace(/_/g, " ").trim();
206
+ if (!normalized || normalized.length < 3)
207
+ continue;
208
+ if (model.capabilities.some((cap) => cap.toLowerCase().replace(/_/g, " ").includes(normalized))) {
209
+ score += 8;
210
+ isRelevant = true;
211
+ }
212
+ else if (model.tags?.some((tag) => tag.toLowerCase().includes(normalized))) {
213
+ score += 4;
214
+ isRelevant = true;
215
+ }
216
+ else if (text.includes(normalized)) {
217
+ score += 2;
218
+ isRelevant = true;
219
+ }
220
+ }
221
+ if (model.qualityTier) {
222
+ score += tierScore(model.qualityTier);
223
+ reasons.push(`${model.qualityTier}-tier quality`);
224
+ }
225
+ const combined = terms.join(" ").toLowerCase();
226
+ if ((combined.includes("code") || combined.includes("coding")) && model.benchmarks?.coding != null) {
227
+ score += Math.min(15, model.benchmarks.coding / 6);
228
+ reasons.push(`coding benchmark ${model.benchmarks.coding.toFixed(1)}`);
229
+ }
230
+ if ((combined.includes("reason") || combined.includes("smart") || combined.includes("intelligence")) && model.benchmarks?.mmlu != null) {
231
+ score += Math.min(12, model.benchmarks.mmlu / 8);
232
+ reasons.push(`MMLU ${model.benchmarks.mmlu.toFixed(1)}`);
233
+ }
234
+ if ((combined.includes("fast") || combined.includes("speed")) && model.speed?.throughput != null) {
235
+ score += model.speed.throughput > 50 ? 8 : 4;
236
+ reasons.push(`${model.speed.throughput.toFixed(1)} tokens/sec throughput`);
237
+ }
238
+ if ((combined.includes("long context") || combined.includes("large context") || combined.includes("context")) && model.contextLength) {
239
+ score += Math.min(10, model.contextLength / 50_000);
240
+ reasons.push(`${model.contextLength.toLocaleString()} token context`);
241
+ }
242
+ const price = comparisonPrice(model, usage);
243
+ const estimatedCost = estimatedUsageCost(model, usage);
244
+ if (price === null) {
245
+ tradeoffs.push("pricing unavailable");
246
+ }
247
+ else if (price === 0) {
248
+ reasons.push("free pricing");
249
+ }
250
+ if (!isRelevant)
251
+ return null;
252
+ return {
253
+ model,
254
+ score,
255
+ valueScore: score + affordabilityScore(price),
256
+ comparisonPrice: price,
257
+ estimatedCost,
258
+ reasons: [...new Set(reasons)].slice(0, 5),
259
+ tradeoffs: [...new Set(tradeoffs)].slice(0, 4),
260
+ };
261
+ }
262
+ function sortByPrice(a, b) {
263
+ if (a.comparisonPrice === null && b.comparisonPrice !== null)
264
+ return 1;
265
+ if (a.comparisonPrice !== null && b.comparisonPrice === null)
266
+ return -1;
267
+ if (a.comparisonPrice !== null && b.comparisonPrice !== null && a.comparisonPrice !== b.comparisonPrice) {
268
+ return a.comparisonPrice - b.comparisonPrice;
269
+ }
270
+ return b.score - a.score;
271
+ }
272
+ function passesBudget(candidate, budget) {
273
+ if (budget === "free")
274
+ return candidate.comparisonPrice === 0;
275
+ if (budget !== "low")
276
+ return true;
277
+ if (candidate.comparisonPrice === null)
278
+ return false;
279
+ return candidate.comparisonPrice <= 1;
280
+ }
281
+ export function handleSelectModelForProject(models, args) {
282
+ const project = String(args.project ?? "").trim();
283
+ const task = String(args.task ?? "").trim();
284
+ const requirements = stringArray(args.requirements);
285
+ const budget = budgetConstraint(args.budget);
286
+ const goal = selectionGoal(args.optimization_goal);
287
+ const usage = usageEstimate(args.expected_usage);
288
+ const limit = Math.min(Math.max(Number(args.limit) || 5, 1), 20);
289
+ if (!project && !task) {
290
+ return {
291
+ content: [{ type: "text", text: "Please provide a `project` or `task` description." }],
292
+ isError: true,
293
+ };
294
+ }
295
+ const queryText = [project, task, ...requirements].filter(Boolean).join(" ");
296
+ const categories = resolveCategories(queryText);
297
+ const effectiveCategories = categories.length > 0 ? categories : ["llm"];
298
+ const terms = [project, task, ...requirements]
299
+ .flatMap((part) => part.split(/[\s,.;:/()]+/))
300
+ .filter(Boolean);
301
+ const scored = models
302
+ .map((model) => scoreModel(model, effectiveCategories, terms, requirements, usage))
303
+ .filter((candidate) => candidate !== null)
304
+ .filter((candidate) => passesBudget(candidate, budget));
305
+ if (scored.length === 0) {
306
+ return {
307
+ content: [{
308
+ type: "text",
309
+ text: `No suitable models found for "${queryText}". Try broader requirements or a wider budget.`,
310
+ }],
311
+ structuredContent: {
312
+ query: { project, task, requirements, budget, optimization_goal: goal },
313
+ candidates: [],
314
+ },
315
+ };
316
+ }
317
+ const byOverall = [...scored].sort((a, b) => b.score - a.score);
318
+ const byPrice = [...scored].sort(sortByPrice);
319
+ const byValue = [...scored].sort((a, b) => b.valueScore - a.valueScore);
320
+ const bestOverall = byOverall[0];
321
+ const cheapest = byPrice[0];
322
+ const bestValue = byValue[0];
323
+ const ranked = goal === "cheapest"
324
+ ? byPrice.slice(0, limit)
325
+ : goal === "best"
326
+ ? byOverall.slice(0, limit)
327
+ : byValue.slice(0, limit);
328
+ const lines = [
329
+ `🧭 Model selection for project`,
330
+ project ? `Project: ${project}` : "",
331
+ task ? `Task: ${task}` : "",
332
+ requirements.length ? `Requirements: ${requirements.join(", ")}` : "",
333
+ "",
334
+ `Best overall: **${bestOverall.model.name}** (${bestOverall.model.id}) — ${bestOverall.model.pricing.formatted}`,
335
+ `Cheapest acceptable: **${cheapest.model.name}** (${cheapest.model.id}) — ${cheapest.model.pricing.formatted}`,
336
+ `Best value: **${bestValue.model.name}** (${bestValue.model.id}) — ${bestValue.model.pricing.formatted}`,
337
+ "",
338
+ "| Rank | Model | Provider | Category | Price | Score | Why |",
339
+ "|------|-------|----------|----------|-------|-------|-----|",
340
+ ...ranked.map((candidate, index) => {
341
+ const why = candidate.reasons.slice(0, 2).join("; ") || "matched project query";
342
+ return `| ${index + 1} | ${candidate.model.id} | ${candidate.model.provider} | ${candidate.model.category} | ${candidate.model.pricing.formatted} | ${Math.round(candidate.score)} | ${why} |`;
343
+ }),
344
+ ].filter(Boolean);
345
+ const structuredContent = {
346
+ query: {
347
+ project,
348
+ task,
349
+ requirements,
350
+ budget,
351
+ optimization_goal: goal,
352
+ inferred_categories: effectiveCategories,
353
+ expected_usage: usage,
354
+ },
355
+ best_overall: summarizeCandidate(bestOverall),
356
+ cheapest_acceptable: summarizeCandidate(cheapest),
357
+ best_value: summarizeCandidate(bestValue),
358
+ candidates: ranked.map(summarizeCandidate),
359
+ cost_basis: Object.keys(usage).length > 0
360
+ ? "expected_usage"
361
+ : "default unit comparison",
362
+ };
363
+ if (Object.keys(usage).length > 0) {
364
+ lines.push("", `Estimated usage cost: best overall ${formatCost(bestOverall.estimatedCost)}, cheapest ${formatCost(cheapest.estimatedCost)}, best value ${formatCost(bestValue.estimatedCost)}`);
365
+ }
366
+ return {
367
+ content: [{ type: "text", text: lines.join("\n") }],
368
+ structuredContent,
369
+ };
370
+ }
371
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/tools/select.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-model-advisor-mcp",
3
- "version": "2.2.1",
3
+ "version": "2.3.0",
4
4
  "description": "An intelligent Model Context Protocol (MCP) Server that acts as an AI model advisor. Compare LLM and media pricing, features, and quality across 1,000+ models from OpenRouter, fal.ai, Together AI, Replicate, and Fireworks AI. Deeply compatible with Claude Desktop and Cursor.",
5
5
  "type": "module",
6
6
  "main": "build/server.js",
@@ -15,7 +15,8 @@
15
15
  "LICENSE"
16
16
  ],
17
17
  "scripts": {
18
- "build": "tsc",
18
+ "clean": "node -e \"require('fs').rmSync('build', { recursive: true, force: true })\"",
19
+ "build": "npm run clean && tsc",
19
20
  "start": "node build/cli.js",
20
21
  "dev": "tsc --watch",
21
22
  "test": "npm run build && node --test build/server.test.js",
@@ -1,15 +0,0 @@
1
- /**
2
- * Static fallback pricing for popular fal models.
3
- * Sourced from public fal.ai model pages — no API key needed.
4
- * These are used when FAL_KEY is not set, so the server still returns
5
- * real pricing instead of "Pricing requires FAL_KEY".
6
- *
7
- * Last updated: 2026-04-08
8
- */
9
- export interface StaticFalPrice {
10
- unit_price: number;
11
- unit: string;
12
- currency: string;
13
- }
14
- export declare const STATIC_FAL_PRICING: Record<string, StaticFalPrice>;
15
- //# sourceMappingURL=fal-pricing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fal-pricing.d.ts","sourceRoot":"","sources":["../../src/data/fal-pricing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CA0I7D,CAAC"}