Deepseek Mcp Server について
Deepseek Mcp Server は MCP クライアントを DeepSeek モデルに接続し、チャットやコード補完を提供します。複数ターンのセッション、任意の推論、関数呼び出し、JSON 検証、リクエスト費用の追跡に対応します。
主な機能
- 01DeepSeek モデルとのチャット
- 02複数ターンのセッション維持
- 03思考モードと関数呼び出し
- 04JSON 出力の生成と検証
- 05Fill-in-the-Middle によるコード補完
- 06使用量とリクエスト費用の追跡
活用シーン
- 01MCP クライアントから DeepSeek を利用
- 02関連リクエスト間でコンテキストを保持
- 03スキーマ検証済み JSON の取得
- 04コードやテキストの空欄を補完
MCP 対応
`deepseek_chat`、`deepseek_fim`、`deepseek_sessions` ツールと、モデル・設定・使用量を参照する 3 つのリソースを公開します。クライアントは stdio または HTTP で接続できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| model | enum | いいえ | 使用するモデル。deepseek-v4-flash(デフォルト、高速/低コスト)または deepseek-v4-pro(最も高性能)。どちらも 1M のコンテキストに対応し、出力は最大 384K token です。速度優先のため、デフォルトでは思考モードは無効です。推論するには thinking:{type:"enabled"} を渡します。非推奨のエイリアス(引き続き使用できますが、v4 名を推奨):deepseek-chat -> v4-flash の非思考モード、deepseek-reasoner -> v4-flash の思考モード。deepseek-v4-flash | deepseek-v4-pro | deepseek-chat | deepseek-reasoner |
| tools | array | いいえ | 関数呼び出し用のツール定義の配列です。各ツールには type "function" と、name、description、parameters(JSON Schema)を含む function オブジェクトがあります。 |
| stream | boolean | いいえ | ストリーミングモードを有効にします。ストリーミング完了後に完全な応答を返します。 |
| messages | array | はい | 会話メッセージの配列です。各メッセージには role(system/user/assistant/tool)と content(文字列、またはマルチモーダル用のコンテンツパーツ配列)が含まれます。ツールメッセージには tool_call_id が必要です。 |
| thinking | object | いいえ | 思考連鎖モードを切り替えます。推論には {type: "enabled"} を、迅速な直接回答には {type: "disabled"} を使用します(ここではデフォルト)。有効にすると、temperature/top_p は無視されます。 |
| thinking.type | enum | はい | enabled | disabled |
| json_mode | boolean | いいえ | JSON 出力モードを有効にします。モデルは有効な JSON を出力します。最良の結果を得るには、プロンプトに単語 "json" を含めてください。両方のモデルが対応しています。 |
| max_tokens | number | いいえ | 生成する token の最大数。V4 モデルは最大 384000 token の出力に対応しています。 |
| session_id | string | いいえ | 複数ターンの会話に使用するセッション ID です。指定すると、このセッションの以前のメッセージが現在のメッセージの前に追加されます。セッションが存在しない場合は自動的に作成されます。ステートレスな単一ターンのリクエストでは省略してください。 |
| temperature | number | いいえ | サンプリング温度(0-2)。値が高いほどランダム性が高くなります。デフォルト:1.0。思考モードが有効な場合は無視されます。 |
| tool_choice | any | いいえ | モデルが呼び出すツールを制御します。"auto"(デフォルト)、"none"、"required"、または {type:"function",function:{name:"..."}} |
| response_schema | object | いいえ | モデル出力の検証に使用する JSON Schema。JSON 出力モードが有効になります。サーバーは解析済みの結果を検証し、失敗した場合は RESPONSE_SCHEMA_MAX_RETRIES 回まで修正を再試行します(検証エラーをフィードバックします)。返される内容は、最初にスキーマを満たしたオブジェクトです。該当するものがない場合は、最後の試行結果が返され、schema.valid=false と schema.error が設定されます。 |
| reasoning_effort | enum | いいえ | 思考モードが有効な場合の推論強度:"high"(デフォルト)または "max"。思考モードが有効な場合にのみ適用されます。high | max |
詳細
DeepSeek MCP サーバー
マルチターンセッション、関数呼び出し、思考モード、ピーク時を考慮したコスト追跡に対応した、DeepSeek(deepseek-flash および deepseek-v4-pro、コンテキスト長 1M)用の MCP サーバーです。
Claude Code、Gemini CLI、Cursor、Windsurf、および MCP 対応のあらゆるクライアントと互換性があります。
MCP Registry、Smithery、Glama、LobeHub、およびFronteir AIに公式登録されています。
2.4.0 では DeepSeek の V4.1 への名称変更に対応しています。 デフォルトモデルは
deepseek-flash(V4.1 Flash)となり、deepseek-v4-proも選択できます。どちらも 1M トークンのコンテキストウィンドウと、オプションの思考の連鎖に対応しています。従来の名称であるdeepseek-v4-flash、deepseek-chat、deepseek-reasonerも引き続き使用でき、deepseek-flashとして送信されるため、既存の設定を変更する必要はありません。
クイックスタート
リモート(インストール不要)
ホスト済みのエンドポイントをそのまま使用できます。npm のインストールも Node.js も不要です。DeepSeek API キーはご自身で用意してください。
Claude Code:
claude mcp add --transport http deepseek \
https://deepseek-mcp.tahirl.com/mcp \
--header "Authorization: Bearer YOUR_DEEPSEEK_API_KEY"
Cursor / Windsurf / VS Code:
{
"mcpServers": {
"deepseek": {
"url": "https://deepseek-mcp.tahirl.com/mcp",
"headers": {
"Authorization": "Bearer ${DEEPSEEK_API_KEY}"
}
}
}
}
ローカル(stdio)
Claude Code:
claude mcp add -s user deepseek npx @arikusi/deepseek-mcp-server -e DEEPSEEK_API_KEY=your-key-here
Gemini CLI:
gemini mcp add deepseek npx @arikusi/deepseek-mcp-server -e DEEPSEEK_API_KEY=your-key-here
スコープのオプション(Claude Code):
-s user:すべてのプロジェクトで使用できます(推奨)-s local:現在のプロジェクトのみで使用できます(デフォルト)-s project:プロジェクト固有の.mcp.jsonファイルを使用します
API キーの取得先: https://platform.deepseek.com
機能
- DeepSeek V4.1 Flash と V4 Pro:
deepseek-flashとdeepseek-v4-proの両方が 1M コンテキストに対応し、オプションで思考の連鎖モードを利用できます - マルチターンセッション:
session_idパラメーターにより、リクエスト間で会話のコンテキストが保持されます - モデルフォールバックとサーキットブレーカー:モデル間の自動フォールバックと、連鎖的な障害を防ぐサーキットブレーカー保護を備えています
- MCP リソース:
deepseek://models、deepseek://config、deepseek://usage— モデル情報、設定、使用状況の統計を照会できます - 思考モード:
thinking: {type: "enabled"}を指定すると、どちらのモデルでも思考の連鎖による推論を有効にできます - JSON 出力モード:
json_mode: trueにより、構造化された JSON レスポンスを取得できます - スキーマ検証済み JSON:
response_schemaを渡すと、サーバーが出力をスキーマに照らして検証します。回数に上限を設けた修復リトライと、スキーマパターンに対する ReDoS ガードも備えています - 関数呼び出し:最大 128 個のツール定義に対応した、OpenAI 互換のツール使用
- Fill-in-the-Middle(FIM):
deepseek_fimツールを使用して、プレフィックスとサフィックスの間のコードやコンテンツを補完します - キャッシュを考慮したコスト追跡:キャッシュヒット/ミスの内訳を含むコストを自動計算します。リクエストの実行時に適用されたピーク時またはオフピーク時の料金で算出します
- セッション管理ツール:
deepseek_sessionsツールでセッションの一覧表示、削除、クリアができます - 設定可能:環境変数に基づく設定と検証に対応しています
- 12 個のプロンプトテンプレート:デバッグ、コードレビュー、関数呼び出しなどのテンプレートを用意しています
- ストリーミング対応:リアルタイムでレスポンスを生成します
- マルチモーダル対応:テキストと画像入力用のコンテンツパート型を用意しています(
ENABLE_MULTIMODAL=trueで有効化) - リモートエンドポイント:
deepseek-mcp.tahirl.com/mcpでホストされています — BYOK(Bring Your Own Key)方式で、インストールは不要です - HTTP トランスポート:
TRANSPORT=httpにより、Streamable HTTP を介したセルフホストのリモートアクセスが可能です - Docker 対応:コンテナーデプロイ用に、ヘルスチェックを備えたマルチステージ Dockerfile を用意しています
- テスト済み:366 件のテスト、行カバレッジ約 92%
- 型安全:TypeScript による完全な実装です
- MCP 互換:あらゆる MCP 互換 CLI(Claude Code、Gemini CLI など)で動作します
インストール
前提条件
- Node.js 22+
- DeepSeek API キー(https://platform.deepseek.com で取得できます)
手動インストール
手動でインストールする場合:
npm install -g @arikusi/deepseek-mcp-server
ソースからのインストール
- リポジトリをクローンする
git clone https://github.com/arikusi/deepseek-mcp-server.git
cd deepseek-mcp-server
- 依存関係をインストールする
npm install
- プロジェクトをビルドする
npm run build
使用方法
設定すると、MCP クライアントから deepseek_chat、deepseek_fim、deepseek_sessions ツールと、3 つの MCP リソースを利用できるようになります。
プロンプトの例:
"Use DeepSeek to explain quantum computing"
"Ask DeepSeek Reasoner to solve: If I have 10 apples and buy 5 more..."
MCP クライアントは deepseek_chat ツールを自動的に呼び出します。
手動設定(上級者向け)
MCP クライアントが add コマンドに対応していない場合は、設定ファイルに手動で追加してください:
{
"mcpServers": {
"deepseek": {
"command": "npx",
"args": ["@arikusi/deepseek-mcp-server"],
"env": {
"DEEPSEEK_API_KEY": "your-api-key-here"
}
}
}
}
設定ファイルの場所:
- Claude Code:
~/.claude.json(projects["your-project-path"].mcpServersセクションに追加してください) - その他の MCP クライアント:設定ファイルの場所については、お使いのクライアントのドキュメントを確認してください
利用可能なツール
deepseek_chat
DeepSeek AI モデルとチャットできます。コストの自動追跡と関数呼び出しに対応しています。
パラメーター:
messages(必須):会話メッセージの配列role:「system」|「user」|「assistant」|「tool」content:メッセージ本文tool_call_id(任意):role が tool のメッセージに必須
model(任意):「deepseek-flash」(デフォルト)または「deepseek-v4-pro」。旧名称の「deepseek-v4-flash」、「deepseek-chat」、「deepseek-reasoner」も引き続き使用でき、deepseek-flash に解決されます(reasoner は常に思考します)。「deepseek-flash」の使用を推奨します。temperature(任意):0~2。ランダム性を制御します(デフォルト:1.0)。思考モードが有効な場合は無視されます。max_tokens(任意):生成する最大トークン数(両モデルとも最大 384000 に対応)stream(任意):ストリーミングモードを有効にします(デフォルト:false)tools(任意):関数呼び出し用のツール定義の配列(最大 128 個)tool_choice(任意):「auto」|「none」|「required」|{type: "function", function: {name: "..."}}thinking(任意):思考モードを切り替えます。推論する場合は{type: "enabled"}、高速に回答する場合は{type: "disabled"}を指定します(デフォルトは非思考モードです)reasoning_effort(任意):「high」(デフォルト)または「max」。思考モードが有効な場合にのみ適用されますjson_mode(任意):JSON 出力モードを有効にします(両モデルに対応)response_schema(任意):モデル出力の検証に使用する JSON Schema。JSON 出力が有効になります。サーバーは解析済みの結果を検証し、失敗した場合は最大RESPONSE_SCHEMA_MAX_RETRIES回(デフォルトは 2 回、無効にするには 0 を設定)の修正再試行を行い、検証エラーをモデルに返します。スキーマの正規表現パターンは ReDoS の検査対象となり、安全でないパターンは事前に拒否されます。session_id(任意):複数ターンの会話用セッション ID。以前のコンテキストは自動的に先頭に追加されます。
レスポンスに含まれる内容:
- 形式を保持したコンテンツ(JSON 出力が要求された場合は、クリーンな JSON として復元されます)
- 関数呼び出しの結果(ツールが使用された場合)
- リクエスト情報(トークン数、モデル、米ドル建てのコスト)
structuredContent.request:修正再試行分も集計した、リクエストごとの使用量とコストの概要(トークン数、キャッシュヒット/ミス、cost_usd、適用されたpricing_tierを含む)structuredContent.effectiveとfallback:エイリアスや思考モードの解決後に実際に送信された内容と、適用されたサイレントなモデルフォールバックstructuredContent.schema:response_schemaが使用された場合の{valid, attempts, error?}。JSON 出力を復元できなかった場合はjson_parse_error
例:
{
"messages": [
{
"role": "user",
"content": "Explain the theory of relativity in simple terms"
}
],
"model": "deepseek-flash",
"temperature": 0.7,
"max_tokens": 1000
}
推論の例(思考モードを有効にした deepseek-flash):
{
"messages": [
{
"role": "user",
"content": "If I have 10 apples and eat 3, then buy 5 more, how many do I have?"
}
],
"model": "deepseek-flash",
"thinking": { "type": "enabled" }
}
思考モードでは、<thinking> タグ内に思考の連鎖が返され、その後に最終回答が続きます。
DeepSeek V4 Pro の例(最も難しいタスク向け):
{
"messages": [
{
"role": "user",
"content": "Prove that the square root of 2 is irrational."
}
],
"model": "deepseek-v4-pro",
"thinking": { "type": "enabled" }
}
関数呼び出しの例:
{
"messages": [
{
"role": "user",
"content": "What's the weather in Istanbul?"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "City name"
}
},
"required": ["location"]
}
}
}
],
"tool_choice": "auto"
}
モデルが関数を呼び出すと判断した場合、レスポンスには関数名と引数を含む tool_calls が含まれます。対応する tool_call_id を持つ role が tool のメッセージを使って、結果を返すことができます。
思考モードの例:
{
"messages": [
{
"role": "user",
"content": "Analyze the time complexity of quicksort"
}
],
"model": "deepseek-flash",
"thinking": { "type": "enabled" }
}
思考モードが有効な場合、temperature と top_p は自動的に無視されます。
JSON 出力モードの例:
{
"messages": [
{
"role": "user",
"content": "Return a json object with name, age, and city fields for a sample user"
}
],
"model": "deepseek-flash",
"json_mode": true
}
JSON モードを使うと、モデルは有効な JSON を出力します。最良の結果を得るには、プロンプトに「json」という単語を含めてください。すべてのモデルに対応しています。
スキーマ検証済み JSON の例:
{
"messages": [
{
"role": "user",
"content": "Classify this review sentiment as json: \"Absolutely loved it\""
}
],
"model": "deepseek-flash",
"response_schema": {
"type": "object",
"properties": {
"sentiment": { "type": "string", "enum": ["positive", "negative", "neutral"] },
"confidence": { "type": "number", "minimum": 0, "maximum": 1 }
},
"required": ["sentiment", "confidence"],
"additionalProperties": false
}
}
サーバーは解析済みの出力をスキーマに照らして検証します。一致しない場合は最大 RESPONSE_SCHEMA_MAX_RETRIES 回(デフォルトは 2 回)再試行し、検証エラーをモデルに返して、最初にスキーマを満たしたオブジェクトを返します。不一致が解消されない場合、回答が黙って強制変換されるのではなく、structuredContent.schema.valid = false として示されます。スキーマ内の正規表現パターンは、壊滅的なバックトラッキング(ReDoS)の検査対象となり、安全でないパターンは無効なスキーマとして事前に拒否されます。
複数ターンのセッション例:
{
"messages": [
{
"role": "user",
"content": "What is the capital of France?"
}
],
"session_id": "my-session-1"
}
会話のコンテキストを維持するため、リクエスト間で同じsession_idを使用してください。メッセージはメモリに保存され、自動的に先頭に追加されます。HTTP トランスポートでは、接続された各 MCP セッションに独立したセッションストアがあります。ある HTTP クライアントが作成したsession_idは、別のクライアントからは参照できません(以下の HTTP トランスポートを参照)。
deepseek_fim
Fill-in-the-Middle 補完です。prompt(プレフィックス)と任意のsuffixを指定すると、モデルがその間のテキストを補完します。会話ではなく、コード補完やコンテンツの穴埋めを目的としています。FIM は DeepSeek の Beta エンドポイントで非思考モードで実行され、API の出力上限は 4096 トークンです。
パラメーター:
prompt(必須):空白箇所より前のプレフィックステキストです。コード補完の場合は、カーソル位置までのコードです。suffix(任意):空白箇所より後のテキストです。モデルはpromptとsuffixの間を補完します。model(任意):"deepseek-flash"(デフォルト)または "deepseek-v4-pro" です。従来の名前である "deepseek-v4-flash"、"deepseek-chat"、"deepseek-reasoner" も引き続き受け付けられ、deepseek-flash に解決されます(FIM に思考モードはありません)。max_tokens(任意):生成するトークンの最大数。上限は 4096 です。temperature(任意):0~2 の範囲で、ランダム性を制御します(デフォルト:1.0)。stop(任意):停止文字列、または最大 16 個の停止文字列を含む配列です。
レスポンスに含まれる内容:
- 補完テキスト
- リクエスト情報(トークン数、モデル、費用(USD))
text、usage、finish_reason、cost_usd、pricing_tierフィールドを含む構造化データ
例(コード補完):
{
"prompt": "def fib(n):\n if n < 2:\n return n\n return ",
"suffix": "\n\nprint(fib(10))",
"model": "deepseek-flash",
"max_tokens": 64
}
モデルは、プレフィックスとサフィックスの両方をコンテキストとして使用し、欠けている中央部分(例:fib(n-1) + fib(n-2))を返します。npm/stdio サーバーとホスト型ワーカーエンドポイントの両方で利用できます。
deepseek_sessions
会話セッションを管理します。
パラメーター:
action(必須):"list" | "clear" | "delete"session_id(任意):"delete"アクションの場合は必須です
例:
{"action": "list"}
{"action": "delete", "session_id": "my-session-1"}
{"action": "clear"}
利用可能なリソース
MCP リソースは、サーバーに関する読み取り専用データを提供します。
| リソース URI | 説明 |
|---|---|
deepseek://models | 利用可能なモデルと、その機能、コンテキスト上限、料金 |
deepseek://config | 現在のサーバー設定(API キーはマスクされています) |
deepseek://usage | リアルタイムの使用状況統計(リクエスト数、トークン数、費用、セッション数) |
モデルフォールバックとサーキットブレーカー
モデルが再試行可能なエラー(429、503、タイムアウト)で失敗すると、サーバーは自動的にもう一方のモデルにフォールバックします。
deepseek-flashが失敗 →deepseek-v4-proを試行deepseek-v4-proが失敗 →deepseek-flashを試行
従来の名前(deepseek-flash に解決されるもの)は、deepseek-v4-proにフォールバックします。
サーキットブレーカーは、連鎖的な障害を防ぎます。
CIRCUIT_BREAKER_THRESHOLDで指定された回数(デフォルト:5回)連続で失敗すると、サーキットが開きます(即時失敗モード)。CIRCUIT_BREAKER_RESET_TIMEOUTミリ秒(デフォルト:30000)経過すると、半開状態になり、プローブリクエストを送信します。- プローブが成功すると、サーキットが閉じ、通常の動作が再開されます。
FALLBACK_ENABLED=falseでフォールバックを無効にできます。
利用可能なプロンプト
プロンプトテンプレート(全 12 種類):
基本的な推論
- debug_with_reasoning:段階的な分析でコードをデバッグする
- code_review_deep:包括的なコードレビュー(セキュリティ、パフォーマンス、品質)
- research_synthesis:トピックを調査し、構造化されたレポートを作成する
- strategic_planning:推論に基づいて戦略的な計画を作成する
- explain_like_im_five:複雑なトピックをわかりやすく説明する
高度な機能
- mathematical_proof:数学的な命題を厳密に証明する
- argument_validation:議論を分析し、論理的誤謬を特定する
- creative_ideation:実現可能性の分析を伴う創造的なアイデアを生成する
- cost_comparison:タスクにかかる LLM の費用を比較する
- pair_programming:説明を交えながら対話形式でコーディングする
関数呼び出し
- function_call_debug:ツール定義やメッセージに関する関数呼び出しの問題をデバッグします
- create_function_schema:自然言語から関数呼び出し用の JSON Schema を生成します
各プロンプトは、思考モード(thinking: {type: "enabled"} を設定した deepseek-flash)向けに最適化されており、詳細な推論を提供します。
モデル
どちらのモデルも、コンテキストウィンドウは 1M トークン、出力上限は 384K トークンで、関数呼び出し、JSON モード、オプションの思考の連鎖に対応しています。ここでは高速な応答を優先し、デフォルトでは思考しない設定です。thinking: {type: "enabled"} を設定すると、推論が有効になります。
DeepSeek の料金は時間帯によって変わります。月曜日から金曜日の 01:00~04:00 と 06:00~10:00 UTC がピーク時間帯で、オフピーク料金の 2 倍です。週末を含むそれ以外の時間帯はすべてオフピークです。このサーバーが報告するコストには、リクエストの実行時に適用された料金が使用されます。以下の料金は 100 万トークンあたりの米ドルで、2026-10-23 時点の DeepSeek の料金ページに基づいています。
deepseek-flash(デフォルト)
- モデル:DeepSeek-V4.1-Flash-1017
- 最適な用途:一般的な会話、コーディング、コンテンツ生成、エージェントのループ
- コンテキスト:1M トークン
- 出力上限:384K トークン
- オフピーク:キャッシュヒット $0.003、キャッシュミス $0.15、出力 $0.60
- ピーク:キャッシュヒット $0.006、キャッシュミス $0.30、出力 $1.20
deepseek-v4-pro
- モデル:DeepSeek-V4-Pro-0813
- 最適な用途:より大規模なモデルを使いたい、難易度の高い複数ステップのタスク
- コンテキスト:1M トークン
- 出力上限:384K トークン
- オフピーク:キャッシュヒット $0.022、キャッシュミス $0.66、出力 $1.98
- ピーク:キャッシュヒット $0.044、キャッシュミス $1.32、出力 $3.96
DeepSeek 独自のベンチマークでは、V4.1 Flash は V4 Pro を上回っており、ほとんどの作業で Flash がより適したデフォルトです。
旧名称
deepseek-v4-flash、deepseek-chat、deepseek-reasoner も引き続き受け付けられ、deepseek-flash に解決されます(chat = 思考なし、reasoner = 思考あり)。DeepSeek はこれらの名称に対応するモデルを廃止しており、現在はいずれの名称にも V4.1 Flash を提供しているため、このサーバーは実際のリクエストでは deepseek-flash を送信します。deepseek-chat と deepseek-reasoner は次のメジャーリリースで削除されます。新しいセットアップでは deepseek-flash または deepseek-v4-pro を使用してください。
設定
サーバーは環境変数で設定します。DEEPSEEK_API_KEY 以外のすべての設定は省略可能です。
| 変数 | デフォルト | 説明 |
|---|---|---|
DEEPSEEK_API_KEY | (必須) | DeepSeek API キー |
DEEPSEEK_BASE_URL | https://api.deepseek.com | カスタム API エンドポイント |
DEFAULT_MODEL | deepseek-flash | リクエストのデフォルトモデル |
SHOW_COST_INFO | true | レスポンスにコスト情報を表示 |
REQUEST_TIMEOUT | 60000 | リクエストのタイムアウト(ミリ秒) |
MAX_RETRIES | 2 | リクエスト失敗時の最大再試行回数 |
SKIP_CONNECTION_TEST | false | 起動時の API 接続テストをスキップ |
MAX_MESSAGE_LENGTH | 100000 | メッセージ内容の最大文字数 |
SESSION_TTL_MINUTES | 30 | セッションの有効期間(分) |
MAX_SESSIONS | 100 | 同時セッション数の上限 |
FALLBACK_ENABLED | true | エラー発生時のモデル自動フォールバックを有効化 |
CIRCUIT_BREAKER_THRESHOLD | 5 | サーキットが開くまでの連続失敗回数 |
CIRCUIT_BREAKER_RESET_TIMEOUT | 30000 | サーキットが半開状態になるまでのミリ秒数 |
MAX_SESSION_MESSAGES | 200 | セッションあたりの最大メッセージ数(スライディングウィンドウ) |
RESPONSE_SCHEMA_MAX_RETRIES | 2 | response_schema の検証失敗時の修復再試行回数(0 で無効) |
ENABLE_MULTIMODAL | false | マルチモーダル(画像)入力のサポートを有効化 |
TRANSPORT | stdio | トランスポートモード:stdio または http |
HTTP_PORT | 3000 | HTTP サーバーのポート(TRANSPORT=http の場合) |
HTTP_HOST | 127.0.0.1 | HTTP トランスポートのバインドアドレス。新規実行時に公開されないよう、デフォルトではループバックに設定されています。リモート接続を受け付けるには 0.0.0.0 に設定します(認証または前段のプロキシがある場合に限ってください) |
HTTP_AUTH_TOKEN | (未設定) | 設定すると、POST /mcp に Authorization: Bearer <token> が必要になります。/health は引き続き公開されます。ポートが localhost の範囲外から到達可能な場合は、強く推奨します |
HTTP_ALLOWED_HOSTS | (未設定) | 0.0.0.0 にバインドする際の DNS リバインディング対策として許可する Host ヘッダーのカンマ区切りリスト(例:mcp.example.com,localhost)。Docker イメージではデフォルトで localhost,127.0.0.1,[::1] に設定されます |
HTTP_ALLOW_UNPROTECTED_BIND | false | true に設定すると、HTTP_ALLOWED_HOSTS も HTTP_AUTH_TOKEN も設定せずに 0.0.0.0 へバインドします。それ以外の場合、この組み合わせではサーバーの起動が拒否されます |
カスタム設定の例:
claude mcp add -s user deepseek npx @arikusi/deepseek-mcp-server \
-e DEEPSEEK_API_KEY=your-key \
-e SHOW_COST_INFO=false \
-e REQUEST_TIMEOUT=30000
開発
プロジェクト構成
deepseek-mcp-server/
├── worker/ # Cloudflare Worker (remote BYOK endpoint)
│ ├── src/index.ts # Worker entry point
│ ├── wrangler.toml # Cloudflare config
│ └── package.json
├── src/
│ ├── index.ts # Entry point, bootstrap
│ ├── server.ts # McpServer factory (auto-version)
│ ├── deepseek-client.ts # DeepSeek API wrapper (circuit breaker + fallback)
│ ├── config.ts # Centralized config with Zod validation
│ ├── cost.ts # Cost calculation and formatting
│ ├── schemas.ts # Zod input validation schemas
│ ├── types.ts # TypeScript types + type guards
│ ├── errors.ts # Custom error classes
│ ├── session.ts # In-memory session store (multi-turn)
│ ├── circuit-breaker.ts # Circuit breaker pattern
│ ├── usage-tracker.ts # Usage statistics tracker
│ ├── transport-http.ts # Streamable HTTP transport (Express)
│ ├── tools/
│ │ ├── deepseek-chat.ts # deepseek_chat tool (sessions + fallback)
│ │ ├── deepseek-fim.ts # deepseek_fim tool (fill-in-the-middle)
│ │ ├── deepseek-sessions.ts # deepseek_sessions tool
│ │ └── index.ts # Tool registration aggregator
│ ├── resources/
│ │ ├── models.ts # deepseek://models resource
│ │ ├── config.ts # deepseek://config resource
│ │ ├── usage.ts # deepseek://usage resource
│ │ └── index.ts # Resource registration aggregator
│ └── prompts/
│ ├── core.ts # 5 core reasoning prompts
│ ├── advanced.ts # 5 advanced prompts
│ ├── function-calling.ts # 2 function calling prompts
│ └── index.ts # Prompt registration aggregator
├── dist/ # Compiled JavaScript
├── llms.txt # AI discoverability index
├── llms-full.txt # Full docs for LLM context
├── vitest.config.ts # Test configuration
├── package.json
├── tsconfig.json
└── README.md
ビルド
npm run build
ウォッチモード(開発用)
npm run watch
テスト
# Run all tests
npm test
# Watch mode
npm run test:watch
# With coverage report
npm run test:coverage
ローカルでのテスト
# Set API key
export DEEPSEEK_API_KEY="your-key"
# Run the server
npm start
サーバーが起動し、stdio 経由で MCP クライアントから接続されるのを待ちます。
リモートエンドポイント(ホスト型)
BYOK(Bring Your Own Key)方式のホスト型エンドポイントを利用できます。
https://deepseek-mcp.tahirl.com/mcp
DeepSeek API キーを Authorization: Bearer <key> として送信します。サーバー側には API キーは保存されず、リクエストごとにキーが直接使用されます。Cloudflare Workers を利用しており、グローバルエッジでコールドスタートは発生しません。
注: 複雑なクエリでは、思考モードにより 30 秒を超える場合があります。一部の MCP クライアント(例:Claude Code)にはツール呼び出しのタイムアウトが組み込まれており、長時間のリクエストが中断されることがあります。レイテンシが重要な場合は、デフォルトの非思考モードを推奨します。
# Test health
curl https://deepseek-mcp.tahirl.com/health
# Test MCP (requires auth)
curl -X POST https://deepseek-mcp.tahirl.com/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_KEY" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{}},"id":1}'
HTTP トランスポート(セルフホスト)
独自の HTTP エンドポイントを起動します。
TRANSPORT=http HTTP_PORT=3000 DEEPSEEK_API_KEY=your-key node dist/index.js
ヘルスエンドポイントをテストします。
curl http://localhost:3000/health
MCP エンドポイントは POST /mcp(Streamable HTTP プロトコル)で利用できます。
エンドポイントのセキュリティ保護(公開する前にお読みください)。 セルフホストの HTTP モードでは、サーバーが DEEPSEEK_API_KEY を保持し、すべての deepseek_chat 呼び出しに使用します。POST /mcp にアクセスできる人は誰でもツールを呼び出してこのキーを使用できるため、エンドポイントをパブリックインターフェイスで公開したままにしてはいけません。デフォルト設定はこれを考慮しています。
HTTP_HOSTのデフォルトは127.0.0.1です。そのため、通常の起動ではループバックのみでリッスンし、SDK の DNS リバインディング保護が有効になります。マシンの外部からはアクセスできません。- リモート接続を受け入れるには、
HTTP_HOST=0.0.0.0を設定し、さらにHTTP_AUTH_TOKEN(/mcpにAuthorization: Bearer <token>が必要になります)またはHTTP_ALLOWED_HOSTSのいずれかを設定してください。どちらも設定せずに0.0.0.0にバインドすると、SDK のHostヘッダー検証が完全に無効になります。その場合、アクセスした任意のウェブページから DNS リバインディングで/mcpにアクセスできるため、警告ではなくサーバーの起動拒否によって対処します。本当にオープンなエンドポイントが必要な場合は、HTTP_ALLOW_UNPROTECTED_BIND=trueで起動拒否を解除できます。 - インターネットに公開する場合は、TLS を設定した認証付きリバースプロキシを前段に配置し、
HTTP_ALLOWED_HOSTSに実際のホスト名を設定してください。
# Exposed deployment with a bearer token
TRANSPORT=http HTTP_HOST=0.0.0.0 HTTP_PORT=3000 \
HTTP_AUTH_TOKEN=$(openssl rand -hex 32) \
HTTP_ALLOWED_HOSTS=mcp.example.com \
DEEPSEEK_API_KEY=your-key node dist/index.js
# Calling it
curl -X POST http://mcp.example.com:3000/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{}},"id":1}'
HTTP_AUTH_TOKEN はセルフホストのエンドポイント用の静的なゲートウェイトークンであり、DeepSeek のキーとは無関係です。これは、クライアントが自身の DeepSeek キーをベアラーとして渡す、上記のホスト型 BYOK エンドポイントとは別のものです。
セッションの分離(1.7.0 以降): HTTP トランスポートでは、接続された各 MCP セッションにそれぞれ独自の McpServer インスタンスと SessionStore が割り当てられます。会話履歴、セッション一覧、削除は、それらを作成した MCP セッションの範囲に限定されるため、あるクライアントが別のクライアントのセッションを読み取ったり、一覧表示したり、削除したりすることはできません。STDIO トランスポートは本質的にシングルテナントであるため、影響を受けません。
Docker
# Build
docker build -t deepseek-mcp-server .
# Run, reachable only from the host's loopback, with a bearer token
docker run -d -p 127.0.0.1:3000:3000 \
-e DEEPSEEK_API_KEY=your-key \
-e HTTP_AUTH_TOKEN=your-token \
deepseek-mcp-server
# Or use docker-compose
DEEPSEEK_API_KEY=your-key HTTP_AUTH_TOKEN=your-token docker compose up -d
イメージは、ヘルスチェック付きの HTTP トランスポートをポート 3000 で実行します。コンテナ内ではポートマッピングに必要なため 0.0.0.0 にバインドします。したがって、公開範囲はポート公開レイヤーで制御してください。上記の例と同梱の docker-compose.yml は、127.0.0.1 のみに公開します。
ループバックで公開するだけでは十分ではありません。DNS リバインディングは、ブラウザーがすでにアクセスできる自身のループバックアドレスを標的にするためです。そのため、イメージには HTTP_ALLOWED_HOSTS=localhost,127.0.0.1,[::1] が設定されており、Host の検証が有効なままになります。実際のホスト名で公開しますか?そのホスト名をリストに追加してください。追加しない場合、そのホスト名を含むすべてのリクエストが 403 になります。パブリックインターフェイスで公開しますか?その場合は HTTP_AUTH_TOKEN も設定してください。
トラブルシューティング
「DEEPSEEK_API_KEY 環境変数が設定されていません」
オプション 1:正しいインストールコマンドを使用する
# Make sure to include -e flag with your API key
claude mcp add deepseek npx @arikusi/deepseek-mcp-server -e DEEPSEEK_API_KEY=your-key-here
オプション 2:設定ファイルを手動で編集する
API キーを設定せずにインストールした場合は、設定ファイルを編集してください。
- Claude Code の場合:
~/.claude.jsonを開きます(Windows:C:\Users\USERNAME\.claude.json) - プロジェクトのパスの下にある
"mcpServers"セクションを見つけます - API キーを指定した
envフィールドを追加します。
"deepseek": {
"type": "stdio",
"command": "npx",
"args": ["@arikusi/deepseek-mcp-server"],
"env": {
"DEEPSEEK_API_KEY": "your-api-key-here"
}
}
- 保存して Claude Code を再起動します
「DeepSeek API への接続に失敗しました」
- API キーが有効であることを確認します
- インターネットに接続されていることを確認します
- https://status.deepseek.com で DeepSeek API のステータスを確認します
MCP クライアントにサーバーが表示されない
dist/index.jsのパスが正しいことを確認しますnpm run buildを実行したことを確認します- MCP クライアントのログでエラーを確認します
- MCP クライアントを完全に再起動します
macOS/Linux でのアクセス許可エラー
ファイルを実行可能にします。
chmod +x dist/index.js
npm への公開
この MCP サーバーを他のユーザーと共有するには、次の手順を実行します。
npm loginを実行しますnpm publish --access publicを実行します
その後、ユーザーは次のコマンドでインストールできます。
npm install -g @arikusi/deepseek-mcp-server
コントリビューション
コントリビューションを歓迎します。PR を送信する前に、コントリビューションガイドラインをお読みください。
問題の報告
バグを見つけた場合や機能をリクエストする場合は、テンプレートを使用してイシューを作成してください。
開発
# Clone the repo
git clone https://github.com/arikusi/deepseek-mcp-server.git
cd deepseek-mcp-server
# Install dependencies
npm install
# Build in watch mode
npm run watch
# Run tests
npm test
# Lint
npm run lint
変更履歴
バージョン履歴と更新内容については、CHANGELOG.mdをご覧ください。
ライセンス
MITライセンスです。詳細はLICENSEファイルをご覧ください。
サポート
- ドキュメント
- バグ報告
- ディスカッション
- お問い合わせ:GitHub Issues
リソース
- DeepSeek Platform - APIキーを取得できます
- Model Context Protocol - MCP の仕様
- DeepSeek API Documentation - API リファレンス
謝辞
- Model Context Protocol SDKを使用して構築されています
- API との互換性のためにOpenAI SDKを使用しています
- MCP コミュニティ向けに作成されました
@arikusiによる作成
DeepSeek API 向けの、独立したコミュニティ運営の MCP サーバーです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。