This document provides a complete reference for all MCP tools available in pymssql-mcp.
pymssql-mcp provides 25 tools organized into these categories:
| Category | Tools | Description |
|---|---|---|
| Connection | 3 | Connect/disconnect from database |
| Query | 2 | Execute and validate SQL queries |
| Schema Discovery | 2 | Explore tables and columns |
| CRUD Operations | 4 | Read, insert, update, delete rows |
| Export | 2 | Export data to JSON/CSV files |
| Stored Procedures | 3 | List, describe, and execute procedures |
| Database Management | 2 | List and switch databases |
| Transactions | 4 | Begin, commit, rollback transactions |
| Knowledge | 6 | Save and retrieve learned information |
Establish connection to the SQL Server database.
Parameters: None (uses environment configuration)
Returns:
{
"status": "connected",
"host": "server.example.com",
"database": "SalesDB",
"connected_at": "2024-01-15T10:30:00"
}Example usage:
"Connect to the database"
Close all connections to the SQL Server database.
Parameters: None
Returns:
{
"status": "disconnected",
"connections_closed": 1
}List all active database connections.
Parameters: None
Returns:
{
"connections": [
{
"name": "default",
"host": "server.example.com",
"database": "SalesDB",
"connected_at": "2024-01-15T10:30:00",
"is_active": true
}
]
}Execute a read-only SQL SELECT query and return results.
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
query |
string | Required | SQL SELECT statement |
max_rows |
integer | MSSQL_MAX_ROWS |
Maximum rows to return |
Returns:
{
"query": "SELECT * FROM Customers",
"executed_query": "SELECT TOP 1000 * FROM Customers",
"columns": ["CustomerID", "Name", "Email"],
"rows": [
{"CustomerID": 1, "Name": "Acme Corp", "Email": "contact@acme.com"}
],
"row_count": 1,
"max_rows": 1000
}Note: Only SELECT queries are allowed. The query automatically has a TOP clause injected for safety.
Example usage:
"Show me all customers in California" "Count orders by status"
Check if a query is safe to execute without running it.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
query |
string | Yes | SQL statement to validate |
Returns:
{
"query": "SELECT * FROM Customers",
"valid": true,
"statement_type": "SELECT",
"warnings": [],
"suggestions": ["Consider using TOP clause to limit results"]
}Validates against:
- Statement type (SELECT, INSERT, UPDATE, DELETE, DDL)
- Blocked commands list
- Read-only mode compliance
- Potential issues (missing WHERE clause, unbounded SELECT)
List all tables and views in the database.
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
schema |
string | All schemas | Filter by schema name (e.g., 'dbo') |
include_views |
boolean | true |
Include views in results |
pattern |
string | None | Filter by name using SQL LIKE pattern |
Returns:
{
"tables": [
{"schema": "dbo", "name": "Customers", "type": "TABLE"},
{"schema": "dbo", "name": "Orders", "type": "TABLE"},
{"schema": "dbo", "name": "vw_ActiveCustomers", "type": "VIEW"}
],
"count": 3
}Example usage:
"What tables are available?" "List all tables starting with 'Order'"
Get detailed column information for a table.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
table |
string | Yes | Table name (e.g., 'dbo.Customers' or 'Customers') |
Returns:
{
"table": "dbo.Customers",
"columns": [
{"name": "CustomerID", "type": "int", "nullable": false},
{"name": "Name", "type": "nvarchar", "max_length": 100, "nullable": false},
{"name": "Email", "type": "varchar", "max_length": 255, "nullable": true}
],
"primary_key": ["CustomerID"],
"foreign_keys": [
{"constraint": "FK_Customers_Region", "column": "RegionID", "references_table": "dbo.Regions", "references_column": "RegionID"}
],
"indexes": [
{"name": "PK_Customers", "type": "CLUSTERED", "is_unique": true, "is_primary_key": true, "columns": "CustomerID"}
]
}Example usage:
"Describe the Orders table" "What columns are in dbo.Products?"
Read rows from a table by primary key or filter.
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
table |
string | Required | Table name |
id |
any | None | Single primary key value |
ids |
list | None | List of primary key values |
filter |
string | None | WHERE clause (without 'WHERE') |
columns |
list | All | Columns to return |
max_rows |
integer | Config | Maximum rows to return |
Provide one of: id (single row), ids (multiple rows), or filter (WHERE clause).
Returns:
{
"table": "dbo.Customers",
"rows": [
{"CustomerID": 1, "Name": "Acme Corp", "Email": "contact@acme.com"}
],
"count": 1
}Example usage:
"Read customer with ID 12345" "Get all orders where status = 'Pending'"
Insert a new row into a table.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
table |
string | Yes | Table name |
data |
object | Yes | Column names and values |
Returns:
{
"status": "success",
"table": "dbo.Customers",
"inserted": {"CustomerID": 123, "Name": "New Customer", "Email": "new@example.com"}
}Note: Disabled in read-only mode.
Update an existing row by primary key.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
table |
string | Yes | Table name |
id |
any | Yes | Primary key value |
data |
object | Yes | Column names and new values |
Returns:
{
"status": "success",
"table": "dbo.Customers",
"updated": {"CustomerID": 123, "Name": "Updated Name", "Email": "updated@example.com"}
}Note: Disabled in read-only mode.
Delete a row by primary key.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
table |
string | Yes | Table name |
id |
any | Yes | Primary key value |
Returns:
{
"status": "deleted",
"table": "dbo.Customers",
"id": 123,
"rows_affected": 1
}Note: Disabled in read-only mode.
Export query results to a JSON file.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
query |
string | Yes | SQL SELECT query |
filename |
string | Yes | Output file path |
Returns:
{
"status": "success",
"path": "/path/to/output.json",
"row_count": 150,
"file_size": 24576
}Note: Only SELECT queries are allowed.
Export query results to a CSV file.
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
query |
string | Required | SQL SELECT query |
filename |
string | Required | Output file path |
delimiter |
string | , |
Field delimiter |
Returns:
{
"status": "success",
"path": "/path/to/output.csv",
"row_count": 150,
"file_size": 12288
}List available stored procedures in the database.
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
schema |
string | All | Filter by schema name |
pattern |
string | All | Filter by name pattern (SQL LIKE) |
Returns:
{
"procedures": [
{"schema": "dbo", "name": "sp_GetCustomerOrders", "created": "2024-01-01T10:00:00", "modified": "2024-01-15T14:30:00"}
],
"count": 1
}Get parameter information for a stored procedure.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
procedure |
string | Yes | Procedure name (e.g., 'dbo.sp_GetUser') |
Returns:
{
"procedure": "dbo.sp_GetCustomerOrders",
"parameters": [
{"name": "@CustomerID", "type": "int", "direction": "IN"},
{"name": "@StartDate", "type": "datetime", "direction": "IN"},
{"name": "(return value)", "type": "int", "direction": "OUT"}
]
}Execute a stored procedure.
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
procedure |
string | Required | Procedure name |
params |
object | None | Input parameter values (without @) |
Returns:
{
"status": "success",
"procedure": "dbo.sp_GetCustomerOrders",
"result_sets": [[{"OrderID": 1, "Total": 99.99}]],
"row_count": 1
}Note: Disabled in read-only mode.
List all available databases on the SQL Server.
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
include_system |
boolean | false |
Include system databases |
Returns:
{
"databases": ["SalesDB", "HRDatabase", "Inventory"],
"current_database": "SalesDB",
"count": 3,
"blocked_count": 0
}System databases (master, tempdb, model, msdb) are excluded by default. Databases in the blocklist are always excluded.
Switch the active database context.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
database_name |
string | Yes | Database to switch to |
Returns:
{
"status": "switched",
"database": "HRDatabase",
"previous_database": "SalesDB"
}Note: Blocked databases cannot be switched to.
Begin a database transaction.
Parameters: None
Returns:
{
"status": "success",
"message": "Transaction started",
"in_transaction": true,
"started_at": "2024-01-15T10:30:00"
}Note: Only one transaction can be active at a time. Disabled in read-only mode.
Commit the current transaction.
Parameters: None
Returns:
{
"status": "success",
"message": "Transaction committed successfully",
"in_transaction": false
}Rollback the current transaction.
Parameters: None
Returns:
{
"status": "success",
"message": "Transaction rolled back successfully",
"in_transaction": false
}Get the current transaction status.
Parameters: None
Returns:
{
"in_transaction": true,
"started_at": "2024-01-15T10:30:00",
"read_only_mode": false
}These tools allow Claude to save and retrieve learned information about your database across sessions.
Save learned information about the SQL Server database.
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
topic |
string | Required | Short descriptive name |
content |
string | Required | The knowledge (markdown supported) |
append |
boolean | false |
Add to existing topic |
Good things to save:
- Table purposes (e.g., "Customers contains customer master records")
- Column meanings (e.g., "StatusCode 1=Active, 2=Inactive")
- Working query patterns
- Relationships between tables
- Data format notes
Example:
save_knowledge(
"dbo.Customers",
"Customer master table. PK is CustomerID.\n- Name: Customer name\n- StatusCode: 1=Active, 2=Inactive"
)
List all saved knowledge topics.
Parameters: None
Returns:
{
"topics": [
{"topic": "dbo.Customers", "summary": "Customer master table..."},
{"topic": "Status codes", "summary": "StatusCode meanings..."}
],
"count": 2,
"knowledge_file": "/path/to/knowledge.md"
}Get ALL saved knowledge about this database.
Parameters: None
Returns:
{
"status": "success",
"knowledge": "# dbo.Customers\nCustomer master table...\n\n# Status codes\n...",
"topic_count": 2,
"topics": ["dbo.Customers", "Status codes"]
}Important: Call this at the start of conversations to retrieve previously learned information.
Get saved knowledge for a specific topic.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
topic |
string | Yes | The topic name to retrieve |
Returns:
{
"status": "found",
"topic": "dbo.Customers",
"content": "Customer master table. PK is CustomerID..."
}Search saved knowledge for specific information.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
query |
string | Yes | Text to search for (case-insensitive) |
Returns:
{
"query": "customer",
"results": [
{"topic": "dbo.Customers", "matches": ["Customer master table", "CustomerID"]}
],
"match_count": 1
}Delete a saved knowledge topic.
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
topic |
string | Required | Topic to delete |
confirm |
boolean | false |
Must be true to execute |
In addition to tools, pymssql-mcp exposes these MCP resources:
Returns all saved knowledge about the database. Automatically available in every conversation.
Returns T-SQL syntax reference including data types, functions, and common patterns.
Returns example T-SQL queries for common operations, helping Claude generate correct queries.
When MSSQL_READ_ONLY=true:
insert_rowreturns an errorupdate_rowreturns an errordelete_rowreturns an errorcall_stored_procreturns an error- Transaction tools return errors
- Query and read operations work normally
SQL commands can be blocked via MSSQL_BLOCKED_COMMANDS. Default blocked commands:
DROP,TRUNCATE,ALTER,CREATEGRANT,REVOKE,DENYBACKUP,RESTOREKILL,SHUTDOWN,RECONFIGURE
All queries are limited by MSSQL_MAX_ROWS (default: 1000).
delete_knowledge requires confirm=true to execute.