MCP SQL Server

by JubinSaniei

Integrations

  • Supports configuration through environment variables loaded from .env files, allowing customization of connection settings, security parameters, timeouts, and caching behavior.

  • Enables deployment of the MCP server using Docker containers, with configuration via environment variables and docker-compose for simplified setup and management.

  • Provides access to the repository for cloning and installation, with documentation and setup instructions accessible through GitHub.

MCP MSSQL 서버

SQL Server 상호 작용을 위한 모델 컨텍스트 프로토콜(MCP) 서버입니다. 대용량 언어 모델(LLM)이 향상된 보안과 견고성을 바탕으로 SQL 쿼리를 실행하고, 저장 프로시저를 실행하고, 데이터베이스 스키마를 탐색할 수 있도록 지원합니다.

특징

  • 안전한 SQL 쿼리 실행 : SQL Server 데이터베이스에 대해 SELECT 쿼리를 실행합니다. 모든 쿼리는 구문 분석 및 검증을 거쳐 SELECT 문만 실행되도록 보장합니다.
  • 저장 프로시저 지원 : 매개변수화된 입력으로 저장 프로시저를 실행합니다.
  • 스키마 탐색 : 성능을 위해 캐시된 결과와 함께 데이터베이스 테이블 및 열 정의를 확인합니다.
  • 강력한 연결 관리 : 구성 가능한 재시도 논리와 시간 제한을 통해 데이터베이스 연결을 효율적으로 재사용하기 위해 글로벌 연결 풀을 활용합니다.
  • 강화된 보안 :
    • SQL 쿼리 구문 분석 및 SELECT 전용 허용 목록.
    • SQL_ALLOWED_DATABASES 환경 변수를 사용하여 접근 가능한 데이터베이스를 허용 목록에 추가합니다.
    • 데이터베이스 컨텍스트 전환을 위한 일반적인 SQL 주입 패턴에 대한 보호.
    • 직접 쿼리에서 잠재적으로 유해한 시스템 프로시저나 명령의 실행을 차단합니다.
  • 구성 가능한 캐싱 : 데이터베이스 스키마 정보는 구성 가능한 TTL(수명)로 캐싱됩니다.
  • 구조화된 로깅 : 세부적이고 구조화된 애플리케이션 로그를 위한 통합된 pino 로거입니다.
  • Docker Ready : Docker를 이용한 간편한 배포.

빠른 시작

Docker 사용(권장)

지엑스피1

Docker 설정에 대한 자세한 지침은 Docker README를 참조하세요.

구성

서버는 환경 변수를 사용하여 구성됩니다. 루트 디렉터리에 .env 파일을 생성하고 .env.example 파일을 복사하여 환경 변수를 설정합니다.

모든 구성 옵션과 설정 방법에 대한 자세한 가이드는 CONFIG 참조하세요.

범주변하기 쉬운설명기본값(config.js에서)
연결SQL_SERVERSQL Server 호스트 이름 또는 IPlocalhost
SQL_PORTSQL 서버 포트1433
SQL_USERSQL Server 사용자 이름sa
SQL_PASSWORDSQL 서버 비밀번호필수의
SQL_DATABASE연결할 기본 데이터베이스 이름master
보안SQL_ENCRYPT암호화 활성화(비활성화하려면 false 로 설정)true
SQL_TRUST_SERVER_CERT신뢰 서버 인증서(비활성화하려면 false 로 설정)true
SQL_ALLOWED_DATABASES서버가 액세스할 수 있는 데이터베이스 목록을 쉼표로 구분하여 나열합니다. 비어 있으면 액세스 제한이 완화됩니다(DB 사용자 권한에 따라 달라짐).[] (빈 목록)
시간 초과 및 재시도SQL_CONNECTION_TIMEOUT연결 시간 초과(ms)30000
SQL_REQUEST_TIMEOUT쿼리에 대한 요청 시간 초과(ms)30000
SQL_MAX_RETRIES초기 연결 시도에 대한 최대 재시도 횟수3
SQL_INITIAL_RETRY_DELAY실패한 연결을 다시 시도하기 전 초기 지연(ms)1000
SQL_MAX_RETRY_DELAY연결 재시도에 대한 최대 지연(ms)(지수 백오프 사용)30000
연결 풀SQL_POOL_MAX풀의 최대 연결 수10
SQL_POOL_MIN풀의 최소 연결 수0
SQL_POOL_IDLE_TIMEOUT풀의 연결에 대한 유휴 시간 초과(ms)30000
캐싱SQL_SCHEMA_CACHE_TTL스키마 캐시의 수명(ms)300000 (5분)
MCP 서버MCP_SERVER_NAMEMCP 서버의 이름MSSQL Server
MCP_SERVER_VERSIONMCP 서버 버전1.0.0
벌채 반출LOG_LEVELpino 로거의 로그 수준(예: fatal , error , warn , info , debug , trace , silent ). 이 값은 config.js 의 일부가 아닌 server.tsprocess.env 에서 직접 읽어옵니다.info

Claude와 함께 사용

Claude CLI에 이 MCP 서버를 추가하려면:

# Add the MCP server using the config file claude mcp add-json mssql-mcp "$(cat claude-mcp-config.json)" # To add it globally claude mcp add-json -s user mssql-mcp "$(cat claude-mcp-config.json)" # Start a conversation with Claude using this MCP claude mcp mssql-mcp

클로드와의 대화에서 다음을 확인할 수 있습니다.

  1. SELECT 쿼리를 실행합니다.
    <mcp:execute_query database="YourDatabaseName"> SELECT TOP 10 * FROM YourTable </mcp:execute_query>
    (기본 SQL_DATABASE 에서 작동하거나 SQL_ALLOWED_DATABASES 단일 선택을 의미하는 경우 database 속성은 선택 사항입니다.)
  2. 저장 프로시저 실행:
    <mcp:execute_StoredProcedure database="YourDatabaseName"> { "procedure": "YourSchema.YourProcedureName", "parameters": [ {"name": "Param1", "type": "NVarChar", "value": "SomeValue"}, {"name": "Param2", "type": "Int", "value": 123} ] } </mcp:execute_StoredProcedure>
  3. 데이터베이스 스키마 탐색:
    <mcp:schema> YourDatabaseName </mcp:schema>
    ( YourDatabaseName 생략되면 환경 변수에 지정된 SQL_DATABASE 기본값으로 사용됩니다.)

연결 처리

이 MCP 서버는 DatabaseService 에서 관리하는 글로벌하고 강력한 연결 풀( mssql 라이브러리의 내장 풀링)을 활용합니다.

  • 효율성 : 연결이 재사용되므로 요청마다 새로운 연결을 설정하는 오버헤드가 줄어듭니다.
  • 복원력 : 초기 연결 설정을 위한 지수 백오프를 사용하여 재시도 논리를 구현합니다.
  • 호출 간 세션 상태 없음 : 사용자별 세션 모델과 달리, 이 서버는 LLM의 후속 MCP 호출(예: 두 개의 개별 execute_query 호출)이 동일한 기본 데이터베이스 연결을 사용한다고 보장하지 않습니다. 따라서 한 호출에서 생성된 임시 테이블이나 세션 변수와 같은 세션별 상태는 다른 호출에서 사용하지 못할 수 있습니다. 각 호출은 세션 상태 관점에서 원자성(atomic)을 가져야 합니다. 대상 데이터베이스가 풀의 기본값과 다른 경우, 각 작업 내에서 USE [database] 명령이 실행되어 해당 작업에 대한 컨텍스트를 보장합니다.

개발

지역 개발 설정

# Install dependencies npm install # Create and configure your .env file cp .env.example .env nano .env # Run the server directly (requires environment variables to be set) npm start # Run with TypeScript compiler watching for changes npm run dev

보안 참고 사항

  • SELECT : 서버는 SQL 구문 분석을 사용하여 execute_query 도구를 통해 SELECT 쿼리만 실행할 수 있도록 엄격하게 적용합니다. DML(INSERT, UPDATE, DELETE) 및 DDL 문은 차단됩니다.
  • 저장 프로시저 실행 : 저장 프로시저는 권한이 허용하는 모든 작업을 수행할 수 있지만 실행은 별도로 관리됩니다.
  • 데이터베이스 허용 목록 : SQL_ALLOWED_DATABASES 환경 변수를 사용하여 서버가 상호 작용할 수 있는 데이터베이스를 제한합니다. 이 기능과 SQL_DATABASE 와의 상호 작용 방식에 대한 자세한 설명은 DATABASE_WHITELISTING.md 참조하세요.
  • 시스템 프로시저 차단 : 일반적인 시스템 프로시저(예: sp_ , xp_ ) 및 RECONFIGURE , WAITFOR DELAY 와 같은 명령의 execute_query 통한 직접 실행이 차단됩니다. 정상적인 시스템 상호 작용에는 저장 프로시저를 사용해야 합니다.
  • 입력 유효성 검사 : 컨텍스트 전환을 위한 데이터베이스 이름과 저장 프로시저 이름은 형식 유효성 검사를 거칩니다. SQL 구문 분석은 쿼리에 대한 추가 유효성 검사를 제공합니다.
  • 매개변수화된 입력 : 저장 프로시저 매개변수는 mssql 라이브러리에서 처리하며, 일반적으로 SQL 주입을 방지하기 위해 매개변수화합니다.

문제 해결

문제가 발생하는 경우:

  1. 컨테이너 로그를 확인하세요: docker logs mssql-mcp (Docker를 사용하는 경우).
  2. 로컬로 실행하는 경우 pino 로그를 확인하려면 서버의 콘솔 출력을 확인하세요.
  3. .env 파일에서 모든 필수 환경 변수가 올바르게 설정되었는지 확인하세요. 특히 SQL_PASSWORD , SQL_SERVER , SQL_USER , SQL_DATABASE 가 올바르게 설정되었는지 확인하세요.
  4. 이 변수를 설정한 경우 액세스하려는 데이터베이스가 SQL_ALLOWED_DATABASES 에 나열되어 있는지 확인하세요.
  5. MCP 서버가 실행 중인 SQL Server 인스턴스에 대한 네트워크 연결을 확인합니다.
  6. 테스트 스크립트( test-mcp.sh , test-session-persistence.sh )를 검토/업데이트해야 할 수도 있습니다.

자세한 Docker 문제 해결 방법은 Docker README를 참조하세요.

-
security - not tested
F
license - not found
-
quality - not tested

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Claude와 같은 대규모 언어 모델이 SQL 쿼리를 실행하고, 데이터베이스 스키마를 탐색하고, SQL Server 데이터베이스에 대한 지속적인 연결을 유지할 수 있게 해주는 모델 컨텍스트 프로토콜 서버입니다.

  1. 특징
    1. 빠른 시작
      1. Docker 사용(권장)
    2. 구성
      1. Claude와 함께 사용
        1. 연결 처리
          1. 개발
            1. 지역 개발 설정
          2. 보안 참고 사항
            1. 문제 해결

              Related MCP Servers

              • -
                security
                A
                license
                -
                quality
                A Model Context Protocol server that enables Large Language Models to seamlessly interact with ClickHouse databases, supporting resource listing, schema retrieval, and query execution.
                Last updated -
                1
                Python
                MIT License
                • Linux
                • Apple
              • A
                security
                A
                license
                A
                quality
                A Model Context Protocol server that allows Large Language Models to interact with Astra DB databases, providing tools for managing collections and records through natural language commands.
                Last updated -
                10
                115
                12
                TypeScript
                Apache 2.0
                • Apple
              • -
                security
                -
                license
                -
                quality
                A Model Context Protocol server that provides tools for connecting to and interacting with various database systems (SQLite, PostgreSQL, MySQL/MariaDB, SQL Server) through a unified interface.
                Last updated -
                Python
              • -
                security
                F
                license
                -
                quality
                A Model Context Protocol server that enables Large Language Models to access and interact with database connections, including viewing schemas and performing CRUD operations on connected databases.
                Last updated -
                • Apple

              View all related MCP servers

              ID: 6rj1s2u5o5