hogswap-mcp
Pay any Algorand x402 invoice with any asset, plus DEX swap quotes and unsigned builds.
使うべきか
品質と安全性
検出事項(1)
- LOWget_balance 内
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"hogswap-mcp": {
"command": "npx",
"args": [
"hogswap-mcp"
]
}
}
}実行可能なパッケージ
0.4.0stdioリモートエンドポイント
https://hogswap-v1.liquihog.dev/mcp/streamable-httpできること
ツール一覧
ツール(12)
🟢list_payable_assets
Assets accepted as payment inputs for pay_x402_invoice and credit top-ups (price-confidence gated; ALGO and USDC always included).
入力スキーマ
{
"type": "object",
"properties": {},
"title": "list_payable_assetsArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "list_payable_assetsOutput"
}🟢get_quote(asset_in, asset_out, amount, amount_out, sender, ...)
HOGSWAP swap quote across every Algorand DEX. Give amount (exact input) OR amount_out (exact output — minimum input is solved). Base units (µ); asset 0 = ALGO. Returns expected_out, route legs, and a quote_id for build_swap. expected_out is NET of the 5 bps routing fee; passing sender also returns router_fee_* fields and the wallet's HOG discount (hog_discount_pct, 100 = fully waived at 100 HOG). Optional sender enables HOG-holding fee discounts. Optional max_legs (1-16) caps TOTAL route legs, splits included — slightly worse price at size, 404 if nothing fits; forward (amount) quotes only.
入力スキーマ
{
"type": "object",
"properties": {
"asset_in": {
"title": "Asset In",
"type": "integer"
},
"asset_out": {
"title": "Asset Out",
"type": "integer"
},
"amount": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Amount"
},
"amount_out": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Amount Out"
},
"sender": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sender"
},
"max_legs": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Max Legs"
},
"api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Api Key"
}
},
"required": [
"asset_in",
"asset_out"
],
"title": "get_quoteArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "get_quoteOutput"
}🟡build_swap(quote_id, user_address, api_key)
Unsigned transaction group for a get_quote quote_id. Sign every txn with your own wallet and submit as one group. NEVER pass mnemonics or private keys to any tool — signing happens in YOUR wallet, never here.
入力スキーマ
{
"type": "object",
"properties": {
"quote_id": {
"title": "Quote Id",
"type": "string"
},
"user_address": {
"title": "User Address",
"type": "string"
},
"api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Api Key"
}
},
"required": [
"quote_id",
"user_address"
],
"title": "build_swapArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "build_swapOutput"
}🟡pay_x402_invoice(invoice, user_address, inputs, api_key)
Pay ANY Algorand-settled x402 invoice with any 1-4 routable assets you hold, even holding none of the demanded asset. Pass the `accepts` entry you picked as `invoice` (keep its note!) plus your inputs (single input with no amount = minimum solved). Returns UNSIGNED groups — sign all in one pass, submit IN ORDER (swap first; its on-chain floor guarantees the payment is funded; holding the asset already = one direct payment). HOGSWAP credit top-up offers feed this verbatim. EVM invoices unsupported (no bridge). NEVER pass mnemonics or private keys to any tool — signing happens in YOUR wallet, never here.
入力スキーマ
{
"type": "object",
"properties": {
"invoice": {
"additionalProperties": true,
"title": "Invoice",
"type": "object"
},
"user_address": {
"title": "User Address",
"type": "string"
},
"inputs": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Inputs",
"type": "array"
},
"api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Api Key"
}
},
"required": [
"invoice",
"user_address",
"inputs"
],
"title": "pay_x402_invoiceArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "pay_x402_invoiceOutput"
}⚪register_agent(address)
Self-service HOGSWAP API key, step 1 of 2 — zero human. Returns a challenge; sign its exact bytes with the address's key in YOUR wallet tooling, then call verify_registration. NEVER pass mnemonics or private keys to any tool — signing happens in YOUR wallet, never here.
入力スキーマ
{
"type": "object",
"properties": {
"address": {
"title": "Address",
"type": "string"
}
},
"required": [
"address"
],
"title": "register_agentArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "register_agentOutput"
}🟡verify_registration(address, challenge, signature_b64)
Self-service key issuance, step 2 of 2. Returns your hsk_ key ONCE — store it yourself; it is not recoverable and this server does not keep it. Send it on later calls as Authorization: Bearer, X-API-Key, or the api_key argument.
入力スキーマ
{
"type": "object",
"properties": {
"address": {
"title": "Address",
"type": "string"
},
"challenge": {
"title": "Challenge",
"type": "string"
},
"signature_b64": {
"title": "Signature B64",
"type": "string"
}
},
"required": [
"address",
"challenge",
"signature_b64"
],
"title": "verify_registrationArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "verify_registrationOutput"
}🟡get_credit_offer(usdc_micro, api_key)
Create a credit top-up and get the x402 offer (HTTP 402 IS the payment instruction, not an error). Feed accepts[0] straight into pay_x402_invoice (keep the note nonce) to pay with any asset. Credits land ~1 block after payment.
入力スキーマ
{
"type": "object",
"properties": {
"usdc_micro": {
"title": "Usdc Micro",
"type": "integer"
},
"api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Api Key"
}
},
"required": [
"usdc_micro"
],
"title": "get_credit_offerArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "get_credit_offerOutput"
}🟢get_balance(api_key)
Current HOGSWAP credit balance for your API key.
入力スキーマ
{
"type": "object",
"properties": {
"api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Api Key"
}
},
"title": "get_balanceArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "get_balanceOutput"
}🟢value_lp_token(asset_id, amount)
Value a liquidity-provider position. Give the LP token's asset id (free, no key) and optionally `amount` in LP BASE units — what the wallet holds — for its USD value and the redeemable amount of each underlying. Also identifies the issuing pool/DEX (and STAMM tier). Per-unit figures are per WHOLE LP token. Values are a proportional-share redemption at analytics prices: no slippage, no exit fee, NOT a market quote — fields are null rather than guessed when supply or a price is missing, so check before reporting a number.
入力スキーマ
{
"type": "object",
"properties": {
"asset_id": {
"title": "Asset Id",
"type": "integer"
},
"amount": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Amount"
}
},
"required": [
"asset_id"
],
"title": "value_lp_tokenArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "value_lp_tokenOutput"
}🟡set_watch(client_key, kind, asset_in, asset_out, amount_in, ...)
Register a standing server-side watch (FREE, needs a key; idempotent upsert by client_key — re-registering replaces the watch and resets arming). kind='price': advisory µUSD threshold (asset_id, op gte/lte, threshold_usd_micro). kind='target': size-aware surrogate — would swapping amount_in of asset_in→asset_out deliver ≥ min_out? (margin_bps haircut, default 30; NO quote is run). Edge-triggered one-shot; re-arms after rearm_bps retreat + cooldown_s; ttl_s auto-expiry (default 86400) — refresh by re-upserting. Fires are numbers-only HINTS: re-quote with get_quote. Events push over SSE at GET /watches/stream (outside MCP); from MCP, poll list_watches.
入力スキーマ
{
"type": "object",
"properties": {
"client_key": {
"title": "Client Key",
"type": "string"
},
"kind": {
"title": "Kind",
"type": "string"
},
"asset_in": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Asset In"
},
"asset_out": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Asset Out"
},
"amount_in": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Amount In"
},
"min_out": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Min Out"
},
"margin_bps": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Margin Bps"
},
"asset_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Asset Id"
},
"op": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Op"
},
"threshold_usd_micro": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Threshold Usd Micro"
},
"rearm_bps": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Rearm Bps"
},
"cooldown_s": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Cooldown S"
},
"ttl_s": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Ttl S"
},
"api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Api Key"
}
},
"required": [
"client_key",
"kind"
],
"title": "set_watchArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "set_watchOutput"
}🟢list_watches(api_key)
List your key's active watches (spec + arming/fired state), quota, and latest event seq. Poll this from MCP to see fires; SSE at GET /watches/stream is the push alternative outside MCP.
入力スキーマ
{
"type": "object",
"properties": {
"api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Api Key"
}
},
"title": "list_watchesArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "list_watchesOutput"
}🔴delete_watch(client_key, api_key)
Delete one of your watches by its client_key.
入力スキーマ
{
"type": "object",
"properties": {
"client_key": {
"title": "Client Key",
"type": "string"
},
"api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Api Key"
}
},
"required": [
"client_key"
],
"title": "delete_watchArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "delete_watchOutput"
}コミュニティ
エビデンス