#!/usr/bin/env bats load $BATS_TEST_DIRNAME/helper/common.bash load $BATS_TEST_DIRNAME/helper/query-server-common.bash make_repo() { mkdir "$1" cd "$1" dolt init cd .. } setup() { skiponwindows "tests are flaky on Windows" setup_no_dolt_init make_repo repo1 } teardown() { stop_sql_server 1 && sleep 0.5 rm -rf $BATS_TMPDIR/sql-server-mcp-config-test$$ teardown_common } # Helper: wait for an MCP HTTP server to accept TCP connections on the given port # wait_for_mcp_port wait_for_mcp_port() { port=$1 timeout_ms=$2 end_time=$((SECONDS+($timeout_ms/1000))) while [ $SECONDS -lt $end_time ]; do nc -z localhost "$port" >/dev/null 2>&1 && return 0 sleep 1 done return 1 } @test "sql-server-mcp-config: starts MCP via config file mcp_server" { cd repo1 SQL_PORT=$( definePORT ) MCP_PORT=$( definePORT ) # Prepare config that includes an mcp_server section cat > config.yml < config.yml < "$INIT_FILE" run bash -c "curl -sS -D $BATS_TMPDIR/mcp_headers_cfgdb_$$.txt -H 'Content-Type: application/json' --data-binary @'$INIT_FILE' http://127.0.0.1:${MCP_PORT}/ > '$OUT_INIT'" [ $status -eq 0 ] SESSION=$(grep -i '^Mcp-Session-Id:' $BATS_TMPDIR/mcp_headers_cfgdb_$$.txt | awk -F': ' '{print $2}' | tr -d '\r') [ -n "$SESSION" ] CALL_FILE=$BATS_TMPDIR/mcp_call_cfgdb_$$.json OUT_CALL=$BATS_TMPDIR/mcp_out_call_cfgdb_$$.json echo '{"jsonrpc":"2.0","id":"2","method":"tools/call","params":{"name":"list_databases","arguments":{}}}' > "$CALL_FILE" run bash -c "curl -sS -H 'Content-Type: application/json' -H 'Mcp-Session-Id: '$SESSION --data-binary @'$CALL_FILE' http://127.0.0.1:${MCP_PORT}/ > '$OUT_CALL'" [ $status -eq 0 ] run grep -E "mcpdb" "$OUT_CALL" [ $status -eq 0 ] fi } @test "sql-server-mcp-config: missing mcp_server.user with mcp_server.port fails" { cd repo1 SQL_PORT=$( definePORT ) MCP_PORT=$( definePORT ) cat > config.yml < config.yml <