Files
proxmox/scripts/generate-mcp-allowlist-from-deployment-status.sh

72 lines
2.6 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# Generate MCP allowlist fragment for a public chain from deployment-status.json.
# Reads cross-chain-pmm-lps/config/deployment-status.json and outputs pools for the given chainId.
#
# Usage:
# ./scripts/generate-mcp-allowlist-from-deployment-status.sh <chain_id> # e.g. 137
# ./scripts/generate-mcp-allowlist-from-deployment-status.sh 137 -o fragment-137.json
#
# Output: JSON with "chain", "pools" (array of {name, pool_address, base_token, quote_token, profile}).
# pmmPools in deployment-status must have poolAddress (or pool_address), base, quote (or base_token, quote_token).
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
STATUS="${REPO_ROOT}/cross-chain-pmm-lps/config/deployment-status.json"
OUT_PATH=""
CHAIN_ID="${1:-}"
[[ -n "$CHAIN_ID" ]] || { echo "Usage: $0 <chain_id> [-o output.json]"; exit 1; }
shift || true
while [[ $# -gt 0 ]]; do
case "$1" in
-o) OUT_PATH="$2"; shift 2 ;;
*) shift ;;
esac
done
[[ -f "$STATUS" ]] || { echo "Not found: $STATUS"; exit 1; }
command -v jq &>/dev/null || { echo "jq required"; exit 1; }
# Read pmmPools for this chain; schema can be { "base", "quote", "poolAddress" } or { "base_token", "quote_token", "pool_address" }
pools_json=$(jq -c --arg c "$CHAIN_ID" '
.chains[$c].pmmPools // [] | map(
{
name: ("pool-" + (.["poolAddress"] // .pool_address // "?")[0:10]),
pool_address: (.["poolAddress"] // .pool_address),
base_token: (.["base"] // .base_token),
quote_token: (.["quote"] // .quote_token),
profile: (.["profile"] // "dodo_pmm_v2_like")
} | select(.pool_address != null and .base_token != null and .quote_token != null)
)
' "$STATUS" 2>/dev/null || echo "[]")
# Add default limits to each pool
with_limits=$(echo "$pools_json" | jq '
map(. + {
limits: {
max_slippage_bps: 50,
max_single_tx_notional_usd: 2500,
max_daily_notional_usd: 10000,
cooldown_seconds: 1800,
max_oracle_deviation_bps: 75,
gas_cap_gwei: 35
}
})
')
chain_name=$(jq -r --arg c "$CHAIN_ID" '.chains[$c].name // "Unknown"' "$STATUS")
result=$(jq -n \
--arg chain "$CHAIN_ID" \
--arg name "$chain_name" \
--argjson pools "$with_limits" \
'{chain: $chain, description: ("MCP allowlist for chain " + $chain + " (" + $name + ") from deployment-status.json. Use with multi-chain MCP or per-chain allowlist."), pools: $pools}')
if [[ -n "$OUT_PATH" ]]; then
mkdir -p "$(dirname "$OUT_PATH")"
echo "$result" | jq . > "$OUT_PATH"
echo "Wrote $OUT_PATH ($(echo "$pools_json" | jq 'length') pools)" >&2
else
echo "$result" | jq .
fi