SingleStore MCP Server

SingleStore MCP Server

一个用于与 SingleStore 数据库交互的服务器,支持表格查询、模式描述和 ER 图生成,并提供安全的 SSL 支持和 TypeScript 安全性。

数据库交互
访问服务器

Tools

query_table

Execute a query on a table

generate_er_diagram

Generate a Mermaid ER diagram of the database schema

list_tables

List all tables in the database

describe_table

Get detailed information about a table

run_read_query

Execute a read-only (SELECT) query on the database

create_table

Create a new table in the database with specified columns and constraints

generate_synthetic_data

Generate and insert synthetic data into an existing table

optimize_sql

Analyze a SQL query using PROFILE and provide optimization recommendations

README

SingleStore MCP 服务器

smithery badge

用于与 SingleStore 数据库交互的模型上下文协议 (MCP) 服务器。此服务器提供用于查询表、描述模式和生成 ER 图的工具。

特性

  • 列出数据库中的所有表
  • 执行自定义 SQL 查询
  • 获取详细的表信息,包括模式和示例数据
  • 生成数据库模式的 Mermaid ER 图
  • 支持 SSL,并自动获取 CA 捆绑包
  • 适当的错误处理和 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 数据库连接所必需的。该连接使用 SSL 和 SingleStore CA 捆绑包,该捆绑包会自动从 SingleStore 门户获取。

可选环境变量

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

SSE_ENABLED=true       # 启用 SSE HTTP 服务器(如果未设置,则默认为 false)
SSE_PORT=3333          # SSE 服务器的 HTTP 端口(如果未设置,则默认为 3333)

设置环境变量

  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. list_tables

    • 列出数据库中的所有表
    • 无需参数
    use_mcp_tool({
      server_name: "singlestore",
      tool_name: "list_tables",
      arguments: {}
    })
    
  2. query_table

    • 执行自定义 SQL 查询
    • 参数:
      • query:SQL 查询字符串
    use_mcp_tool({
      server_name: "singlestore",
      tool_name: "query_table",
      arguments: {
        query: "SELECT * FROM your_table LIMIT 5"
      }
    })
    
  3. describe_table

    • 获取有关表的详细信息
    • 参数:
      • table:表名
    use_mcp_tool({
      server_name: "singlestore",
      tool_name: "describe_table",
      arguments: {
        table: "your_table"
      }
    })
    
  4. generate_er_diagram

    • 生成数据库模式的 Mermaid ER 图
    • 无需参数
    use_mcp_tool({
      server_name: "singlestore",
      tool_name: "generate_er_diagram",
      arguments: {}
    })
    
  5. run_read_query

    • 在数据库上执行只读 (SELECT) 查询
    • 参数:
      • query:要执行的 SQL SELECT 查询
    use_mcp_tool({
      server_name: "singlestore",
      tool_name: "run_read_query",
      arguments: {
        query: "SELECT * FROM your_table LIMIT 5"
      }
    })
    
  6. create_table

    • 在数据库中创建一个新表,其中包含指定的列和约束
    • 参数:
      • table_name:要创建的表的名称
      • columns:列定义的数组
      • table_options:可选的表配置
    use_mcp_tool({
      server_name: "singlestore",
      tool_name: "create_table",
      arguments: {
        table_name: "new_table",
        columns: [
          {
            name: "id",
            type: "INT",
            nullable: false,
            auto_increment: true
          },
          {
            name: "name",
            type: "VARCHAR(255)",
            nullable: false
          }
        ],
        table_options: {
          shard_key: ["id"],
          sort_key: ["name"]
        }
      }
    })
    
  7. generate_synthetic_data

    • 生成并将合成数据插入到现有表中
    • 参数:
      • table:要将数据插入的表的名称
      • count:要生成的行数(默认值:100)
      • column_generators:特定列的自定义生成器
      • batch_size:每个批次中要插入的行数(默认值:1000)
    use_mcp_tool({
      server_name: "singlestore",
      tool_name: "generate_synthetic_data",
      arguments: {
        table: "customers",
        count: 1000,
        column_generators: {
          "customer_id": {
            "type": "sequence",
            "start": 1000
          },
          "status": {
            "type": "values",
            "values": ["active", "inactive", "pending"]
          },
          "signup_date": {
            "type": "formula",
            "formula": "NOW() - INTERVAL FLOOR(RAND() * 365) DAY"
          }
        },
        batch_size: 500
      }
    })
    
  8. optimize_sql

    • 使用 PROFILE 分析 SQL 查询并提供优化建议
    • 参数:
      • query:要分析和优化的 SQL 查询
    use_mcp_tool({
      server_name: "singlestore",
      tool_name: "optimize_sql",
      arguments: {
        query: "SELECT * FROM customers JOIN orders ON customers.id = orders.customer_id WHERE region = 'west'"
      }
    })
    
    • 响应包括:
      • 原始查询
      • 性能分析摘要(总运行时间、编译时间、执行时间)
      • 检测到的瓶颈列表
      • 优化建议,包括影响级别(高/中/低)
      • 关于索引、连接、内存使用和其他优化的建议

独立运行

  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
    

    建立用于实时更新的服务器发送事件连接。

  4. 列出工具

    GET /tools
    

    返回所有可用工具的列表,与 MCP list_tools 功能相同。

    还支持 POST 请求以实现 MCP Inspector 兼容性:

    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. message(未命名事件):在成功建立 SSE 连接时发送。
  2. open:其他连接建立事件。
  3. message:用于所有 MCP 协议消息,包括工具启动、结果和错误事件。

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

JavaScript 客户端示例

// 连接到 SSE 端点
const eventSource = new EventSource('http://localhost:3333/sse');
let clientId = null;

// 通过未命名事件处理连接建立
eventSource.onmessage = (event) => {
  const data = JSON.parse(event.data);
  if (data.type === 'connection_established') {
    clientId = data.clientId;
    console.log(`Connected with client ID: ${clientId}`);
  }
};

// 处理 open 事件
eventSource.addEventListener('open', (event) => {
  console.log('SSE connection opened via open event');
});

// 处理所有 MCP 消息
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);
    }
  }
});

// 使用流式响应调用工具(自定义格式)
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();
}

// 使用流式响应调用工具(MCP 格式)
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();
}

// 用法示例
callTool('list_tables', {})
  .then(response => console.log('Request accepted:', response));

与 MCP Inspector 一起使用

MCP Inspector 是一个基于浏览器的工具,用于测试和调试 MCP 服务器。要将其与此服务器一起使用:

  1. 在一个命令中启动服务器和 MCP inspector:

    npm run inspector
    

    或者仅启动服务器:

    npm run start:inspector
    
  2. 要单独安装和运行 MCP Inspector:

    npx @modelcontextprotocol/inspector
    

    inspector 将在您的默认浏览器中打开。

  3. 当 MCP Inspector 打开时:

    a. 在连接字段中输入 URL:

    http://localhost:8081
    

    注意:实际端口可能因您的配置而异。检查服务器启动日志以获取正在使用的实际端口。服务器将输出:

    MCP SingleStore SSE server listening on port XXXX
    

    b. 确保选择 "SSE" 作为传输类型

    c. 单击 "Connect"

  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. 尝试重新启动服务器和 inspector

    d. 确保没有其他服务正在使用端口 8081

    e. 使用提供的脚本测试 SSE 连接:

    npm run test:sse
    

    或者手动使用 curl:

    curl -N http://localhost:8081/sse
    

    f. 验证您的防火墙设置是否允许连接到端口 8081

  6. 连接后,inspector 将显示所有可用工具,并允许您以交互方式测试它们。

⚠️ 注意:使用 MCP Inspector 时,必须使用完整 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 变量是可选的。如果您想在标准 MCP 协议旁边启用具有 SSE 支持的 HTTP 服务器,请包含它们。

  1. 重新启动 Claude Desktop 应用程序

  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. 重新启动 Windsurf

  2. 在您在 Windsurf 中与 Claude 的对话中,当 Claude 需要访问数据库信息时,SingleStore MCP 工具将自动可用。

在 Cursor 中安装

  1. 将服务器配置添加到您的 Cursor 设置:
    • 打开 Cursor
    • 转到 Settings(齿轮图标)> Extensions > Claude AI > MCP Servers
    • 添加一个新的 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. 重新启动 Cursor

  2. 在 Cursor 中使用 Claude AI 时,SingleStore MCP 工具将可用于数据库操作。

安全注意事项

  1. 永远不要将凭据提交到版本控制
  2. 使用环境变量或安全配置管理
  3. 考虑为生产用途使用连接池机制
  4. 在 SingleStore 中实施适当的访问控制和用户权限
  5. 保持 SingleStore CA 捆绑包为最新

开发

项目结构

mcp-server-singlestore/
├── src/
│   └── index.ts      # 主服务器实现
├── 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. Fork 存储库
  2. 创建一个功能分支
  3. 提交您的更改
  4. 推送到分支
  5. 创建一个 Pull Request

许可证

MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件

推荐服务器

Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选
AIO-MCP Server

AIO-MCP Server

🚀 集成了 AI 搜索、RAG 和多服务(GitLab/Jira/Confluence/YouTube)的一体化 MCP 服务器,旨在增强 AI 驱动的开发工作流程。来自 Folk。

精选
本地
Knowledge Graph Memory Server

Knowledge Graph Memory Server

为 Claude 实现持久性记忆,使用本地知识图谱,允许 AI 记住用户的信息,并可在自定义位置存储,跨对话保持记忆。

精选
本地
Hyperbrowser

Hyperbrowser

欢迎来到 Hyperbrowser,人工智能的互联网。Hyperbrowser 是下一代平台,旨在增强人工智能代理的能力,并实现轻松、可扩展的浏览器自动化。它专为人工智能开发者打造,消除了本地基础设施和性能瓶颈带来的麻烦,让您能够:

精选
本地
any-chat-completions-mcp

any-chat-completions-mcp

将 Claude 与任何 OpenAI SDK 兼容的聊天完成 API 集成 - OpenAI、Perplexity、Groq、xAI、PyroPrompts 等。

精选
Exa MCP Server

Exa MCP Server

一个模型上下文协议服务器,它使像 Claude 这样的人工智能助手能够以安全和受控的方式,使用 Exa AI 搜索 API 执行实时网络搜索。

精选
BigQuery MCP Server

BigQuery MCP Server

这是一个服务器,可以让你的大型语言模型(LLM,比如Claude)直接与你的BigQuery数据对话!可以把它想象成一个友好的翻译器,它位于你的AI助手和数据库之间,确保它们可以安全高效地进行交流。

精选
mcp-perplexity

mcp-perplexity

Perplexity API 的 MCP 服务器。

精选
MCP Web Research Server

MCP Web Research Server

一个模型上下文协议服务器,使 Claude 能够通过集成 Google 搜索、提取网页内容和捕获屏幕截图来进行网络研究。

精选