SingleStore MCP Server
SingleStore MCP 서버
SingleStore 데이터베이스와 상호 작용하기 위한 모델 컨텍스트 프로토콜(MCP) 서버입니다. 이 서버는 테이블 쿼리, 스키마 설명, ER 다이어그램 생성 도구를 제공합니다.
특징
데이터베이스의 모든 테이블 나열
사용자 정의 SQL 쿼리 실행
스키마와 샘플 데이터를 포함한 자세한 테이블 정보를 얻으세요
데이터베이스 스키마의 Mermaid ER 다이어그램 생성
자동 CA 번들 페칭을 통한 SSL 지원
적절한 오류 처리 및 TypeScript 유형 안전성
Related MCP server: SingleStore MCP Server
필수 조건
Node.js 16 이상
npm 또는 yarn
SingleStore 데이터베이스에 액세스
SingleStore CA 번들(포털에서 자동으로 가져옴)
설치
Smithery를 통해 설치
Smithery를 통해 Claude Desktop에 SingleStore MCP Server를 자동으로 설치하려면:
지엑스피1
저장소를 복제합니다.
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 클라이언트 구성 파일에 변수를 추가합니다.
용법
프로토콜 지원
이 서버는 클라이언트 통합을 위해 두 가지 프로토콜을 지원합니다.
MCP 프로토콜 : Claude Desktop, Windsurf, Cursor에서 사용하는 stdio 통신을 사용하는 표준 모델 컨텍스트 프로토콜입니다.
SSE 프로토콜 : 실시간 데이터 스트리밍이 필요한 웹 기반 클라이언트와 애플리케이션을 위해 HTTP를 통해 서버에서 전송하는 이벤트입니다.
두 프로토콜 모두 동일한 도구와 기능을 제공하므로 사용 사례에 가장 적합한 통합 방법을 선택할 수 있습니다.
사용 가능한 도구
리스트_테이블
데이터베이스의 모든 테이블을 나열합니다
매개변수가 필요 없습니다 GXP8
쿼리_테이블
사용자 정의 SQL 쿼리를 실행합니다
매개변수:
쿼리: SQL 쿼리 문자열 GXP9
설명_테이블
테이블에 대한 자세한 정보를 가져옵니다
매개변수:
테이블: 테이블 이름 GXP10
생성_도표_생성
데이터베이스 스키마의 Mermaid ER 다이어그램을 생성합니다.
매개변수가 필요 없습니다 GXP11
실행_읽기_쿼리
데이터베이스에 대한 읽기 전용(SELECT) 쿼리를 실행합니다.
매개변수:
쿼리: GXP12를 실행하기 위한 SQL SELECT 쿼리
테이블 생성
지정된 열과 제약 조건을 사용하여 데이터베이스에 새 테이블을 만듭니다.
매개변수:
table_name: 생성할 테이블의 이름
열: 열 정의 배열
table_options: 선택적 테이블 구성 GXP13
합성 데이터 생성
기존 테이블에 합성 데이터를 생성하고 삽입합니다.
매개변수:
table: 데이터를 삽입할 테이블의 이름
count: 생성할 행 수(기본값: 100)
column_generators: 특정 열에 대한 사용자 정의 생성기
batch_size: 각 배치에 삽입할 행 수(기본값: 1000) GXP14
optimize_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실시간 업데이트를 위해 서버 전송 이벤트 연결을 설정합니다.
목록 도구
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 Inspector 및 대부분의 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 서버를 테스트하고 디버깅하는 브라우저 기반 도구입니다. 이 서버에서 사용하려면 다음 단계를 따르세요.
하나의 명령으로 서버와 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 프로토콜과 함께 HTTP 서버에서 SSE를 지원하도록 설정하려면 이 변수를 포함하세요.
Claude 데스크톱 앱을 다시 시작하세요
Claude와의 대화에서 이제 SingleStore MCP 서버를 다음과 함께 사용할 수 있습니다.
use_mcp_tool({
server_name: "singlestore",
tool_name: "list_tables",
arguments: {}
})윈드서프에 설치
다음 위치에 있는 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의 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 변수를 사용하면 웹 애플리케이션이 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 라이센스 - 자세한 내용은 라이센스 파일을 참조하세요.
Available Tools
8 toolscreate_tableC
Create a new table in the database with specified columns and constraints
| Name | Required | Description | Default |
|---|---|---|---|
| columns | Yes | List of columns to create | |
| table_name | Yes | Name of the table to create | |
| table_options | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a creation operation but doesn't mention important behavioral aspects: whether this requires specific database permissions, if it's a destructive operation that might overwrite existing tables, what happens on success/failure, or any rate limits. The description is minimal and doesn't compensate for the lack of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Create a new table in the database') and adds necessary qualification ('with specified columns and constraints'). Every word serves a purpose with zero waste or redundancy. It's appropriately sized for a creation operation with moderate complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a database mutation tool with no annotations, no output schema, and moderate parameter complexity (3 parameters including nested objects), the description is insufficient. It doesn't address critical context: what permissions are needed, whether the operation is idempotent, what happens if a table already exists, what the return value looks like, or error conditions. The agent lacks necessary operational context for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions 'columns and constraints' which aligns with the 'columns' and 'table_options' parameters in the schema, providing some semantic context beyond the schema's technical descriptions. However, with 67% schema description coverage (2 of 3 parameters have descriptions), the description doesn't fully compensate for the coverage gap - it doesn't explain what 'table_options' encompasses or provide examples of constraint types. The baseline is appropriate given partial schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new table') and the resource ('in the database'), with additional context about what gets created ('with specified columns and constraints'). It distinguishes from siblings like 'list_tables' or 'describe_table' by being a creation operation rather than querying existing tables. However, it doesn't explicitly differentiate from other potential table-related operations that might exist in other contexts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., database permissions, existing schema), when not to use it (e.g., for temporary tables vs permanent), or refer to sibling tools like 'generate_er_diagram' for design planning or 'optimize_sql' for performance considerations. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_tableC
Get detailed information about a table
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Name of the table to describe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Get detailed information') but doesn't describe what 'detailed information' includes (e.g., schema, columns, constraints), whether it requires specific permissions, or how errors are handled. For a tool with no annotations, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose ('Get detailed information about a table'), making it easy to parse quickly. Every word earns its place, and there's no unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete for a tool that likely returns complex metadata. It doesn't explain what 'detailed information' entails (e.g., column types, indexes), leaving the agent uncertain about the return value. For a tool with such contextual gaps, more detail is needed to be fully helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'table' parameter clearly documented as 'Name of the table to describe'. The description doesn't add any meaning beyond this, such as format examples or constraints. With high schema coverage, the baseline score of 3 is appropriate, as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('detailed information about a table'), making the purpose immediately understandable. It distinguishes from siblings like 'list_tables' (which lists tables) and 'query_table' (which queries data), though it doesn't explicitly differentiate them. The description is specific but lacks explicit sibling differentiation for a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to use 'describe_table' instead of 'list_tables' (for metadata vs. listing) or 'query_table' (for data vs. structure), nor does it specify prerequisites like needing an existing table. Usage is implied from the name but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_er_diagramB
Generate a Mermaid ER diagram of the database schema
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action but does not reveal any behavioral traits such as whether it requires database permissions, if it's read-only or mutative, potential rate limits, or what the output format entails beyond 'Mermaid ER diagram'. This leaves significant gaps for an agent to understand how to invoke it safely and effectively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function with zero waste. It is front-loaded and appropriately sized for a tool with no parameters, making it easy for an agent to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no annotations, and no output schema, the description is minimally adequate by stating what it does. However, it lacks details on output format (e.g., Mermaid syntax specifics), behavioral context, or usage compared to siblings, which are important for a tool that generates diagrams. This makes it complete enough for basic understanding but with clear gaps in practical guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and the schema description coverage is 100%, so there is no need for parameter details in the description. The baseline for such cases is 4, as the description appropriately focuses on the tool's purpose without redundant parameter information, though it could slightly improve by noting the lack of parameters explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Generate' and the resource 'Mermaid ER diagram of the database schema', making the purpose specific and actionable. However, it does not explicitly differentiate from sibling tools like 'describe_table' or 'list_tables', which might also provide schema information, so it falls short of a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'describe_table' for detailed table info or 'list_tables' for a simple overview. It lacks explicit context, prerequisites, or exclusions, leaving the agent to infer usage based on the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_synthetic_dataC
Generate and insert synthetic data into an existing table
| Name | Required | Description | Default |
|---|---|---|---|
| batch_size | No | Number of rows to insert in each batch | |
| column_generators | No | Custom generators for specific columns (optional) | |
| count | No | Number of rows to generate and insert | |
| table | Yes | Name of the table to insert data into |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'insert' implying a write operation, but lacks details on permissions needed, whether data overwrites existing rows, transaction behavior, or error handling. This is inadequate for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action. It wastes no words, though it could be slightly more informative given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what happens after insertion (e.g., success confirmation, row count returned), error conditions, or dependencies on existing table structure, leaving significant gaps for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no additional meaning beyond implying data generation and insertion, which is already clear from the tool name. Baseline 3 is appropriate when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Generate and insert synthetic data') and the target resource ('into an existing table'), which distinguishes it from siblings like create_table or query_table. However, it doesn't explicitly differentiate from all siblings (e.g., run_read_query might also involve data manipulation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., table must exist), when not to use it (e.g., for production data), or refer to sibling tools like create_table for table creation first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesB
List all tables in the database
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must fully disclose behavior. It merely states 'List all tables', which implies a read operation, but omits details on permissions, output format, or performance implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no unnecessary words. It is appropriately front-loaded but lacks any structural enhancement like bullet points that could aid readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema or annotations, the description should explain what 'list' returns (e.g., table names, schemas). Without this, an agent may not know how to use the result. Sibling tools like 'describe_table' suggest additional context might be needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the description cannot add parameter meaning. Baseline for zero parameters is 4, and the description is sufficient for the parameterless case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all tables in the database. While it distinguishes from 'describe_table' by listing instead of describing, it does not explicitly differentiate from potential siblings like 'query' or 'execute'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus its siblings (describe_table, execute, query). It is implied that it retrieves table names, but no context on prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_sqlB
Analyze a SQL query using PROFILE and provide optimization recommendations
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | SQL query to analyze and optimize |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the tool uses 'PROFILE' (implying a profiling mechanism) and provides recommendations, but doesn't specify whether this is a read-only analysis, if it requires specific permissions, what the output format looks like, or any rate limits. For a tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core functionality ('analyze a SQL query') and adds key details ('using PROFILE and provide optimization recommendations') without any wasted words. Every part of the sentence contributes directly to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (analysis with optimization recommendations), no annotations, no output schema, and a single well-documented parameter, the description is adequate but incomplete. It covers the basic purpose but lacks details on behavioral traits, output format, and usage context relative to siblings, which are needed for a more complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'query' well-documented in the schema ('SQL query to analyze and optimize'). The description adds minimal value beyond this, only reiterating that it analyzes and optimizes the query. Since the schema does the heavy lifting, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('analyze' and 'provide optimization recommendations') and identifies the resource ('SQL query'). It distinguishes from siblings like 'query_table' or 'run_read_query' by focusing on analysis rather than execution. However, it doesn't explicitly differentiate from all siblings (e.g., 'describe_table' might also analyze queries).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context ('analyze a SQL query... and provide optimization recommendations'), suggesting it's for performance tuning rather than data retrieval or schema operations. However, it lacks explicit guidance on when to use this tool versus alternatives like 'run_read_query' for execution or 'describe_table' for schema analysis, and doesn't mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_tableC
Execute a query on a table
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | SQL query to execute |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the action without disclosing behavioral traits such as whether it's read-only or destructive, permission requirements, rate limits, or response format. It lacks critical context for safe and effective use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste, appropriately sized and front-loaded. It directly states the tool's function without unnecessary elaboration, earning full marks for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (executing queries, potentially with side effects), no annotations, no output schema, and incomplete behavioral disclosure, the description is inadequate. It fails to provide enough context for the agent to understand risks, results, or proper application.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 'query' parameter as 'SQL query to execute'. The description adds no additional meaning beyond this, such as query syntax examples or constraints, resulting in a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Execute a query on a table' states a general purpose (verb+resource) but is vague about what type of query (read/write, SQL specifics) and doesn't distinguish from sibling 'run_read_query' or 'optimize_sql'. It minimally meets the requirement but lacks specificity for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'run_read_query' or 'optimize_sql'. The description implies a general query execution but doesn't specify context, exclusions, or prerequisites, leaving the agent with no usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_read_queryB
Execute a read-only (SELECT) query on the database
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | SQL SELECT query to execute |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'read-only (SELECT)' which implies non-destructive and safe operations, but fails to address critical aspects like permissions needed, rate limits, error handling, or what the output looks like (e.g., result format, pagination). This leaves significant gaps for an agent to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads key information ('Execute a read-only (SELECT) query'). There is no wasted verbiage or redundancy, making it highly concise and well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a database query tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., security, performance), output format, and usage guidelines compared to siblings. While concise, it does not provide enough context for an agent to reliably use the tool without additional assumptions or trial-and-error.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'query' parameter clearly documented as 'SQL SELECT query to execute'. The description adds no additional semantic details beyond this, such as syntax examples, supported SQL features, or constraints. Given the high schema coverage, a baseline score of 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute') and resource ('read-only (SELECT) query on the database'), making the purpose immediately understandable. It distinguishes from siblings like 'create_table' or 'optimize_sql' by specifying read-only SELECT operations, though it doesn't explicitly contrast with 'query_table' which might have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for executing SELECT queries, but provides no explicit guidance on when to use this tool versus alternatives like 'query_table' or 'optimize_sql'. It mentions 'read-only' which suggests safety, but lacks details on prerequisites, limitations, or specific scenarios where this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v1.0.0- First observed
create_table - First observed
describe_table - First observed
generate_er_diagram - First observed
generate_synthetic_data - First observed
list_tables - First observed
optimize_sql - First observed
query_table - First observed
run_read_query
TDQS
Scored across 8 tools
Most tools have distinct purposes, but query_table and run_read_query overlap significantly as both execute SELECT queries, which could cause confusion. The other tools target clear, separate operations like table management, schema visualization, and query optimization.
All tool names follow a consistent verb_noun pattern using snake_case, such as create_table, list_tables, and optimize_sql. This predictability makes it easy for agents to understand and navigate the tool set without confusion.
With 8 tools, this server is well-scoped for database operations, covering essential tasks like table management, query execution, and schema analysis. Each tool serves a clear purpose, and the count is neither too sparse nor overwhelming for the domain.
The tool set provides strong coverage for core database workflows, including CRUD-like operations (create, list, describe, query) and utilities like optimization and data generation. A minor gap is the lack of update or delete operations, which agents might need to work around, but the surface is largely complete for the stated purpose.
Maintenance
Related MCP Connectors
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
Query Postgres, MySQL, SQL Server, Oracle, BigQuery, ClickHouse and Redshift from your AI client.
Connect to PlanetScale databases, branches, schema, query insights, and execute SQL
Draxlr's remote MCP server connects AI assistants to your SQL databases and dashboards. Explore schemas, run read-only queries, manage saved queries and dashboards, and export results, all with row-level security so each user sees only their own data.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA TypeScript-based MCP server that facilitates SQL query execution and MySQL database connectivity using environment variables.47 npmMIT
- AlicenseAqualityDmaintenanceAn implementation of the Model Context Protocol (MCP) server for SingleStore that enables natural language interaction with SingleStore databases through compatible LLM clients like Claude Desktop and Cursor.2133MIT
- AlicenseBqualityDmaintenanceA TypeScript-based Model Context Protocol server that enables AI assistants to perform secure database operations on PostgreSQL databases through structured tool interfaces.810 npmMIT
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol server for interacting with MSSQL and PostgreSQL databases, offering tools for schema exploration and SQL execution. It features configurable query modes for safety and supports advanced authentication methods like Windows Auth and SSL.9 npmMIT