mcpField
M
MS SQL Server MCP Server

MS SQL Server MCP Server

Local
github.com/bymcsDatabases14Updated 6w ago

About MS SQL Server MCP Server

MS SQL Server MCP Server connects MCP-compatible clients to Microsoft SQL Server for database queries and inspection. It provides schema, table-row, and stored-procedure tools over stdio or HTTP, with credentials supplied through the server environment.

Key features

  1. 01Connect and disconnect database sessions
  2. 02Run SQL queries and stored procedures
  3. 03Browse schema objects and table columns
  4. 04Read paginated table rows
  5. 05stdio and HTTP transport options
  6. 06Environment-only connection credentials

Use cases

  1. 01Inspect database schemas from an MCP client
  2. 02Read and paginate SQL Server table data
  3. 03Run SQL queries from compatible tools
  4. 04Invoke stored procedures through MCP

MCP support

This MCP server exposes Microsoft SQL Server connection, query, schema, row-reading, and stored-procedure tools to MCP clients. It supports stdio and HTTP transports.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"mssql-mcp-bymcs": {
"command": "npx",
"args": [
"-y",
"mssql-mcp"
],
"env": {
"DB_SERVER": "<DB_SERVER>",
"DB_DATABASE": "<DB_DATABASE>",
"DB_USER": "<DB_USER>",
"DB_PASSWORD": "<DB_PASSWORD>",
"DB_PORT": "<DB_PORT>",
"DB_TRUST_SERVER_CERTIFICATE": "<DB_TRUST_SERVER_CERTIFICATE>"
}
}
}
}
Run commandnpx -y mssql-mcp
Environment variables to set
DB_SERVER
DB_DATABASE
DB_USER
DB_PASSWORDSecret
DB_PORT
DB_TRUST_SERVER_CERTIFICATE

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npmmssql-mcp

Tools

14

Saved tool list · updated 3w ago

This tool takes no parameters.

Details

From the project README

MS SQL Server MCP Server v3.0.0

🚀 Model Context Protocol (MCP) server for Microsoft SQL Server - compatible with Claude Desktop, Cursor, Windsurf and VS Code.

CI npm version License: MIT

Standards Alignment

🚀 Quick Start

1. Install
npm install -g mssql-mcp
2. Configure IDE

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "mssql": {
      "command": "npx",
      "args": ["-y", "mssql-mcp@latest"],
      "env": {
        "DB_SERVER": "your-server.com",
        "DB_DATABASE": "your-database",
        "DB_USER": "your-username",
        "DB_PASSWORD": "your-password",
        "DB_ENCRYPT": "true",
        "DB_TRUST_SERVER_CERTIFICATE": "true"
      }
    }
  }
}

Cursor/Windsurf/VS Code (.vscode/mcp.json):

{
  "servers": {
    "mssql": {
      "command": "npx",
      "args": ["-y", "mssql-mcp@latest"],
      "env": {
        "DB_SERVER": "your-server.com",
        "DB_DATABASE": "your-database",
        "DB_USER": "your-username",
        "DB_PASSWORD": "your-password",
        "DB_ENCRYPT": "true",
        "DB_TRUST_SERVER_CERTIFICATE": "true"
      }
    }
  }
}

HTTP transport (remote/hosted scenarios):

{
  "servers": {
    "mssql": {
      "type": "http",
      "url": "http://127.0.0.1:3001",
      "env": {}
    }
  }
}

Replace with your actual database credentials. Credentials are read from the server environment only — never passed as tool parameters.

��️ Tool Catalog

Primary tools (use these)
ToolRead-onlyDescription
mssql_connect_databaseNoConnect using env variables. Idempotent.
mssql_disconnect_databaseNoClose connection. Idempotent.
mssql_connection_status✅Connection state and pool metrics
mssql_run_sql_query⚠️ NoExecute arbitrary SQL. May mutate data.
mssql_list_schema_objects✅List tables/views/procedures/functions with pagination
mssql_describe_table_columns✅Column definitions for a table
mssql_read_table_rows✅Paginated rows with projection and safe WHERE
mssql_execute_stored_procedure⚠️ NoExecute a stored procedure
mssql_list_databases✅List all databases on the instance

All data tools accept a response_format parameter ("json" | "markdown", default "json"). Use "markdown" to get human-readable table output.

Deprecated aliases (still registered for backward compatibility)

These are the only alias tool names the server actually registers (in src/tools/*.ts). They behave the same as their replacement but are not documented in new integrations — use the primary tool names above instead.

Old nameUse instead
mssql_execute_querymssql_run_sql_query
mssql_get_schemamssql_list_schema_objects
mssql_describe_tablemssql_describe_table_columns
mssql_get_table_datamssql_read_table_rows
mssql_execute_proceduremssql_execute_stored_procedure

🚌 Transport Modes

ModeUse when
stdio (default)Local IDE integration (Claude Desktop, Cursor, VS Code)
httpRemote/hosted deployment, testing with MCP Inspector
# stdio (default)
node dist/src/index.js

# HTTP on 127.0.0.1:3001
MCP_TRANSPORT=http node dist/src/index.js

# Custom HTTP host/port
MCP_TRANSPORT=http MCP_HOST=0.0.0.0 MCP_PORT=8080 node dist/src/index.js

🔧 Environment Variables

Database connection
VariableRequiredDefaultDescription
DB_SERVER✅—SQL Server hostname or IP
DB_DATABASE❌—Database name
DB_USER❌—Login username
DB_PASSWORD❌—Login password
DB_PORT❌1433TCP port
DB_ENCRYPT❌trueEnable TLS (required for Azure SQL)
DB_TRUST_SERVER_CERTIFICATE❌falseTrust self-signed certs
DB_CONNECTION_TIMEOUT❌30000Connection timeout ms
DB_REQUEST_TIMEOUT❌30000Query timeout ms
Transport
VariableDefaultDescription
MCP_TRANSPORTstdiostdio or http
MCP_HOST127.0.0.1HTTP bind address
MCP_PORT3001HTTP port

🔒 Security Model

  • No credential parameters: All connection settings come from environment variables only. Tool inputs cannot override connection config.
  • Identifier validation: Schema, table, and procedure names are validated against a safe identifier pattern before interpolation into SQL.
  • Parameterized queries: All user-supplied values (WHERE clause values, column values) must be passed as named parameters via @paramName — never embedded in query strings.
  • Origin and Host validation: HTTP transport validates both the Origin and Host headers against an allowlist (localhost, [::1], and the configured bind host by default), guarding against DNS rebinding.
  • SQL risk labeling: run_sql_query and execute_stored_procedure are explicitly labeled as non-read-only and open-world.
⚠️ SQL Risk Notes

run_sql_query accepts arbitrary SQL including DDL and DML. To minimize risk:

  • Use a least-privilege SQL login (SELECT-only where possible)
  • Never run the server with a sysadmin or sa account
  • Consider network firewall rules to limit what the server can reach

📄 Pagination

All list tools return a pagination object:

{
  "count": 20,
  "limit": 20,
  "offset": 0,
  "has_more": true,
  "next_offset": 20,
  "total_count": 150
}

Default page size: 20 rows. Maximum: 200 rows.

Results are also truncated if the serialized payload exceeds 100KB, with a truncation_message explaining how many rows were dropped.

🏗️ Architecture

src/
  index.ts          ← bootstrap (env, transport selection)
  server.ts         ← createServer() factory
  constants.ts      ← limits, defaults, protocol strings
  config.ts         ← env parsing
  types.ts          ← shared TypeScript interfaces
  db/
    connection.ts   ← connection pool singleton
    validators.ts   ← SQL identifier validation
    query-builders.ts ← safe parameterized query construction
  tools/            ← one file per tool group
  resources/        ← MCP resource handlers
  transports/       ← stdio and HTTP transports
  utils/
    errors.ts       ← error normalization helpers
    format.ts       ← JSON formatting, payload truncation
    markdown.ts     ← markdown table/list rendering helpers
    pagination.ts   ← pagination metadata helpers

🧪 Inspector Smoke Test

npx @modelcontextprotocol/inspector

Expected:

  • stdio server connects
  • Tool list renders with all tools
  • mssql_connection_status returns JSON without a connection
  • mssql_connect_database works when env variables are set

🔨 Development

npm install
cp .env.example .env  # fill in your test DB credentials
npm run typecheck     # type check only
npm run build         # compile TypeScript
npm test              # run unit tests
npm run ci            # typecheck + build + test

License

MIT © BYMCS

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.