@arikusi/deepseek-mcp-server 1.4.1 → 1.4.2

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 CHANGED
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.4.2] - 2026-03-07
11
+
12
+ ### Added
13
+ - **Streamable HTTP Transport**: New `TRANSPORT=http` mode with Express-based Streamable HTTP server. Per-session McpServer instances with shared DeepSeekClient. Supports POST/GET/DELETE on `/mcp` endpoint and SSE streaming.
14
+ - **Health Endpoint**: `GET /health` returns server status, version, uptime, and transport type.
15
+ - **Docker Support**: Multi-stage `Dockerfile`, `docker-compose.yml`, and `.dockerignore` for containerized deployment. Default transport is HTTP in Docker.
16
+ - **Docker CI**: GitHub Actions job for Docker build smoke test with health endpoint verification.
17
+ - **New Config Variables**: `TRANSPORT` (stdio|http, default: stdio), `HTTP_PORT` (default: 3000).
18
+ - **253 Tests**: Up from 241, with 12 new tests covering HTTP transport endpoints, config transport/port parsing, and session lifecycle.
19
+
20
+ ### Changed
21
+ - Entry point (`index.ts`) now branches on `config.transport` — stdio (default) or HTTP mode.
22
+ - CI dist check includes `transport-http.js`.
23
+
10
24
  ## [1.4.1] - 2026-03-07
11
25
 
12
26
  ### Added
@@ -245,6 +259,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
245
259
 
246
260
  ## Version History
247
261
 
262
+ - **1.4.2** (2026-03-07): Streamable HTTP transport, Docker support, health endpoint, 253 tests
248
263
  - **1.4.0** (2026-03-07): Model-aware pricing, multimodal content types, flexible fallback chain, MCP Registry, 241 tests
249
264
  - **1.3.3** (2026-03-07): Streaming fallback tests, session tool_calls fix, configurable circuit breaker, session message limit, 212 tests
250
265
  - **1.3.2** (2026-03-06): OpenAI SDK v6, Zod v4, DEFAULT_MODEL config
@@ -263,7 +278,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
263
278
  - [GitHub repository](https://github.com/arikusi/deepseek-mcp-server)
264
279
  - [Issue tracker](https://github.com/arikusi/deepseek-mcp-server/issues)
265
280
 
266
- [Unreleased]: https://github.com/arikusi/deepseek-mcp-server/compare/v1.4.0...HEAD
281
+ [Unreleased]: https://github.com/arikusi/deepseek-mcp-server/compare/v1.4.2...HEAD
282
+ [1.4.2]: https://github.com/arikusi/deepseek-mcp-server/compare/v1.4.1...v1.4.2
283
+ [1.4.1]: https://github.com/arikusi/deepseek-mcp-server/compare/v1.4.0...v1.4.1
267
284
  [1.4.0]: https://github.com/arikusi/deepseek-mcp-server/compare/v1.3.3...v1.4.0
268
285
  [1.3.3]: https://github.com/arikusi/deepseek-mcp-server/compare/v1.3.2...v1.3.3
269
286
  [1.3.2]: https://github.com/arikusi/deepseek-mcp-server/compare/v1.3.1...v1.3.2
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  <img width="380" height="200" src="https://glama.ai/mcp/servers/@arikusi/deepseek-mcp-server/badge" />
12
12
  </a>
13
13
 
14
- MCP server for DeepSeek AI models (Chat + Reasoner). Supports multi-turn sessions, model fallback with circuit breaker, function calling, thinking mode, JSON output, multimodal input, and cost tracking.
14
+ MCP server for DeepSeek AI models (Chat + Reasoner). Supports stdio and HTTP transports, Docker deployment, multi-turn sessions, model fallback with circuit breaker, function calling, thinking mode, JSON output, multimodal input, and cost tracking.
15
15
 
16
16
  **Compatible with:**
17
17
  - Claude Code CLI
@@ -65,7 +65,9 @@ That's it! Your MCP client can now use DeepSeek models!
65
65
  - **12 Prompt Templates**: Templates for debugging, code review, function calling, and more
66
66
  - **Streaming Support**: Real-time response generation
67
67
  - **Multimodal Ready**: Content part types for text + image input (enable with `ENABLE_MULTIMODAL=true`)
68
- - **Tested**: 241 tests with 90%+ code coverage
68
+ - **HTTP Transport**: Remote access via Streamable HTTP with `TRANSPORT=http`
69
+ - **Docker Ready**: Multi-stage Dockerfile with health checks for containerized deployment
70
+ - **Tested**: 253 tests with 90%+ code coverage
69
71
  - **Type-Safe**: Full TypeScript implementation
70
72
  - **MCP Compatible**: Works with any MCP-compatible CLI (Claude Code, Gemini CLI, etc.)
71
73
 
@@ -392,6 +394,8 @@ The server is configured via environment variables. All settings except `DEEPSEE
392
394
  | `CIRCUIT_BREAKER_RESET_TIMEOUT` | `30000` | Milliseconds before circuit half-opens |
393
395
  | `MAX_SESSION_MESSAGES` | `200` | Max messages per session (sliding window) |
394
396
  | `ENABLE_MULTIMODAL` | `false` | Enable multimodal (image) input support |
397
+ | `TRANSPORT` | `stdio` | Transport mode: `stdio` or `http` |
398
+ | `HTTP_PORT` | `3000` | HTTP server port (when TRANSPORT=http) |
395
399
 
396
400
  **Example with custom config:**
397
401
  ```bash
@@ -419,6 +423,7 @@ deepseek-mcp-server/
419
423
  │ ├── session.ts # In-memory session store (multi-turn)
420
424
  │ ├── circuit-breaker.ts # Circuit breaker pattern
421
425
  │ ├── usage-tracker.ts # Usage statistics tracker
426
+ │ ├── transport-http.ts # Streamable HTTP transport (Express)
422
427
  │ ├── tools/
423
428
  │ │ ├── deepseek-chat.ts # deepseek_chat tool (sessions + fallback)
424
429
  │ │ ├── deepseek-sessions.ts # deepseek_sessions tool
@@ -479,6 +484,37 @@ npm start
479
484
 
480
485
  The server will start and wait for MCP client connections via stdio.
481
486
 
487
+ ### HTTP Transport
488
+
489
+ Run the server as an HTTP endpoint for remote access:
490
+
491
+ ```bash
492
+ TRANSPORT=http HTTP_PORT=3000 DEEPSEEK_API_KEY=your-key node dist/index.js
493
+ ```
494
+
495
+ Test the health endpoint:
496
+ ```bash
497
+ curl http://localhost:3000/health
498
+ # → {"status":"ok","version":"1.4.2","uptime":5.2,"transport":"http","timestamp":"..."}
499
+ ```
500
+
501
+ The MCP endpoint is available at `POST /mcp` (Streamable HTTP protocol).
502
+
503
+ ### Docker
504
+
505
+ ```bash
506
+ # Build
507
+ docker build -t deepseek-mcp-server .
508
+
509
+ # Run
510
+ docker run -d -p 3000:3000 -e DEEPSEEK_API_KEY=your-key deepseek-mcp-server
511
+
512
+ # Or use docker-compose
513
+ DEEPSEEK_API_KEY=your-key docker compose up -d
514
+ ```
515
+
516
+ The Docker image defaults to HTTP transport on port 3000 with a built-in health check.
517
+
482
518
  ## Troubleshooting
483
519
 
484
520
  ### "DEEPSEEK_API_KEY environment variable is not set"
package/dist/config.d.ts CHANGED
@@ -19,6 +19,11 @@ declare const ConfigSchema: z.ZodObject<{
19
19
  circuitBreakerResetTimeout: z.ZodDefault<z.ZodNumber>;
20
20
  maxSessionMessages: z.ZodDefault<z.ZodNumber>;
21
21
  enableMultimodal: z.ZodDefault<z.ZodBoolean>;
22
+ transport: z.ZodDefault<z.ZodEnum<{
23
+ stdio: "stdio";
24
+ http: "http";
25
+ }>>;
26
+ httpPort: z.ZodDefault<z.ZodNumber>;
22
27
  }, z.core.$strip>;
23
28
  export type Config = z.infer<typeof ConfigSchema>;
24
29
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;iBAgBhB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAIlD;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAuDnC;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;iBAkBhB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAIlD;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAyDnC;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
package/dist/config.js CHANGED
@@ -20,6 +20,8 @@ const ConfigSchema = z.object({
20
20
  circuitBreakerResetTimeout: z.number().positive().default(30000),
21
21
  maxSessionMessages: z.number().positive().default(200),
22
22
  enableMultimodal: z.boolean().default(false),
23
+ transport: z.enum(['stdio', 'http']).default('stdio'),
24
+ httpPort: z.number().positive().default(3000),
23
25
  });
24
26
  let cachedConfig = null;
25
27
  /**
@@ -60,6 +62,8 @@ export function loadConfig() {
60
62
  ? parseInt(process.env.MAX_SESSION_MESSAGES, 10)
61
63
  : 200,
62
64
  enableMultimodal: process.env.ENABLE_MULTIMODAL === 'true',
65
+ transport: (process.env.TRANSPORT || 'stdio'),
66
+ httpPort: process.env.HTTP_PORT ? parseInt(process.env.HTTP_PORT, 10) : 3000,
63
67
  };
64
68
  const result = ConfigSchema.safeParse(raw);
65
69
  if (!result.success) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAgFH,wBAAgB,mBAAmB,gEAUlC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AA6FH,wBAAgB,mBAAmB,gEAUlC"}
package/dist/index.js CHANGED
@@ -11,6 +11,7 @@ import { createServer, version } from './server.js';
11
11
  import { registerAllTools } from './tools/index.js';
12
12
  import { registerAllPrompts } from './prompts/index.js';
13
13
  import { registerAllResources } from './resources/index.js';
14
+ import { startHttpTransport } from './transport-http.js';
14
15
  async function main() {
15
16
  // Load and validate configuration
16
17
  try {
@@ -45,13 +46,26 @@ async function main() {
45
46
  console.error('[DeepSeek MCP] API connection successful');
46
47
  }
47
48
  }
48
- // Connect to stdio transport
49
- const transport = new StdioServerTransport();
50
- await server.connect(transport);
51
- console.error('[DeepSeek MCP] Server running on stdio');
52
- console.error('[DeepSeek MCP] Available tools: deepseek_chat (sessions, fallback), deepseek_sessions');
53
- console.error('[DeepSeek MCP] Available prompts: 12 reasoning templates');
54
- console.error('[DeepSeek MCP] Available resources: deepseek://models, deepseek://config, deepseek://usage');
49
+ if (config.transport === 'http') {
50
+ // HTTP transport: per-session McpServer, shared DeepSeekClient
51
+ const serverFactory = () => {
52
+ const s = createServer();
53
+ registerAllTools(s, deepseek);
54
+ registerAllPrompts(s);
55
+ registerAllResources(s);
56
+ return s;
57
+ };
58
+ await startHttpTransport(serverFactory, config.httpPort);
59
+ }
60
+ else {
61
+ // Stdio transport (default)
62
+ const transport = new StdioServerTransport();
63
+ await server.connect(transport);
64
+ console.error('[DeepSeek MCP] Server running on stdio');
65
+ console.error('[DeepSeek MCP] Available tools: deepseek_chat (sessions, fallback), deepseek_sessions');
66
+ console.error('[DeepSeek MCP] Available prompts: 12 reasoning templates');
67
+ console.error('[DeepSeek MCP] Available resources: deepseek://models, deepseek://config, deepseek://usage');
68
+ }
55
69
  }
56
70
  // Error handling
57
71
  process.on('uncaughtException', (error) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -6,7 +6,7 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
6
  import { readFileSync } from 'fs';
7
7
  import { dirname, join } from 'path';
8
8
  import { fileURLToPath } from 'url';
9
- let version = '1.4.1';
9
+ let version = '1.4.2';
10
10
  try {
11
11
  const __dirname = dirname(fileURLToPath(import.meta.url));
12
12
  const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
@@ -0,0 +1,9 @@
1
+ /**
2
+ * HTTP Transport for DeepSeek MCP Server
3
+ * Implements Streamable HTTP transport using the MCP SDK's Express middleware.
4
+ * Each MCP session gets its own McpServer instance; DeepSeekClient is shared.
5
+ */
6
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ export declare function createHttpApp(serverFactory: () => McpServer): import("express").Express;
8
+ export declare function startHttpTransport(serverFactory: () => McpServer, port: number): Promise<void>;
9
+ //# sourceMappingURL=transport-http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-http.d.ts","sourceRoot":"","sources":["../src/transport-http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,SAAS,6BAsF3D;AAED,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBpG"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * HTTP Transport for DeepSeek MCP Server
3
+ * Implements Streamable HTTP transport using the MCP SDK's Express middleware.
4
+ * Each MCP session gets its own McpServer instance; DeepSeekClient is shared.
5
+ */
6
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
7
+ import { createMcpExpressApp } from '@modelcontextprotocol/sdk/server/express.js';
8
+ import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
9
+ import { randomUUID } from 'node:crypto';
10
+ import { version } from './server.js';
11
+ const transports = {};
12
+ export function createHttpApp(serverFactory) {
13
+ const app = createMcpExpressApp({ host: '0.0.0.0' });
14
+ // Health check endpoint
15
+ app.get('/health', (_req, res) => {
16
+ res.json({
17
+ status: 'ok',
18
+ version,
19
+ uptime: process.uptime(),
20
+ transport: 'http',
21
+ timestamp: new Date().toISOString(),
22
+ });
23
+ });
24
+ // POST /mcp — handle JSON-RPC requests
25
+ app.post('/mcp', async (req, res) => {
26
+ const sessionId = req.headers['mcp-session-id'];
27
+ // Existing session — reuse transport
28
+ if (sessionId && transports[sessionId]) {
29
+ await transports[sessionId].handleRequest(req, res, req.body);
30
+ return;
31
+ }
32
+ // New initialize request — create session
33
+ if (!sessionId && isInitializeRequest(req.body)) {
34
+ const transport = new StreamableHTTPServerTransport({
35
+ sessionIdGenerator: () => randomUUID(),
36
+ onsessioninitialized: (id) => {
37
+ transports[id] = transport;
38
+ console.error(`[DeepSeek MCP] HTTP session initialized: ${id}`);
39
+ },
40
+ });
41
+ transport.onclose = () => {
42
+ if (transport.sessionId) {
43
+ delete transports[transport.sessionId];
44
+ console.error(`[DeepSeek MCP] HTTP session closed: ${transport.sessionId}`);
45
+ }
46
+ };
47
+ const server = serverFactory();
48
+ await server.connect(transport);
49
+ await transport.handleRequest(req, res, req.body);
50
+ return;
51
+ }
52
+ // Invalid request
53
+ res.status(400).json({
54
+ jsonrpc: '2.0',
55
+ error: { code: -32000, message: 'Invalid request: no valid session or not an initialize request' },
56
+ id: null,
57
+ });
58
+ });
59
+ // GET /mcp — SSE stream for existing session
60
+ app.get('/mcp', async (req, res) => {
61
+ const sessionId = req.headers['mcp-session-id'];
62
+ if (sessionId && transports[sessionId]) {
63
+ await transports[sessionId].handleRequest(req, res);
64
+ }
65
+ else {
66
+ res.status(400).json({
67
+ jsonrpc: '2.0',
68
+ error: { code: -32000, message: 'Invalid or missing session ID' },
69
+ id: null,
70
+ });
71
+ }
72
+ });
73
+ // DELETE /mcp — terminate session
74
+ app.delete('/mcp', async (req, res) => {
75
+ const sessionId = req.headers['mcp-session-id'];
76
+ if (sessionId && transports[sessionId]) {
77
+ await transports[sessionId].close();
78
+ delete transports[sessionId];
79
+ res.status(200).json({ status: 'session terminated' });
80
+ }
81
+ else {
82
+ res.status(400).json({
83
+ jsonrpc: '2.0',
84
+ error: { code: -32000, message: 'Invalid or missing session ID' },
85
+ id: null,
86
+ });
87
+ }
88
+ });
89
+ return app;
90
+ }
91
+ export async function startHttpTransport(serverFactory, port) {
92
+ const app = createHttpApp(serverFactory);
93
+ const httpServer = app.listen(port, '0.0.0.0', () => {
94
+ console.error(`[DeepSeek MCP] HTTP transport listening on http://0.0.0.0:${port}`);
95
+ console.error(`[DeepSeek MCP] Health check: http://localhost:${port}/health`);
96
+ console.error(`[DeepSeek MCP] MCP endpoint: http://localhost:${port}/mcp`);
97
+ });
98
+ const shutdown = async () => {
99
+ console.error('[DeepSeek MCP] Shutting down HTTP transport...');
100
+ for (const [id, transport] of Object.entries(transports)) {
101
+ await transport.close();
102
+ delete transports[id];
103
+ }
104
+ httpServer.close();
105
+ };
106
+ process.on('SIGINT', shutdown);
107
+ process.on('SIGTERM', shutdown);
108
+ }
109
+ //# sourceMappingURL=transport-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-http.js","sourceRoot":"","sources":["../src/transport-http.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arikusi/deepseek-mcp-server",
3
- "version": "1.4.1",
3
+ "version": "1.4.2",
4
4
  "mcpName": "io.github.arikusi/deepseek",
5
5
  "description": "MCP Server for DeepSeek API integration - enables Claude Code to use DeepSeek Chat and Reasoner models",
6
6
  "main": "dist/index.js",
@@ -37,7 +37,10 @@
37
37
  "circuit-breaker",
38
38
  "model-fallback",
39
39
  "gemini-cli",
40
- "mcp-server"
40
+ "mcp-server",
41
+ "docker",
42
+ "http-transport",
43
+ "streamable-http"
41
44
  ],
42
45
  "author": "arikusi",
43
46
  "license": "MIT",
@@ -64,6 +67,7 @@
64
67
  "zod": "^4.3.6"
65
68
  },
66
69
  "devDependencies": {
70
+ "@types/express": "^5.0.6",
67
71
  "@types/node": "^22.10.5",
68
72
  "@vitest/coverage-v8": "^4.0.18",
69
73
  "typescript": "^5.7.3",