{"id":42004925,"url":"https://github.com/jvm/usql-mcp","last_synced_at":"2026-01-26T01:37:12.744Z","repository":{"id":320121085,"uuid":"1080839295","full_name":"jvm/usql-mcp","owner":"jvm","description":"usql MCP Server","archived":false,"fork":false,"pushed_at":"2025-11-26T01:10:44.000Z","size":176,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-29T01:50:01.823Z","etag":null,"topics":["cli","database","mcp","nodejs","usql"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jvm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-10-22T00:07:45.000Z","updated_at":"2025-11-26T01:10:48.000Z","dependencies_parsed_at":"2025-10-22T04:21:12.362Z","dependency_job_id":"0e703757-60f1-4d39-8a73-feb527eb3ccc","html_url":"https://github.com/jvm/usql-mcp","commit_stats":null,"previous_names":["jvm/usql-mcp"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jvm/usql-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jvm%2Fusql-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jvm%2Fusql-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jvm%2Fusql-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jvm%2Fusql-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jvm","download_url":"https://codeload.github.com/jvm/usql-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jvm%2Fusql-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28764095,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T00:37:26.264Z","status":"ssl_error","status_checked_at":"2026-01-26T00:37:25.959Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","database","mcp","nodejs","usql"],"created_at":"2026-01-26T01:37:12.674Z","updated_at":"2026-01-26T01:37:12.731Z","avatar_url":"https://github.com/jvm.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# USQL MCP Server\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n`usql-mcp` is a **full-featured MCP server** that bridges the [Model Context Protocol](https://modelcontextprotocol.io/) with the [usql](https://github.com/xo/usql) universal SQL CLI. It enables AI assistants and other MCP clients to query **any database** that usql supports, with enterprise-ready features like background execution, progress tracking, query safety validation, and intelligent caching.\n\n## ✨ Key Features\n\n- **🔌 Universal Database Access**: Query PostgreSQL, MySQL, Oracle, SQLite, SQL Server, and [100+ other databases](https://github.com/xo/usql#database-support) through a single interface\n- **⚡ Background Execution**: Long-running queries automatically move to background with job tracking and polling\n- **📊 Progress Reporting**: Real-time progress updates for long operations using MCP progress notifications\n- **🛡️ Query Safety**: Automatic risk analysis detects dangerous operations (DROP, DELETE without WHERE, etc.)\n- **📚 SQL Workflow Templates**: Built-in prompts for common tasks (query optimization, data profiling, migrations)\n- **🗂️ Schema Resources**: Browse database schemas through MCP resources (databases, tables, columns)\n- **⚡ Performance**: Schema caching and rate limiting for production deployments\n- **🔒 Security**: Credential sanitization, configurable operation blocking, audit-ready error messages\n\n## MCP Capabilities\n\nThis server implements **all 4 MCP capabilities**:\n\n1. **Tools** (8 tools): Execute queries, manage schemas, check job status\n2. **Resources**: Browse database metadata via `sql://` URIs\n3. **Prompts**: SQL workflow templates for common tasks\n4. **Progress**: Real-time progress for long-running operations\n\n## Requirements\n\n- Node.js 16 or newer\n- `npm`\n- [`usql`](https://github.com/xo/usql) installed and available on `PATH`\n\n## Quick Launch with npx\n\nRun the server directly via npx:\n\n```bash\nnpx usql-mcp\n```\n\nThis downloads the package and executes the CLI entry point, which runs the MCP server on stdio.\n\nYou can also run it directly from the repository using npm's Git support (the `prepare` script compiles the TypeScript automatically):\n\n```bash\nnpx github:jvm/usql-mcp\n```\n\n## Getting Started\n\n```bash\ngit clone https://github.com/jvm/usql-mcp.git\ncd usql-mcp\nnpm install\nnpm run build\n```\n\nThe compiled files live in `dist/`. They are intentionally not committed—run `npm run build` whenever you need fresh output.\n\n## Configuring Connections\n\nDefine connection strings via environment variables (`USQL_*`) or a `config.json` file mirroring `config.example.json`. Each `USQL_\u003cNAME\u003e=...` entry becomes a reusable connection whose name is the lower-cased `\u003cname\u003e` portion (`USQL_ORACLE1` → `oracle1`).\n\n### Environment Variables\n\n**Connection variables** (any `USQL_*` except reserved keys below):\n```bash\nexport USQL_POSTGRES=\"postgres://user:password@localhost:5432/mydb\"\nexport USQL_SQLITE=\"sqlite:///$(pwd)/data/app.db\"\nexport USQL_ORACLE1=\"oracle://user:secret@host1:1521/service\"\n```\n\n**Reserved configuration variables**:\n- `USQL_CONFIG_PATH` - Path to config.json\n- `USQL_QUERY_TIMEOUT_MS` - Default query timeout (leave unset for unlimited)\n- `USQL_DEFAULT_CONNECTION` - Default connection name when omitted from tool calls\n- `USQL_BINARY_PATH` - Full path to usql binary (if not on PATH)\n- `USQL_BACKGROUND_THRESHOLD_MS` - Threshold for background execution (default: 30000)\n- `USQL_JOB_RESULT_TTL_MS` - How long to keep completed job results (default: 3600000 = 1 hour)\n\n### Configuration File\n\nCreate a `config.json` with connection details and server settings:\n\n```json\n{\n  \"connections\": {\n    \"postgres\": {\n      \"uri\": \"postgres://user:password@localhost:5432/mydb\",\n      \"description\": \"Production PostgreSQL database\"\n    },\n    \"sqlite\": {\n      \"uri\": \"sqlite:///path/to/database.db\",\n      \"description\": \"Local SQLite database\"\n    }\n  },\n  \"defaults\": {\n    \"defaultConnection\": \"postgres\",\n    \"queryTimeout\": null,\n    \"backgroundThresholdMs\": 30000,\n    \"jobResultTtlMs\": 3600000,\n    \"allowDestructiveOperations\": true,\n    \"blockHighRiskQueries\": false,\n    \"blockCriticalRiskQueries\": false,\n    \"requireWhereClauseForDelete\": false,\n    \"maxResultBytes\": 10485760,\n    \"rateLimitRpm\": null,\n    \"maxConcurrentRequests\": 10,\n    \"schemaCacheTtl\": null\n  }\n}\n```\n\n**Configuration Options**:\n- `queryTimeout`: Milliseconds before query times out (null = unlimited)\n- `backgroundThresholdMs`: Queries exceeding this move to background (default: 30000)\n- `jobResultTtlMs`: How long to retain completed job results (default: 3600000)\n- `allowDestructiveOperations`: If false, block DROP/TRUNCATE operations\n- `blockHighRiskQueries`: Block queries with risk level \"high\"\n- `blockCriticalRiskQueries`: Block queries with risk level \"critical\"\n- `requireWhereClauseForDelete`: Require WHERE clause on DELETE/UPDATE\n- `maxResultBytes`: Maximum result size in bytes (default: 10MB)\n- `rateLimitRpm`: Requests per minute limit (null = no limit)\n- `schemaCacheTtl`: Schema cache TTL in milliseconds (null = no caching)\n\n## Client Configuration\n\nThis section explains how to configure the usql-mcp server in different MCP clients.\n\n### Claude Desktop\n\nClaude Desktop uses a configuration file to register MCP servers. The location depends on your operating system:\n\n- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`\n- **Linux**: `~/.config/Claude/claude_desktop_config.json`\n\nAdd the following configuration to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"usql\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"usql-mcp\"],\n      \"env\": {\n        \"USQL_DEFAULT_CONNECTION\": \"oracle://user:secret@host:1521/service\",\n        \"USQL_POSTGRES\": \"postgres://user:password@localhost:5432/mydb\",\n        \"USQL_SQLITE\": \"sqlite:///path/to/database.db\"\n      }\n    }\n  }\n}\n```\n\nAfter editing the configuration file, restart Claude Desktop for changes to take effect.\n\n### Claude Code\n\nClaude Code (CLI) supports MCP servers through its configuration file located at:\n\n- **All platforms**: `~/.clauderc` or `~/.config/claude/config.json`\n\nAdd the MCP server to your Claude Code configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"usql\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"usql-mcp\"],\n      \"env\": {\n        \"USQL_DEFAULT_CONNECTION\": \"oracle://user:secret@host:1521/service\",\n        \"USQL_POSTGRES\": \"postgres://user:password@localhost:5432/mydb\",\n        \"USQL_SQLITE\": \"sqlite:///path/to/database.db\"\n      }\n    }\n  }\n}\n```\n\nThe server will be available in your Claude Code sessions automatically.\n\n### Codex CLI\n\nCodex CLI configuration varies by implementation, but typically uses a similar JSON configuration approach. Create or edit your Codex configuration file (usually `~/.codexrc` or as specified in your Codex documentation):\n\n```json\n{\n  \"mcp\": {\n    \"servers\": {\n      \"usql\": {\n        \"command\": \"npx\",\n        \"args\": [\"-y\", \"usql-mcp\"],\n        \"env\": {\n          \"USQL_DEFAULT_CONNECTION\": \"oracle://user:secret@host:1521/service\",\n          \"USQL_POSTGRES\": \"postgres://user:password@localhost:5432/mydb\",\n          \"USQL_SQLITE\": \"sqlite:///path/to/database.db\"\n        }\n      }\n    }\n  }\n}\n```\n\nRefer to your specific Codex CLI documentation for the exact configuration file location and format.\n\n### GitHub Copilot (VS Code)\n\nGitHub Copilot in VS Code can use MCP servers through the Copilot Chat extension settings. Configuration is done through VS Code's `settings.json`:\n\n1. Open VS Code Settings (JSON) via:\n   - **macOS**: `Cmd + Shift + P` → \"Preferences: Open User Settings (JSON)\"\n   - **Windows/Linux**: `Ctrl + Shift + P` → \"Preferences: Open User Settings (JSON)\"\n\n2. Add the MCP server configuration:\n\n```json\n{\n  \"github.copilot.chat.mcp.servers\": {\n    \"usql\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"usql-mcp\"],\n      \"env\": {\n        \"USQL_DEFAULT_CONNECTION\": \"oracle://user:secret@host:1521/service\",\n        \"USQL_POSTGRES\": \"postgres://user:password@localhost:5432/mydb\",\n        \"USQL_SQLITE\": \"sqlite:///path/to/database.db\"\n      }\n    }\n  }\n}\n```\n\nAfter saving the settings, reload VS Code or restart the Copilot extension for changes to take effect.\n\n### Environment Variables vs. Configuration\n\nFor all clients, you can choose between:\n\n1. **Inline environment variables** (shown above) - Connection strings in the config file\n2. **System environment variables** - Set `USQL_*` variables in your shell profile\n\n**System environment approach**:\n\n```bash\n# In ~/.bashrc, ~/.zshrc, or equivalent\nexport USQL_DEFAULT_CONNECTION=\"oracle://user:secret@host:1521/service\"\nexport USQL_POSTGRES=\"postgres://user:password@localhost:5432/mydb\"\nexport USQL_SQLITE=\"sqlite:///path/to/database.db\"\n```\n\nThen use a simpler client configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"usql\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"usql-mcp\"]\n    }\n  }\n}\n```\n\n### Security Best Practices\n\n- **Avoid hardcoding credentials**: Use environment variables or secure credential stores\n- **File permissions**: Ensure configuration files with credentials are not world-readable (chmod 600)\n- **Read-only access**: Create database users with minimal required permissions for AI queries\n- **Network security**: Use SSL/TLS connections for remote databases\n- **Audit logging**: Enable database audit logs to track AI-generated queries\n- **Query safety**: Enable `blockCriticalRiskQueries` to prevent destructive operations\n- **Rate limiting**: Set `rateLimitRpm` to prevent abuse in multi-user environments\n\n## Tools Catalogue\n\n### Core SQL Tools\n\n| Tool             | Purpose                                | Key Inputs                                                                           |\n| ---------------- | -------------------------------------- | ------------------------------------------------------------------------------------ |\n| `execute_query`  | Run an arbitrary SQL statement         | `connection_string`, `query`, optional `output_format` (`json`\\|`csv`), `timeout_ms` |\n| `execute_script` | Execute a multi-statement script       | `connection_string`, `script`, optional `output_format`, `timeout_ms`                |\n| `list_databases` | List databases available on the server | `connection_string`, optional `output_format`, `timeout_ms`                          |\n| `list_tables`    | List tables in the current database    | `connection_string`, optional `output_format`, `timeout_ms`                          |\n| `describe_table` | Inspect table metadata via `\\d`        | `connection_string`, `table`, optional `output_format`, `timeout_ms`                 |\n\n### Background Job Management\n\n| Tool              | Purpose                                 | Key Inputs                                    |\n| ----------------- | --------------------------------------- | --------------------------------------------- |\n| `get_job_status`  | Check status of a background job        | `job_id`, `wait_seconds` (1-55)               |\n| `cancel_job`      | Cancel a running background job         | `job_id`                                      |\n\n### Server Information\n\n| Tool              | Purpose                                 | Key Inputs                                    |\n| ----------------- | --------------------------------------- | --------------------------------------------- |\n| `get_server_info` | Get server configuration and stats      | None (read-only)                              |\n\n## Resources\n\nAccess database metadata through MCP resources:\n\n- `sql://connections` - List all available connections\n- `sql://{connection}/databases` - List databases on a connection\n- `sql://{connection}/{database}/tables` - List tables in a database\n- `sql://{connection}/{database}/table/{name}` - Get detailed table schema\n\n**Example usage**:\n```\nRead resource: sql://postgres/production/tables\nRead resource: sql://postgres/production/table/users\n```\n\n## Prompts\n\nBuilt-in SQL workflow templates:\n\n1. **analyze_performance** - Analyze query performance and suggest optimizations\n2. **profile_data_quality** - Profile data quality (nulls, duplicates, distributions)\n3. **generate_migration** - Generate database migration scripts\n4. **explain_schema** - Create comprehensive schema documentation\n5. **optimize_query** - Optimize a slow-running query\n6. **debug_slow_query** - Systematically debug slow queries\n\n**Example usage**:\n```\nUse prompt: analyze_performance\n  connection: postgres\n  query: SELECT * FROM large_table WHERE status = 'active'\n```\n\n## Background Execution\n\nQueries that exceed the `backgroundThresholdMs` (default: 30 seconds) automatically move to background execution:\n\n1. **Initial Response**: Tool returns a `job_id` and status message\n2. **Polling**: Use `get_job_status` with `wait_seconds` to check progress\n3. **Results**: When complete, `get_job_status` returns the full result\n4. **Progress**: Real-time progress percentage (0-100) for running jobs\n5. **Cleanup**: Jobs are automatically cleaned up after `jobResultTtlMs` (default: 1 hour)\n\n**Example workflow**:\n```jsonc\n// Initial query (takes \u003e30s)\nexecute_query → {\n  \"status\": \"background\",\n  \"job_id\": \"abc-123\",\n  \"message\": \"Query is taking longer than 30000ms. Use get_job_status to check progress.\",\n  \"started_at\": \"2025-01-15T10:30:00Z\"\n}\n\n// Check status (waits up to 10s)\nget_job_status(job_id: \"abc-123\", wait_seconds: 10) → {\n  \"status\": \"running\",\n  \"job_id\": \"abc-123\",\n  \"progress\": 45,  // 45% complete\n  \"elapsed_ms\": 15000\n}\n\n// Eventually completes\nget_job_status(job_id: \"abc-123\", wait_seconds: 10) → {\n  \"status\": \"completed\",\n  \"job_id\": \"abc-123\",\n  \"result\": { \"format\": \"json\", \"content\": \"[...]\" },\n  \"elapsed_ms\": 45000\n}\n```\n\n## Query Safety Analysis\n\nEvery query is automatically analyzed for safety risks:\n\n**Risk Levels**:\n- **Low**: Safe read-only queries\n- **Medium**: Modifying operations with WHERE clauses\n- **High**: Complex queries with many JOINs, missing indexes\n- **Critical**: Destructive operations (DROP, TRUNCATE, DELETE without WHERE)\n\n**Response includes analysis**:\n```jsonc\n{\n  \"format\": \"json\",\n  \"content\": \"[...]\",\n  \"safety_analysis\": {\n    \"risk_level\": \"critical\",\n    \"warnings\": [\"DELETE operation without WHERE clause\"],\n    \"dangerous_operations\": [\"DELETE\"],\n    \"complexity_score\": 2,\n    \"recommendations\": [\"Add WHERE clause to limit deletion scope\"]\n  }\n}\n```\n\n**Configuration options**:\n- `allowDestructiveOperations: false` - Block all destructive operations\n- `blockHighRiskQueries: true` - Block queries with \"high\" risk\n- `blockCriticalRiskQueries: true` - Block queries with \"critical\" risk\n- `requireWhereClauseForDelete: true` - Require WHERE on DELETE/UPDATE\n\n## Response Format\n\nSuccessful calls return the exact stdout produced by `usql`, paired with the format indicator:\n\n```jsonc\n{\n  \"format\": \"json\", // or \"csv\"\n  \"content\": \"[{\\\"id\\\":1,\\\"name\\\":\\\"Alice\\\"}]\",\n  \"elapsed_ms\": 234,\n  \"safety_analysis\": {\n    \"risk_level\": \"low\",\n    \"warnings\": [],\n    \"dangerous_operations\": [],\n    \"complexity_score\": 1,\n    \"recommendations\": []\n  }\n}\n```\n\nBackground job responses:\n\n```jsonc\n{\n  \"status\": \"background\",\n  \"job_id\": \"uuid-string\",\n  \"message\": \"Query is taking longer than 30000ms. It will continue running in the background.\",\n  \"started_at\": \"2025-01-15T10:30:00.000Z\",\n  \"elapsed_ms\": 30001\n}\n```\n\nIf `usql` exits with a non-zero code, the handler forwards the message through the MCP error shape, keeping details like the sanitized connection string and original stderr.\n\n## Performance Features\n\n### Schema Caching\n\nEnable caching to reduce subprocess overhead for metadata queries:\n\n```json\n{\n  \"defaults\": {\n    \"schemaCacheTtl\": 300000  // 5 minutes\n  }\n}\n```\n\nCached operations:\n- `list_databases`\n- `list_tables`\n- `describe_table`\n- Resource reads\n\nCache statistics available via `get_server_info`:\n```jsonc\n{\n  \"schema_cache_stats\": {\n    \"hits\": 42,\n    \"misses\": 8,\n    \"size\": 15,\n    \"hit_rate\": 0.840\n  }\n}\n```\n\n### Rate Limiting\n\nProtect your databases from abuse:\n\n```json\n{\n  \"defaults\": {\n    \"rateLimitRpm\": 60,  // 60 requests per minute\n    \"maxConcurrentRequests\": 10\n  }\n}\n```\n\nWhen limit exceeded:\n```jsonc\n{\n  \"error\": \"RateLimitExceeded\",\n  \"message\": \"Rate limit exceeded: 60 requests per minute. Try again in 45 seconds.\",\n  \"details\": {\n    \"limit\": 60,\n    \"current\": 60,\n    \"resetInSeconds\": 45\n  }\n}\n```\n\n## Development\n\n- `npm run dev` – TypeScript compile in watch mode\n- `npm run build` – emit ESM output to `dist/`\n- `npm run lint` – ESLint/Prettier rules\n- `npm run test` – Jest unit tests (519 tests, comprehensive coverage)\n- `npm run type-check` – strict `tsc --noEmit`\n\nDebug logging follows the namespace in `DEBUG=usql-mcp:*`.\n\n### Architecture\n\nSee [`CLAUDE.md`](./CLAUDE.md) for coding agents guidelines and architecture documentation.\n\n**Key components**:\n- **Tools** (`src/tools/`) - MCP tool implementations\n- **Resources** (`src/resources/`) - MCP resource handlers\n- **Prompts** (`src/prompts/`) - SQL workflow templates\n- **Background Jobs** (`src/usql/job-manager.ts`) - Async execution tracking\n- **Query Safety** (`src/utils/query-safety-analyzer.ts`) - Risk analysis\n- **Caching** (`src/cache/schema-cache.ts`) - Performance optimization\n- **Progress** (`src/notifications/progress-notifier.ts`) - Real-time updates\n\n## Testing\n\n```bash\n# Run all tests\nnpm test\n\n# Run specific test file\nnpm test -- execute-query.test.ts\n\n# Run with coverage\nnpm test -- --coverage\n\n# Integration tests (require usql installed)\nnpm test -- integration\n```\n\n**Test coverage**:\n- 519 passing tests\n- Unit tests for all tools, utilities, and managers\n- Integration tests with real SQLite databases\n- Request tracking, pagination, and protocol compliance tests\n\n## Contributing\n\nSee [`CONTRIBUTING.md`](./CONTRIBUTING.md) for contributor guidelines and [`CLAUDE.md`](./CLAUDE.md) for coding agents guidelines. Open an issue before large changes so we can keep the tooling lean and aligned with the MCP ecosystem.\n\n## License\n\nMIT License - see [`LICENSE`](./LICENSE) for details.\n\n## Credits\n\nBuilt on top of the excellent [usql](https://github.com/xo/usql) universal database CLI by Kenneth Shaw and the [Model Context Protocol](https://modelcontextprotocol.io/) by Anthropic.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjvm%2Fusql-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjvm%2Fusql-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjvm%2Fusql-mcp/lists"}