@index9/mcp 1.0.18 → 1.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +82 -31
- package/dist/client.d.ts +3 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +7 -27
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +42 -85
- package/dist/schemas.d.ts +130 -50
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +165 -84
- package/dist/tools/find_models.d.ts +3 -0
- package/dist/tools/find_models.d.ts.map +1 -0
- package/dist/tools/find_models.js +4 -0
- package/dist/tools/test_model.d.ts.map +1 -1
- package/dist/tools/test_model.js +1 -1
- package/dist/types/api.d.ts +33 -49
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/models.d.ts +3 -7
- package/dist/types/models.d.ts.map +1 -1
- package/dist/types/models.js +1 -1
- package/dist/utils/rateLimiter.d.ts +1 -1
- package/dist/utils/rateLimiter.js +1 -1
- package/package.json +3 -3
- package/dist/tools/compare_models.d.ts +0 -3
- package/dist/tools/compare_models.d.ts.map +0 -1
- package/dist/tools/compare_models.js +0 -4
- package/dist/tools/get_capabilities.d.ts +0 -9
- package/dist/tools/get_capabilities.d.ts.map +0 -1
- package/dist/tools/get_capabilities.js +0 -19
- package/dist/tools/list_models.d.ts +0 -23
- package/dist/tools/list_models.d.ts.map +0 -1
- package/dist/tools/list_models.js +0 -25
- package/dist/tools/recommend_model.d.ts +0 -3
- package/dist/tools/recommend_model.d.ts.map +0 -1
- package/dist/tools/recommend_model.js +0 -4
- package/dist/tools/search_models.d.ts +0 -14
- package/dist/tools/search_models.d.ts.map +0 -1
- package/dist/tools/search_models.js +0 -5
package/dist/schemas.js
CHANGED
|
@@ -1,63 +1,53 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Find Models Tool Schema
|
|
4
|
+
* Unified search and filter for AI models
|
|
5
5
|
*/
|
|
6
|
-
export const
|
|
7
|
-
|
|
6
|
+
export const findModelsSchema = z.object({
|
|
7
|
+
query: z
|
|
8
8
|
.string()
|
|
9
|
-
.
|
|
10
|
-
.
|
|
11
|
-
owner: z.string().describe("Filter by model owner organization").optional(),
|
|
12
|
-
min_context: z.number().min(0).describe("Minimum context window size in tokens").optional(),
|
|
13
|
-
modality: z
|
|
14
|
-
.enum(["text", "vision", "audio", "video", "image"])
|
|
15
|
-
.describe("Primary input modality the model supports")
|
|
16
|
-
.optional(),
|
|
17
|
-
supports_tool_calling: z
|
|
18
|
-
.boolean()
|
|
19
|
-
.describe("Filter to models that support function/tool calling")
|
|
9
|
+
.max(500)
|
|
10
|
+
.describe("Natural language search query describing desired model characteristics (e.g., 'fastest coding model under $1', 'vision model with 128k context', 'cheapest tool-calling model'). Uses semantic search with fuzzy matching. Optional - omit to use filters only.")
|
|
20
11
|
.optional(),
|
|
21
|
-
|
|
22
|
-
.boolean()
|
|
23
|
-
.describe("Filter to models with native JSON output mode")
|
|
24
|
-
.optional(),
|
|
25
|
-
tokenizer: z
|
|
12
|
+
provider: z
|
|
26
13
|
.string()
|
|
27
|
-
.describe("Filter by
|
|
14
|
+
.describe("Filter by provider name(s). Comma-separated for multiple (e.g., 'openai,anthropic'). Case-insensitive.")
|
|
15
|
+
.optional(),
|
|
16
|
+
min_context: z
|
|
17
|
+
.number()
|
|
18
|
+
.min(0)
|
|
19
|
+
.describe("Minimum context window size in tokens (e.g., 8192, 32000, 128000). Filters out models with smaller context windows. Common values: 4096 (small), 32000 (medium), 128000+ (large).")
|
|
28
20
|
.optional(),
|
|
29
|
-
|
|
30
|
-
.
|
|
31
|
-
.
|
|
21
|
+
max_context: z
|
|
22
|
+
.number()
|
|
23
|
+
.min(0)
|
|
24
|
+
.describe("Maximum context window size in tokens. Filters out models with larger context windows. Use to find smaller, faster models.")
|
|
32
25
|
.optional(),
|
|
33
26
|
max_price_per_m: z
|
|
34
27
|
.number()
|
|
35
28
|
.min(0)
|
|
36
|
-
.describe("Maximum price per million tokens (
|
|
29
|
+
.describe("Maximum acceptable price per million input tokens in USD (e.g., 0.5 for $0.50/M tokens). Filters out more expensive models. Note: only considers input pricing for filtering.")
|
|
30
|
+
.optional(),
|
|
31
|
+
capabilities: z
|
|
32
|
+
.array(z.enum(["vision", "audio", "tool_calling", "json_mode", "video"]))
|
|
33
|
+
.describe("Required capabilities array - model must support ALL specified capabilities (AND logic). Examples: ['vision'] for image input, ['tool_calling', 'json_mode'] for structured outputs, ['vision', 'tool_calling'] for multimodal agents. Available: vision, audio, tool_calling, json_mode, video.")
|
|
34
|
+
.optional(),
|
|
35
|
+
sort_by: z
|
|
36
|
+
.enum(["relevance", "price_asc", "price_desc", "date_desc", "context_desc"])
|
|
37
|
+
.default("relevance")
|
|
38
|
+
.describe("Sort order for results. Options: 'relevance' (best semantic match, default), 'price_asc' (cheapest first by input price), 'price_desc' (most expensive first), 'date_desc' (newest models first), 'context_desc' (largest context window first). Defaults to 'relevance'.")
|
|
37
39
|
.optional(),
|
|
38
|
-
limit: z.number().min(1).max(100).default(10).describe("Number of results to return (1-100)"),
|
|
39
|
-
});
|
|
40
|
-
/**
|
|
41
|
-
* Search Models Tool Schema
|
|
42
|
-
* Natural language semantic search across AI models
|
|
43
|
-
*/
|
|
44
|
-
export const searchModelsSchema = z.object({
|
|
45
|
-
query: z
|
|
46
|
-
.string()
|
|
47
|
-
.min(1)
|
|
48
|
-
.describe("Natural language query describing desired model characteristics (e.g., 'fast cheap code generation model')"),
|
|
49
40
|
limit: z
|
|
50
41
|
.number()
|
|
51
42
|
.min(1)
|
|
52
|
-
.max(
|
|
43
|
+
.max(100)
|
|
53
44
|
.default(10)
|
|
54
|
-
.describe("Maximum number of results to return (1-50)"),
|
|
55
|
-
|
|
45
|
+
.describe("Maximum number of results to return (1-100). Defaults to 10. Use higher values (20-50) for broad exploration, lower values (5-10) for focused comparisons."),
|
|
46
|
+
offset: z
|
|
56
47
|
.number()
|
|
57
48
|
.min(0)
|
|
58
|
-
.
|
|
59
|
-
.
|
|
60
|
-
.describe("Minimum similarity score for results (0-1, where 1 is exact match)"),
|
|
49
|
+
.default(0)
|
|
50
|
+
.describe("Number of results to skip for pagination (0-based). Defaults to 0. Example: offset=10 with limit=10 returns results 11-20. Use with 'total' in response for pagination."),
|
|
61
51
|
});
|
|
62
52
|
/**
|
|
63
53
|
* Get Model Tool Schema
|
|
@@ -67,61 +57,152 @@ export const getModelSchema = z.object({
|
|
|
67
57
|
model_id: z
|
|
68
58
|
.string()
|
|
69
59
|
.min(1)
|
|
70
|
-
.describe("Exact model identifier (e.g., 'openai/gpt-
|
|
60
|
+
.describe("Exact model identifier in format 'provider/model-name' (e.g., 'openai/gpt-5.2', 'anthropic/claude-opus-4.5', 'google/gemini-2.5-flash-preview-09-2025'). Case-sensitive. Use find_models first to discover valid model IDs. Returns 404 if model not found."),
|
|
71
61
|
});
|
|
72
62
|
/**
|
|
73
|
-
*
|
|
74
|
-
*
|
|
63
|
+
* Test Model Tool Schema
|
|
64
|
+
* Run live API tests against models via OpenRouter
|
|
75
65
|
*/
|
|
76
|
-
export const
|
|
66
|
+
export const testModelSchema = z.object({
|
|
77
67
|
model_ids: z
|
|
78
68
|
.array(z.string())
|
|
79
|
-
.min(2)
|
|
80
|
-
.max(10)
|
|
81
|
-
.describe("Array of 2-10 model IDs to compare side-by-side"),
|
|
82
|
-
});
|
|
83
|
-
/**
|
|
84
|
-
* Recommend Model Tool Schema
|
|
85
|
-
* AI-powered model recommendations based on use case
|
|
86
|
-
*/
|
|
87
|
-
export const recommendModelSchema = z.object({
|
|
88
|
-
use_case: z
|
|
89
|
-
.string()
|
|
90
69
|
.min(1)
|
|
91
|
-
.
|
|
92
|
-
|
|
70
|
+
.max(5)
|
|
71
|
+
.describe("Array of 1-5 model IDs to test simultaneously in format 'provider/model-name' (e.g., ['openai/gpt-5.1-codex-max', 'anthropic/claude-haiku-4.5']). All models receive identical prompts. Use find_models or get_model first to identify model IDs."),
|
|
72
|
+
test_type: z
|
|
73
|
+
.enum(["quick", "code", "reasoning", "instruction", "tool_calling"])
|
|
74
|
+
.default("quick")
|
|
75
|
+
.describe("Preset test scenario. Ignored if custom 'prompt' provided. Options: 'quick' (simple math, fastest), 'code' (function generation), 'reasoning' (logic puzzle), 'instruction' (following complex directions), 'tool_calling' (function calling capability). Defaults to 'quick'."),
|
|
76
|
+
prompt: z
|
|
77
|
+
.string()
|
|
78
|
+
.describe("Custom user message to send to all models. Overrides 'test_type' when provided. Use for debugging specific issues, comparing exact outputs, or testing domain-specific prompts. Example: 'Write a Python function to validate email addresses'.")
|
|
79
|
+
.optional(),
|
|
80
|
+
max_tokens: z
|
|
93
81
|
.number()
|
|
94
|
-
.min(
|
|
95
|
-
.
|
|
82
|
+
.min(1)
|
|
83
|
+
.max(8192)
|
|
84
|
+
.default(1000)
|
|
85
|
+
.describe("Maximum tokens for model response (1-8192). Higher values allow longer outputs but increase cost and latency. Defaults to 1000. Use 100-500 for quick tests, 1000-2000 for code/reasoning, 4000+ for long-form content.")
|
|
96
86
|
.optional(),
|
|
97
|
-
|
|
87
|
+
temperature: z
|
|
98
88
|
.number()
|
|
99
89
|
.min(0)
|
|
100
|
-
.
|
|
90
|
+
.max(2)
|
|
91
|
+
.describe("Sampling temperature (0-2). Lower values are more deterministic, higher values more creative. Defaults to 0.7.")
|
|
101
92
|
.optional(),
|
|
102
|
-
|
|
103
|
-
.
|
|
104
|
-
.
|
|
93
|
+
system_prompt: z
|
|
94
|
+
.string()
|
|
95
|
+
.max(4000)
|
|
96
|
+
.describe("System message to set model behavior. Example: 'You are a helpful coding assistant.'")
|
|
105
97
|
.optional(),
|
|
106
|
-
limit: z
|
|
107
|
-
.number()
|
|
108
|
-
.min(1)
|
|
109
|
-
.max(20)
|
|
110
|
-
.default(5)
|
|
111
|
-
.describe("Number of recommendations to return (1-20)"),
|
|
112
98
|
});
|
|
113
99
|
/**
|
|
114
|
-
*
|
|
115
|
-
*
|
|
100
|
+
* Output Schemas for Tool Results
|
|
101
|
+
* Define expected return structures for better LLM understanding
|
|
116
102
|
*/
|
|
117
|
-
export const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
.
|
|
121
|
-
.
|
|
122
|
-
.
|
|
123
|
-
|
|
124
|
-
.
|
|
125
|
-
.
|
|
126
|
-
|
|
103
|
+
export const findModelsOutputSchema = z.object({
|
|
104
|
+
results: z.array(z.object({
|
|
105
|
+
id: z.string(),
|
|
106
|
+
name: z.string(),
|
|
107
|
+
description: z.string().nullable(),
|
|
108
|
+
score: z.number(),
|
|
109
|
+
provider: z.string(),
|
|
110
|
+
context_window: z.number().nullable(),
|
|
111
|
+
pricing: z.object({
|
|
112
|
+
input: z.number().nullable(),
|
|
113
|
+
output: z.number().nullable(),
|
|
114
|
+
}),
|
|
115
|
+
capabilities: z.object({
|
|
116
|
+
vision: z.boolean().nullable(),
|
|
117
|
+
audio: z.boolean().nullable(),
|
|
118
|
+
tool_calling: z.boolean().nullable(),
|
|
119
|
+
json_mode: z.boolean().nullable(),
|
|
120
|
+
video: z.boolean().nullable(),
|
|
121
|
+
}),
|
|
122
|
+
matched_features: z.array(z.string()).optional(),
|
|
123
|
+
hugging_face_id: z.string().nullable().optional(),
|
|
124
|
+
release_date: z.string().nullable().optional(),
|
|
125
|
+
})),
|
|
126
|
+
total: z.number().optional(),
|
|
127
|
+
});
|
|
128
|
+
export const getModelOutputSchema = z.object({
|
|
129
|
+
id: z.string(),
|
|
130
|
+
name: z.string(),
|
|
131
|
+
provider: z.string(),
|
|
132
|
+
description: z.string().nullable(),
|
|
133
|
+
family: z.string().nullable(),
|
|
134
|
+
version: z.string().nullable(),
|
|
135
|
+
release_date: z.string().nullable(),
|
|
136
|
+
limits: z.object({
|
|
137
|
+
context_window: z.number(),
|
|
138
|
+
max_output_tokens: z.number().nullable(),
|
|
139
|
+
}),
|
|
140
|
+
pricing: z.object({
|
|
141
|
+
input: z.number().nullable(),
|
|
142
|
+
output: z.number().nullable(),
|
|
143
|
+
}),
|
|
144
|
+
extended_pricing: z
|
|
145
|
+
.object({
|
|
146
|
+
image: z.number().nullable(),
|
|
147
|
+
audio: z.number().nullable(),
|
|
148
|
+
web_search: z.number().nullable(),
|
|
149
|
+
cache_read: z.number().nullable(),
|
|
150
|
+
cache_write: z.number().nullable(),
|
|
151
|
+
discount: z.number().nullable(),
|
|
152
|
+
internal_reasoning: z.number().nullable(),
|
|
153
|
+
})
|
|
154
|
+
.nullable(),
|
|
155
|
+
capabilities: z.object({
|
|
156
|
+
vision: z.boolean(),
|
|
157
|
+
audio: z.boolean(),
|
|
158
|
+
tool_calling: z.boolean(),
|
|
159
|
+
json_mode: z.boolean(),
|
|
160
|
+
video: z.boolean(),
|
|
161
|
+
function_calling: z.boolean(),
|
|
162
|
+
custom: z.array(z.string()),
|
|
163
|
+
}),
|
|
164
|
+
supported_parameters: z.array(z.string()),
|
|
165
|
+
is_moderated: z.boolean(),
|
|
166
|
+
input_modalities: z.array(z.string()),
|
|
167
|
+
output_modalities: z.array(z.string()),
|
|
168
|
+
architecture: z.object({
|
|
169
|
+
tokenizer: z.string().nullable(),
|
|
170
|
+
instruct_type: z.string().nullable(),
|
|
171
|
+
}),
|
|
172
|
+
per_request_limits: z
|
|
173
|
+
.object({
|
|
174
|
+
prompt_tokens: z.number().nullable(),
|
|
175
|
+
completion_tokens: z.number().nullable(),
|
|
176
|
+
})
|
|
177
|
+
.nullable(),
|
|
178
|
+
});
|
|
179
|
+
export const testModelOutputSchema = z.object({
|
|
180
|
+
test_type: z.string(),
|
|
181
|
+
prompt: z.string(),
|
|
182
|
+
results: z.array(z.object({
|
|
183
|
+
model_id: z.string(),
|
|
184
|
+
model_name: z.string(),
|
|
185
|
+
latency_ms: z.number(),
|
|
186
|
+
output: z.string().nullable(),
|
|
187
|
+
tokens_used: z
|
|
188
|
+
.object({
|
|
189
|
+
prompt_tokens: z.number(),
|
|
190
|
+
completion_tokens: z.number(),
|
|
191
|
+
total_tokens: z.number(),
|
|
192
|
+
})
|
|
193
|
+
.nullable(),
|
|
194
|
+
cost_estimate: z.object({
|
|
195
|
+
input_cost: z.number().nullable(),
|
|
196
|
+
output_cost: z.number().nullable(),
|
|
197
|
+
total_cost: z.number().nullable(),
|
|
198
|
+
}),
|
|
199
|
+
tool_calls_detected: z.boolean().optional(),
|
|
200
|
+
tool_calls: z
|
|
201
|
+
.array(z.object({
|
|
202
|
+
name: z.string(),
|
|
203
|
+
arguments: z.record(z.string(), z.unknown()),
|
|
204
|
+
}))
|
|
205
|
+
.optional(),
|
|
206
|
+
error: z.string().nullable(),
|
|
207
|
+
})),
|
|
127
208
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find_models.d.ts","sourceRoot":"","sources":["../../src/tools/find_models.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,wBAAsB,cAAc,CAAC,KAAK,EAAE,eAAe,qDAE1D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_model.d.ts","sourceRoot":"","sources":["../../src/tools/test_model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,wBAAsB,aAAa,CAAC,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"test_model.d.ts","sourceRoot":"","sources":["../../src/tools/test_model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,wBAAsB,aAAa,CAAC,KAAK,EAAE,cAAc,oDAUxD"}
|
package/dist/tools/test_model.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { testModel } from "../client.js";
|
|
2
2
|
import { OPEN_ROUTER_API_KEY } from "../config.js";
|
|
3
3
|
export async function testModelTool(input) {
|
|
4
|
-
return testModel(input.model_ids, input.test_type, OPEN_ROUTER_API_KEY);
|
|
4
|
+
return testModel(input.model_ids, input.test_type, OPEN_ROUTER_API_KEY, input.prompt, input.max_tokens, input.temperature, input.system_prompt);
|
|
5
5
|
}
|
package/dist/types/api.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* API Types - Request and response types for HTTP API endpoints
|
|
3
3
|
*/
|
|
4
|
-
import type { ListModelsFilters, ModelPricing, ModelCapabilities, ModelArchitecture, ExtendedPricing,
|
|
4
|
+
import type { ListModelsFilters, ModelPricing, ModelCapabilities, ModelArchitecture, ExtendedPricing, PerRequestLimits } from "./models.js";
|
|
5
5
|
export interface ListModelsQueryParams extends ListModelsFilters {
|
|
6
6
|
owner?: string;
|
|
7
7
|
}
|
|
@@ -19,17 +19,12 @@ export interface ListModelsResponse {
|
|
|
19
19
|
architecture: Pick<ModelArchitecture, "tokenizer">;
|
|
20
20
|
}>;
|
|
21
21
|
}
|
|
22
|
-
export interface
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
model_id: string;
|
|
29
|
-
is_available: boolean;
|
|
30
|
-
pricing: ModelPricing;
|
|
31
|
-
}
|
|
32
|
-
export interface GetModelCapabilities extends Omit<ModelCapabilities, "audio"> {
|
|
22
|
+
export interface GetModelCapabilities {
|
|
23
|
+
vision: boolean;
|
|
24
|
+
audio: boolean;
|
|
25
|
+
tool_calling: boolean;
|
|
26
|
+
json_mode: boolean;
|
|
27
|
+
video: boolean;
|
|
33
28
|
function_calling: boolean;
|
|
34
29
|
custom: string[];
|
|
35
30
|
}
|
|
@@ -54,7 +49,6 @@ export interface GetModelResponse {
|
|
|
54
49
|
output_modalities: string[];
|
|
55
50
|
architecture: ModelArchitecture;
|
|
56
51
|
per_request_limits: PerRequestLimits | null;
|
|
57
|
-
deployments: Deployment[];
|
|
58
52
|
}
|
|
59
53
|
export interface SearchModelsRequest {
|
|
60
54
|
query: string;
|
|
@@ -63,7 +57,10 @@ export interface SearchModelsRequest {
|
|
|
63
57
|
}
|
|
64
58
|
export interface SearchModelCapabilities {
|
|
65
59
|
vision: boolean | null;
|
|
60
|
+
audio: boolean | null;
|
|
66
61
|
tool_calling: boolean | null;
|
|
62
|
+
json_mode: boolean | null;
|
|
63
|
+
video: boolean | null;
|
|
67
64
|
}
|
|
68
65
|
export interface SearchModelsResponse {
|
|
69
66
|
results: Array<{
|
|
@@ -77,57 +74,40 @@ export interface SearchModelsResponse {
|
|
|
77
74
|
capabilities: SearchModelCapabilities;
|
|
78
75
|
}>;
|
|
79
76
|
}
|
|
80
|
-
export interface
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
export interface CompareModelCapabilities {
|
|
84
|
-
vision: boolean | null;
|
|
85
|
-
tool_calling: boolean | null;
|
|
86
|
-
custom: string[];
|
|
87
|
-
}
|
|
88
|
-
export interface CompareModelsResponse {
|
|
89
|
-
models: Array<{
|
|
90
|
-
id: string;
|
|
91
|
-
name: string;
|
|
92
|
-
provider: string;
|
|
93
|
-
limits: ModelLimits;
|
|
94
|
-
pricing: ModelPricing;
|
|
95
|
-
capabilities: CompareModelCapabilities;
|
|
96
|
-
deployments: Deployment[];
|
|
97
|
-
}>;
|
|
98
|
-
not_found?: string[];
|
|
99
|
-
suggestions?: Record<string, Array<{
|
|
100
|
-
id: string;
|
|
101
|
-
name: string;
|
|
102
|
-
similarity: number;
|
|
103
|
-
}>>;
|
|
104
|
-
}
|
|
105
|
-
export interface RecommendModelRequest {
|
|
106
|
-
use_case: string;
|
|
107
|
-
max_price_per_m?: number;
|
|
77
|
+
export interface FindModelsRequest {
|
|
78
|
+
query?: string;
|
|
79
|
+
provider?: string;
|
|
108
80
|
min_context?: number;
|
|
109
|
-
|
|
81
|
+
max_context?: number;
|
|
82
|
+
max_price_per_m?: number;
|
|
83
|
+
capabilities?: string[];
|
|
84
|
+
sort_by?: "relevance" | "price_asc" | "price_desc" | "date_desc" | "context_desc";
|
|
110
85
|
limit?: number;
|
|
86
|
+
offset?: number;
|
|
111
87
|
}
|
|
112
|
-
export interface
|
|
113
|
-
|
|
114
|
-
recommendations: Array<{
|
|
88
|
+
export interface FindModelsResponse {
|
|
89
|
+
results: Array<{
|
|
115
90
|
id: string;
|
|
116
91
|
name: string;
|
|
92
|
+
description: string | null;
|
|
117
93
|
score: number;
|
|
94
|
+
provider: string;
|
|
118
95
|
context_window: number | null;
|
|
119
96
|
pricing: ModelPricing;
|
|
120
|
-
|
|
97
|
+
capabilities: SearchModelCapabilities;
|
|
121
98
|
matched_features?: string[];
|
|
122
|
-
|
|
99
|
+
hugging_face_id?: string | null;
|
|
123
100
|
release_date: string | null;
|
|
124
101
|
}>;
|
|
125
|
-
|
|
126
|
-
warning?: string;
|
|
102
|
+
total?: number;
|
|
127
103
|
}
|
|
128
104
|
export interface TestModelRequest {
|
|
129
105
|
model_ids: string[];
|
|
130
106
|
test_type?: "quick" | "code" | "reasoning" | "instruction" | "tool_calling";
|
|
107
|
+
custom_prompt?: string;
|
|
108
|
+
max_tokens?: number;
|
|
109
|
+
temperature?: number;
|
|
110
|
+
system_prompt?: string;
|
|
131
111
|
}
|
|
132
112
|
export interface TokensUsed {
|
|
133
113
|
prompt_tokens: number;
|
|
@@ -147,6 +127,10 @@ export interface TestModelResult {
|
|
|
147
127
|
tokens_used: TokensUsed | null;
|
|
148
128
|
cost_estimate: CostEstimate;
|
|
149
129
|
tool_calls_detected?: boolean;
|
|
130
|
+
tool_calls?: Array<{
|
|
131
|
+
name: string;
|
|
132
|
+
arguments: Record<string, unknown>;
|
|
133
|
+
}>;
|
|
150
134
|
error: string | null;
|
|
151
135
|
}
|
|
152
136
|
export interface TestModelResponse {
|
package/dist/types/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"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"}
|
package/dist/types/models.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Model Types - Normalized model interface for
|
|
2
|
+
* Model Types - Normalized model interface for OpenRouter models
|
|
3
3
|
*/
|
|
4
|
-
import type { Deployment } from "./api";
|
|
5
4
|
export interface ModelPricing {
|
|
6
5
|
input: number | null;
|
|
7
6
|
output: number | null;
|
|
@@ -23,10 +22,7 @@ export interface ExtendedPricing {
|
|
|
23
22
|
cache_read: number | null;
|
|
24
23
|
cache_write: number | null;
|
|
25
24
|
discount: number | null;
|
|
26
|
-
|
|
27
|
-
export interface ModelLimits {
|
|
28
|
-
context_window: number | null;
|
|
29
|
-
max_output_tokens: number | null;
|
|
25
|
+
internal_reasoning: number | null;
|
|
30
26
|
}
|
|
31
27
|
export interface PerRequestLimits {
|
|
32
28
|
prompt_tokens: number | null;
|
|
@@ -49,7 +45,7 @@ export interface NormalizedModel {
|
|
|
49
45
|
extended_pricing: ExtendedPricing | null;
|
|
50
46
|
is_moderated: boolean;
|
|
51
47
|
per_request_limits: PerRequestLimits | null;
|
|
52
|
-
|
|
48
|
+
hugging_face_id: string | null;
|
|
53
49
|
}
|
|
54
50
|
export interface ProviderAdapter {
|
|
55
51
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/types/models.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/types/models.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,YAAY,CAAC;IACtB,YAAY,EAAE,iBAAiB,CAAC;IAChC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,YAAY,EAAE,iBAAiB,CAAC;IAChC,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC5C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,YAAY,CAAC;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
package/dist/types/models.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Check if a tool request should be rate limited
|
|
3
|
-
* @param toolName - The tool name (e.g., "
|
|
3
|
+
* @param toolName - The tool name (e.g., "find_models", "get_model", "test_model")
|
|
4
4
|
* @returns true if allowed, false if rate limited
|
|
5
5
|
*/
|
|
6
6
|
export declare function checkRateLimit(toolName: string): boolean;
|
|
@@ -2,7 +2,7 @@ import { RATE_LIMIT_WINDOW_MS, RATE_LIMIT_MAX_REQUESTS } from "../config.js";
|
|
|
2
2
|
const requestCounts = new Map();
|
|
3
3
|
/**
|
|
4
4
|
* Check if a tool request should be rate limited
|
|
5
|
-
* @param toolName - The tool name (e.g., "
|
|
5
|
+
* @param toolName - The tool name (e.g., "find_models", "get_model", "test_model")
|
|
6
6
|
* @returns true if allowed, false if rate limited
|
|
7
7
|
*/
|
|
8
8
|
export function checkRateLimit(toolName) {
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@index9/mcp",
|
|
3
3
|
"mcpName": "io.github.index9-org/mcp",
|
|
4
|
-
"version": "1.0.
|
|
5
|
-
"description": "
|
|
4
|
+
"version": "1.0.20",
|
|
5
|
+
"description": "Live Model Registry and performance testing for your AI assistant. Sourced from OpenRouter.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"mcp",
|
|
8
8
|
"model-context-protocol",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"zod": "^4.1.13"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@types/node": "^
|
|
46
|
+
"@types/node": "^25.0.1",
|
|
47
47
|
"pino-pretty": "^13.1.3",
|
|
48
48
|
"tsx": "^4.21.0",
|
|
49
49
|
"typescript": "^5.9.3"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compare_models.d.ts","sourceRoot":"","sources":["../../src/tools/compare_models.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,wDAEhE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get_capabilities.d.ts","sourceRoot":"","sources":["../../src/tools/get_capabilities.ts"],"names":[],"mappings":"AAEA,wBAAsB,mBAAmB;;;;;;;GAiBxC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { RATE_LIMIT_WINDOW_MS, RATE_LIMIT_MAX_REQUESTS } from "../config.js";
|
|
2
|
-
export async function getCapabilitiesTool() {
|
|
3
|
-
return {
|
|
4
|
-
features: [
|
|
5
|
-
"list_models",
|
|
6
|
-
"search_models",
|
|
7
|
-
"get_model",
|
|
8
|
-
"compare_models",
|
|
9
|
-
"recommend_model",
|
|
10
|
-
"test_model",
|
|
11
|
-
"get_capabilities",
|
|
12
|
-
],
|
|
13
|
-
limits: {
|
|
14
|
-
window_ms: RATE_LIMIT_WINDOW_MS,
|
|
15
|
-
max_requests: RATE_LIMIT_MAX_REQUESTS,
|
|
16
|
-
},
|
|
17
|
-
data_freshness: new Date().toISOString(),
|
|
18
|
-
};
|
|
19
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { ListModelsInput } from "../schemas.js";
|
|
2
|
-
export declare function listModelsTool(input: ListModelsInput): Promise<{
|
|
3
|
-
models: {
|
|
4
|
-
id: string;
|
|
5
|
-
name: string;
|
|
6
|
-
provider: string;
|
|
7
|
-
context_window: number | null;
|
|
8
|
-
max_output_tokens: number | null;
|
|
9
|
-
input_modalities: string[];
|
|
10
|
-
pricing: {
|
|
11
|
-
input: number | null;
|
|
12
|
-
output: number | null;
|
|
13
|
-
};
|
|
14
|
-
capabilities: {
|
|
15
|
-
vision: boolean;
|
|
16
|
-
audio: boolean;
|
|
17
|
-
tool_calling: boolean;
|
|
18
|
-
json_mode: boolean;
|
|
19
|
-
};
|
|
20
|
-
architecture: Pick<import("../index.js").ModelArchitecture, "tokenizer">;
|
|
21
|
-
}[];
|
|
22
|
-
}>;
|
|
23
|
-
//# sourceMappingURL=list_models.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list_models.d.ts","sourceRoot":"","sources":["../../src/tools/list_models.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,wBAAsB,cAAc,CAAC,KAAK,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;GAuB1D"}
|