单存储MCP服务器
](https://smithery.ai/server/@madhukarkumar/singlestore-mcp-server)
用于与SingleStore数据库交互的模型上下文协议(MCP)服务器。此服务器提供用于查询表、描述模式和生成ER图的工具。
特性
- 列出数据库中的所有表
- 执行自定义SQL查询
- 获取包括模式和示例数据在内的详细表信息
- 生成数据库模式的Mermaid ER图
- SSL支持自动获取CA包
- 正确的错误处理和TypeScript类型安全
先决条件
- Node.js 16或更高版本
- npm或纱线
- 访问SingleStore数据库
- SingleStore CA捆绑包(自动从门户获取)
安装
通过Smithery安装
通过以下方式自动安装克劳德桌面的SingleStore MCP服务器 史密瑟里:
npx -y @smithery/cli install @madhukarkumar/singlestore-mcp-server --client claude- 克隆存储库:
git clone
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数据库的连接。该连接使用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)设置环境变量
- 在你的壳:
在运行服务器之前,在终端中设置变量:
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客户端配置文件中,如下面的集成部分所示。
用法
协议支持
此服务器支持两种客户端集成协议:
- MCP协议:使用stdio通信的标准模型上下文协议,由Claude Desktop、Windsurf和Cursor使用。
- SSE协议:服务器通过HTTP发送事件,用于需要实时数据流的基于web的客户端和应用程序。
这两种协议都公开了相同的工具和功能,允许您为您的用例选择最佳的集成方法。
可用工具
- list_tables
- 列出数据库中的所有表 - 无需参数
use_mcp_tool({
server_name: "singlestore",
tool_name: "list_tables",
arguments: {}
})- 查询表
- 执行自定义SQL查询 - 参数: - 查询:SQL查询字符串
use_mcp_tool({
server_name: "singlestore",
tool_name: "query_table",
arguments: {
query: "SELECT * FROM your_table LIMIT 5"
}
})- describe_table
- 获取有关表的详细信息 - 参数: - 表:表名称
use_mcp_tool({
server_name: "singlestore",
tool_name: "describe_table",
arguments: {
table: "your_table"
}
})- 发电机图
- 生成数据库模式的Mermaid ER图 - 无需参数
use_mcp_tool({
server_name: "singlestore",
tool_name: "generate_er_diagram",
arguments: {}
})- run_read_query
- 对数据库执行只读(SELECT)查询 - 参数: - 查询:要执行的SQL SELECT查询
use_mcp_tool({
server_name: "singlestore",
tool_name: "run_read_query",
arguments: {
query: "SELECT * FROM your_table LIMIT 5"
}
})- 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"]
}
}
})- 生成_合成_数据
- 生成合成数据并将其插入到现有表中 - 参数: - 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
}
})- optimize_sql
- 使用PROFILE分析SQL查询并提供优化建议 - 参数: - 查询:用于分析和优化的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'"
}
})- 答复包括: - 原始查询 - 性能概要(总运行时间、编译时间、执行时间) - 检测到的瓶颈列表 - 影响水平(高/中/低)的优化建议 - 索引、连接、内存使用和其他优化建议
独立运行
- 构建服务器:
npm run build- 仅使用MCP协议运行服务器:
node build/index.js- 使用MCP和SSE协议运行服务器:
SSE_ENABLED=true SSE_PORT=3333 node build/index.js使用SSE协议
启用SSE后,服务器将公开以下HTTP端点:
- 根端点
GET /返回服务器信息和可用终结点。
- 健康检查
GET /health返回服务器的状态信息。
- SSE 连接
GET /sse建立服务器发送事件连接以进行实时更新。
- 列出工具
GET /tools返回所有可用工具的列表,与MCP相同 list_tools 功能。
还支持MCP检查器兼容性的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格式,以兼容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连接时发送。
- 打开:已建立其他连接事件。
- 消息:用于所有MCP协议消息,包括工具启动、结果和错误事件。
所有事件都遵循MCP协议使用的JSON-RPC 2.0格式。系统使用标准 message 事件类型,以与MCP检查器和大多数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检查器一起使用
MCP Inspector是一个基于浏览器的工具,用于测试和调试MCP服务器。要将其与此服务器一起使用,请执行以下操作:
- 在一个命令中启动服务器和MCP检查器:
npm run inspector或者只启动服务器:
npm run start:inspector- 要单独安装和运行MCP检查器:
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检查器时,您必须使用完整的URL,包括 http:// 前缀。
MCP客户端集成
在Claude Desktop中安装
- 将服务器配置添加到位于以下位置的Claude Desktop配置文件中:
- macOS: ~/Library/Application Support/Claude/claude_desktop_config.json - 窗户: %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.json - 窗户: %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
- 在Windsurf中与Claude的对话中,当Claude需要访问数据库信息时,SingleStore MCP工具将自动可用。
在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连接到服务器,并通过服务器发送事件接收实时更新。
- 重新启动游标
- 在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许可证-有关详细信息,请参阅许可证文件
