LinSoap

LinSoap

Null
github
x
bilibili

TypeScriptで最初のMCPを実行し、Deepseekを使用してsqliteデータベースをクエリする

最近最火の AI 技術は MCP でしょう。MCP の概念をまだ理解していない方は、Model Context Protocol 文書を確認することをお勧めします。そこでは MCP の概念と規範が詳しく説明されています。この記事では公式の TypeScript SDK を使用し、DeepSeek にリクエストを送信し、サーバーからクライアントまで簡単に Sqlite MCP を実装し、MCP 開発を順調に開始します。

プロジェクトの初期化#

本プロジェクトのすべてのリソースはこの git リポジトリTypeScript-MCP-Sqlite-Quickstartにあります。使用する sqlite ファイルが含まれており、直接プルすることも、手順に従って初期化し、自分でデータベースを作成することもできます。

プロジェクトの作成

package.json と tsconfig.json の設定 package.json

tsconfig.json

MCP サーバーの作成#

MCP サーバーには 2 つの起動方法があります。1 つは Stdio、もう 1 つは SSE です。このセクションでは両方を紹介します。まずは Stdio 方式を紹介します。

Stdio トランスポート#

./server/sqlite_stdio.ts ファイルに追加

build を使用して ts ファイルをコンパイルします。inspectorは公式が提供する MCP サーバーの検査ツールで、inspector を使用してサーバーサービスが正常かどうかを確認します。

Stdio の実行結果

SSE トランスポート#

./server/sqlite_sse.ts に追加

サーバーの作成が完了したら、同様にコンパイルを行い、express サービスを実行し、Inspector を使用して機能が正常かどうかをテストします。

Inspector を開き、トランスポートタイプを sse に設定し、URL をhttp://localhost:3001/sseに設定して接続をクリックし、ツールをテストします。

#

SSE テスト結果

MCP クライアントの作成#

MCP クライアントも同様に 2 つのトランスポートをサポートしています。1 つは stdio、もう 1 つは sse で、サーバーと対応しています。index.ts に追加します。

MCP クライアントの作成が完了したら、ts をコンパイルし、MCP クライアントを実行します。利用可能なツールリストが表示されれば、クライアントは正常に動作しています。

#

MCP クライアントのツール結果

Deepseek にリクエストを送信して MCP を呼び出す#

deepseek は openai sdk を使用してリクエストを送信できます。リクエストを送信する際に、パラメータに tools を含めることができます。openai の Tools パラメータの定義と anthropic の tools パラメータの定義は異なるため、取得した tools を必要に応じて変換します。 変換関数

これで、tools 情報を正常に取得しました。Deepseek にリクエストを送信する際に tools パラメータを含め、response の finish_reason を監視します。もし tools_calls であれば、response の tool_calls 内の name と args を取得します。その後、MCP クライアントの callTool メソッドを呼び出し、取得した結果を Deepseek に再送信します。これで Deepseek はデータベース内の情報を正常に取得できます。

これで Deepseek が MCP を通じてデータベース情報を取得することができました。以下のコマンドで呼び出し状況を確認できます。

実行結果

次のステップ#

これで最も簡単な MCP プロセスが完了しました。改善できる点がたくさんあります。

  • このプロセスは最も簡単な SQL クエリ機能を提供します。サーバーの説明も粗いものであり、毎回大モデルがツールを正常に呼び出すわけではありません。

  • 現在のリクエスト方式は非ストリーミングであり、ストリーミングに改善できます。

  • 現在は一度のツール呼び出ししかサポートしておらず、複数回の呼び出しを実現できません。MCP の能力をより良く発揮するために、複数回の呼び出しを許可する必要があります。

  • 現在、1 つのクライアントは 1 つのサーバーにしか接続できないようで、複数のサービスがある場合、クライアントを効率的に管理する方法も問題です。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。