test-curls.sh
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env bash
set -euo pipefail
# Transport smoke test for a running WHOOP Personal MCP server.
# Required: MCP_BEARER_TOKEN must match the server's configured static token.
# Optional: BASE_URL (default http://localhost:3000), SMOKE_CALL_WHOOP=1.
BASE_URL="${BASE_URL:-http://localhost:3000}"
TOKEN="${MCP_BEARER_TOKEN:-}"
if [[ -z "$TOKEN" ]]; then
echo "MCP_BEARER_TOKEN is required for this static-auth smoke test." >&2
exit 2
fi
HEADERS_FILE="$(mktemp)"
BODY_FILE="$(mktemp)"
cleanup() {
rm -f "$HEADERS_FILE" "$BODY_FILE"
}
trap cleanup EXIT
echo "1/6 health"
curl --fail --silent --show-error "$BASE_URL/health"
echo
echo "2/6 WHOOP link status"
curl --fail --silent --show-error \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL/auth/status"
echo
echo "3/6 discover MCP 2026-07-28 server"
curl --fail --silent --show-error \
--dump-header "$HEADERS_FILE" \
--output "$BODY_FILE" \
--request POST "$BASE_URL/mcp" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2026-07-28" \
-H "Mcp-Method: server/discover" \
--data '{"jsonrpc":"2.0","id":1,"method":"server/discover","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientInfo":{"name":"curl-smoke","version":"1.0"},"io.modelcontextprotocol/clientCapabilities":{}}}}'
cat "$BODY_FILE"
echo
if grep -qi '^mcp-session-id:' "$HEADERS_FILE"; then
echo "Modern response unexpectedly included the removed Mcp-Session-Id header." >&2
exit 1
fi
if ! grep -q '2026-07-28' "$BODY_FILE"; then
echo "Discovery response did not advertise MCP 2026-07-28." >&2
exit 1
fi
echo "4/6 list tools without a transport session"
curl --fail --silent --show-error \
--request POST "$BASE_URL/mcp" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2026-07-28" \
-H "Mcp-Method: tools/list" \
--data '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientInfo":{"name":"curl-smoke","version":"1.0"},"io.modelcontextprotocol/clientCapabilities":{}}}}'
echo
if [[ "${SMOKE_CALL_WHOOP:-0}" == "1" ]]; then
echo "optional WHOOP tool call"
curl --fail --silent --show-error \
--request POST "$BASE_URL/mcp" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2026-07-28" \
-H "Mcp-Method: tools/call" \
-H "Mcp-Name: whoop_get_today_overview" \
--data '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"whoop_get_today_overview","arguments":{},"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientInfo":{"name":"curl-smoke","version":"1.0"},"io.modelcontextprotocol/clientCapabilities":{}}}}'
echo
fi
echo "5/6 reject missing authentication"
STATUS="$(
curl --silent --show-error --output /dev/null --write-out '%{http_code}' \
--request POST "$BASE_URL/mcp" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2026-07-28" \
-H "Mcp-Method: server/discover" \
--data '{"jsonrpc":"2.0","id":4,"method":"server/discover","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientInfo":{"name":"unauthorized-smoke","version":"1.0"},"io.modelcontextprotocol/clientCapabilities":{}}}}'
)"
if [[ "$STATUS" != "401" ]]; then
echo "Expected unauthenticated discovery to return 401; got $STATUS." >&2
exit 1
fi
echo "6/6 verify legacy 2025 client fallback"
curl --fail --silent --show-error \
--request POST "$BASE_URL/mcp" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-11-25" \
--data '{"jsonrpc":"2.0","id":5,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"legacy-curl-smoke","version":"1.0"}}}'
echo
echo "HTTP smoke test passed."