SaaSDaq
+ IPOLogin

MCP Server

Point an agent at the market. Reads need no credentials; trading takes a key you mint yourself. One npx line, ten tools, no real money anywhere in it.

Install

mcp · stdio
{
  "mcpServers": {
    "saasdaq": {
      "command": "npx",
      "args": ["-y", "@saasdaq/mcp"],
      "env": { "SAASDAQ_API_KEY": "sdq_..." }
    }
  }
}

Works in any MCP client — Claude Code, Claude Desktop, Cursor, VS Code. Drop the env block entirely to run read-only: the six board tools never look at a key. Requires Node 20 or newer; nothing else to install and nothing to configure beyond this.

Tools

10 of them
ToolKeyDoes
get_boardThe three boards: market cap, gainers, traders.
get_marketOne ticker in full: price, reserve, holders, recent fills.
get_candlesHourly candles, up to 168 of them.
get_traderA trader's public profile and rank.
search_productsFind a ticker by name, domain or tagline.
get_totalsSite-wide totals.
get_meyesBalance, positions, ROI, and what this key is allowed to do.
place_tradeyesBuy or sell.
claim_faucetyesThe daily allowance.
list_productyesList a new product (spends the listing bond).

Retrying an order

idempotency

place_trade takes an optional idempotencyKey (a UUID) and generates one when you omit it. Replaying the same key returns the original receipt and moves no money.

Every failure message echoes the key that was used, because after a timeout an agent cannot tell a rejected order from a lost response. Retry with that key to retry the same order; let a new one be generated to place a second one on purpose.

Units

read this before your first order

Every amount in the API is an integer string in base units, never a decimal:

1 $HYPE = 1000000 µH   (microHYPE)
1 share = 1000000 µS   (microShares)

The trap is that amount changes unit with side: buying spends µH, selling sends µS. So {"side":"buy","amount":"5000000"} spends 5 $HYPE, while the same number with "sell" sells 5 shares.

The server refuses "5 $HYPE" on purpose. A tool that accepted decimals while the API takes base units is a 10⁶ mistake waiting to happen, and it would happen silently — the order would go through, just for a millionth of what you meant.

Getting a key

a human has to do this part

Mint one in a browser at /me → API Keys. The plaintext is shown once; only a SHA-256 hash is stored, so a lost key is replaced, never recovered.

There is no endpoint that issues keys. A key able to mint another key would make revocation meaningless — you would revoke one and have no way to know whether it had already produced a replacement.

A key acts as the person who minted it: same balance, same rank, same daily limits. There is no separate bot account and no separate leaderboard, which is the whole point — see Rules. Scopes are separate for trading and listing, so a key you hand to an experiment need not be able to spend the 50 $HYPE bond that listing a product costs.

Is letting an agent trade cheating?

no

No. A key is a person, so an agent trading through it is that person trading — the daily per-product cap, the faucet, the holder-count requirement for the top ten all apply unchanged. Nothing about the API loosens a limit the browser enforces.

Orders placed with a key are tagged api in the public tape. That is disclosure, not a penalty: the point of a public ROI board is that anyone can see how a position was taken, and "a script did it" is a fact readers are entitled to. It does not affect ranking.

Without MCP

rest · curl

MCP is a convenience, not the interface. Everything above is plain HTTP, and two files describe it:

  • /llms.txt — the whole contract in one file, written for agents: endpoints, units, the rules that actually shape strategy.
  • /openapi.json — the machine-readable schema for the same endpoints.

Reads are cached at the edge and need no credentials at all. Writes take one header: Authorization: Bearer sdq_…