v1.3.1 — Security Hardening & Error Handling
Security
- Database allow/block list bypass fixed —
execute_query,execute_mutation,execute_ddl, andexport_querynow enforceisDatabaseAllowedwhen the optionaldatabaseparameter is supplied get_query_planhardened — now extractssecurityfromresolveServer, enforcesisDatabaseAllowedandvalidateQueryon user-supplied SQL- Numeric interpolation sanitized —
get_wait_stats,get_space_usage,get_backup_history,get_query_store_stats,sample_table,generate_insert_scripts, andgenerate_test_datanow validatetop/countas safe integers before SQL interpolation describe_procedureparameterized —OBJECT_IDcall now uses@parambinding instead of manual single-quote escaping- Schema allow/block list enforced —
get_foreign_keys,get_indexes,get_constraints,get_triggers, anddescribe_procedurenow checkisSchemaAllowed
Fixed
- All
schema.tsandprocedure.tshandlers now wrapped intry/catch— errors return structured{ isError: true }instead of crashing the MCP transport execute_ddlnow acceptsTRUNCATEstatements (previously rejected by regex despite passingvalidateQuery)execute_procedure— added separateschemaparameter and escapes schema/procedure independently (previouslyescapeIdentifierwrapped the entire dotted name as one identifier)execute_mutation— regex type check now runs beforevalidateQuery(consistent withexecute_ddlordering)export_query— replaced dynamicawait import()of security utilities with static importsgenerateCreateTablehelper — usesescapeIdentifier()instead of raw bracket interpolation
Full Changelog: v1.3.0...v1.3.1