Skip to main content
Glama
mcp-mssqlserver

mcp-mssqlserver

MCP Server for Microsoft SQL Server

Docker Publish GHCR Node.js

Production-oriented MCP server for Microsoft SQL Server, exposing database operations to MCP clients (Claude Desktop, VS Code Copilot, Cursor, and compatible hosts).

Features

  • Query execution (SELECT, INSERT, UPDATE, DELETE), with an optional read-only mode (MSSQL_READ_ONLY=true)

  • Database discovery and schema introspection

  • Table metadata inspection (columns, types, nullability, defaults, PK)

  • Index and foreign key discovery

  • Environment-driven configuration for secure deployment

Related MCP server: SQL Query Tools MCP Server

Available Tools

Tool

Description

execute_query

Executes a SQL statement and returns recordsets or affected rows

list_tables

Lists tables from INFORMATION_SCHEMA.TABLES (optional schema filter)

describe_table

Returns table column metadata and primary key markers

list_databases

Lists all SQL Server databases

get_table_indexes

Lists table indexes, type, uniqueness, PK, and indexed columns

get_foreign_keys

Lists table foreign keys and referenced targets

Requirements

  • Node.js 18+

  • Access to a Microsoft SQL Server instance

  • Network connectivity from MCP host to SQL Server (host:port)

Configuration

Set connection settings using environment variables:

Variable

Required

Default

Description

MSSQL_HOST

No

localhost

SQL Server host or IP

MSSQL_PORT

No

1433

SQL Server TCP port

MSSQL_DATABASE

Yes

—

Default database

MSSQL_AUTH_MODE

No

sql

Authentication mode: sql or windows

MSSQL_USER

Yes*

—

SQL login user (required only in sql)

MSSQL_PASSWORD

Yes*

—

SQL login password (required only in sql)

MSSQL_ENCRYPT

No

false

Enables encrypted connection

MSSQL_TRUST_SERVER_CERTIFICATE

No

true

Trusts server certificate when encryption is enabled

* Required when MSSQL_AUTH_MODE=sql.

Variable

Required

Default

Description

MSSQL_READ_ONLY

No

false

Enables read-only mode (true/false; any other value fails at startup). See Read-only mode

MCP_TRANSPORT

No

stdio

Transport mode: stdio (default, for npx/Claude Desktop/VS Code) or http (Streamable HTTP, for Docker/remote clients such as n8n)

MCP_HTTP_PORT

No

3001

Port for the HTTP server (only used when MCP_TRANSPORT=http)

MCP_HTTP_HOST

No

0.0.0.0

Bind address for the HTTP server (only used when MCP_TRANSPORT=http)

Note: the published Docker image always runs in http mode and does not build the msnodesqlv8 native driver (used only for MSSQL_AUTH_MODE=windows). Windows Authentication is only available when running the server directly on a Windows host via npx/npm start.

Read-only mode

Set MSSQL_READ_ONLY=true to restrict execute_query to read operations. When enabled:

  • Only a single SELECT (or WITH ... SELECT) statement is accepted. Multiple statements, INSERT, UPDATE, DELETE, MERGE, TRUNCATE, DDL (CREATE/ALTER/DROP), GRANT/REVOKE/DENY, EXEC/EXECUTE, SELECT ... INTO, OPENROWSET/OPENQUERY/OPENDATASOURCE, and xp_*/sp_* procedures are rejected before reaching the database. Comments, string literals and delimited identifiers are ignored by the check.

  • The query runs inside a transaction that is always rolled back.

  • The connection is opened with ApplicationIntent=ReadOnly, which routes to a readable secondary replica when an Always On availability group with read-only routing is configured (it has no effect otherwise).

  • The execute_query tool description exposed to the MCP client states that the server is read-only.

  • The remaining tools (list_tables, describe_table, list_databases, get_table_indexes, get_foreign_keys) only read metadata and are unaffected.

This mode is a defense-in-depth measure, not a security boundary. The check is lexical and can reject legitimate queries that use a blocked word outside literals/identifiers (false positives), and T-SQL has enough syntax that bypasses cannot be fully ruled out. The effective guarantee must come from the database: use a login restricted to db_datareader (optionally with DENY INSERT, UPDATE, DELETE, ALTER, EXECUTE) and combine it with this flag.

Usage

Run directly from GitHub

npx github:ferronicardoso/mcp-mssqlserver

Claude Code (CLI)

claude mcp add mssqlserver --scope user -- npx -y github:ferronicardoso/mcp-mssqlserver

--scope controls where the server registration is stored:

Scope

Stored in

Visible to

local (default)

project-local, untracked

only you, only in this project

project

.mcp.json at the project root

anyone who clones the repo (commit it to share)

user

your global Claude Code config

you, across every project

Environment variables can be passed with repeated --env KEY=VALUE flags before the --, e.g.:

Bash (Linux/macOS/WSL):

claude mcp add mssqlserver --scope user \
  --env MSSQL_HOST=localhost \
  --env MSSQL_PORT=1433 \
  --env MSSQL_DATABASE=master \
  --env MSSQL_AUTH_MODE=sql \
  --env MSSQL_USER=sa \
  --env MSSQL_PASSWORD=your-password \
  -- npx -y github:ferronicardoso/mcp-mssqlserver

PowerShell:

claude mcp add mssqlserver --scope user `
  --env MSSQL_HOST=localhost `
  --env MSSQL_PORT=1433 `
  --env MSSQL_DATABASE=master `
  --env MSSQL_AUTH_MODE=sql `
  --env MSSQL_USER=sa `
  --env MSSQL_PASSWORD=your-password `
  -- npx -y github:ferronicardoso/mcp-mssqlserver

Codex CLI

Bash (Linux/macOS/WSL):

codex mcp add mssqlserver \
  --env MSSQL_AUTH_MODE=sql \
  --env MSSQL_HOST=localhost \
  --env MSSQL_PORT=1433 \
  --env MSSQL_DATABASE=master \
  --env MSSQL_USER=sa \
  --env MSSQL_PASSWORD=your-password \
  npx -- -y github:ferronicardoso/mcp-mssqlserver

PowerShell:

codex mcp add mssqlserver `
  --env MSSQL_AUTH_MODE=sql `
  --env MSSQL_HOST=localhost `
  --env MSSQL_PORT=1433 `
  --env MSSQL_DATABASE=master `
  --env MSSQL_USER=sa `
  --env MSSQL_PASSWORD=your-password `
  npx -- -y github:ferronicardoso/mcp-mssqlserver

For Windows Authentication instead, drop MSSQL_USER/MSSQL_PASSWORD and set MSSQL_AUTH_MODE=windows:

Bash (Linux/macOS/WSL):

codex mcp add mssqlserver \
  --env MSSQL_AUTH_MODE=windows \
  --env MSSQL_HOST=localhost \
  --env MSSQL_PORT=1433 \
  --env MSSQL_DATABASE=master \
  npx -- -y github:ferronicardoso/mcp-mssqlserver

PowerShell:

codex mcp add mssqlserver `
  --env MSSQL_AUTH_MODE=windows `
  --env MSSQL_HOST=localhost `
  --env MSSQL_PORT=1433 `
  --env MSSQL_DATABASE=master `
  npx -- -y github:ferronicardoso/mcp-mssqlserver

This registers the server in ~/.codex/config.toml. To remove it, run codex mcp remove mssqlserver.

Claude Desktop configuration

%APPDATA%\\Claude\\claude_desktop_config.json:

{
  "mcpServers": {
    "mssqlserver": {
      "command": "npx",
      "args": ["github:ferronicardoso/mcp-mssqlserver"],
      "env": {
        "MSSQL_HOST": "localhost",
        "MSSQL_PORT": "1433",
        "MSSQL_DATABASE": "master",
        "MSSQL_AUTH_MODE": "sql",
        "MSSQL_USER": "sa",
        "MSSQL_PASSWORD": "your-password"
      }
    }
  }
}

VS Code MCP configuration

.vscode/mcp.json:

{
  "servers": {
    "mssqlserver": {
      "command": "npx",
      "args": ["github:ferronicardoso/mcp-mssqlserver"],
      "env": {
        "MSSQL_HOST": "localhost",
        "MSSQL_PORT": "1433",
        "MSSQL_DATABASE": "master",
        "MSSQL_AUTH_MODE": "sql",
        "MSSQL_USER": "sa",
        "MSSQL_PASSWORD": "your-password"
      }
    }
  }
}

Run with Docker (HTTP transport)

The published image runs in Streamable HTTP mode by default, for use as a remote MCP endpoint (e.g. from n8n's MCP Client Tool node or any Streamable HTTP-compatible client):

Bash (Linux/macOS/WSL):

docker run -d --name mcp-mssqlserver \
  -p 3001:3001 \
  -e MSSQL_HOST=host.docker.internal \
  -e MSSQL_PORT=1433 \
  -e MSSQL_DATABASE=master \
  -e MSSQL_AUTH_MODE=sql \
  -e MSSQL_USER=sa \
  -e MSSQL_PASSWORD=your-password \
  ghcr.io/ferronicardoso/mcp-mssqlserver:latest

PowerShell:

docker run -d --name mcp-mssqlserver `
  -p 3001:3001 `
  -e MSSQL_HOST=host.docker.internal `
  -e MSSQL_PORT=1433 `
  -e MSSQL_DATABASE=master `
  -e MSSQL_AUTH_MODE=sql `
  -e MSSQL_USER=sa `
  -e MSSQL_PASSWORD=your-password `
  ghcr.io/ferronicardoso/mcp-mssqlserver:latest

The MCP endpoint is then available at http://localhost:3001/mcp.

Local Development

git clone https://github.com/ferronicardoso/mcp-mssqlserver
cd mcp-mssqlserver
npm install
npm run build

Start the compiled server:

npm start

Build and Commit Workflow

This repository intentionally tracks dist/ to support npx github:user/repo usage.

The project uses a Husky pre-commit hook to:

  1. build TypeScript (npm run build)

  2. stage generated artifacts (git add dist)

Manual fallback:

npm run build
git add dist

Security Notes

  • Never commit real credentials or .env files.

  • Prefer least-privilege SQL users for production use. For read-only scenarios, use a db_datareader login in addition to MSSQL_READ_ONLY=true.

  • For public or untrusted networks, enable encryption (MSSQL_ENCRYPT=true) and configure certificates appropriately.

Windows Authentication (Integrated Security)

To use Windows Authentication with Integrated Security (process account), configure:

MSSQL_AUTH_MODE=windows
MSSQL_HOST=sqlserver.company.local
MSSQL_PORT=1433
MSSQL_DATABASE=master

License

MIT © Raphael Augusto Ferroni Cardoso

Available Tools

6 tools
describe_tableB

Retorna a estrutura de uma tabela: colunas, tipos de dados, nulabilidade e valores padrão.

Inputs: table (required), schema.

execute_queryA

Executa uma query SQL no SQL Server e retorna os resultados. Use para SELECT, INSERT, UPDATE e DELETE.

Inputs: query (required).

get_foreign_keysC

Lista as chaves estrangeiras de uma tabela e suas referências.

Inputs: table (required), schema.

get_table_indexesB

Lista os índices de uma tabela, incluindo colunas e tipo de índice.

Inputs: table (required), schema.

list_databasesA

Lista todos os bancos de dados disponíveis no servidor SQL Server.

Inputs: no named parameters.

list_tablesA

Lista todas as tabelas do banco de dados atual, opcionalmente filtrando por schema.

Inputs: schema.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 6 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: describing table structure, executing arbitrary queries, listing foreign keys, indexes, databases, and tables. No overlap or ambiguity.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern using snake_case (e.g., describe_table, get_foreign_keys, list_databases), making them predictable and easy to understand.

    Tool Count5/5

    With 6 tools, the set is well-scoped for a SQL Server utility server, covering essential introspection and query execution without being overly numerous or sparse.

    Completeness4/5

    The tools cover core database introspection (list databases, tables, describe table, get indexes/foreign keys) and query execution. Missing advanced features like schema management or stored procedure execution, but these are minor gaps for typical usage.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides tools to connect, query, and manage Microsoft SQL Server databases through the MCP protocol, including support for stored procedures, transactions, and schema inspection.
      81 PyPI
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      MCP server for connecting to SQL Server in readonly mode. Allows any MCP client to explore the schema and run SELECT queries against a SQL Server database.
      6
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for executing SQL queries and managing connections to Microsoft SQL Server databases.
      2,052 npm
      1
      MIT