SQL Server MCP
# mcp-node-mssql
## Usage
### Cursor
See the [official Cursor docs](https://docs.cursor.com/context/model-context-protocol) for more information.
1. Open (or create) the `mcp.json` file (it should be in `~/.cursor/mcp.json` or `<project-root>/.cursor/mcp.json`, but see Cursor docs for more details).
2. Add the following details and save the file:
```json
{
"mcpServers": {
"mssql": {
"command": "npx",
"args": [
"-y",
"mcp-node-mssql"
],
"env": {
"DB_HOST": "localhost",
"DB_PORT": "1433",
"DB_USERNAME": "<username>",
"DB_PASSWORD": "<password>",
"DB_DATABASE": "<database>",
"CONNECTION_TIMEOUT": 600000,
"REQUEST_TIMEOUT": 300000
"DB_ENCRYPT": "false",
"DB_ENABLE_ARITH_ABORT": "false",
"DB_TRUST_SERVER_CERTIFICATE": "false",
"TRUSTED_CONNECTION": "false"
}
}
}
}
```
### Windsurf
See the [official Windsurf docs](https://codeium.com/docs/windsurf/mcp) for more information.
1. Open the `Windsurf MCP Configuration Panel`
2. Click `Add custom server`.
3. Add the following details and save the file:
```json
{
"mcpServers": {
"mssql": {
"command": "npx",
"args": [
"-y",
"mcp-node-mssql"
],
"env": {
"DB_HOST": "localhost",
"DB_PORT": "1433",
"DB_USERNAME": "<username>",
"DB_PASSWORD": "<password>",
"DB_DATABASE": "<database>",
"CONNECTION_TIMEOUT": 600000,
"REQUEST_TIMEOUT": 300000
"DB_ENCRYPT": "false",
"DB_ENABLE_ARITH_ABORT": "false",
"DB_TRUST_SERVER_CERTIFICATE": "false",
"TRUSTED_CONNECTION": "false"
}
}
}
}
```
### Claude Code
See the [official Claude Code docs](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/tutorials#set-up-model-context-protocol-mcp) for more information.
_You can add a new MCP server from the Claude Code CLI. But modifying the json file directly is simpler!_
1. Open the Claude Code configuration file (it should be in `~/.claude.json`).
2. Find the `projects` > `mcpServers` section and add the following details and save the file:
```json
{
"projects": {
"mcpServers": {
"mssql": {
"command": "npx",
"args": [
"-y",
"mcp-node-mssql"
],
"env": {
"DB_HOST": "localhost",
"DB_PORT": "1433",
"DB_USERNAME": "<username>",
"DB_PASSWORD": "<password>",
"DB_DATABASE": "<database>",
"CONNECTION_TIMEOUT": 600000,
"REQUEST_TIMEOUT": 300000
"DB_ENCRYPT": "false",
"DB_ENABLE_ARITH_ABORT": "false",
"DB_TRUST_SERVER_CERTIFICATE": "false",
"TRUSTED_CONNECTION": "false"
}
}
}
}
}
```
## Issues and Troubleshooting
Before doing anything else, please make sure you are running the latest version!
If you run into problems using this MCP server, please open an issue on [GitHub](https://github.com/cwilby/mcp-node-mssql/issues)!
## Development
### Installation
```bash
npm install
```
### Build
```bash
npm run build
```
### Running the Development Server Locally
To test your local development version of the MCP server rather than using the published package, follow these steps:
1. Build the project:
```bash
npm run build
```
2. Create or modify your `mcp.json` file to reference your local build:
```json
{
"mcpServers": {
"mssql": {
"command": "node",
"args": [
"/path/to/your/local/mcp-node-mssql/dist/index.js"
],
"env": {
"DB_HOST": "localhost",
"DB_PORT": "1433",
"DB_USERNAME": "<username>",
"DB_PASSWORD": "<password>",
"DB_DATABASE": "<database>",
"CONNECTION_TIMEOUT": 600000,
"REQUEST_TIMEOUT": 300000
"DB_ENCRYPT": "false",
"DB_ENABLE_ARITH_ABORT": "false",
"DB_TRUST_SERVER_CERTIFICATE": "false",
"TRUSTED_CONNECTION": "false"
}
}
}
}
```
3. Place this `mcp.json` file in one of the following locations:
- For Cursor: In your home directory (`~/.cursor/mcp.json`) or in your project directory (`.cursor/mcp.json`)
- For Windsurf: Use the MCP Configuration Panel to add the custom server
4. Restart your AI assistant (Cursor or Windsurf) to load the new configuration.
This allows you to instantly test changes to the MCP server without having to publish a new version.
TDQS
Scored across 8 tools
Every tool has a clearly distinct purpose with no ambiguity. Tools are clearly separated by resource type (tables vs stored procedures) and action type (get specific vs get list vs transaction operations vs query). The query tool stands alone as a general-purpose operation.
All tools follow a consistent verb-noun pattern with hyphens. Transaction tools use verb-transaction pattern (start-transaction, commit-transaction, rollback-transaction), get operations use get-noun pattern (get-table, get-tables), and query stands alone as a clear single verb. The naming is perfectly predictable throughout.
8 tools is well-scoped for a database server. Each tool earns its place with clear responsibilities: 4 for data/metadata retrieval, 3 for transaction management, and 1 for general querying. This provides comprehensive coverage without bloat.
The toolset covers core database operations well with querying, transaction management, and metadata retrieval. Minor gaps exist in write operations beyond transactions (no explicit insert/update/delete tools) and schema modification (no create/alter/drop tools), but the query tool provides a workaround for most of these operations.