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 图
  • SSL 支持,可自动获取 CA 包
  • 正确的错误处理和 TypeScript 类型安全

先决条件

  • Node.js 16 或更高版本
  • npm 或 yarn
  • 访问 SingleStore 数据库
  • SingleStore CA 包(自动从门户获取)

安装

通过 Smithery 安装

要通过Smithery自动为 Claude Desktop 安装 SingleStore MCP 服务器:

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 数据库建立连接所必需的。该连接使用 SSL 和 SingleStore CA 捆绑包,该捆绑包会自动从 SingleStore 门户获取。

可选环境变量

对于 SSE(服务器发送事件)协议支持:

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. 在您的 Shell 中:在运行服务器之前在终端中设置变量:
    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 客户端配置文件中,如下面的集成部分所示。

用法

协议支持

该服务器支持两种客户端集成协议:

  1. MCP 协议:使用 stdio 通信的标准模型上下文协议,由 Claude Desktop、Windsurf 和 Cursor 使用。
  2. SSE 协议:通过 HTTP 向需要实时数据流的基于 Web 的客户端和应用程序发送服务器发送事件。

两种协议都公开相同的工具和功能,允许您根据用例选择最佳的集成方法。

可用工具

  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. 生成合成数据
    • 生成合成数据并将其插入现有表中
    • 参数:
      • table:要插入数据的表的名称
      • count:要生成的行数(默认值:100)
      • column_generators:针对特定列的自定义生成器
      • batch_size:每批插入的行数(默认值: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. 上交所连接
    GET /sse
    建立服务器发送事件连接以进行实时更新。
  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 格式以实现 MCP Inspector 兼容性:

    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. message :用于所有 MCP 协议消息,包括工具启动、结果和错误事件。

所有事件均遵循 MCP 协议使用的 JSON-RPC 2.0 格式。系统使用标准message事件类型,以兼容 MCP Inspector 和大多数 SSE 客户端库。

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: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. 确保没有其他服务正在使用端口 8081e. 使用提供的脚本测试 SSE 连接:
    npm run test:sse
    或者手动使用 curl:
    curl -N http://localhost:8081/sse
    f. 验证您的防火墙设置是否允许连接到端口 8081
  6. 一旦连接,检查器将显示所有可用的工具并允许您以交互方式测试它们。

⚠️注意:使用 MCP 检查器时,必须使用完整的 URL,包括http://前缀。

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 变量是可选的。如果您想启用支持 SSE 和标准 MCP 协议的 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. 将服务器配置添加到您的 Cursor 设置中:
    • 打开游标
    • 前往“设置”(齿轮图标)> 扩展程序 > 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 连接到服务器并通过服务器发送事件接收实时更新。

  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 许可证 - 详情请参阅许可证文件

ID: 6t5uvbrpor