SingleStore MCP Server

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Allows querying and interacting with SingleStore databases, including listing tables, executing SQL queries, getting table information, generating ER diagrams, and optimizing SQL queries

シングルストア MCP サーバー

SingleStoreデータベースと連携するためのモデルコンテキストプロトコル(MCP)サーバー。このサーバーは、テーブルのクエリ、スキーマの記述、ERダイアグラムの生成のためのツールを提供します。

特徴

  • データベース内のすべてのテーブルを一覧表示する
  • カスタムSQLクエリを実行する
  • スキーマやサンプルデータを含む詳細なテーブル情報を取得します
  • データベーススキーマの Mermaid ER 図を生成する
  • 自動 CA バンドル取得による SSL サポート
  • 適切なエラー処理とTypeScriptの型安全性

前提条件

  • Node.js 16以上
  • npmまたはyarn
  • SingleStoreデータベースへのアクセス
  • SingleStore CA バンドル (ポータルから自動的に取得)

インストール

Smithery経由でインストール

Smithery経由で Claude Desktop 用の SingleStore MCP Server を自動的にインストールするには:

npx -y @smithery/cli install @madhukarkumar/singlestore-mcp-server --client claude
  1. リポジトリをクローンします。
git clone <repository-url> cd mcp-server-singlestore
  1. 依存関係をインストールします:
npm install
  1. サーバーを構築します。
npm run build

環境変数

必要な環境変数

サーバーは、データベース接続に次の環境変数を必要とします。

SINGLESTORE_HOST=your-host.singlestore.com SINGLESTORE_PORT=3306 SINGLESTORE_USER=your-username SINGLESTORE_PASSWORD=your-password SINGLESTORE_DATABASE=your-database

これらの環境変数はすべて、サーバーがSingleStoreデータベースへの接続を確立するために必要です。接続には、SingleStoreポータルから自動的に取得されるSingleStore CAバンドルを使用したSSLが使用されます。

オプションの環境変数

SSE (Server-Sent Events) プロトコルのサポート:

SSE_ENABLED=true # Enable the SSE HTTP server (default: false if not set) SSE_PORT=3333 # HTTP port for the SSE server (default: 3333 if not set)

環境変数の設定

  1. シェルの場合: サーバーを実行する前にターミナルで変数を設定します。
    export SINGLESTORE_HOST=your-host.singlestore.com export SINGLESTORE_PORT=3306 export SINGLESTORE_USER=your-username export SINGLESTORE_PASSWORD=your-password export SINGLESTORE_DATABASE=your-database
  2. クライアント構成ファイル: 以下の統合セクションに示すように、MCP クライアント構成ファイルに変数を追加します。

使用法

プロトコルサポート

このサーバーは、クライアント統合用の 2 つのプロトコルをサポートしています。

  1. MCP プロトコル: Claude Desktop、Windsurf、および Cursor で使用される、stdio 通信を使用する標準モデル コンテキスト プロトコル。
  2. SSE プロトコル: リアルタイムのデータ ストリーミングを必要とする Web ベースのクライアントおよびアプリケーション用の、HTTP 経由のサーバー送信イベント。

どちらのプロトコルも同じツールと機能を公開しているため、ユースケースに最適な統合方法を選択できます。

利用可能なツール

  1. リストテーブル
    • データベース内のすべてのテーブルを一覧表示します
    • パラメータ不要 GXP8
  2. クエリテーブル
    • カスタムSQLクエリを実行する
    • パラメータ:
      • クエリ: SQLクエリ文字列 GXP9
  3. テーブルの説明
    • テーブルに関する詳細情報を取得します
    • パラメータ:
      • テーブル: テーブル名 GXP10
  4. 図を生成する
    • データベーススキーマのMermaid ER図を生成します
    • パラメータ不要 GXP11
  5. 実行読み取りクエリ
    • データベースに対して読み取り専用(SELECT)クエリを実行します。
    • パラメータ:
      • クエリ: GXP12を実行するためのSQL SELECTクエリ
  6. テーブル作成
    • 指定された列と制約を持つデータベースに新しいテーブルを作成します
    • パラメータ:
      • table_name: 作成するテーブルの名前
      • columns: 列定義の配列
      • table_options: オプションのテーブル構成 GXP13
  7. 合成データを生成する
    • 合成データを生成し、既存のテーブルに挿入する
    • パラメータ:
      • テーブル: データを挿入するテーブルの名前
      • count: 生成する行数(デフォルト: 100)
      • column_generators: 特定の列用のカスタムジェネレーター
      • バッチサイズ: 各バッチに挿入する行数(デフォルト: 1000)GXP14
  8. 最適化SQL
    • PROFILE を使用して SQL クエリを分析し、最適化の推奨事項を提供します
    • パラメータ:
      • クエリ: GXP15 を分析および最適化するための SQL クエリ
    • 応答には次のものが含まれます。
      • 元のクエリ
      • パフォーマンス プロファイルの概要 (合計実行時間、コンパイル時間、実行時間)
      • 検出されたボトルネックのリスト
      • 影響レベル(高/中/低)による最適化の推奨事項
      • インデックス、結合、メモリ使用量、その他の最適化に関する提案

スタンドアロン実行

  1. サーバーを構築します。
npm run build
  1. MCP プロトコルのみでサーバーを実行します。
node build/index.js
  1. MCP プロトコルと SSE プロトコルの両方を使用してサーバーを実行します。
SSE_ENABLED=true SSE_PORT=3333 node build/index.js

SSEプロトコルの使用

SSE が有効になっている場合、サーバーは次の HTTP エンドポイントを公開します。

  1. ルートエンドポイント
    GET /
    サーバー情報と利用可能なエンドポイントを返します。
  2. 健康チェック
    GET /health
    サーバーのステータス情報を返します。
  3. SSE接続
    GET /sse
    リアルタイム更新のために Server-Sent Events 接続を確立します。
  4. リストツール
    GET /tools
    MCP list_tools機能と同じように、使用可能なすべてのツールのリストを返します。MCP Inspector との互換性のために POST リクエストもサポートします。
    POST /tools Content-Type: application/json { "jsonrpc": "2.0", "id": "request-id", "method": "mcp.list_tools", "params": {} }
  5. 通話ツール
    POST /call-tool Content-Type: application/json { "name": "tool_name", "arguments": { "param1": "value1", "param2": "value2" }, "client_id": "optional_sse_client_id_for_streaming_response" }
    指定された引数を使用してツールを実行します。
    • client_idが指定されている場合、応答はその SSE クライアントにストリーミングされます。
    • client_idを省略すると、応答は HTTP 応答で直接返されます。

    MCP Inspector との互換性のために標準の MCP 形式もサポートしています。

    POST /call-tool Content-Type: application/json { "jsonrpc": "2.0", "id": "request-id", "method": "mcp.call_tool", "params": { "name": "tool_name", "arguments": { "param1": "value1", "param2": "value2" }, "_meta": { "client_id": "optional_sse_client_id_for_streaming_response" } } }

SSEイベントの種類

SSE 接続を使用する場合、サーバーは次のイベント タイプを送信します。

  1. メッセージ(名前のないイベント): SSE 接続が正常に確立されたときに送信されます。
  2. open : 追加の接続確立イベント。
  3. メッセージ: ツールの開始、結果、エラー イベントを含むすべての MCP プロトコル メッセージに使用されます。

すべてのイベントは、MCPプロトコルで使用されるJSON-RPC 2.0形式に準拠しています。システムは、MCPインスペクタおよびほとんどのSSEクライアントライブラリとの互換性を確保するために、標準のmessageイベントタイプを使用しています。

JavaScriptクライアントの例

// Connect to SSE endpoint const eventSource = new EventSource('http://localhost:3333/sse'); let clientId = null; // Handle connection establishment via unnamed event eventSource.onmessage = (event) => { const data = JSON.parse(event.data); if (data.type === 'connection_established') { clientId = data.clientId; console.log(`Connected with client ID: ${clientId}`); } }; // Handle open event eventSource.addEventListener('open', (event) => { console.log('SSE connection opened via open event'); }); // Handle all MCP messages eventSource.addEventListener('message', (event) => { const data = JSON.parse(event.data); if (data.jsonrpc === '2.0') { if (data.result) { console.log('Tool result:', data.result); } else if (data.error) { console.error('Tool error:', data.error); } else if (data.method === 'mcp.call_tool.update') { console.log('Tool update:', data.params); } } }); // Call a tool with streaming response (custom format) async function callTool(name, args) { const response = await fetch('http://localhost:3333/call-tool', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: name, arguments: args, client_id: clientId }) }); return response.json(); } // Call a tool with streaming response (MCP format) async function callToolMcp(name, args) { const response = await fetch('http://localhost:3333/call-tool', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ jsonrpc: '2.0', id: 'request-' + Date.now(), method: 'mcp.call_tool', params: { name: name, arguments: args, _meta: { client_id: clientId } } }) }); return response.json(); } // Example usage callTool('list_tables', {}) .then(response => console.log('Request accepted:', response));

MCP Inspectorと併用

MCP Inspectorは、MCPサーバーのテストとデバッグのためのブラウザベースのツールです。このサーバーで使用するには、以下の手順に従ってください。

  1. 1 つのコマンドでサーバーと MCP インスペクターの両方を起動します。
    npm run inspector
    または、次のコマンドでサーバーのみを起動します。
    npm run start:inspector
  2. MCP Inspector を個別にインストールして実行するには:
    npx @modelcontextprotocol/inspector
    インスペクターはデフォルトのブラウザで開きます。
  3. MCP インスペクターが開いたら:a. 接続フィールドにURLを入力します。
    http://localhost:8081
    注: 実際のポートは設定によって異なる場合があります。実際に使用されているポートについては、サーバーの起動ログを確認してください。サーバーは次のように出力します。
    MCP SingleStore SSE server listening on port XXXX
    b. トランスポートタイプとして「SSE」が選択されていることを確認します。c. 「接続」をクリックする
  4. 接続の問題が発生した場合は、次の代替案を試してください。a. 特定のエンドポイントに接続してみます。
    http://localhost:8081/stream
    b. マシンの実際の IP アドレスを使用してみます。
    http://192.168.1.x:8081
    c. Dockerで実行している場合:
    http://host.docker.internal:8081
  5. 接続の問題のデバッグ:a. ブラウザでhttp://localhost:8081にアクセスして、サーバーが動作していることを確認します。b. サーバーログで接続試行を確認するc. サーバーとインスペクターの両方を再起動してみてくださいd. 他のサービスがポート8081を使用していないことを確認するe. 提供されたスクリプトを使用して SSE 接続をテストします。
    npm run test:sse
    または、curl を使用して手動で実行します。
    curl -N http://localhost:8081/sse
    f. ファイアウォールの設定でポート8081への接続が許可されていることを確認します。
  6. 接続すると、インスペクターに利用可能なすべてのツールが表示され、インタラクティブにテストできるようになります。

⚠️注意: MCP インスペクターを使用する場合は、 http://プレフィックスを含む完全な URL を使用する必要があります。

MCPクライアント統合

Claude Desktopへのインストール

  1. 次の場所にある Claude Desktop 構成ファイルにサーバー構成を追加します。
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
{ "mcpServers": { "singlestore": { "command": "node", "args": ["path/to/mcp-server-singlestore/build/index.js"], "env": { "SINGLESTORE_HOST": "your-host.singlestore.com", "SINGLESTORE_PORT": "3306", "SINGLESTORE_USER": "your-username", "SINGLESTORE_PASSWORD": "your-password", "SINGLESTORE_DATABASE": "your-database", "SSE_ENABLED": "true", "SSE_PORT": "3333" } } } }

SSE_ENABLED および SSE_PORT 変数はオプションです。標準の MCP プロトコルに加えて、SSE サポート付きの HTTP サーバーを有効にする場合は、これらの変数を含めてください。

  1. Claudeデスクトップアプリを再起動します
  2. Claude との会話では、SingleStore MCP サーバーを次のように使用できるようになりました。
use_mcp_tool({ server_name: "singlestore", tool_name: "list_tables", arguments: {} })

Windsurfへのインストール

  1. 次の場所にある Windsurf 構成ファイルにサーバー構成を追加します。
    • macOS: ~/Library/Application Support/Windsurf/config.json
    • Windows: %APPDATA%\Windsurf\config.json
{ "mcpServers": { "singlestore": { "command": "node", "args": ["path/to/mcp-server-singlestore/build/index.js"], "env": { "SINGLESTORE_HOST": "your-host.singlestore.com", "SINGLESTORE_PORT": "3306", "SINGLESTORE_USER": "your-username", "SINGLESTORE_PASSWORD": "your-password", "SINGLESTORE_DATABASE": "your-database", "SSE_ENABLED": "true", "SSE_PORT": "3333" } } } }

SSE_ENABLED および SSE_PORT 変数はオプションですが、SSE HTTP サーバーを通じて追加機能を有効にします。

  1. ウィンドサーフィンを再開
  2. Windsurf での Claude との会話では、Claude がデータベース情報にアクセスする必要があるときに、SingleStore MCP ツールが自動的に使用できるようになります。

カーソルへのインストール

  1. カーソル設定にサーバー構成を追加します。
    • オープンカーソル
    • 設定(歯車アイコン)>拡張機能>Claude AI>MCPサーバーに移動します
    • 次の構成で新しい MCP サーバーを追加します。
{ "singlestore": { "command": "node", "args": ["path/to/mcp-server-singlestore/build/index.js"], "env": { "SINGLESTORE_HOST": "your-host.singlestore.com", "SINGLESTORE_PORT": "3306", "SINGLESTORE_USER": "your-username", "SINGLESTORE_PASSWORD": "your-password", "SINGLESTORE_DATABASE": "your-database", "SSE_ENABLED": "true", "SSE_PORT": "3333" } } }

SSE_ENABLED および SSE_PORT 変数により、Web アプリケーションは HTTP 経由でサーバーに接続し、Server-Sent Events を通じてリアルタイムの更新を受信できるようになります。

  1. カーソルを再開
  2. Cursor 内で Claude AI を使用する場合、データベース操作に SingleStore MCP ツールが使用できるようになります。

セキュリティに関する考慮事項

  1. バージョン管理に資格情報をコミットしない
  2. 環境変数または安全な構成管理を使用する
  3. 実稼働環境での接続プーリングメカニズムの使用を検討する
  4. SingleStore で適切なアクセス制御とユーザー権限を実装する
  5. SingleStore CAバンドルを最新の状態に保つ

発達

プロジェクト構造

mcp-server-singlestore/ ├── src/ │ └── index.ts # Main server implementation ├── package.json ├── tsconfig.json ├── README.md └── CHANGELOG.md

建物

npm run build

テスト

npm test

トラブルシューティング

  1. 接続の問題
    • 環境変数の資格情報とホスト情報を確認する
    • SSL設定を確認する
    • ネットワークからデータベースにアクセスできることを確認する
    • ファイアウォールの設定を確認し、SingleStore データベースへの送信接続を許可してください。
  2. ビルドの問題
    • node_modulesをクリアして依存関係を再インストールする
    • TypeScriptの設定を確認する
    • Node.js バージョンの互換性を確認します (16 以上である必要があります)
  3. MCP統合の問題
    • クライアント構成でサーバーのbuild/index.jsファイルへのパスが正しいことを確認します。
    • クライアント構成ですべての環境変数が適切に設定されていることを確認します
    • 構成を変更した後、クライアントアプリケーションを再起動します。
    • クライアントログでMCPサーバーに関連するエラーメッセージを確認します。
    • まずサーバーをスタンドアロンで実行して、クライアントの外で動作するか確認します。

貢献

  1. リポジトリをフォークする
  2. 機能ブランチを作成する
  3. 変更をコミットする
  4. ブランチにプッシュする
  5. プルリクエストを作成する

ライセンス

MITライセンス - 詳細はLICENSEファイルを参照

ID: 6t5uvbrpor