@arikusi/deepseek-mcp-server 2.0.0 → 2.2.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 (41) hide show
  1. package/CHANGELOG.md +30 -3
  2. package/README.md +67 -4
  3. package/dist/config.d.ts +1 -0
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +6 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/deepseek-client.d.ts +40 -2
  8. package/dist/deepseek-client.d.ts.map +1 -1
  9. package/dist/deepseek-client.js +150 -2
  10. package/dist/deepseek-client.js.map +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/json-extract.d.ts +34 -0
  14. package/dist/json-extract.d.ts.map +1 -0
  15. package/dist/json-extract.js +93 -0
  16. package/dist/json-extract.js.map +1 -0
  17. package/dist/resources/models.d.ts.map +1 -1
  18. package/dist/resources/models.js +2 -0
  19. package/dist/resources/models.js.map +1 -1
  20. package/dist/schema-validate.d.ts +28 -0
  21. package/dist/schema-validate.d.ts.map +1 -0
  22. package/dist/schema-validate.js +121 -0
  23. package/dist/schema-validate.js.map +1 -0
  24. package/dist/schemas.d.ts +19 -0
  25. package/dist/schemas.d.ts.map +1 -1
  26. package/dist/schemas.js +17 -0
  27. package/dist/schemas.js.map +1 -1
  28. package/dist/tools/deepseek-chat.d.ts.map +1 -1
  29. package/dist/tools/deepseek-chat.js +188 -19
  30. package/dist/tools/deepseek-chat.js.map +1 -1
  31. package/dist/tools/deepseek-fim.d.ts +13 -0
  32. package/dist/tools/deepseek-fim.d.ts.map +1 -0
  33. package/dist/tools/deepseek-fim.js +153 -0
  34. package/dist/tools/deepseek-fim.js.map +1 -0
  35. package/dist/tools/index.d.ts.map +1 -1
  36. package/dist/tools/index.js +2 -0
  37. package/dist/tools/index.js.map +1 -1
  38. package/dist/types.d.ts +63 -0
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/types.js.map +1 -1
  41. package/package.json +3 -1
@@ -9,6 +9,8 @@ import { calculateCost, formatCost } from '../cost.js';
9
9
  import { ExtendedMessageSchema, ChatInputWithToolsSchema, ToolDefinitionSchema, ToolChoiceSchema, ThinkingSchema, ReasoningEffortSchema, } from '../schemas.js';
10
10
  import { getErrorMessage, getTextContent } from '../types.js';
11
11
  import { UsageTracker } from '../usage-tracker.js';
12
+ import { extractJson } from '../json-extract.js';
13
+ import { validateAgainstSchema } from '../schema-validate.js';
12
14
  /** Maximum allowed message content length (from config) */
13
15
  function validateMessageLength(input) {
14
16
  const maxLen = getConfig().maxMessageLength;
@@ -83,6 +85,10 @@ export function registerChatTool(server, client, sessionStore) {
83
85
  .boolean()
84
86
  .optional()
85
87
  .describe('Enable JSON output mode. The model will output valid JSON. Include the word "json" in your prompt for best results. Supported by both models.'),
88
+ response_schema: z
89
+ .record(z.string(), z.unknown())
90
+ .optional()
91
+ .describe('JSON Schema to validate the model output against. Implies JSON output mode. The server validates the parsed result and, on failure, issues up to RESPONSE_SCHEMA_MAX_RETRIES repair retries (feeding the validation error back). The returned content is the first schema-valid object, or the last attempt with schema.valid=false and schema.error set.'),
86
92
  session_id: z
87
93
  .string()
88
94
  .optional()
@@ -100,7 +106,55 @@ export function registerChatTool(server, client, sessionStore) {
100
106
  prompt_cache_hit_tokens: z.number().optional(),
101
107
  prompt_cache_miss_tokens: z.number().optional(),
102
108
  }),
109
+ // Self-contained per-invocation usage + cost summary — everything a
110
+ // consumer needs for cost accounting in one object, without reassembling
111
+ // scattered siblings or scraping the human-readable text. Tokens and
112
+ // cost aggregate across any repair attempts; top-level `usage` reflects
113
+ // the final API response only.
114
+ request: z.object({
115
+ model: z.string(),
116
+ wire_model: z.string(),
117
+ thinking: z.boolean(),
118
+ temperature: z.number().optional(),
119
+ fallback_used: z.boolean(),
120
+ finish_reason: z.string(),
121
+ prompt_tokens: z.number(),
122
+ completion_tokens: z.number(),
123
+ total_tokens: z.number(),
124
+ cache_hit_tokens: z.number(),
125
+ cache_miss_tokens: z.number(),
126
+ cost_usd: z.number(),
127
+ }),
128
+ // Present only when a model fallback fired: surfaces the silent
129
+ // switch so a caller can flag or discard the response.
130
+ fallback: z
131
+ .object({
132
+ originalModel: z.string(),
133
+ fallbackModel: z.string(),
134
+ reason: z.string(),
135
+ })
136
+ .optional(),
137
+ // Raw effective request the client actually sent (audit).
138
+ effective: z
139
+ .object({
140
+ model: z.string(),
141
+ thinking: z.boolean(),
142
+ temperature: z.number().optional(),
143
+ })
144
+ .optional(),
103
145
  finish_reason: z.string(),
146
+ // Set only when json_mode was requested but the content could not be
147
+ // recovered as valid JSON; carries the JSON.parse error message.
148
+ json_parse_error: z.string().optional(),
149
+ // Present only when response_schema was supplied: whether the
150
+ // output validated, how many attempts it took, and the last error.
151
+ schema: z
152
+ .object({
153
+ valid: z.boolean(),
154
+ attempts: z.number(),
155
+ error: z.string().optional(),
156
+ })
157
+ .optional(),
104
158
  tool_calls: z
105
159
  .array(z.object({
106
160
  id: z.string(),
@@ -129,11 +183,13 @@ export function registerChatTool(server, client, sessionStore) {
129
183
  }
130
184
  }
131
185
  }
186
+ // response_schema implies JSON output, so treat both as "want JSON".
187
+ const wantJson = validated.json_mode === true || validated.response_schema !== undefined;
132
188
  // JSON mode guard: warn if "json" word is not in any message content
133
- if (validated.json_mode) {
189
+ if (wantJson) {
134
190
  const hasJsonWord = validated.messages.some((m) => getTextContent(m.content).toLowerCase().includes('json'));
135
191
  if (!hasJsonWord) {
136
- console.error('[DeepSeek MCP] Warning: json_mode enabled but no "json" word found in messages. Results may be unreliable.');
192
+ console.error('[DeepSeek MCP] Warning: JSON output requested but no "json" word found in messages. Results may be unreliable.');
137
193
  }
138
194
  }
139
195
  // Session management: build full message list
@@ -149,27 +205,128 @@ export function registerChatTool(server, client, sessionStore) {
149
205
  // Track if reasoner was selected (routing happens in deepseek-client)
150
206
  const isReasonerRouted = validated.model === 'deepseek-reasoner';
151
207
  console.error(`[DeepSeek MCP] Request: model=${validated.model}, messages=${allMessages.length}, stream=${validated.stream}${validated.tools ? `, tools=${validated.tools.length}` : ''}${validated.thinking ? `, thinking=${validated.thinking.type}` : ''}${validated.json_mode ? ', json_mode=true' : ''}${validated.session_id ? `, session=${validated.session_id}` : ''}`);
152
- // Build params for client
208
+ // Build params for client (messages are supplied per-call so the
209
+ // response_schema repair loop can extend the conversation).
153
210
  const clientParams = {
154
211
  model: validated.model,
155
- messages: allMessages,
156
212
  temperature: validated.temperature,
157
213
  max_tokens: validated.max_tokens,
158
214
  tools: validated.tools,
159
215
  tool_choice: validated.tool_choice,
160
216
  thinking: validated.thinking,
161
217
  reasoning_effort: validated.reasoning_effort,
162
- response_format: validated.json_mode
163
- ? { type: 'json_object' }
164
- : undefined,
218
+ response_format: wantJson ? { type: 'json_object' } : undefined,
219
+ };
220
+ const callOnce = (messages) => validated.stream
221
+ ? client.createStreamingChatCompletion({ ...clientParams, messages })
222
+ : client.createChatCompletion({ ...clientParams, messages });
223
+ // Cost and tokens are accumulated across attempts so the `request`
224
+ // summary describes everything this invocation consumed (kept internally
225
+ // consistent — cumulative tokens alongside cumulative cost). costBreakdown
226
+ // holds the final attempt, used for the human-readable cache display.
227
+ let totalCostUsd = 0;
228
+ const totalUsage = {
229
+ prompt_tokens: 0,
230
+ completion_tokens: 0,
231
+ total_tokens: 0,
232
+ cache_hit_tokens: 0,
233
+ cache_miss_tokens: 0,
165
234
  };
166
- // Call appropriate method based on stream parameter
167
- const response = validated.stream
168
- ? await client.createStreamingChatCompletion(clientParams)
169
- : await client.createChatCompletion(clientParams);
235
+ let costBreakdown = calculateCost({ prompt_tokens: 0, completion_tokens: 0 }, validated.model);
236
+ const trackAttempt = (resp) => {
237
+ costBreakdown = calculateCost(resp.usage, resp.model);
238
+ totalCostUsd += costBreakdown.totalCost;
239
+ // Cache split derived the same way cost.ts bills: absent hit/miss
240
+ // fields mean the whole prompt was a cache miss.
241
+ const hit = resp.usage.prompt_cache_hit_tokens ?? 0;
242
+ const miss = resp.usage.prompt_cache_miss_tokens ?? resp.usage.prompt_tokens - hit;
243
+ totalUsage.prompt_tokens += resp.usage.prompt_tokens;
244
+ totalUsage.completion_tokens += resp.usage.completion_tokens;
245
+ totalUsage.total_tokens += resp.usage.total_tokens;
246
+ totalUsage.cache_hit_tokens += hit;
247
+ totalUsage.cache_miss_tokens += miss;
248
+ UsageTracker.getInstance().trackRequest(resp.usage, costBreakdown.totalCost);
249
+ };
250
+ let convo = allMessages;
251
+ let response = await callOnce(convo);
170
252
  console.error(`[DeepSeek MCP] Response: tokens=${response.usage.total_tokens}, finish_reason=${response.finish_reason}${response.tool_calls ? `, tool_calls=${response.tool_calls.length}` : ''}`);
171
- // Calculate cost (model-aware pricing)
172
- const costBreakdown = calculateCost(response.usage, response.model);
253
+ trackAttempt(response);
254
+ // JSON recovery + optional schema validation with repair retries.
255
+ // Recovery is purely local (no extra call). A repair retry only fires
256
+ // when response_schema is set AND validation fails AND retries remain, so
257
+ // plain json_mode keeps its single-call, temp=0-reproducible behavior.
258
+ let jsonParseError;
259
+ let effectiveContent = response.content;
260
+ let schemaResult;
261
+ const schema = validated.response_schema;
262
+ const maxRetries = getConfig().responseSchemaMaxRetries;
263
+ if (wantJson) {
264
+ let attempt = 0;
265
+ // eslint-disable-next-line no-constant-condition
266
+ while (true) {
267
+ const extracted = extractJson(response.content);
268
+ if (extracted.ok) {
269
+ effectiveContent = extracted.text;
270
+ jsonParseError = undefined;
271
+ if (!schema)
272
+ break; // json_mode only — no shape check
273
+ const v = validateAgainstSchema(extracted.value, schema);
274
+ if (v.valid) {
275
+ schemaResult = { valid: true, attempts: attempt };
276
+ break;
277
+ }
278
+ schemaResult = { valid: false, attempts: attempt, error: v.error };
279
+ }
280
+ else {
281
+ // Could not recover any JSON; keep the raw content for inspection.
282
+ effectiveContent = response.content;
283
+ jsonParseError = extracted.error;
284
+ if (schema) {
285
+ schemaResult = { valid: false, attempts: attempt, error: extracted.error };
286
+ }
287
+ }
288
+ if (!schema || attempt >= maxRetries) {
289
+ if (jsonParseError) {
290
+ console.error(`[DeepSeek MCP] json_mode: could not recover valid JSON from content (${jsonParseError})`);
291
+ }
292
+ break;
293
+ }
294
+ // Repair retry: show the model its bad output + the failure reason.
295
+ attempt++;
296
+ const errDetail = jsonParseError ?? schemaResult?.error ?? 'invalid output';
297
+ convo = [
298
+ ...convo,
299
+ { role: 'assistant', content: response.content },
300
+ {
301
+ role: 'user',
302
+ content: `Your previous response was invalid: ${errDetail}. Return ONLY a corrected JSON object that satisfies the required schema, with no extra text.`,
303
+ },
304
+ ];
305
+ console.error(`[DeepSeek MCP] response_schema: attempt ${attempt} repair (${errDetail})`);
306
+ response = await callOnce(convo);
307
+ trackAttempt(response);
308
+ }
309
+ }
310
+ // Self-contained per-invocation usage + cost summary. Tokens and cost
311
+ // both aggregate across any repair attempts, so per-request accounting
312
+ // stays honest when a retry fires and the object reconciles internally.
313
+ // (Top-level `usage` from the spread below reflects the final API
314
+ // response only.) Audit fields expose exactly what answered, so a
315
+ // caller can detect a silent fallback or a thinking-mode mismatch.
316
+ const requestInfo = {
317
+ model: response.model,
318
+ wire_model: response.effective?.model ?? response.model,
319
+ thinking: response.effective?.thinking ?? false,
320
+ temperature: response.effective?.temperature,
321
+ fallback_used: response.fallback !== undefined,
322
+ finish_reason: response.finish_reason,
323
+ prompt_tokens: totalUsage.prompt_tokens,
324
+ completion_tokens: totalUsage.completion_tokens,
325
+ total_tokens: totalUsage.total_tokens,
326
+ cache_hit_tokens: totalUsage.cache_hit_tokens,
327
+ cache_miss_tokens: totalUsage.cache_miss_tokens,
328
+ cost_usd: parseFloat(totalCostUsd.toFixed(6)),
329
+ };
173
330
  // Update session with new messages and response
174
331
  if (validated.session_id) {
175
332
  const session = sessionStore.get(validated.session_id);
@@ -180,23 +337,22 @@ export function registerChatTool(server, client, sessionStore) {
180
337
  sessionStore.addMessages(validated.session_id, [
181
338
  {
182
339
  role: 'assistant',
183
- content: response.content,
340
+ content: effectiveContent,
184
341
  ...(response.tool_calls ? { tool_calls: response.tool_calls } : {}),
185
342
  },
186
343
  ]);
187
- session.totalCost += costBreakdown.totalCost;
344
+ session.totalCost += totalCostUsd;
188
345
  session.requestCount++;
189
346
  }
190
347
  }
191
- // Track usage globally
192
- UsageTracker.getInstance().trackRequest(response.usage, costBreakdown.totalCost);
348
+ // (Usage is tracked per-attempt above via trackAttempt.)
193
349
  // Format response
194
350
  let responseText = '';
195
351
  // Add reasoning content if available (for deepseek-reasoner)
196
352
  if (response.reasoning_content) {
197
353
  responseText += `<thinking>\n${response.reasoning_content}\n</thinking>\n\n`;
198
354
  }
199
- responseText += response.content;
355
+ responseText += effectiveContent;
200
356
  // Format tool calls if present
201
357
  if (response.tool_calls?.length) {
202
358
  responseText += '\n\n**Function Calls:**\n';
@@ -215,9 +371,18 @@ export function registerChatTool(server, client, sessionStore) {
215
371
  if (isReasonerRouted) {
216
372
  responseText += `\n- **Routed:** deepseek-reasoner -> deepseek-v4-flash + thinking`;
217
373
  }
374
+ if (response.fallback) {
375
+ responseText += `\n- **Fallback:** ${response.fallback.originalModel} -> ${response.fallback.fallbackModel} (${response.fallback.reason})`;
376
+ }
218
377
  if (response.tool_calls?.length) {
219
378
  responseText += `\n- **Tool Calls:** ${response.tool_calls.length}`;
220
379
  }
380
+ if (schemaResult) {
381
+ responseText += `\n- **Schema:** ${schemaResult.valid ? 'valid' : 'INVALID'} (${schemaResult.attempts} repair ${schemaResult.attempts === 1 ? 'retry' : 'retries'})`;
382
+ if (!schemaResult.valid && schemaResult.error) {
383
+ responseText += ` — ${schemaResult.error}`;
384
+ }
385
+ }
221
386
  if (validated.session_id) {
222
387
  const session = sessionStore.get(validated.session_id);
223
388
  if (session) {
@@ -234,8 +399,12 @@ export function registerChatTool(server, client, sessionStore) {
234
399
  ],
235
400
  structuredContent: {
236
401
  ...response,
402
+ content: effectiveContent,
403
+ request: requestInfo,
237
404
  ...(isReasonerRouted ? { routed_from: 'deepseek-reasoner' } : {}),
238
- cost_usd: parseFloat(costBreakdown.totalCost.toFixed(6)),
405
+ cost_usd: requestInfo.cost_usd,
406
+ ...(jsonParseError ? { json_parse_error: jsonParseError } : {}),
407
+ ...(schemaResult ? { schema: schemaResult } : {}),
239
408
  ...(validated.session_id ? { session_id: validated.session_id } : {}),
240
409
  },
241
410
  };
@@ -1 +1 @@
1
- {"version":3,"file":"deepseek-chat.js","sourceRoot":"","sources":["../../src/tools/deepseek-chat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deepseek-chat.js","sourceRoot":"","sources":["../../src/tools/deepseek-chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Tool: deepseek_fim
3
+ * Fill-in-the-Middle (FIM) completion with DeepSeek V4 models.
4
+ * The model completes the text between a prefix (prompt) and an optional
5
+ * suffix. Common uses: code completion, content infilling.
6
+ *
7
+ * FIM runs against the DeepSeek Beta completions endpoint in non-thinking
8
+ * mode only, and the API caps output at 4K tokens.
9
+ */
10
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
11
+ import type { DeepSeekClient } from '../deepseek-client.js';
12
+ export declare function registerFimTool(server: McpServer, client: DeepSeekClient): void;
13
+ //# sourceMappingURL=deepseek-fim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek-fim.d.ts","sourceRoot":"","sources":["../../src/tools/deepseek-fim.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAe5D,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,GACrB,IAAI,CA+KN"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Tool: deepseek_fim
3
+ * Fill-in-the-Middle (FIM) completion with DeepSeek V4 models.
4
+ * The model completes the text between a prefix (prompt) and an optional
5
+ * suffix. Common uses: code completion, content infilling.
6
+ *
7
+ * FIM runs against the DeepSeek Beta completions endpoint in non-thinking
8
+ * mode only, and the API caps output at 4K tokens.
9
+ */
10
+ import { z } from 'zod';
11
+ import { getConfig } from '../config.js';
12
+ import { calculateCost, formatCost } from '../cost.js';
13
+ import { FimInputSchema, FIM_MAX_TOKENS } from '../schemas.js';
14
+ import { getErrorMessage } from '../types.js';
15
+ import { UsageTracker } from '../usage-tracker.js';
16
+ export function registerFimTool(server, client) {
17
+ const cfg = getConfig();
18
+ const KNOWN_MODELS = [
19
+ 'deepseek-v4-flash',
20
+ 'deepseek-v4-pro',
21
+ 'deepseek-chat',
22
+ 'deepseek-reasoner',
23
+ ];
24
+ const modelDefault = KNOWN_MODELS.includes(cfg.defaultModel)
25
+ ? cfg.defaultModel
26
+ : 'deepseek-v4-flash';
27
+ server.registerTool('deepseek_fim', {
28
+ title: 'DeepSeek FIM Completion',
29
+ description: 'Fill-in-the-Middle (FIM) completion with DeepSeek V4. Provide a prompt (prefix) and an optional suffix; ' +
30
+ 'the model completes the text in between. Ideal for code completion and content infilling. ' +
31
+ 'Runs in non-thinking mode on the Beta endpoint; output is capped at 4K tokens. ' +
32
+ 'Aliases deepseek-chat and deepseek-reasoner resolve to deepseek-v4-flash (FIM has no thinking mode). ' +
33
+ 'Includes automatic cost tracking and model fallback with circuit breaker resilience.',
34
+ inputSchema: {
35
+ prompt: z
36
+ .string()
37
+ .min(1)
38
+ .describe('The prefix text that comes before the content to generate. Required. For code completion, this is the code up to the cursor.'),
39
+ suffix: z
40
+ .string()
41
+ .optional()
42
+ .describe('Optional suffix text that comes after the content to generate. The model fills the gap between prompt and suffix.'),
43
+ model: z
44
+ .enum([
45
+ 'deepseek-v4-flash',
46
+ 'deepseek-v4-pro',
47
+ 'deepseek-chat',
48
+ 'deepseek-reasoner',
49
+ ])
50
+ .default(modelDefault)
51
+ .describe('Model to use. deepseek-v4-flash (default, fast/economical) or deepseek-v4-pro (most capable). ' +
52
+ 'Aliases deepseek-chat / deepseek-reasoner resolve to v4-flash. FIM is always non-thinking.'),
53
+ max_tokens: z
54
+ .number()
55
+ .min(1)
56
+ .max(FIM_MAX_TOKENS)
57
+ .optional()
58
+ .describe(`Maximum tokens to generate. FIM completions are capped at ${FIM_MAX_TOKENS} tokens by the API.`),
59
+ temperature: z
60
+ .number()
61
+ .min(0)
62
+ .max(2)
63
+ .optional()
64
+ .describe('Sampling temperature (0-2). Higher = more random. Default: 1.0.'),
65
+ stop: z
66
+ .union([z.string(), z.array(z.string()).max(16)])
67
+ .optional()
68
+ .describe('Optional stop sequence(s). Generation stops when any is produced. A single string or an array of up to 16 strings.'),
69
+ },
70
+ outputSchema: {
71
+ text: z.string(),
72
+ model: z.string(),
73
+ usage: z.object({
74
+ prompt_tokens: z.number(),
75
+ completion_tokens: z.number(),
76
+ total_tokens: z.number(),
77
+ prompt_cache_hit_tokens: z.number().optional(),
78
+ prompt_cache_miss_tokens: z.number().optional(),
79
+ }),
80
+ finish_reason: z.string(),
81
+ cost_usd: z.number().optional(),
82
+ routed_from: z.string().optional(),
83
+ },
84
+ }, async (input) => {
85
+ try {
86
+ // Enforce the same content-length guard as chat, across prompt + suffix.
87
+ const maxLen = getConfig().maxMessageLength;
88
+ const combinedLen = input.prompt.length + (input.suffix?.length ?? 0);
89
+ if (combinedLen > maxLen) {
90
+ throw new Error(`FIM prompt+suffix exceeds maximum length of ${maxLen} characters`);
91
+ }
92
+ const validated = FimInputSchema.parse(input);
93
+ // Track whether an alias was requested, for transparency in the output.
94
+ const routedFrom = validated.model === 'deepseek-chat' ||
95
+ validated.model === 'deepseek-reasoner'
96
+ ? validated.model
97
+ : undefined;
98
+ console.error(`[DeepSeek MCP] FIM request: model=${validated.model}, prompt_len=${validated.prompt.length}${validated.suffix ? `, suffix_len=${validated.suffix.length}` : ''}`);
99
+ const params = {
100
+ model: validated.model,
101
+ prompt: validated.prompt,
102
+ suffix: validated.suffix,
103
+ max_tokens: validated.max_tokens,
104
+ temperature: validated.temperature,
105
+ stop: validated.stop,
106
+ };
107
+ const response = await client.createFimCompletion(params);
108
+ console.error(`[DeepSeek MCP] FIM response: tokens=${response.usage.total_tokens}, finish_reason=${response.finish_reason}`);
109
+ const costBreakdown = calculateCost(response.usage, response.model);
110
+ // Track usage globally
111
+ UsageTracker.getInstance().trackRequest(response.usage, costBreakdown.totalCost);
112
+ let responseText = response.text;
113
+ if (getConfig().showCostInfo) {
114
+ responseText += `\n---\n**Request Information:**\n`;
115
+ responseText += `- **Tokens:** ${response.usage.total_tokens} (${response.usage.prompt_tokens} prompt + ${response.usage.completion_tokens} completion)\n`;
116
+ responseText += `- **Model:** ${response.model}\n`;
117
+ responseText += `- **Cost:** ${formatCost(costBreakdown)}`;
118
+ if (routedFrom) {
119
+ responseText += `\n- **Routed:** ${routedFrom} -> deepseek-v4-flash`;
120
+ }
121
+ }
122
+ return {
123
+ content: [
124
+ {
125
+ type: 'text',
126
+ text: responseText,
127
+ },
128
+ ],
129
+ structuredContent: {
130
+ text: response.text,
131
+ model: response.model,
132
+ usage: response.usage,
133
+ finish_reason: response.finish_reason,
134
+ cost_usd: parseFloat(costBreakdown.totalCost.toFixed(6)),
135
+ ...(routedFrom ? { routed_from: routedFrom } : {}),
136
+ },
137
+ };
138
+ }
139
+ catch (error) {
140
+ console.error('[DeepSeek MCP] FIM Error:', error);
141
+ return {
142
+ content: [
143
+ {
144
+ type: 'text',
145
+ text: `Error: ${getErrorMessage(error)}`,
146
+ },
147
+ ],
148
+ isError: true,
149
+ };
150
+ }
151
+ });
152
+ }
153
+ //# sourceMappingURL=deepseek-fim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek-fim.js","sourceRoot":"","sources":["../../src/tools/deepseek-fim.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAIlD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,YAAY,GACzB,IAAI,CAGN"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAKlD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,YAAY,GACzB,IAAI,CAIN"}
@@ -3,9 +3,11 @@
3
3
  * Registers all tools with the MCP server
4
4
  */
5
5
  import { registerChatTool } from './deepseek-chat.js';
6
+ import { registerFimTool } from './deepseek-fim.js';
6
7
  import { registerSessionsTool } from './deepseek-sessions.js';
7
8
  export function registerAllTools(server, client, sessionStore) {
8
9
  registerChatTool(server, client, sessionStore);
10
+ registerFimTool(server, client);
9
11
  registerSessionsTool(server, sessionStore);
10
12
  }
11
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,UAAU,gBAAgB,CAC9B,MAAiB,EACjB,MAAsB,EACtB,YAA0B;IAE1B,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/C,oBAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,UAAU,gBAAgB,CAC9B,MAAiB,EACjB,MAAsB,EACtB,YAA0B;IAE1B,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/C,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,oBAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAC7C,CAAC"}
package/dist/types.d.ts CHANGED
@@ -157,6 +157,56 @@ export interface DeepSeekChatInput {
157
157
  };
158
158
  reasoning_effort?: 'high' | 'max';
159
159
  json_mode?: boolean;
160
+ response_schema?: Record<string, unknown>;
161
+ }
162
+ /**
163
+ * Parameters for a FIM (Fill-in-the-Middle) completion request.
164
+ * FIM runs against the Beta completions endpoint (base_url + /beta) in
165
+ * non-thinking mode only. The model completes the text between prompt and
166
+ * suffix; output is capped at 4K tokens by the API.
167
+ */
168
+ export interface FimCompletionParams {
169
+ model: DeepSeekModel;
170
+ prompt: string;
171
+ suffix?: string;
172
+ max_tokens?: number;
173
+ temperature?: number;
174
+ stop?: string | string[];
175
+ }
176
+ /**
177
+ * Response from a FIM completion.
178
+ */
179
+ export interface FimCompletionResponse {
180
+ text: string;
181
+ model: string;
182
+ usage: {
183
+ prompt_tokens: number;
184
+ completion_tokens: number;
185
+ total_tokens: number;
186
+ prompt_cache_hit_tokens?: number;
187
+ prompt_cache_miss_tokens?: number;
188
+ };
189
+ finish_reason: string;
190
+ }
191
+ /**
192
+ * Raw response from the DeepSeek Beta /completions endpoint (OpenAI legacy
193
+ * completions shape: choices carry `text`, not `message`).
194
+ */
195
+ export interface DeepSeekRawCompletionResponse {
196
+ id: string;
197
+ model: string;
198
+ choices: Array<{
199
+ text: string;
200
+ finish_reason: string | null;
201
+ index: number;
202
+ }>;
203
+ usage?: {
204
+ prompt_tokens: number;
205
+ completion_tokens: number;
206
+ total_tokens: number;
207
+ prompt_cache_hit_tokens?: number;
208
+ prompt_cache_miss_tokens?: number;
209
+ };
160
210
  }
161
211
  /**
162
212
  * Error response structure
@@ -295,6 +345,19 @@ export interface FallbackInfo {
295
345
  fallbackModel: string;
296
346
  reason: string;
297
347
  }
348
+ /**
349
+ * The effective request parameters actually sent to the API for an attempt,
350
+ * after alias routing and thinking-mode resolution. Used for audit fields
351
+ * so a caller can record exactly what answered — not just the requested alias.
352
+ */
353
+ export interface EffectiveRequest {
354
+ /** Wire model actually called (aliases resolved, e.g. deepseek-reasoner -> deepseek-v4-flash) */
355
+ model: string;
356
+ /** Whether thinking/chain-of-thought was enabled for this attempt */
357
+ thinking: boolean;
358
+ /** Effective sampling temperature; undefined when thinking mode ignores it */
359
+ temperature?: number;
360
+ }
298
361
  /**
299
362
  * Check if a message has reasoning_content (DeepSeek Reasoner)
300
363
  */