Release history
arikusi/deepseek-mcp-server releases
MCP server for DeepSeek AI with chat, reasoning, multi-turn sessions, function calling, thinking mode, and cost tracking.
All releases
24 shown
- HTTP transport users must upgrade immediately; client code relying on shared session state across HTTP sessions must be refactored to use per‑session instances.
- Call `UsageTracker.setSessionSource()` to wire `activeSessions` correctly for STDIO vs. HTTP transports; in HTTP mode it will report 0 by design.
- Each HTTP session now receives its own `SessionStore` instance; conversation history, listings, and deletions are scoped per-session.
- `SessionStore.getInstance()` and `SessionStore.resetInstance()` removed; construct instances with `new SessionStore()` and pass explicitly to tool registration functions.
- CVE pending: Cross-session data exposure in HTTP transport fixed by isolating each HTTP session's `SessionStore` to prevent unauthorized access to other clients' conversation history and session enumeration/deletion capabilities.
- Added integration test (`src/transport-isolation.test.ts`) verifying per-HTTP‑session store isolation.
- Added unit tests confirming independent `SessionStore` instances have no cross-store effects on `clear`, `delete`, or `list` operations.
Full changelog
Security
Cross-session data exposure in HTTP transport (high severity). The SessionStore was a process-wide singleton shared across all connected HTTP clients. In HTTP transport mode, any client that provided another client's session_id to deepseek_chat would read that client's conversation history. The deepseek_sessions tool compounded this by letting any client enumerate all active session IDs (list), delete any session (delete), or wipe every tenant's sessions at once (clear).
STDIO transport was unaffected — each STDIO client runs its own server process, so there was no shared state to leak.
Full advisory and CVE coordination pending.
Changed
- BREAKING (HTTP transport only). Each HTTP session now gets an isolated
SessionStoreinstance. Conversation history, session listings, and session deletion are scoped to the HTTP session that created them. Clients on the same server no longer share session state. SessionStoreis no longer a singleton.SessionStore.getInstance()andSessionStore.resetInstance()have been removed. Construct instances withnew SessionStore()and pass them explicitly toregisterChatTool,registerSessionsTool, andregisterAllTools.UsageTracker.getStats().activeSessionsis wired to the STDIO store viaUsageTracker.setSessionSource(). In HTTP transport it reports0by design — a process-wide count across isolated stores would be both meaningless and a minor cross-tenant information leak.
Added
SessionStoreisolation tests: independent instances, no shared state, no cross-store effects onclear/delete/list.- HTTP transport integration test (
src/transport-isolation.test.ts) proving eachserverFactoryinvocation produces a fresh store and that user-suppliedsession_idcollisions across HTTP sessions do not merge data.
Upgrade
npm install @arikusi/[email protected]
Users on STDIO transport: no action needed beyond the upgrade.
Users on HTTP transport: upgrade immediately. Session data is now correctly scoped per HTTP session — if your client relied on cross-client session sharing, that behaviour was the vulnerability and must be reworked.
- Transparent reasoner routing through chat with thinking mode enabled
- Model‑aware parameter filtering for thinking requests
Full changelog
What's New
All deepseek-reasoner requests are now transparently routed through deepseek-chat with thinking:{type:"enabled"}. This is possible because both model names point to the same DeepSeek V3.2 model - deepseek-chat is non-thinking mode, deepseek-reasoner is thinking mode.
By routing through deepseek-chat + thinking, we get full feature parity including function calling, which the raw deepseek-reasoner API does not support.
Model Routing Table
| User selects | Sent to API | Thinking | Function calling |
|---|---|---|---|
| deepseek-chat | deepseek-chat | Off | Yes |
| deepseek-chat + thinking:enabled | deepseek-chat + thinking | On | Yes |
| deepseek-reasoner | deepseek-chat + thinking | On | Yes |
Changes
Added
- Transparent reasoner routing through chat + thinking mode
- Model-aware parameter filtering for thinking mode
Fixed
- Function calling now works with deepseek-reasoner (via transparent routing)
- Sampling parameters (temperature, top_p, etc.) properly filtered for reasoning requests
- Thinking parameter passed as top-level property instead of extra_body (OpenAI SDK v6 compatibility)
- Corrected model capabilities in deepseek://models resource
Full Changelog: https://github.com/arikusi/deepseek-mcp-server/compare/v1.5.2...v1.6.0
Rejects non‑POST requests on `/mcp` endpoint to prevent indefinite hangs.
Full changelog
Bug Fix
- fix: reject non-POST requests on
/mcpendpoint — External GET requests caused the stateless MCP transport to hang indefinitely, triggering Cloudflare Worker "code hung" errors on all requests. Now returns 405 for non-POST methods.
Updates
- Add Official MCP Registry, Smithery, LobeHub badges to README
- Add
websiteUrlto server.json - Bump version to 1.5.2
- Update @modelcontextprotocol/sdk to at least ^1.27.1 and wrangler to at least ^4.71.0.
- CVE-2026-25536 — cross-client data leak patched by updating @modelcontextprotocol/sdk to ^1.27.1
- CVE-2026-0933 — OS command injection vulnerability patched by updating wrangler to ^4.71.0
Full changelog
Fixed
- Update
@modelcontextprotocol/sdkto ^1.27.1 to patch cross-client data leak vulnerability (CVE-2026-25536) - Update
wranglerto ^4.71.0 to patch OS command injection vulnerability (CVE-2026-0933)
Changed
- Circuit breaker is now per-model instead of shared across all models. If one model becomes unhealthy, the other remains available independently.
- Cloudflare Workers remote BYOK endpoint hosted at https://deepseek-mcp.tahirl.com/mcp
- Stateless MCP server on Cloudflare edge network with zero cold start latency
- Internal streaming of DeepSeek API responses to avoid timeouts
Full changelog
Cloudflare Workers Remote Endpoint (BYOK)
Added
- Remote Endpoint: Hosted BYOK endpoint at
https://deepseek-mcp.tahirl.com/mcp - Cloudflare Worker: Stateless MCP server on edge network, zero cold start
- Internal Streaming: Worker streams DeepSeek API responses to prevent timeout
Quick Start (Remote)
claude mcp add --transport http deepseek \
https://deepseek-mcp.tahirl.com/mcp \
--header "Authorization: Bearer YOUR_DEEPSEEK_API_KEY"
Full changelog: https://github.com/arikusi/deepseek-mcp-server/compare/v1.4.3...v1.5.0
Fixed MCP Registry server.json description exceeding 100‑character limit.
Full changelog
Fixed
- MCP Registry: shortened server.json description to meet 100-char validation limit
Full Changelog: https://github.com/arikusi/deepseek-mcp-server/compare/v1.4.2...v1.4.3
- New config keys: `TRANSPORT` (stdio|http) and `HTTP_PORT` (default 3000)
- When using HTTP transport set `TRANSPORT=http` and optionally override `HTTP_PORT`
- Streamable HTTP Transport with per‑session McpServer instances and SSE streaming
- Health endpoint `GET /health` returning status, version, uptime
- Docker support via multi‑stage Dockerfile, docker-compose.yml, and built‑in health check
Full changelog
What's New
- Streamable HTTP Transport:
TRANSPORT=httpmode with Express-based server, per-session McpServer instances, SSE streaming - Health Endpoint:
GET /health— status, version, uptime - Docker Support: Multi-stage Dockerfile, docker-compose.yml, built-in health check
- Docker CI: GitHub Actions smoke test for Docker build
- New Config:
TRANSPORT(stdio|http),HTTP_PORT(default: 3000) - 253 Tests (up from 241)
Full Changelog: https://github.com/arikusi/deepseek-mcp-server/compare/v1.4.1...v1.4.2
- MCP Registry support via `mcpName` field for registry.modelcontextprotocol.io publishing
- Glama Registry support with `glama.json` for glama.ai server listing
- Smithery compatibility: CJS bundler fallback and `createSandboxServer()` export
Full changelog
Added
- MCP Registry:
mcpNamefor official MCP Registry (registry.modelcontextprotocol.io) publishing - Glama Registry:
glama.jsonfor glama.ai server listing - Smithery Compatibility: CJS bundler fallback,
createSandboxServer()export
Changed
- server.json: Updated to official MCP Registry schema format
- README: Added Glama badge
- Per-model pricing with `getPricing()` helper and optional `model` parameter in `calculateCost()`
- Multimodal content types: `TextContentPart`, `ImageContentPart`; enable via `ENABLE_MULTIMODAL=true`
- Flexible fallback chain supporting 3+ models through `FALLBACK_ORDER`
Full changelog
What's New
- Model-aware pricing: Per-model pricing map with
getPricing()helper.calculateCost()accepts optionalmodelparameter. - Multimodal content types:
TextContentPart,ImageContentParttypes. Message content supportsstring | ContentPart[]. Enable withENABLE_MULTIMODAL=true. - Flexible fallback chain:
FALLBACK_ORDERsupports 3+ model fallback chains. - MCP Registry metadata:
server.jsonfor registry submission. - 241 tests (up from 212).
Full Changelog: https://github.com/arikusi/deepseek-mcp-server/compare/v1.3.3...v1.4.0
- Configurable circuit breaker via CIRCUIT_BREAKER_THRESHOLD and CIRCUIT_BREAKER_RESET_TIMEOUT
- Session message limit with MAX_SESSION_MESSAGES to bound memory usage
Full changelog
What's Changed
Fixed
- Session Tool Calls:
ChatMessageinterface now includestool_callsfield — multi-turn function calling no longer loses tool context between requests - Default Model Config:
DEFAULT_MODELenv variable now correctly applies to thedeepseek_chattool schema default value - Double Config Load: Removed redundant
loadConfig()call inindex.ts - Circuit Breaker Hardcoded Params: Circuit breaker threshold and reset timeout are now read from config instead of being hardcoded
Added
- Configurable Circuit Breaker:
CIRCUIT_BREAKER_THRESHOLD(default: 5) andCIRCUIT_BREAKER_RESET_TIMEOUT(default: 30000ms) environment variables - Session Message Limit:
MAX_SESSION_MESSAGES(default: 200) prevents unbounded memory growth with sliding window eviction - Streaming Fallback Tests: 4 new tests covering streaming fallback edge cases
- 212 Tests: Up from 208, all passing
New Configuration Variables
| Variable | Default | Description |
|----------|---------|-------------|
| CIRCUIT_BREAKER_THRESHOLD | 5 | Consecutive failures before circuit opens |
| CIRCUIT_BREAKER_RESET_TIMEOUT | 30000 | Milliseconds before circuit half-opens |
| MAX_SESSION_MESSAGES | 200 | Max messages per session (sliding window) |
Full Changelog: https://github.com/arikusi/deepseek-mcp-server/compare/v1.3.2...v1.3.3
Minor fixes and improvements.
Full changelog
Changed
- OpenAI SDK v6: Upgraded from v4.104.0 to v6.27.0 —
chat.completions.create()API unchanged, zero breaking changes - Zod v4: Upgraded from v3.25.76 to v4.3.6 — 14x faster string parsing, 7x faster array, 6.5x faster object parsing
- New Config:
DEFAULT_MODELenv variable (default:deepseek-chat) - Keywords: Added
gemini-cli,mcp-serverto npm package keywords
Full Changelog: https://github.com/arikusi/deepseek-mcp-server/compare/v1.3.1...v1.3.2
- Fixed multiple high‑severity vulnerabilities in transitive dependencies: hono, @hono/node-server, rollup, ajv, qs
- Added test coverage for deepseek_sessions tool (8 tests, >90% coverage)
- Added test coverage for tool registration aggregator (2 tests)
Full changelog
Fixed
- Security: Resolved 5 vulnerabilities (3 high) in transitive dependencies (hono, @hono/node-server, rollup, ajv, qs)
Added
- Test Coverage:
deepseek_sessionstool tests (8 tests, 0% → 90%+ coverage) - Test Coverage: Tool registration aggregator tests (2 tests)
- 208 Tests: Up from 198
Full Changelog: https://github.com/arikusi/deepseek-mcp-server/compare/v1.3.0...v1.3.1
- Multi‑Turn Sessions: `session_id` parameter on `deepseek_chat`, `deepseek_sessions` tool for listing, deleting, and clearing sessions
- Configurable session TTL (`SESSION_TTL_MINUTES`) and maximum count (`MAX_SESSIONS`)
- Model Fallback & Circuit Breaker with automatic fallback between `deepseek-chat` and `deepseek-reasoner` on retryable errors, configurable via `FALLBACK_ENABLED`
Full changelog
What's New
Multi-Turn Sessions
session_idparameter ondeepseek_chatfor conversation context across requestsdeepseek_sessionstool to list, delete, and clear sessions- Configurable TTL (
SESSION_TTL_MINUTES) and max count (MAX_SESSIONS)
Model Fallback & Circuit Breaker
- Automatic fallback between
deepseek-chat↔deepseek-reasoneron retryable errors (429, 503, timeout) - Circuit breaker: 5 failures → fast-fail for 30s → probe → recover
- Configurable via
FALLBACK_ENABLED
MCP Resources
deepseek://models— model capabilities, context limits, pricingdeepseek://config— server configuration (API key masked)deepseek://usage— real-time usage stats (requests, tokens, costs, cache ratio)
Stats
- 198 tests (up from 150)
- 25 files changed, +1895 lines
- 11 new source files, 14 modified
Full Changelog: https://github.com/arikusi/deepseek-mcp-server/compare/v1.2.0...v1.3.0
- Unified V3.2 pricing now charges cache hits at $0.028/1M tokens, misses at $0.28/1M, output at $0.42/1M.
- max_tokens limit increased from 32768 to 65536; warnings for deepseek-chat above 8192 and deepseek-reasoner above 65536.
- Thinking Mode: enhanced reasoning via `thinking: {type: "enabled"}` (filters incompatible params).
- JSON Output Mode: structured JSON responses with `json_mode: true`.
- Cache-Aware Cost Tracking: new fields `prompt_cache_hit_tokens`, `prompt_cache_miss_tokens` and cost breakdown interface.
Full changelog
DeepSeek V3.2 Full Compatibility
Both deepseek-chat and deepseek-reasoner now run DeepSeek-V3.2 (128K context). This release brings full V3.2 support with accurate pricing, new features, and 150 tests.
Added
- Thinking Mode: Enable enhanced reasoning on deepseek-chat with
thinking: {type: "enabled"}. Incompatible params (temperature, top_p, etc.) are automatically filtered with logged warnings. - JSON Output Mode: Structured JSON responses with
json_mode: true. Supported by both models. Warns if "json" word missing from prompt. - Cache-Aware Cost Tracking: V3.2 API returns
prompt_cache_hit_tokensandprompt_cache_miss_tokens. Cost display now shows cache hit ratio and savings. - CostBreakdown Interface:
calculateCost()returns structured{inputCost, outputCost, totalCost, cacheHitRatio?, cacheSavings?}.
Changed
- V3.2 Unified Pricing: Cache hit $0.028/1M, cache miss $0.28/1M, output $0.42/1M (replaces old per-model pricing).
- max_tokens Limit: Updated from 32768 to 65536. Model-specific warnings: deepseek-chat warns above 8192, deepseek-reasoner warns above 65536.
- 150 Tests: Up from 126, covering thinking mode, JSON mode, cache tokens, and cost breakdown.
Fixed
- Incorrect Cost Reports: Old flat pricing replaced with accurate V3.2 unified pricing.
- Context Length: Documentation updated from 64K to 128K.
Usage Examples
Thinking Mode:
{
"messages": [{"role": "user", "content": "Analyze quicksort complexity"}],
"model": "deepseek-chat",
"thinking": {"type": "enabled"}
}
JSON Mode:
{
"messages": [{"role": "user", "content": "Return a json object with user data"}],
"model": "deepseek-chat",
"json_mode": true
}
Full Changelog: https://github.com/arikusi/deepseek-mcp-server/compare/v1.1.1...v1.2.0
Minor fixes and improvements.
Full changelog
Modular architecture, type safety, security fixes, 126 tests. See CHANGELOG for details.
- OpenAI-compatible function calling via `tools` and `tool_choice` with up to 128 tool definitions using JSON Schema
- Centralized Zod-validated configuration through environment variables (`DEEPSEEK_BASE_URL`, `SHOW_COST_INFO`, `REQUEST_TIMEOUT`, `MAX_RETRIES`)
- 12 new prompts including `function_call_debug` for debugging and `create_function_schema` for generating JSON Schema from natural language
Full changelog
What's New
Function Calling
- OpenAI-compatible function calling via
toolsandtool_choiceparameters - Up to 128 tool definitions with JSON Schema parameters
toolmessage role for sending function results back- Streaming + function calling works together (delta accumulation)
Centralized Config System
- Zod-validated configuration from environment variables
DEEPSEEK_BASE_URL: Custom API endpointSHOW_COST_INFO: Toggle cost display (default: true)REQUEST_TIMEOUT: API timeout in ms (default: 60000)MAX_RETRIES: Max retry count (default: 2)
Test Suite
- 85 tests across 5 test files with Vitest
- 80%+ code coverage (v8 provider)
- CI coverage job added
Code Modularization
config.ts: Centralized configurationcost.ts: Cost calculation (extracted from index.ts)schemas.ts: Zod validation schemas (extracted from index.ts)
New Prompts (12 total)
function_call_debug: Debug function calling issuescreate_function_schema: Generate JSON Schema from natural language
Backward Compatible
No breaking changes. Existing installations work without any changes.
Full Changelog: https://github.com/arikusi/deepseek-mcp-server/compare/v1.0.3...v1.1.0
- Pricing for DeepSeek Reasoner updated to $0.55 per 1M input tokens and $2.19 per 1M output tokens – update billing configurations accordingly
- Cost tracking for API requests with automatic USD calculation and structured `structuredContent.cost_usd` field
- Ten new MCP prompt templates covering debugging, code review, research synthesis, strategic planning, ELI5 explanations, mathematical proofs, argument validation, creative ideation, cost comparison, and pair programming
- Enhanced response format including token breakdown, model name, and cost in USD
Full changelog
Added
- Cost tracking for API requests
- Automatic cost calculation based on token usage
- USD cost included in response output
- Cost data available in
structuredContent.cost_usd
- 10 MCP prompt templates for common reasoning tasks
debug_with_reasoning: Debug code with step-by-step analysiscode_review_deep: Comprehensive code reviewresearch_synthesis: Research and synthesize informationstrategic_planning: Create strategic plans with reasoningexplain_like_im_five: Explain complex topics simplymathematical_proof: Prove mathematical statementsargument_validation: Analyze arguments for logical fallaciescreative_ideation: Generate creative ideas with feasibility analysiscost_comparison: Compare LLM costspair_programming: Interactive coding assistant
- Enhanced response format with request information section
- Token breakdown (prompt + completion)
- Model name
- Cost in USD
Changed
- Updated DeepSeek Reasoner pricing to current rates ($0.55/$2.19 per 1M tokens)
- Added .claude.json, .claude/, .npmrc, and PROJECT_CONTEXT.md to .npmignore to prevent accidental inclusion in published npm packages
Full changelog
Changes
- Security improvements to .npmignore
What's Changed
- Add sensitive files to .npmignore to prevent accidental publishing
- Exclude .claude.json, .claude/, .npmrc, and PROJECT_CONTEXT.md from npm package
Full Changelog: https://github.com/arikusi/deepseek-mcp-server/compare/v1.0.1...v1.0.2
- Scope options documentation (-s user/local/project)
- Detailed troubleshooting for API key configuration
Full changelog
Changes
- Update MCP SDK to v1.25.2
- Improve installation documentation
- Add troubleshooting guide
What's Changed
- Update
@modelcontextprotocol/sdkfrom ^1.0.4 to ^1.25.2 - Fix claude mcp add command syntax in README
- Add scope options documentation (-s user/local/project)
- Add detailed troubleshooting for API key configuration
Full Changelog: https://github.com/arikusi/deepseek-mcp-server/compare/v1.0.0...v1.0.1
- Support for deepseek-chat model
- Support for deepseek-reasoner (R1) model with reasoning traces
- Streaming mode support
Full changelog
Initial Release
First public release of DeepSeek MCP Server.
Features
- Support for
deepseek-chatmodel - Support for
deepseek-reasoner(R1) model with reasoning traces - Streaming mode support
- Full TypeScript implementation
- OpenAI-compatible API client
- MCP protocol compliance
Installation
npm install @arikusi/deepseek-mcp-server
Full Changelog: https://github.com/arikusi/deepseek-mcp-server/blob/main/CHANGELOG.md