
SQL Sentinel MCP Server
io.github.tkmawarirePublished by GitHub account tkmawarirev2.3.1Updated Oct 24, 2026
SQL Server monitoring and diagnostics for AI agents using Extended Events. No ODBC drivers required.
Overview
A local MCP server that lets an AI assistant monitor, diagnose and operate a SQL Server through Extended Events sessions, wait stats and direct queries.
- What you can do
- Create, start, stop, drop and list Extended Events capture sessions, including one-step quick capture and short real-time streaming of events with filtering, sorting and deduplication, plus query fingerprinting and execution-sequence analysis. Retrieve aggregated statistics grouped by fingerprint, database, application or login, and inspect databases, applications, logins, sessions and blocking. Diagnose deadlocks, blocked processes and wait stats, and run a combined health check covering slow queries, deadlocks, blocking and insights. Check or grant the required SQL Server permissions. Perform database operations: list tables, describe schemas, run SELECT queries, insert, update, create and
- When to use it
- Useful when you need an assistant to investigate SQL Server performance problems such as slow queries, N+1 patterns, deadlocks or blocking, or to run routine schema inspection and data queries against a SQL Server instance you administer.
- Requirements
- A local runtime: Docker, the .NET 9 SDK for the NuGet global tool, or a source build. A reachable SQL Server 2012+ instance with Extended Events enabled. The connection string must be supplied in the SQL_SENTINEL_CONNECTION_STRING environment variable. The login needs ALTER ANY EVENT SESSION and VIEW SERVER STATE; blocked-process detection also needs the blocked process threshold configured.
Installation
In SourceWeft
- Open SQL Sentinel MCP Server in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
SQL Sentinel MCP Server
[NuGet] [Docker] [License: MIT]
A production-ready MCP (Model Context Protocol) server for SQL Server monitoring, diagnostics, and database operations. Built with .NET 9 and Microsoft.Data.SqlClient for native SQL Server connectivity — no ODBC drivers required.
Features
- Session Management — Create, start, stop, drop, and list Extended Events sessions
- Smart Filtering — Filter by application, database, user, duration, host, and text patterns
- Query Fingerprinting — Normalize and group similar queries differing only in literal values
- Sequence Analysis — Trace execution order with timing gaps and cumulative duration
- Deadlock Detection — Capture and analyze XML deadlock reports with victim/process details
- Blocking Analysis — Monitor blocked process events with wait resource and SQL text
- Wait Stats — Query
sys.dm_os_wait_statsdirectly, categorized by type (CPU, I/O, Lock, Memory, etc.) - Health Check — Comprehensive server diagnostic: slow queries, deadlocks, blocking, wait stats, and insights
- Real-Time Streaming — Stream captured events for a specified duration
- Production-Safe — Auto-excludes noise (
sp_reset_connection,SETstatements, trace queries) - Database Operations — List tables, describe schemas, query data, insert, update, and drop tables
- AI-Optimized — Structured JSON output with optional Markdown formatting
Requirements
- SQL Server 2012+ with Extended Events enabled (default)
- Required permissions:
- For blocked process detection:
Installation
Option 1: Docker (Recommended)
No .NET SDK required. Works on any system with Docker installed.
Claude Desktop (claude_desktop_config.json)
Claude Code
Network access: The
-iflag is required for stdio transport. Use--network hostso the container can reach SQL Server on your host machine. For remote SQL Server, omit--network hostand use the accessible hostname in your connection string.Connection string: Set
SQL_SENTINEL_CONNECTION_STRINGvia-e. All tools read the connection string from this environment variable.
Option 2: .NET Global Tool (NuGet)
Requires .NET 9 SDK or later.
Option 3: Build from Source
Run directly:
Or publish a self-contained single binary:
Output will be in bin/Release/net9.0/{runtime}/publish/
Connection Strings
All tools read the connection string from the SQL_SENTINEL_CONNECTION_STRING environment variable. Set it once before starting the server:
SQL Authentication:
Windows Authentication:
Note: Only use
TrustServerCertificate=truein development environments with self-signed certificates. For production, always useTrustServerCertificate=falsewith a valid SSL certificate.
Azure SQL:
MCP Tools Reference
Session Lifecycle
Event Retrieval
Diagnostics
Permissions
Database Operations
Usage Examples
Quick Debug Session
Find N+1 Queries
Trace Specific Operation
Deadlock Detection
Blocking Analysis
Server Health Check
Database Operations
Wait Stats (No Session Required)
Query Fingerprinting
Queries are normalized to group similar ones:
Noise Filtering
Default excluded patterns (when excludeNoise=true):
sp_reset_connection— Connection pool resetSET TRANSACTION ISOLATION LEVEL— Session setupSET NOCOUNT,SET ANSI_*— Client configurationsp_trace_*,fn_trace_*— Trace system queries
Supported Event Types
SqlBatchCompleted, RpcCompleted, SqlStatementCompleted, SpStatementCompleted, Attention, ErrorReported, Deadlock, BlockedProcess, LoginEvent, SchemaChange, Recompile, AutoStats
Project Structure
Development
Prerequisites
- .NET 9 SDK
- SQL Server 2012+ instance (local, Docker, or remote)
- Docker (optional, for container builds)
Clone & Build
Running the MCP Server Locally
The server communicates over stdio using the MCP protocol. Connect it to an MCP client (Claude Desktop, Claude Code, etc.) for interactive use.
Using the Debug API
The API project provides a REST wrapper around all MCP tools with Swagger UI for manual testing.
- Swagger UI:
http://localhost:5100/ - Configure the connection string via environment variable
SQL_SENTINEL_CONNECTION_STRING
Using the Debug CLI
The CLI project provides an interactive REPL and script mode for testing tools directly.
Set the SQL_SENTINEL_CONNECTION_STRING environment variable before running.
Docker Build
Architecture
Key Patterns
- Dependency injection via
Microsoft.Extensions.Hosting - stdio transport — stdout is reserved for MCP protocol; all logging goes to stderr
- Tool auto-discovery — MCP tools are discovered from the assembly via
WithToolsFromAssembly() - XE session prefix — All created sessions are prefixed with
mcp_sentinel_ - Two event shapes — Standard events (query, login, recompile) with typed fields, and XML-payload events (deadlock, blocking) parsed from Extended Events XML
Adding a New MCP Tool
- Create a
public staticmethod in the appropriate file underTools/(or create a new file) - Decorate with
[McpServerTool(Name = "sqlsentinel_your_tool")]and[Description("...")] - Add parameters with
[Description("...")]attributes — they become the tool's input schema - Inject services via method parameters (e.g.,
IProfilerService,IWaitStatsService) - Return a string (JSON or Markdown) — the framework handles MCP response wrapping
Troubleshooting
"Permission denied" creating session
"Login failed"
- Check connection string credentials
- For Windows auth, ensure process runs under correct user
- For Azure SQL, ensure firewall allows your IP
No events captured
- Verify session is RUNNING (
sqlsentinel_list_sessions) - Check filters aren't too restrictive
- Verify target database/app is generating queries
- Check
minDurationMsisn't filtering everything
No deadlock events
- Ensure session was created with
eventTypes: "Deadlock" - Deadlocks must actually occur while the session is running
No blocking events
- Ensure
blocked process thresholdis configured:sp_configure 'blocked process threshold', 5 - Ensure session was created with
eventTypes: "BlockedProcess" - Blocking must exceed the configured threshold (seconds)
Timeout reading events
Large ring buffers with many events can be slow to parse. Use:
- Time filters to narrow the window
- Increase command timeout in code if needed
Security Notes
- The
SQL_SENTINEL_CONNECTION_STRINGenvironment variable contains credentials — secure appropriately - Don't leave sessions running indefinitely on production
- Query text may contain sensitive data
- Grant minimum required permissions
Contributing
See CONTRIBUTING.md for guidelines on submitting issues and pull requests.
License
MIT
Source: README.md at commit 84ac172
Tools
0Version history
1- v2.3.1LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts