SQL Server管理工具

一个基于MCP协议的服务,用于查询和执行Microsoft SQL Server的存储过程、视图和表,支持多数据库同时访问和安全查询。

  • by chessive
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 chessive/mssql-mcp-server

使用说明

mssql-mcp

Microsoft SQL Server의 프로시저, 뷰, 테이블을 조회하고 SELECT 쿼리를 실행할 수 있는 MCP(Model Context Protocol) 서버.

Claude Code, Claude Desktop, Cursor, Windsurf 등 MCP를 지원하는 모든 클라이언트에서 사용할 수 있습니다.

주요 기능

  • 20개 도구 — MSSQL 데이터베이스를 종합적으로 다룸
  • 다중 DB 지원 — 여러 데이터베이스에 동시 접속 가능
  • 좁은 쓰기 권한 — 조회는 SELECT·CTE만, 파괴적 명령어(DROP, DELETE, UPDATE, INSERT, MERGE 등) 차단. 쓰기는 프로시저·뷰 정의 변경으로만 제한되고 데이터·테이블은 건드릴 수 없음
  • 유연한 설정 — JSON 파일 하나로 N개 DB 관리

도구 목록

도구 설명
test-connection DB 연결 상태 확인
list-databases 설정된 DB 목록 및 연결 상태 확인
list-procedures 프로시저 목록 조회 (수정일 포함)
get-procedure 프로시저 전체 소스코드 조회
list-views 뷰 목록 조회 (수정일 포함)
get-view 뷰 전체 소스코드 조회
list-functions 사용자 정의 함수 목록 조회
get-function 함수 전체 소스코드 조회
list-tables 테이블 목록 조회 (행 수 포함)
get-table-schema 테이블 컬럼, 인덱스, 제약조건 조회
get-table-data-sample 테이블 샘플 데이터 (TOP 5) 조회
execute-query 조회 쿼리 실행 — SELECT 및 WITH … SELECT(CTE), 마크다운 테이블로 반환
execute-ddl 프로시저/뷰 생성 및 수정 (수정 시 변경 전 정의를 함께 반환)
explain-query SELECT 쿼리 실행 계획 조회
search-objects 모든 객체를 이름으로 통합 검색
search-in-definitions 프로시저/뷰/함수 소스코드 내부 텍스트 검색
get-procedure-params 프로시저/함수 파라미터 목록 조회
get-dependencies 객체 간 참조 관계 조회
get-recent-changes 최근 N일 내 수정된 객체 조회
compare-definitions 두 DB 간 동일 객체 정의 비교

빠른 시작

1. 설치

git clone https://github.com/chessive/mssql-mcp-server.git
cd mssql-mcp-server
npm install
npm run build

2. 설정

예제 파일을 복사하고 접속 정보를 입력합니다:

cp databases.example.json databases.json
{
  "mydb": {
    "host": "localhost",
    "port": 1433,
    "database": "MyDatabase",
    "user": "sa",
    "password": "비밀번호"
  }
}

키 이름(mydb)이 도구 호출 시 database 파라미터 값이 됩니다. 필요한 만큼 DB를 추가할 수 있습니다.

주의: databases.json에는 비밀번호가 포함됩니다. .gitignore에 이미 등록되어 있지만, 절대 git에 커밋하지 마세요. 실수로 커밋한 경우 즉시 비밀번호를 변경하세요.

3. MCP 클라이언트에 등록

Claude Code:

claude mcp add mssql -s project -- node /path/to/mssql-mcp/dist/index.js

Claude Desktop / Cursor / 기타: 각 클라이언트의 MCP 서버 설정에서 node /path/to/mssql-mcp/dist/index.js를 stdio 서버로 등록합니다.

4. 사용

MCP 클라이언트에서 이렇게 요청할 수 있습니다:

  • "mydb에서 'user'가 포함된 프로시저 목록 보여줘"
  • "mydb의 sp_get_users 프로시저 소스코드 가져와"
  • "mydb에서 SELECT TOP 10 * FROM users 실행해줘"
  • "mydb의 orders 테이블 스키마 알려줘"

설정

databases.json (권장)

프로젝트 루트에 databases.json을 생성합니다. databases.example.json을 참고하세요.

필드 타입 필수 기본값 설명
host string Y — 서버 호스트명 또는 IP
port number N 1433 서버 포트
database string Y — 데이터베이스 이름
user string Y — SQL Server 인증 사용자명
password string Y — SQL Server 인증 비밀번호
domain string N — Windows 인증(NTLM) 도메인명

연결 설정

  • 인증: SQL Server 인증 (사용자명 + 비밀번호) 또는 Windows 인증 (NTLM, domain 필드 설정 시)
  • 암호화: encrypt: true, trustServerCertificate: true
  • 연결 풀: min 0, max 5, idle timeout 30초
  • 쿼리 타임아웃: 30초
  • 지연 연결: 서버 시작 시가 아닌 첫 요청 시 연결

보안

이 서버는 Development DB 전용입니다. Production/Test DB 접속 정보를 databases.json에 넣지 마세요. 아래 검사들은 SQL 파서가 아닌 키워드 기반 안전장치이므로, 실질적인 마지막 방어선은 접속 계정의 권한입니다. 가능하면 읽기 전용 계정(db_datareader)을 사용하세요. 위 빠른 시작의 sa 예시는 로컬 실습용입니다.

조회 (execute-query)

  • SELECT 또는 WITH … SELECT(CTE)로 시작하는 문만 허용
  • 차단 키워드: DROP, TRUNCATE, DELETE, UPDATE, INSERT, MERGE, INTO, SHUTDOWN, XP_CMDSHELL, EXEC, EXECUTE
    • MERGE는 단독으로 INSERT/UPDATE/DELETE를 수행하므로 차단합니다
    • INTO는 SELECT … INTO가 SELECT로 시작하면서도 새 테이블(임시 테이블 포함)을 만들기 때문에 차단합니다
  • 결과는 기본 100행, maxRows로 조정 가능하며 상한은 500행
    • 일반 SELECT에는 TOP n이 자동 삽입됩니다
    • CTE는 최종 SELECT의 위치를 특정할 수 없어 자동 삽입하지 않습니다. 대신 TOP n 또는 FETCH NEXT n을 직접 명시해야 하며, 없으면 실행을 거부합니다

DDL (execute-ddl)

  • CREATE/ALTER PROCEDURE와 CREATE/ALTER VIEW만 허용 (CREATE OR ALTER 포함). 테이블 DDL(CREATE/ALTER/DROP TABLE)과 데이터 변경은 불가능하므로, 잘못 실행돼도 영향 범위는 정의 하나입니다
  • 대상이 3-part name(db.schema.object)이면 차단 — database 파라미터로 지정한 DB 밖의 객체가 변경되는 것을 막습니다
  • 기존 객체를 수정할 때는 변경 전 정의를 응답에 함께 반환합니다. 정의 변경은 코드 diff에 흔적이 남지 않으므로, 응답 자체가 복구 지점이 됩니다

공통

  • execute-query, execute-ddl, explain-query는 세미콜론(;)을 차단하여 다중 문 주입 방지

참고: 키워드 차단은 기본적인 안전장치이며, SQL 파서 수준의 완전한 필터가 아닙니다. 주석이나 문자열 리터럴 내 키워드도 감지될 수 있습니다.

개발

# 개발 모드 (TypeScript 직접 실행)
npm run dev

# 빌드
npm run build

# MCP Inspector로 테스트
npx @modelcontextprotocol/inspector node dist/index.js

요구사항

  • Node.js >= 20
  • Microsoft SQL Server (sys.procedures, sys.views, sys.sql_modules 지원 버전)

기술 스택

라이선스

MIT