1. Conduid
  2. Data
  3. Pyodbc MCP Server
MCP server · Data

Pyodbc MCP Server

MCP server for read-only SQL Server access via Windows Authentication

56Fair

Scored 6 days ago · breakdown

About Pyodbc MCP Server

Pyodbc MCP Server is an MCP server published by jjones-wps in the Data category: mCP server for read-only SQL Server access via Windows Authentication.

The repository has 1 stars and 0 forks, with the last commit 9 months ago. Six months or more without a commit doesn't mean the server is broken, but check the open issues before depending on it in production.

Install

From source
git clone https://github.com/jjones-wps/pyodbc-mcp-server

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Tools (10)

DescribeTableGet detailed column definitions, primary keys, and foreign keys

Parameters not published.

GetTableRelationshipsFind foreign key relationships with referential actions

Parameters not published.

ListConstraintsList all constraints (PK, FK, unique, check, default)

Parameters not published.

ListFunctionsList all user-defined functions, optionally filtered by schema

Parameters not published.

ListIndexesList all indexes for a specific table with metadata

Parameters not published.

ListStoredProceduresList all stored procedures, optionally filtered by schema

Parameters not published.

ListTablesList all tables in the database, optionally filtered by schema

Parameters not published.

ListTriggersList all triggers with table association and status

Parameters not published.

ListViewsList all views in the database, optionally filtered by schema

Parameters not published.

ReadDataExecute SELECT queries with security filtering and row limits

Parameters not published.

Ask AI

✦

Ask AI about Pyodbc MCP Server

Powered by Claude · Grounded in docs

I know everything about Pyodbc MCP Server. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

  • ✓README presentThe repository ships documentation.
  • ✓License declaredUsable under a stated license.
  • !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.

3 checks have not been run yet.

Releases

v0.4.0v0.4.0 - Production Readiness · 3 Jan 2026[0.4.0] - 2026-01-03 Phase 3: Production Readiness COMPLETE** - All 4 sub-phases finished, project is production-ready Added Phase 3.4 Documentation COMPLETE** - Comprehensive documentation (4,893 lines across 5 guides) `docs/API.md`…
v0.2.3v0.2.3 · 2 Jan 2026[0.2.3] - 2026-01-02 Added Pytest coverage thresholds (minimum 15% required) HTML coverage reports for detailed analysis Coverage.py configuration with proper source paths and omit patterns PEP 257 docstring compliance enforcement via ruff…
v0.2.2v0.2.2 · 12 Dec 2025[0.2.2] - 2025-12-12 Added Claude Code CLI installation instructions using `claude mcp add` (recommended method) Scope options documentation (user vs project scope) Server management commands (`claude mcp list`, `claude mcp get`) Changed…
v0.2.1v0.2.1 - Thread Safety Hotfix · 11 Dec 2025Release 0.2.1
v0.2.0v0.2.0 - Async Architecture & MCP Resources · 11 Dec 2025[0.2.0] - 2025-12-11 Added Async Architecture**: All tools now use `async`/`await` with `anyio.to_thread` for non-blocking database operations Connection Pooling**: Shared connection pool initialized via FastMCP lifespan context manager…

README

pyodbc MCP Server

PyPI version

A Model Context Protocol (MCP) server that provides read-only access to Microsoft SQL Server databases using Windows Authentication.

Built for environments where:

  • 🔐 Windows Authentication is required (no username/password storage)
  • 🛡️ Read-only access is mandated by IT security policy
  • 🖥️ SQL Server is accessed from Windows workstations
  • 🤖 AI assistants need safe database access (Claude Code, etc.)

🆕 What's New in v0.4.0 (Production Ready!)

Version 0.4.0 marks the first production-ready release with:

  • ✅ Published on PyPI - Simple pip install pyodbc-mcp-server
  • ✅ Comprehensive Testing - 193 tests, 83% code coverage
  • ✅ Professional Configuration - CLI args, TOML files, environment variables
  • ✅ Robust Error Handling - Typed exceptions with automatic retry logic
  • ✅ Complete Documentation - 4,893 lines across 5 guides (API, Config, Troubleshooting, Examples, Development)

Upgrade from pre-release versions: pip install --upgrade pyodbc-mcp-server

Features

  • Windows Authentication - Uses Trusted_Connection via pyodbc, no credentials to manage
  • Read-only by design - Only SELECT queries allowed, dangerous keywords blocked
  • Comprehensive error handling - Typed exceptions with retry logic for transient failures
  • Row limiting - Prevents accidental large result sets (configurable, max 10,000)
  • Schema exploration - 10 tools for tables, views, indexes, constraints, relationships, and more
  • MCP resources - 5 URI-based endpoints for quick data access
  • Configurable - CLI arguments, TOML config files, or environment variables
  • Production-ready - Query timeouts, connection retries, comprehensive logging

Available Tools

Tool Description
ListTables List all tables in the database, optionally filtered by schema
DescribeTable Get detailed column definitions, primary keys, and foreign keys
ReadData Execute SELECT queries with security filtering and row limits
GetTableRelationships Find foreign key relationships with referential actions
ListViews List all views in the database, optionally filtered by schema
ListIndexes List all indexes for a specific table with metadata
ListConstraints List all constraints (PK, FK, unique, check, default)
ListStoredProcedures List all stored procedures, optionally filtered by schema
ListFunctions List all user-defined functions, optionally filtered by schema
ListTriggers List all triggers with table association and status

See API Reference for complete documentation.

Installation

🚀 Quick Install (Recommended)

The package is available on PyPI and ready for production use:

pip install pyodbc-mcp-server

That's it! The server is now available as the pyodbc-mcp-server command.

📦 Latest Release: v0.4.0 (Production Ready) 📚 Full Documentation: docs/ 🔗 PyPI Package: pypi.org/project/pyodbc-mcp-server

Prerequisites

  • Python 3.10+ (tested on 3.10, 3.11, 3.12)
  • Windows with ODBC Driver 17+ for SQL Server
  • Network access to your SQL Server
  • Windows domain account with SELECT permissions on target database

Install ODBC Driver (if needed)

If you don't have the ODBC driver installed, download Microsoft ODBC Driver 17 for SQL Server.

Alternative: Install from Source

For development or the latest unreleased features:

git clone https://github.com/jjones-wps/pyodbc-mcp-server.git
cd pyodbc-mcp-server
pip install -e ".[dev]"

Configuration

Quick Configuration

The server supports three configuration methods (in priority order):

  1. CLI Arguments (highest priority)
  2. TOML Configuration File
  3. Environment Variables (lowest priority)

Minimal setup with defaults:

mssql-mcp-server

Using TOML config file:

# Create config from example
cp config.example.toml config.toml

# Edit config.toml, then run
mssql-mcp-server --config config.toml

Override specific settings:

mssql-mcp-server --config config.toml --database AdventureWorks --query-timeout 120

See Configuration Guide for complete documentation.

Configuration Parameters

Parameter Default Range Description
server localhost - SQL Server hostname or IP
database master - Target database name
driver ODBC Driver 17 for SQL Server - ODBC driver name
connection_timeout 30 1-300 Connection timeout (seconds)
query_timeout 30 1-3600 Query execution timeout (seconds)
max_retries 3 0-10 Max retry attempts for transient errors
retry_delay 1.0 0-60 Base retry delay (seconds, exponential backoff)

Environment Variables

Variable Default Description
MSSQL_SERVER localhost SQL Server hostname or IP
MSSQL_DATABASE master Target database name
ODBC_DRIVER ODBC Driver 17 for SQL Server ODBC driver name
MSSQL_CONNECTION_TIMEOUT 30 Connection timeout (seconds)
MSSQL_QUERY_TIMEOUT 30 Query timeout (seconds)
MSSQL_MAX_RETRIES 3 Max retry attempts
MSSQL_RETRY_DELAY 1.0 Base retry delay (seconds)

Claude Code Configuration

Quick Install via CLI (Recommended)

Since the package is on PyPI, adding to Claude Code is simple:

claude mcp add mssql --transport stdio -e MSSQL_SERVER=your-server -e MSSQL_DATABASE=your-database -- pyodbc-mcp-server

Note: Claude Code will automatically use the PyPI package. No need to specify installation paths!

With all environment variables:

claude mcp add mssql --transport stdio \
  -e MSSQL_SERVER=your-sql-server \
  -e MSSQL_DATABASE=your-database \
  -e ODBC_DRIVER="ODBC Driver 17 for SQL Server" \
  -- pyodbc-mcp-server

Scope options:

# User scope - available across all your projects (default)
claude mcp add mssql --transport stdio -e MSSQL_SERVER=your-server -e MSSQL_DATABASE=your-db -- pyodbc-mcp-server

# Project scope - shared with team via .mcp.json (checked into version control)
claude mcp add mssql --transport stdio --scope project -e MSSQL_SERVER=your-server -e MSSQL_DATABASE=your-db -- pyodbc-mcp-server

Verify installation:

claude mcp list          # List all configured servers
claude mcp get mssql     # Show details for this server

Manual Configuration (Alternative)

Add to your ~/.claude.json (or %USERPROFILE%\.claude.json on Windows):

{
  "mcpServers": {
    "mssql": {
      "type": "stdio",
      "command": "pyodbc-mcp-server",
      "env": {
        "MSSQL_SERVER": "your-sql-server",
        "MSSQL_DATABASE": "your-database"
      }
    }
  }
}

Note for Windows users: If you encounter issues, try wrapping with cmd /c:

"command": "cmd",
"args": ["/c", "pyodbc-mcp-server"],

Claude Desktop Configuration

Add to your Claude Desktop config (%APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "mssql": {
      "command": "pyodbc-mcp-server",
      "env": {
        "MSSQL_SERVER": "your-sql-server",
        "MSSQL_DATABASE": "your-database"
      }
    }
  }
}

Note: Since v0.4.0, pyodbc-mcp-server is installed as a command-line tool. For older installations, use "command": "python", "args": ["-m", "mssql_mcp_server"].

Usage Examples

Once configured, you can ask Claude to:

Explore Schema

"List all tables in the dbo schema"
"Describe the structure of the customers table"
"What are the foreign key relationships for the orders table?"

Query Data

"Show me the first 10 rows from the products table"
"Find all orders from the last 30 days"
"What are the top 5 customers by total order value?"

Analyze Relationships

"Find all tables that reference the customer table"
"Show me the relationship between orders and order_lines"

Security

This server is designed with security as a primary concern:

Read-Only Enforcement

  • Only queries starting with SELECT are allowed
  • Dangerous keywords are blocked even in subqueries:
    • INSERT, UPDATE, DELETE, DROP, CREATE, ALTER
    • EXEC, EXECUTE, TRUNCATE, GRANT, REVOKE, DENY
    • BACKUP, RESTORE, SHUTDOWN, DBCC

Windows Authentication

  • Uses Trusted_Connection=yes - no passwords stored or transmitted
  • Leverages existing Windows domain security
  • Your database permissions are enforced by SQL Server

Row Limiting

  • Default limit: 100 rows per query
  • Maximum limit: 10,000 rows per query
  • Prevents accidental retrieval of large datasets

Error Handling & Retry Logic

  • Typed Exceptions: ConnectionError, QueryError, SecurityError, ValidationError, TimeoutError
  • Automatic Retries: Transient errors (connection failures, timeouts, deadlocks) are retried with exponential backoff
  • Configurable Timeouts: Separate timeouts for connection and query execution
  • Consistent Error Format: All errors returned as JSON with error code, message, and details

Documentation

Comprehensive documentation is available in the docs/ directory:

Document Description
API Reference Complete documentation for all 11 tools and 5 resources
Configuration Guide CLI arguments, TOML files, environment variables
Troubleshooting Guide Common issues and solutions
Examples Example queries and use cases
Development Guide Contributing, testing, and release process

Development

Quick Start

# Clone repository
git clone https://github.com/jjones-wps/pyodbc-mcp-server.git
cd pyodbc-mcp-server

# Install with development dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Check coverage
pytest --cov=src/mssql_mcp_server --cov-report=html

# Format code
black src tests && isort src tests

# Type check
mypy src

# Lint
ruff check src tests

Running Locally

# Using environment variables
export MSSQL_SERVER=your-server
export MSSQL_DATABASE=your-database
python -m mssql_mcp_server

# Using config file
cp config.example.toml config.toml
# Edit config.toml
mssql-mcp-server --config config.toml

# Validate configuration
mssql-mcp-server --config config.toml --validate-only

See Development Guide for architecture, testing patterns, and contribution workflow.

Contributing

Contributions are welcome! Please see the Development Guide for:

  • Development setup
  • Architecture overview
  • Testing guide
  • Code style requirements
  • Adding new tools
  • Release process

Quick contribution checklist:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/my-feature)
  3. Make changes and add tests
  4. Ensure tests pass and coverage doesn't decrease
  5. Format code (black src tests && isort src tests)
  6. Submit a pull request

License

MIT License - see LICENSE file.

Acknowledgments

  • Built with FastMCP for MCP protocol handling
  • Uses pyodbc for SQL Server connectivity
  • Inspired by the need for safe AI access to enterprise databases

Related Projects

README copy captured when this server was indexed; it may lag the repository. The original is authoritative.

Questions

About Pyodbc MCP Server

How do I install Pyodbc MCP Server?

No package has been published for this server, so install it from source: clone the repository and follow its README.

Is Pyodbc MCP Server safe to use with an AI agent?

Its trust score is 56 out of 100 (fair). It passes 2 of the 3 static security checks run so far; the failures are listed above. It has no ConduID identity yet, so agent calls to it are not receipted.

Is Pyodbc MCP Server still maintained?

The last commit was 9 months ago. That's long enough that you should check whether the maintainer is responding to issues before depending on it.