Koskamo

HOGSWAP MCP

An MCP server for HOGSWAP that provides AI agents with DEX-aggregated quotes, unsigned swap builds, and the ability to pay any x402 invoice with any asset on Algorand. It supports self-registration for API keys and offers tools for balance checks, credit offers, and watch alerts.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

HOGSWAP MCP logo, by LiquiHogCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by LiquiHog
You need:Require a HOGSWAP API key (set HOGSWAP_API_KEY , or self-issue one with register_agent → sign → verify_registration )
MCP endpoint (Streamable HTTP)
https://hogswap-v1.liquihog.dev/mcp/
Vendor documentation

What its tools do

12 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

12 of 12 have a description · 0 of 12 declare behavior hints · 0 of 11 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Get DEX-aggregated swap quotes
  • Build unsigned swap transactions
  • Pay x402 invoices with any asset
  • Register agent and verify registration

Source and maintenance

Community listingRegistry 0.4.0
Maintenance checked

Protocol and capabilities

Server
hogswap 0.4.0
MCP protocol negotiated in check
2025-11-25
Tools
12 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  },
  "experimental": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

HOGSWAP: multi-DEX swap router + universal x402 payment rail on Algorand. Quotes are free (rate-limited); transacting tools need an hsk_ API key — self-issue one with register_agent/verify_registration, no human. All transaction tools return UNSIGNED groups: sign with your own wallet and submit yourself. NEVER pass mnemonics or private keys to any tool — signing happens in YOUR wallet, never here.

Tools

12 advertised

list_payable_assets
Advertised by the server during the last successful anonymous check.

Assets accepted as payment inputs for pay_x402_invoice and credit top-ups (price-confidence gated; ALGO and USDC always included).

list_payable_assets input schema
{
  "type": "object",
  "title": "list_payable_assetsArguments",
  "properties": {}
}
list_payable_assets output schema
{
  "type": "object",
  "title": "list_payable_assetsOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
get_quote
Advertised by the server during the last successful anonymous check.

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.

get_quote input schema
{
  "type": "object",
  "title": "get_quoteArguments",
  "required": [
    "asset_in",
    "asset_out"
  ],
  "properties": {
    "amount": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Amount",
      "default": null
    },
    "sender": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Sender",
      "default": null
    },
    "api_key": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Api Key",
      "default": null
    },
    "asset_in": {
      "type": "integer",
      "title": "Asset In"
    },
    "max_legs": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Max Legs",
      "default": null
    },
    "asset_out": {
      "type": "integer",
      "title": "Asset Out"
    },
    "amount_out": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Amount Out",
      "default": null
    }
  }
}
get_quote output schema
{
  "type": "object",
  "title": "get_quoteOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
build_swap
Advertised by the server during the last successful anonymous check.

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.

build_swap input schema
{
  "type": "object",
  "title": "build_swapArguments",
  "required": [
    "quote_id",
    "user_address"
  ],
  "properties": {
    "api_key": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Api Key",
      "default": null
    },
    "quote_id": {
      "type": "string",
      "title": "Quote Id"
    },
    "user_address": {
      "type": "string",
      "title": "User Address"
    }
  }
}
build_swap output schema
{
  "type": "object",
  "title": "build_swapOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
pay_x402_invoice
Advertised by the server during the last successful anonymous check.

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.

pay_x402_invoice input schema
{
  "type": "object",
  "title": "pay_x402_invoiceArguments",
  "required": [
    "invoice",
    "user_address",
    "inputs"
  ],
  "properties": {
    "inputs": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Inputs"
    },
    "api_key": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Api Key",
      "default": null
    },
    "invoice": {
      "type": "object",
      "title": "Invoice",
      "additionalProperties": true
    },
    "user_address": {
      "type": "string",
      "title": "User Address"
    }
  }
}
pay_x402_invoice output schema
{
  "type": "object",
  "title": "pay_x402_invoiceOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
register_agent
Advertised by the server during the last successful anonymous check.

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.

register_agent input schema
{
  "type": "object",
  "title": "register_agentArguments",
  "required": [
    "address"
  ],
  "properties": {
    "address": {
      "type": "string",
      "title": "Address"
    }
  }
}
register_agent output schema
{
  "type": "object",
  "title": "register_agentOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
verify_registration
Advertised by the server during the last successful anonymous check.

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.

verify_registration input schema
{
  "type": "object",
  "title": "verify_registrationArguments",
  "required": [
    "address",
    "challenge",
    "signature_b64"
  ],
  "properties": {
    "address": {
      "type": "string",
      "title": "Address"
    },
    "challenge": {
      "type": "string",
      "title": "Challenge"
    },
    "signature_b64": {
      "type": "string",
      "title": "Signature B64"
    }
  }
}
verify_registration output schema
{
  "type": "object",
  "title": "verify_registrationOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
get_credit_offer
Advertised by the server during the last successful anonymous check.

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.

get_credit_offer input schema
{
  "type": "object",
  "title": "get_credit_offerArguments",
  "required": [
    "usdc_micro"
  ],
  "properties": {
    "api_key": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Api Key",
      "default": null
    },
    "usdc_micro": {
      "type": "integer",
      "title": "Usdc Micro"
    }
  }
}
get_credit_offer output schema
{
  "type": "object",
  "title": "get_credit_offerOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
get_balance
Advertised by the server during the last successful anonymous check.

Current HOGSWAP credit balance for your API key.

get_balance input schema
{
  "type": "object",
  "title": "get_balanceArguments",
  "properties": {
    "api_key": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Api Key",
      "default": null
    }
  }
}
get_balance output schema
{
  "type": "object",
  "title": "get_balanceOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
value_lp_token
Advertised by the server during the last successful anonymous check.

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.

value_lp_token input schema
{
  "type": "object",
  "title": "value_lp_tokenArguments",
  "required": [
    "asset_id"
  ],
  "properties": {
    "amount": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Amount",
      "default": null
    },
    "asset_id": {
      "type": "integer",
      "title": "Asset Id"
    }
  }
}
value_lp_token output schema
{
  "type": "object",
  "title": "value_lp_tokenOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
set_watch
Advertised by the server during the last successful anonymous check.

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.

set_watch input schema
{
  "type": "object",
  "title": "set_watchArguments",
  "required": [
    "client_key",
    "kind"
  ],
  "properties": {
    "op": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Op",
      "default": null
    },
    "kind": {
      "type": "string",
      "title": "Kind"
    },
    "ttl_s": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Ttl S",
      "default": null
    },
    "api_key": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Api Key",
      "default": null
    },
    "min_out": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Min Out",
      "default": null
    },
    "asset_id": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Asset Id",
      "default": null
    },
    "asset_in": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Asset In",
      "default": null
    },
    "amount_in": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Amount In",
      "default": null
    },
    "asset_out": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Asset Out",
      "default": null
    },
    "rearm_bps": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Rearm Bps",
      "default": null
    },
    "client_key": {
      "type": "string",
      "title": "Client Key"
    },
    "cooldown_s": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Cooldown S",
      "default": null
    },
    "margin_bps": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Margin Bps",
      "default": null
    },
    "threshold_usd_micro": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Threshold Usd Micro",
      "default": null
    }
  }
}
set_watch output schema
{
  "type": "object",
  "title": "set_watchOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
list_watches
Advertised by the server during the last successful anonymous check.

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.

list_watches input schema
{
  "type": "object",
  "title": "list_watchesArguments",
  "properties": {
    "api_key": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Api Key",
      "default": null
    }
  }
}
list_watches output schema
{
  "type": "object",
  "title": "list_watchesOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
delete_watch
Advertised by the server during the last successful anonymous check.

Delete one of your watches by its client_key.

delete_watch input schema
{
  "type": "object",
  "title": "delete_watchArguments",
  "required": [
    "client_key"
  ],
  "properties": {
    "api_key": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Api Key",
      "default": null
    },
    "client_key": {
      "type": "string",
      "title": "Client Key"
    }
  }
}
delete_watch output schema
{
  "type": "object",
  "title": "delete_watchOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1995 ms
95th percentile latency
1995 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1995 ms · metadata changed · 12 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http hogswap-mcp-liquihog https://hogswap-v1.liquihog.dev/mcp/

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add hogswap-mcp-liquihog --url https://hogswap-v1.liquihog.dev/mcp/

Cursor

Merge this server into .cursor/mcp.json in your project, then enable hogswap-mcp-liquihog in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "hogswap-mcp-liquihog": {
      "url": "https://hogswap-v1.liquihog.dev/mcp/"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "hogswap-mcp-liquihog": {
      "type": "streamableHttp",
      "url": "https://hogswap-v1.liquihog.dev/mcp/",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start hogswap-mcp-liquihog and inspect its tools.
VS Code configuration
{
  "servers": {
    "hogswap-mcp-liquihog": {
      "type": "http",
      "url": "https://hogswap-v1.liquihog.dev/mcp/"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http hogswap-mcp-liquihog https://hogswap-v1.liquihog.dev/mcp/

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://hogswap-v1.liquihog.dev/mcp/

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "hogswap-mcp-liquihog": {
      "serverUrl": "https://hogswap-v1.liquihog.dev/mcp/"
    }
  }
}

Let your agent find its tools

Find servers like HOGSWAP MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.