{"id":"95b73141-8058-4805-9ae9-d54668ffc949","shortId":"RA5MVn","kind":"skill","title":"mysql","tagline":"Execute read-only SQL queries against multiple MySQL databases. Use when: (1) querying MySQL databases, (2) exploring database schemas/tables, (3) running SELECT queries for data analysis, (4) checking database contents. Supports multiple database connections with descriptions fo","description":"# MySQL Read-Only Query Skill\n\nExecute safe, read-only queries against configured MySQL databases.\n\n## Requirements\n\n- Python 3.8+\n- mysql-connector-python: `pip install -r requirements.txt`\n\n## Setup\n\nCreate `connections.json` in the skill directory or `~/.config/claude/mysql-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\": 3306,\n      \"database\": \"app_prod\",\n      \"user\": \"readonly_user\",\n      \"password\": \"your-password\",\n      \"ssl_disabled\": false\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: 3306) |\n| database | Yes | Database name |\n| user | Yes | Username |\n| password | Yes | Password |\n| ssl_disabled | No | Set to `true` to disable SSL (default: false) |\n| ssl_ca | No | Path to CA certificate file |\n| ssl_cert | No | Path to client certificate file |\n| ssl_key | No | Path to client private key file |\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 * FROM users LIMIT 10\"\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## 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 session**: Connection uses MySQL `SET SESSION TRANSACTION READ ONLY` (primary protection)\n- **Query validation**: Only SELECT, SHOW, DESCRIBE, EXPLAIN, WITH queries allowed\n- **Single statement**: Multiple statements per query rejected\n- **SSL support**: Configurable SSL with CA, client cert, and key support\n- **Query timeout**: 30-second max_execution_time enforced (MySQL 5.7.8+)\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| SSL error | Try `\"ssl_disabled\": true` for local databases |\n| Permission warning | Run `chmod 600 connections.json` |\n| max_execution_time not supported | Upgrade to MySQL 5.7.8+ or MariaDB 10.1.1+ |\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","tags":["mysql","skills","sanjay3290","agent-skills","ai-skills","atlassian","azure-devops","claude-code","claude-skills","confluence","deep-research","elevenlabs"],"capabilities":["skill","source-sanjay3290","skill-mysql","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/mysql","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,639 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.605Z","embedding":null,"createdAt":"2026-04-18T22:05:21.783Z","updatedAt":"2026-05-02T18:54:11.605Z","lastSeenAt":"2026-05-02T18:54:11.605Z","tsv":"'/.config/claude/mysql-connections.json':75 '0':431 '000':353 '1':14,433,444 '10':221,352 '10.1.1':428 '100':250,363 '2':18,451 '3':22,458 '3.8':58 '30':341 '3306':104,153 '4':29,466 '5.7.8':348,425 '600':81,88,415 'account':267,269 'allow':320 'analysi':28 'analyt':276,278 'app':96,106 'appropri':470 'ask':260,291 'audit':285 'auth':437 'authent':390 'auto':142 'auto-select':141 'avail':449 'bash':86,204,211,224,232,240 'ca':176,180,333 'cap':362 'case':130 'case-insensit':129 'cert':184,335 'certif':181,189 'char':364 'check':30,392,400 'chmod':87,414 'client':188,196,334 'code':430 'column':360,367 'config':118,382,395,435 'configur':53,202,330 'connect':36,301,396 'connections.json':69,89,386,416 'connector':61 'contain':84,138,265 'content':32 'creat':68,385 'credenti':85,371 'custom':270 'data':27,135 'databas':11,17,20,31,35,55,91,97,105,128,137,146,154,156,203,210,251,257,294,410,441,450,456 'db':214,227,235,243 'db.example.com':102 'default':152,173 'describ':316 'descript':38,94,122,132,258,264,457 'directori':73,389 'disabl':116,165,171,406 'enforc':346 'error':373,380,403,434,442 'event':282,284 'execut':2,46,344,418,467 'exit':429 'explain':317 'explor':19,464 'fail':391,438 'fals':117,174 'featur':296 'field':119,120 'file':78,182,190,199 'firewall/vpn':401 'fo':39 'found':384 'host':101,144 'host/port':399 'hostnam':147 'identifi':125 'insensit':131 'instal':64 'intent':255,454 'invalid':439 'json':90 'key':192,198,337 'leak':377 'limit':220,238,249,471 'list':201,207,222,289,446 'local':409 'log':281,283 'look':262 'main':95 'mariadb':427 'match':253,452 'max':343,351,365,417 'memori':349 'messag':374 'metric':277,279 'miss':436 'multipl':9,34,323 'mysql':1,10,16,40,54,60,303,347,424 'mysql-connector-python':59 'name':92,123,157 'number':151 'oom':359 'order':99,248,271,273 'output':370 'password':111,114,161,163,378 'path':178,186,194 'per':325,355,366 'permiss':79,411 'pip':63 'port':103,148,150 'prevent':358 'primari':309 'privat':197 'prod':107 'product':93,215,228,236,244 'protect':310,350 'python':57,62 'python3':205,212,225,233,241 'queri':7,15,25,44,51,208,216,245,311,319,326,339,356,440,468 'r':65 'read':4,42,49,298,307 'read-on':3,41,48,297 'readabl':369 'readon':109 'reject':327 'report':280 'requir':56,121 'requirements.txt':66 'result':239 'row':354 'run':23,288,413,445,459 'safe':47 'safeti':295 'sale':272,275 'sanit':372 'schema':231,237,462 'schemas/tables':21 'scripts/query.py':206,213,226,234,242 'second':342 'secur':76 'select':24,143,217,246,252,314 'session':300,305 'set':77,167,304 'setup':67 'show':230,315,448 'sinc':82 'singl':321 'skill':45,72,388 'skill-mysql' 'solut':381 'source-sanjay3290' 'sql':6 'ssl':115,164,172,175,183,191,328,331,402,405 'statement':322,324 'structur':465 'success':432 'support':33,329,338,421 'tabl':223,229,460 'time':345,419 'timeout':340,397 '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':100,274,306 'tri':404 'troubleshoot':379 'true':169,407 'unclear':287 'upgrad':422 'usag':200 'use':12,139,302 'user':98,108,110,158,219,254,259,266,268,292,453 'usernam':160 'username/password':393 'valid':312 'verifi':398 'warn':412 'width':361 'workflow':443 'yes':124,133,145,155,159,162 'your-password':112","prices":[{"id":"682f557a-306b-4d91-a23f-5032e3801240","listingId":"95b73141-8058-4805-9ae9-d54668ffc949","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.783Z"}],"sources":[{"listingId":"95b73141-8058-4805-9ae9-d54668ffc949","source":"github","sourceId":"sanjay3290/ai-skills/mysql","sourceUrl":"https://github.com/sanjay3290/ai-skills/tree/main/skills/mysql","isPrimary":false,"firstSeenAt":"2026-04-18T22:05:21.783Z","lastSeenAt":"2026-05-02T18:54:11.605Z"}],"details":{"listingId":"95b73141-8058-4805-9ae9-d54668ffc949","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sanjay3290","slug":"mysql","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":"37899b1894ac7158addf07b39c11c38a00136612","skill_md_path":"skills/mysql/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sanjay3290/ai-skills/tree/main/skills/mysql"},"layout":"multi","source":"github","category":"ai-skills","frontmatter":{"name":"mysql","license":"Apache-2.0","description":"Execute read-only SQL queries against multiple MySQL databases. Use when: (1) querying MySQL 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/mysql"},"updatedAt":"2026-05-02T18:54:11.605Z"}}