シングルストア MCP サーバー
SingleStoreデータベースと連携するためのモデルコンテキストプロトコル(MCP)サーバー。このサーバーは、テーブルのクエリ、スキーマの記述、ERダイアグラムの生成のためのツールを提供します。
特徴
データベース内のすべてのテーブルを一覧表示する
カスタムSQLクエリを実行する
スキーマやサンプルデータを含む詳細なテーブル情報を取得します
データベーススキーマの Mermaid ER 図を生成する
自動 CA バンドル取得による SSL サポート
適切なエラー処理とTypeScriptの型安全性
Related MCP server: MCP PostgreSQL Server
前提条件
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リポジトリをクローンします。
git clone <repository-url>
cd mcp-server-singlestore依存関係をインストールします:
npm installサーバーを構築します。
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)環境変数の設定
シェルの場合: サーバーを実行する前にターミナルで変数を設定します。
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クライアント構成ファイル: 以下の統合セクションに示すように、MCP クライアント構成ファイルに変数を追加します。
使用法
プロトコルサポート
このサーバーは、クライアント統合用の 2 つのプロトコルをサポートしています。
MCP プロトコル: Claude Desktop、Windsurf、および Cursor で使用される、stdio 通信を使用する標準モデル コンテキスト プロトコル。
SSE プロトコル: リアルタイムのデータ ストリーミングを必要とする Web ベースのクライアントおよびアプリケーション用の、HTTP 経由のサーバー送信イベント。
どちらのプロトコルも同じツールと機能を公開しているため、ユースケースに最適な統合方法を選択できます。
利用可能なツール
リストテーブル
データベース内のすべてのテーブルを一覧表示します
パラメータ不要 GXP8
クエリテーブル
カスタムSQLクエリを実行する
パラメータ:
クエリ: SQLクエリ文字列 GXP9
テーブルの説明
テーブルに関する詳細情報を取得します
パラメータ:
テーブル: テーブル名 GXP10
図を生成する
データベーススキーマのMermaid ER図を生成します
パラメータ不要 GXP11
実行読み取りクエリ
データベースに対して読み取り専用(SELECT)クエリを実行します。
パラメータ:
クエリ: GXP12を実行するためのSQL SELECTクエリ
テーブル作成
指定された列と制約を持つデータベースに新しいテーブルを作成します
パラメータ:
table_name: 作成するテーブルの名前
columns: 列定義の配列
table_options: オプションのテーブル構成 GXP13
合成データを生成する
合成データを生成し、既存のテーブルに挿入する
パラメータ:
テーブル: データを挿入するテーブルの名前
count: 生成する行数(デフォルト: 100)
column_generators: 特定の列用のカスタムジェネレーター
バッチサイズ: 各バッチに挿入する行数(デフォルト: 1000)GXP14
最適化SQL
PROFILE を使用して SQL クエリを分析し、最適化の推奨事項を提供します
パラメータ:
クエリ: GXP15 を分析および最適化するための SQL クエリ
応答には次のものが含まれます。
元のクエリ
パフォーマンス プロファイルの概要 (合計実行時間、コンパイル時間、実行時間)
検出されたボトルネックのリスト
影響レベル(高/中/低)による最適化の推奨事項
インデックス、結合、メモリ使用量、その他の最適化に関する提案
スタンドアロン実行
サーバーを構築します。
npm run buildMCP プロトコルのみでサーバーを実行します。
node build/index.jsMCP プロトコルと SSE プロトコルの両方を使用してサーバーを実行します。
SSE_ENABLED=true SSE_PORT=3333 node build/index.jsSSEプロトコルの使用
SSE が有効になっている場合、サーバーは次の HTTP エンドポイントを公開します。
ルートエンドポイント
GET /サーバー情報と利用可能なエンドポイントを返します。
健康チェック
GET /healthサーバーのステータス情報を返します。
SSE接続
GET /sseリアルタイム更新のために Server-Sent Events 接続を確立します。
リストツール
GET /toolsMCP
list_tools機能と同じように、使用可能なすべてのツールのリストを返します。MCP Inspector との互換性のために POST リクエストもサポートします。
POST /tools Content-Type: application/json { "jsonrpc": "2.0", "id": "request-id", "method": "mcp.list_tools", "params": {} }通話ツール
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 接続を使用する場合、サーバーは次のイベント タイプを送信します。
メッセージ(名前のないイベント): SSE 接続が正常に確立されたときに送信されます。
open : 追加の接続確立イベント。
メッセージ: ツールの開始、結果、エラー イベントを含むすべての 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 つのコマンドでサーバーと MCP インスペクターの両方を起動します。
npm run inspectorまたは、次のコマンドでサーバーのみを起動します。
npm run start:inspectorMCP Inspector を個別にインストールして実行するには:
npx @modelcontextprotocol/inspectorインスペクターはデフォルトのブラウザで開きます。
MCP インスペクターが開いたら:
a. 接続フィールドにURLを入力します。
http://localhost:8081注: 実際のポートは設定によって異なる場合があります。実際に使用されているポートについては、サーバーの起動ログを確認してください。サーバーは次のように出力します。
MCP SingleStore SSE server listening on port XXXXb. トランスポートタイプとして「SSE」が選択されていることを確認します。
c. 「接続」をクリックする
接続の問題が発生した場合は、次の代替案を試してください。
a. 特定のエンドポイントに接続してみます。
http://localhost:8081/streamb. マシンの実際の IP アドレスを使用してみます。
http://192.168.1.x:8081c. Dockerで実行している場合:
http://host.docker.internal:8081接続の問題のデバッグ:
a. ブラウザでhttp://localhost:8081にアクセスして、サーバーが動作していることを確認します。
b. サーバーログで接続試行を確認する
c. サーバーとインスペクターの両方を再起動してみてください
d. 他のサービスがポート8081を使用していないことを確認する
e. 提供されたスクリプトを使用して SSE 接続をテストします。
npm run test:sseまたは、curl を使用して手動で実行します。
curl -N http://localhost:8081/ssef. ファイアウォールの設定でポート8081への接続が許可されていることを確認します。
接続すると、インスペクターに利用可能なすべてのツールが表示され、インタラクティブにテストできるようになります。
⚠️注意: MCP インスペクターを使用する場合は、 http://プレフィックスを含む完全な URL を使用する必要があります。
MCPクライアント統合
Claude Desktopへのインストール
次の場所にある Claude Desktop 構成ファイルにサーバー構成を追加します。
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%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 サーバーを有効にする場合は、これらの変数を含めてください。
Claudeデスクトップアプリを再起動します
Claude との会話では、SingleStore MCP サーバーを次のように使用できるようになりました。
use_mcp_tool({
server_name: "singlestore",
tool_name: "list_tables",
arguments: {}
})Windsurfへのインストール
次の場所にある Windsurf 構成ファイルにサーバー構成を追加します。
macOS:
~/Library/Application Support/Windsurf/config.jsonWindows:
%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 サーバーを通じて追加機能を有効にします。
ウィンドサーフィンを再開
Windsurf での Claude との会話では、Claude がデータベース情報にアクセスする必要があるときに、SingleStore MCP ツールが自動的に使用できるようになります。
カーソルへのインストール
カーソル設定にサーバー構成を追加します。
オープンカーソル
設定(歯車アイコン)>拡張機能>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 を通じてリアルタイムの更新を受信できるようになります。
カーソルを再開
Cursor 内で Claude AI を使用する場合、データベース操作に SingleStore MCP ツールが使用できるようになります。
セキュリティに関する考慮事項
バージョン管理に資格情報をコミットしない
環境変数または安全な構成管理を使用する
実稼働環境での接続プーリングメカニズムの使用を検討する
SingleStore で適切なアクセス制御とユーザー権限を実装する
SingleStore CAバンドルを最新の状態に保つ
発達
プロジェクト構造
mcp-server-singlestore/
├── src/
│ └── index.ts # Main server implementation
├── package.json
├── tsconfig.json
├── README.md
└── CHANGELOG.md建物
npm run buildテスト
npm testトラブルシューティング
接続の問題
環境変数の資格情報とホスト情報を確認する
SSL設定を確認する
ネットワークからデータベースにアクセスできることを確認する
ファイアウォールの設定を確認し、SingleStore データベースへの送信接続を許可してください。
ビルドの問題
node_modulesをクリアして依存関係を再インストールする
TypeScriptの設定を確認する
Node.js バージョンの互換性を確認します (16 以上である必要があります)
MCP統合の問題
クライアント構成でサーバーのbuild/index.jsファイルへのパスが正しいことを確認します。
クライアント構成ですべての環境変数が適切に設定されていることを確認します
構成を変更した後、クライアントアプリケーションを再起動します。
クライアントログでMCPサーバーに関連するエラーメッセージを確認します。
まずサーバーをスタンドアロンで実行して、クライアントの外で動作するか確認します。
貢献
リポジトリをフォークする
機能ブランチを作成する
変更をコミットする
ブランチにプッシュする
プルリクエストを作成する
ライセンス
MITライセンス - 詳細はLICENSEファイルを参照