68 lines
2.7 KiB
Bash
Executable File
68 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
"$ROOT/scripts/build_cpp.sh" >/dev/null
|
|
mkdir -p "$ROOT/reports"
|
|
MOCK_PORT=19181
|
|
MCPD_PORT=19180
|
|
"$ROOT/build/cpp/mock_mcp_server" --port "$MOCK_PORT" >"$ROOT/reports/context_mock.log" 2>&1 &
|
|
MOCK_PID=$!
|
|
"$ROOT/build/cpp/mcpd" --port "$MCPD_PORT" --upstream "http://127.0.0.1:$MOCK_PORT/rpc" >"$ROOT/reports/context_mcpd.log" 2>&1 &
|
|
MCPD_PID=$!
|
|
cleanup() {
|
|
kill "$MCPD_PID" "$MOCK_PID" >/dev/null 2>&1 || true
|
|
}
|
|
trap cleanup EXIT
|
|
sleep 0.3
|
|
|
|
DIRECT_CLIENT="$ROOT/build/cpp/oh_mcp_client --endpoint http://127.0.0.1:$MOCK_PORT/rpc --raw"
|
|
MCPD_CLIENT="$ROOT/build/cpp/oh_mcp_client --endpoint http://127.0.0.1:$MCPD_PORT/rpc --token demo-token --raw"
|
|
|
|
# Baseline 1: ordinary MCP path, client directly requests full tools/list from MCP Server.
|
|
DIRECT_FULL="$($DIRECT_CLIENT list-tools)"
|
|
|
|
# Baseline 2: mcpd path without compact optimization.
|
|
MCPD_FULL="$($MCPD_CLIENT list-tools)"
|
|
|
|
# Optimized: mcpd path with compact schema_id mode.
|
|
MCPD_COMPACT="$($MCPD_CLIENT list-tools --compact)"
|
|
|
|
DIRECT_FULL_BYTES=$(printf '%s' "$DIRECT_FULL" | wc -c | tr -d ' ')
|
|
MCPD_FULL_BYTES=$(printf '%s' "$MCPD_FULL" | wc -c | tr -d ' ')
|
|
MCPD_COMPACT_BYTES=$(printf '%s' "$MCPD_COMPACT" | wc -c | tr -d ' ')
|
|
REDUCTION_VS_DIRECT=$(awk "BEGIN { printf \"%.2f\", (1 - $MCPD_COMPACT_BYTES / $DIRECT_FULL_BYTES) * 100 }")
|
|
REDUCTION_VS_MCPD_FULL=$(awk "BEGIN { printf \"%.2f\", (1 - $MCPD_COMPACT_BYTES / $MCPD_FULL_BYTES) * 100 }")
|
|
MCPD_FULL_OVERHEAD=$(awk "BEGIN { printf \"%.2f\", (($MCPD_FULL_BYTES / $DIRECT_FULL_BYTES) - 1) * 100 }")
|
|
|
|
cat > "$ROOT/reports/context_efficiency.json" <<JSON
|
|
{
|
|
"test": "tools/list compact schema_id",
|
|
"baselines": {
|
|
"direct_mcp_full": {
|
|
"path": "client -> mock_mcp_server",
|
|
"bytes": $DIRECT_FULL_BYTES
|
|
},
|
|
"mcpd_full": {
|
|
"path": "client -> mcpd -> mock_mcp_server",
|
|
"bytes": $MCPD_FULL_BYTES,
|
|
"overhead_vs_direct_percent": $MCPD_FULL_OVERHEAD
|
|
}
|
|
},
|
|
"optimized": {
|
|
"path": "client -> mcpd compact -> mock_mcp_server/cache",
|
|
"bytes": $MCPD_COMPACT_BYTES
|
|
},
|
|
"reduction_vs_direct_percent": $REDUCTION_VS_DIRECT,
|
|
"reduction_vs_mcpd_full_percent": $REDUCTION_VS_MCPD_FULL
|
|
}
|
|
JSON
|
|
|
|
printf '[通信效率测试:严格 baseline 对比]\n'
|
|
printf 'baseline direct MCP full bytes: %s\n' "$DIRECT_FULL_BYTES"
|
|
printf 'baseline mcpd full bytes: %s\n' "$MCPD_FULL_BYTES"
|
|
printf 'optimized mcpd compact bytes: %s\n' "$MCPD_COMPACT_BYTES"
|
|
printf 'mcpd full overhead vs direct: %s%%\n' "$MCPD_FULL_OVERHEAD"
|
|
printf 'reduction vs direct MCP: %s%%\n' "$REDUCTION_VS_DIRECT"
|
|
printf 'reduction vs mcpd full: %s%%\n' "$REDUCTION_VS_MCPD_FULL"
|
|
printf 'report: %s\n' "$ROOT/reports/context_efficiency.json"
|