{"id":"7c5ec557-c7ca-4d5d-b330-252b3440ed6e","shortId":"SJbtdw","kind":"skill","title":"mssql","tagline":"Execute read-only SQL queries against multiple Microsoft SQL Server databases. Use when: (1) querying MSSQL/SQL Server databases, (2) exploring database schemas/tables, (3) running SELECT queries for data analysis, (4) checking database contents. Supports multiple database connec","description":"# MSSQL Read-Only Query Skill\n\nExecute safe, read-only queries against configured Microsoft SQL Server databases.\n\n## Requirements\n\n- Python 3.8+\n- pymssql: `pip install -r requirements.txt`\n\n## Setup\n\nCreate `connections.json` in the skill directory or `~/.config/claude/mssql-connections.json`.\n\n**Security**: Set file permissions to `600` since it contains credentials:\n```bash\nchmod 600 connections.json\n```\n\n```json\n{\n  \"databases\": [\n    {\n      \"name\": \"production\",\n      \"description\": \"Main app database - users, orders, transactions\",\n      \"host\": \"db.example.com\",\n      \"port\": 1433,\n      \"database\": \"app_prod\",\n      \"user\": \"readonly_user\",\n      \"password\": \"your-password\",\n      \"encrypt\": true,\n      \"tds_version\": \"7.3\"\n    }\n  ]\n}\n```\n\n### Config Fields\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| name | Yes | Identifier for the database (case-insensitive) |\n| description | Yes | What data this database contains (used for auto-selection) |\n| host | Yes | Database hostname |\n| port | No | Port number (default: 1433) |\n| database | Yes | Database name |\n| user | Yes | Username |\n| password | Yes | Password |\n| encrypt | No | Enable TLS encryption (default: false) |\n| tds_version | No | TDS protocol version: 7.0, 7.1, 7.2, 7.3, 7.4 (default: auto) |\n\n## Usage\n\n### List configured databases\n```bash\npython3 scripts/query.py --list\n```\n\n### Query a database\n```bash\npython3 scripts/query.py --db production --query \"SELECT TOP 10 * FROM users\"\n```\n\n### List tables\n```bash\npython3 scripts/query.py --db production --tables\n```\n\n### Show schema\n```bash\npython3 scripts/query.py --db production --schema\n```\n\n### Limit results\n```bash\npython3 scripts/query.py --db production --query \"SELECT * FROM orders\" --limit 100\n```\n\n**Note**: MSSQL uses `TOP N` instead of `LIMIT`. The `--limit` flag automatically inserts `TOP N` after SELECT.\n\n## Database Selection\n\nMatch user intent to database `description`:\n\n| User asks about | Look for description containing |\n|-----------------|--------------------------------|\n| users, accounts | users, accounts, customers |\n| orders, sales | orders, transactions, sales |\n| analytics, metrics | analytics, metrics, reports |\n| logs, events | logs, events, audit |\n\nIf unclear, run `--list` and ask user which database.\n\n## Safety Features\n\n- **Read-only enforcement**: Query validation blocks write operations (use a `db_datareader` role user for server-side protection)\n- **Query validation**: Only SELECT, SHOW, EXPLAIN, WITH, SP_HELP queries allowed\n- **Single statement**: Multiple statements per query rejected\n- **TLS support**: Configurable encryption for secure connections\n- **Query timeout**: 30-second timeout enforced via pymssql\n- **Connection timeout**: 10-second login timeout\n- **Memory protection**: Max 10,000 rows per query to prevent OOM\n- **Column width cap**: 100 char max per column for readable output\n- **Credential sanitization**: Error messages don't leak passwords\n\n## Troubleshooting\n\n| Error | Solution |\n|-------|----------|\n| Config not found | Create `connections.json` in skill directory |\n| Authentication failed | Check username/password in config |\n| Connection timeout | Verify host/port, check firewall/VPN |\n| TDS version error | Try `\"tds_version\": \"7.3\"` or `\"7.4\"` |\n| Encryption error | Set `\"encrypt\": true` for Azure SQL |\n| Permission warning | Run `chmod 600 connections.json` |\n\n## Exit Codes\n\n- **0**: Success\n- **1**: Error (config missing, auth failed, invalid query, database error)\n\n## Workflow\n\n1. Run `--list` to show available databases\n2. Match user intent to database description\n3. Run `--tables` or `--schema` to explore structure\n4. Execute query with appropriate `--limit` (auto-converts to TOP N)","tags":["mssql","skills","sanjay3290","agent-skills","ai-skills","atlassian","azure-devops","claude-code","claude-skills","confluence","deep-research","elevenlabs"],"capabilities":["skill","source-sanjay3290","skill-mssql","topic-agent-skills","topic-ai-skills","topic-atlassian","topic-azure-devops","topic-claude-code","topic-claude-skills","topic-confluence","topic-deep-research","topic-elevenlabs","topic-gmail","topic-google-calendar","topic-google-drive"],"categories":["ai-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sanjay3290/ai-skills/mssql","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sanjay3290/ai-skills","source_repo":"https://github.com/sanjay3290/ai-skills","install_from":"skills.sh"}},"qualityScore":"0.574","qualityRationale":"deterministic score 0.57 from registry signals: · indexed on github topic:agent-skills · 248 github stars · SKILL.md body (3,755 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T18:54:11.455Z","embedding":null,"createdAt":"2026-04-18T22:05:21.056Z","updatedAt":"2026-05-02T18:54:11.455Z","lastSeenAt":"2026-05-02T18:54:11.455Z","tsv":"'/.config/claude/mssql-connections.json':74 '0':436 '000':362 '1':16,438,449 '10':204,354,361 '100':235,372 '1433':103,154 '2':21,456 '3':25,463 '3.8':60 '30':346 '4':32,471 '600':80,87,432 '7.0':178 '7.1':179 '7.2':180 '7.3':118,181,417 '7.4':182,419 'account':269,271 'allow':329 'analysi':31 'analyt':278,280 'app':95,105 'appropri':475 'ask':262,293 'audit':287 'auth':442 'authent':399 'auto':143,184,478 'auto-convert':477 'auto-select':142 'automat':247 'avail':454 'azur':426 'bash':85,189,196,209,217,225 'block':305 'cap':371 'case':131 'case-insensit':130 'char':373 'check':33,401,409 'chmod':86,431 'code':435 'column':369,376 'config':119,391,404,440 'configur':53,187,339 'connec':39 'connect':343,352,405 'connections.json':68,88,395,433 'contain':83,139,267 'content':35 'convert':479 'creat':67,394 'credenti':84,380 'custom':272 'data':30,136 'databas':13,20,23,34,38,57,90,96,104,129,138,147,155,157,188,195,253,259,296,446,455,461 'dataread':311 'db':199,212,220,228,310 'db.example.com':101 'default':153,170,183 'descript':93,123,133,260,266,462 'directori':72,398 'enabl':167 'encrypt':114,165,169,340,420,423 'enforc':302,349 'error':382,389,413,421,439,447 'event':284,286 'execut':2,46,472 'exit':434 'explain':324 'explor':22,469 'fail':400,443 'fals':171 'featur':298 'field':120,121 'file':77 'firewall/vpn':410 'flag':246 'found':393 'help':327 'host':100,145 'host/port':408 'hostnam':148 'identifi':126 'insensit':132 'insert':248 'instal':63 'instead':241 'intent':257,459 'invalid':444 'json':89 'leak':386 'limit':223,234,243,245,476 'list':186,192,207,291,451 'log':283,285 'login':356 'look':264 'main':94 'match':255,457 'max':360,374 'memori':358 'messag':383 'metric':279,281 'microsoft':10,54 'miss':441 'mssql':1,40,237 'mssql/sql':18 'multipl':9,37,332 'n':240,250,482 'name':91,124,158 'note':236 'number':152 'oom':368 'oper':307 'order':98,233,273,275 'output':379 'password':110,113,162,164,387 'per':334,364,375 'permiss':78,428 'pip':62 'port':102,149,151 'prevent':367 'prod':106 'product':92,200,213,221,229 'protect':318,359 'protocol':176 'pymssql':61,351 'python':59 'python3':190,197,210,218,226 'queri':7,17,28,44,51,193,201,230,303,319,328,335,344,365,445,473 'r':64 'read':4,42,49,300 'read-on':3,41,48,299 'readabl':378 'readon':108 'reject':336 'report':282 'requir':58,122 'requirements.txt':65 'result':224 'role':312 'row':363 'run':26,290,430,450,464 'safe':47 'safeti':297 'sale':274,277 'sanit':381 'schema':216,222,467 'schemas/tables':24 'scripts/query.py':191,198,211,219,227 'second':347,355 'secur':75,342 'select':27,144,202,231,252,254,322 'server':12,19,56,316 'server-sid':315 'set':76,422 'setup':66 'show':215,323,453 'side':317 'sinc':81 'singl':330 'skill':45,71,397 'skill-mssql' 'solut':390 'source-sanjay3290' 'sp':326 'sql':6,11,55,427 'statement':331,333 'structur':470 'success':437 'support':36,338 'tabl':208,214,465 'tds':116,172,175,411,415 'timeout':345,348,353,357,406 'tls':168,337 'top':203,239,249,481 'topic-agent-skills' 'topic-ai-skills' 'topic-atlassian' 'topic-azure-devops' 'topic-claude-code' 'topic-claude-skills' 'topic-confluence' 'topic-deep-research' 'topic-elevenlabs' 'topic-gmail' 'topic-google-calendar' 'topic-google-drive' 'transact':99,276 'tri':414 'troubleshoot':388 'true':115,424 'unclear':289 'usag':185 'use':14,140,238,308 'user':97,107,109,159,206,256,261,268,270,294,313,458 'usernam':161 'username/password':402 'valid':304,320 'verifi':407 'version':117,173,177,412,416 'via':350 'warn':429 'width':370 'workflow':448 'write':306 'yes':125,134,146,156,160,163 'your-password':111","prices":[{"id":"ca24844f-1576-448a-a3a1-120eab25856a","listingId":"7c5ec557-c7ca-4d5d-b330-252b3440ed6e","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sanjay3290","category":"ai-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:05:21.056Z"}],"sources":[{"listingId":"7c5ec557-c7ca-4d5d-b330-252b3440ed6e","source":"github","sourceId":"sanjay3290/ai-skills/mssql","sourceUrl":"https://github.com/sanjay3290/ai-skills/tree/main/skills/mssql","isPrimary":false,"firstSeenAt":"2026-04-18T22:05:21.056Z","lastSeenAt":"2026-05-02T18:54:11.455Z"}],"details":{"listingId":"7c5ec557-c7ca-4d5d-b330-252b3440ed6e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sanjay3290","slug":"mssql","github":{"repo":"sanjay3290/ai-skills","stars":248,"topics":["agent-skills","ai-skills","atlassian","azure-devops","claude-code","claude-skills","confluence","deep-research","elevenlabs","gmail","google-calendar","google-drive","google-workspace","imagen","jira","mcp","mysql","notebooklm","postgresql","text-to-speech"],"license":"apache-2.0","html_url":"https://github.com/sanjay3290/ai-skills","pushed_at":"2026-04-13T14:16:19Z","description":"Collection of agent skills for AI coding assistants","skill_md_sha":"0b1203bc330c6d9fbabb715725619caf1e22306c","skill_md_path":"skills/mssql/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sanjay3290/ai-skills/tree/main/skills/mssql"},"layout":"multi","source":"github","category":"ai-skills","frontmatter":{"name":"mssql","license":"Apache-2.0","description":"Execute read-only SQL queries against multiple Microsoft SQL Server databases. Use when: (1) querying MSSQL/SQL Server databases, (2) exploring database schemas/tables, (3) running SELECT queries for data analysis, (4) checking database contents. Supports multiple database connections with descriptions for intelligent auto-selection. Blocks all write operations (INSERT, UPDATE, DELETE, DROP, etc.) for safety."},"skills_sh_url":"https://skills.sh/sanjay3290/ai-skills/mssql"},"updatedAt":"2026-05-02T18:54:11.455Z"}}