Ctrl K
ComunidadGuías…

test-curls.sh

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/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."