11#! /usr/bin/env bash
2- # Multi-protocol integration test: start simple-auth-multiprotocol RS (and optionally AS for OAuth),
3- # then run client with API Key, OAuth, or Mutual TLS (placeholder).
4- # This test is for testing multi-protocol support with API Key, OAuth, or Mutual TLS.
2+ # Multi-protocol integration test (MultiProtocolAuthProvider):
3+ # start simple-auth-multiprotocol RS (and optionally AS for OAuth),
4+ # then run simple-auth-multiprotocol-client with API Key, OAuth, OAuth+DPoP, or Mutual TLS (placeholder) .
55# Usage: in the repo root, run: ./examples/clients/simple-auth-multiprotocol-client/run_multiprotocol_test.sh
6- # Env: MCP_PHASE2_PROTOCOL=api_key (default) | oauth | mutual_tls (client will show "not implemented" for mTLS).
7- # For api_key/mutual_tls: simple-auth-multiprotocol-client; for oauth: simple-auth-client (complete OAuth in browser).
8- # You must run at mcp> prompt: list, call get_time {}, quit.
6+ # Env: MCP_AUTH_PROTOCOL=api_key (default) | oauth | oauth_dpop | mutual_tls
7+ # For api_key/mutual_tls: script runs non-interactive commands (list/call/quit) and asserts PASS/FAIL.
8+ # For oauth/oauth_dpop: complete OAuth in browser, then run: list, call get_time {}, quit.
9+ # Optional: MCP_SKIP_OAUTH=1 to skip oauth/oauth_dpop manual cases.
910
1011set -e
1112
1213REPO_ROOT=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) /../../.." && pwd) "
1314SIMPLE_AUTH_SERVER=" ${REPO_ROOT} /examples/servers/simple-auth"
1415MULTIPROTOCOL_SERVER=" ${REPO_ROOT} /examples/servers/simple-auth-multiprotocol"
1516MULTIPROTOCOL_CLIENT=" ${REPO_ROOT} /examples/clients/simple-auth-multiprotocol-client"
16- SIMPLE_AUTH_CLIENT=" ${REPO_ROOT} /examples/clients/simple-auth-client"
1717RS_PORT=" ${MCP_RS_PORT:- 8002} "
1818AS_PORT=" ${MCP_AS_PORT:- 9000} "
19- PROTOCOL=" ${MCP_PHASE2_PROTOCOL:- api_key} "
19+ PROTOCOL=" ${MCP_AUTH_PROTOCOL:- api_key} "
20+ SKIP_OAUTH=" ${MCP_SKIP_OAUTH:- 0} "
2021
2122cd " $REPO_ROOT "
2223echo " Repo root: $REPO_ROOT "
2324echo " Protocol: $PROTOCOL "
25+ echo " Skip OAuth: $SKIP_OAUTH "
2426
2527uv sync --quiet 2> /dev/null || true
2628
@@ -49,7 +51,7 @@ cleanup() {
4951trap cleanup EXIT
5052
5153# Start Authorization Server only for OAuth
52- if [ " $PROTOCOL " = " oauth" ]; then
54+ if [ " $PROTOCOL " = " oauth" ] || [ " $PROTOCOL " = " oauth_dpop " ] ; then
5355 cd " $SIMPLE_AUTH_SERVER "
5456 uv run mcp-simple-auth-as --port=" $AS_PORT " &
5557 AS_PID=$!
6163cd " $MULTIPROTOCOL_SERVER "
6264if [ " $PROTOCOL " = " oauth" ]; then
6365 uv run mcp-simple-auth-multiprotocol-rs --port=" $RS_PORT " --auth-server=" http://localhost:${AS_PORT} " --api-keys=" demo-api-key-12345" &
66+ elif [ " $PROTOCOL " = " oauth_dpop" ]; then
67+ uv run mcp-simple-auth-multiprotocol-rs --port=" $RS_PORT " --auth-server=" http://localhost:${AS_PORT} " --api-keys=" demo-api-key-12345" --dpop-enabled &
6468else
6569 uv run mcp-simple-auth-multiprotocol-rs --port=" $RS_PORT " --api-keys=" demo-api-key-12345" &
6670fi
@@ -76,20 +80,47 @@ echo ""
7680echo " "
7781
7882# Run client by protocol
79- if [ " $PROTOCOL " = " oauth" ]; then
80- echo " Starting simple-auth-client (OAuth). Complete OAuth in the browser, then run: list, call get_time {}, quit"
83+ if [ " $PROTOCOL " = " oauth" ] || [ " $PROTOCOL " = " oauth_dpop" ]; then
84+ if [ " $SKIP_OAUTH " = " 1" ]; then
85+ echo " Skipping OAuth manual test (MCP_SKIP_OAUTH=1)"
86+ exit 0
87+ fi
88+ echo " Starting simple-auth-multiprotocol-client (OAuth). Complete OAuth in the browser, then run: list, call get_time {}, quit"
8189 echo " "
82- cd " $SIMPLE_AUTH_CLIENT "
83- MCP_SERVER_PORT=" $RS_PORT " MCP_TRANSPORT_TYPE=streamable-http uv run mcp-simple-auth-client
90+ cd " $MULTIPROTOCOL_CLIENT "
91+ MCP_SERVER_URL=" http://localhost:${RS_PORT} /mcp" \
92+ MCP_USE_OAUTH=1 \
93+ MCP_DPOP_ENABLED=$( [ " $PROTOCOL " = " oauth_dpop" ] && echo 1 || echo 0) \
94+ MCP_AUTH_PROTOCOL=" $PROTOCOL " \
95+ uv run mcp-simple-auth-multiprotocol-client
8496elif [ " $PROTOCOL " = " mutual_tls" ]; then
85- echo " Starting simple-auth-multiprotocol-client ( mTLS placeholder). At mcp> run: list, call get_time {}, quit "
97+ echo " Running mTLS placeholder selection (expect not implemented) "
8698 echo " "
8799 cd " $MULTIPROTOCOL_CLIENT "
88- unset MCP_API_KEY
89- MCP_SERVER_URL=" http://localhost:${RS_PORT} /mcp" uv run mcp-simple-auth-multiprotocol-client
100+ set +e
101+ OUT=$( MCP_SERVER_URL=" http://localhost:${RS_PORT} /mcp" MCP_AUTH_PROTOCOL=" mutual_tls" uv run mcp-simple-auth-multiprotocol-client 2>&1 )
102+ CODE=$?
103+ set -e
104+ echo " $OUT " | head -60
105+ if echo " $OUT " | grep -q " Mutual TLS not implemented" ; then
106+ echo " PASS: mutual_tls placeholder reported not implemented"
107+ exit 0
108+ fi
109+ echo " FAIL: mutual_tls placeholder did not report expected error (exit=$CODE )"
110+ exit 1
90111else
91- echo " Starting simple-auth-multiprotocol-client ( API Key). At mcp> run : list, call get_time {}, quit"
112+ echo " Running API Key flow (non-interactive) : list, call get_time {}, quit"
92113 echo " "
93114 cd " $MULTIPROTOCOL_CLIENT "
94- MCP_SERVER_URL=" http://localhost:${RS_PORT} /mcp" MCP_API_KEY=" demo-api-key-12345" uv run mcp-simple-auth-multiprotocol-client
115+ set +e
116+ OUT=$( printf " list\ncall get_time {}\nquit\n" | MCP_SERVER_URL=" http://localhost:${RS_PORT} /mcp" MCP_API_KEY=" demo-api-key-12345" MCP_AUTH_PROTOCOL=" api_key" uv run mcp-simple-auth-multiprotocol-client 2>&1 )
117+ CODE=$?
118+ set -e
119+ echo " $OUT " | head -80
120+ if [ " $CODE " -eq 0 ] && echo " $OUT " | grep -q " Session initialized" && ! echo " $OUT " | grep -q " Session terminated" ; then
121+ echo " PASS: api_key flow succeeded"
122+ exit 0
123+ fi
124+ echo " FAIL: api_key flow failed (exit=$CODE )"
125+ exit 1
95126fi
0 commit comments