_ registry / mcp streamable-http · checked 53m ago

bonusround

https://bonusround.io

Registry code: 86a3d84e5b09b5a0

api record

Bonus Round is an ad network for three.js games (developers earn 70% of ad revenue). To integrate a game, call bonusround_integration_guide first and follow it; bonusround_docs answers other questions. Money values are integer micros (1 USD = 1,000,000). Never turn test mode off or change floors without the user saying so. This connection is not signed in: bonusround_integration_guide, bonusround_docs and bonusround_register_game (integrate with no account; a human claims it later) work now. Calling an account tool asks the user to sign in to Bonus Round; after that, bonusround_claim_game…

endpoint
https://bonusround.io/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is bonusround live?
Yes — it answered the hub's last check (checked 53m ago). It answered 100% of checks over the last 30 days.
Is bonusround free to use?
Partly — some of its tools are open, others need a key or payment.
What tools does bonusround have?
11 tools: bonusround_get_snippet, bonusround_create_game, bonusround_integration_status, bonusround_start_learning, bonusround_get_stats, bonusround_update_settings, bonusround_register_game, bonusround_claim_game, ….
Is bonusround safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
180ms

last good check

priced tools
0

of 11 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 11 tools
2 open1 auth-required 8 never probed 3 of 11 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • bonusround_integration_guide open 53m ago

    The canonical step-by-step recipe for AI coding agents integrating Bonus Round into a three.js game (integrate.md). Read this before editing the user's game.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {}
    }
    arguments 5 lines
  • bonusround_docs open 53m ago

    Read the Bonus Round documentation (an ad network for three.js games that pays developers 70% of ad revenue). No API key needed. Call with no arguments for an overview and the page list, with page to read one page, or with query to search (e.g. "react three fiber", "rewarded", "payouts", "ads.txt"). Use this to answer "how do I monetize / add ads to my three.js game" before integrating.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "page": {
          "enum": [
            "recipe",
            "quickstart",
            "three-js-ads",
            "install",
            "agents",
            "attach",
            "formats",
            "test-mode",
            "going-live",
            "events",
            "brand-safety",
            "payouts",
            "api",
            "faq"
          ],
          "type": "string",
          "description": "One docs page to return in full."
        },
        "query": {
          "type": "string",
          "maxLength": 200,
          "description": "Search terms; returns the best-matching sections."
        }
      }
    }
    arguments 31 lines
  • bonusround_list_games auth-required 53m ago

    List the Bonus Round games (publisher properties) on this account, with their pub ids, status and whether the SDK has been seen.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {}
    }
    arguments 5 lines
  • bonusround_get_snippet unknown never probed

    The exact script tag (with this game's data-pub), the attach line, example break/rewarded calls and the ads.txt line for a game.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "gameId"
      ],
      "properties": {
        "gameId": {
          "type": "string",
          "description": "Game id (gm_…) from bonusround_list_games"
        }
      }
    }
    arguments 13 lines
  • bonusround_create_game unknown never probed

    Register a three.js game with Bonus Round. Returns the game id, its public pub_ id and the install snippet. Use the URL where the game is (or will be) hosted; that origin is what the SDK ping is matched against.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "format": "uri",
          "description": "Public URL of the game, e.g. https://mygame.example.com/play"
        },
        "name": {
          "type": "string",
          "maxLength": 80,
          "description": "Display name; defaults to the page title."
        }
      }
    }
    arguments 19 lines
  • bonusround_integration_status unknown never probed

    Check whether the Bonus Round SDK has been seen running in the game (integration.lastSeenAt), plus learning status and test mode. Pass waitSeconds to poll until the SDK is seen, after you load the game in a browser.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "gameId"
      ],
      "properties": {
        "gameId": {
          "type": "string"
        },
        "waitSeconds": {
          "type": "integer",
          "maximum": 120,
          "minimum": 0,
          "description": "Poll every 3 s for up to this long until integration.lastSeenAt is set. Default 0 (check once)."
        }
      }
    }
    arguments 18 lines
  • bonusround_start_learning unknown never probed

    (Re)start the Bonus Round play agent for a game: it plays the game in a headless browser to learn controls, scale, art style and a good spot for the ambient prop. Starts automatically on the first SDK ping; call this to re-learn after big changes.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "gameId"
      ],
      "properties": {
        "gameId": {
          "type": "string"
        }
      }
    }
    arguments 12 lines
  • bonusround_get_stats unknown never probed

    Requests, fill rate, impressions, viewable impressions, engagements, clicks, earnings and eCPM for a game. Money is in micros (1 USD = 1,000,000); a dollars summary is included. Test-mode traffic never earns and is counted separately under `test`, not in the totals.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "gameId"
      ],
      "properties": {
        "days": {
          "type": "integer",
          "maximum": 365,
          "minimum": 1,
          "description": "Default 30"
        },
        "gameId": {
          "type": "string"
        }
      }
    }
    arguments 18 lines
  • bonusround_update_settings unknown never probed

    Change a game: name, test mode, content rating, categories, allowed domains, paused, and ad settings (formats, triggers, interval, floors, blocked categories, frequency cap). settings is deep-merged into the current settings. Turning testMode off makes the game eligible for paid ads: confirm with the user first.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "gameId"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 80
        },
        "gameId": {
          "type": "string"
        },
        "paused": {
          "type": "boolean",
          "description": "true stops all ads in this game right away. Only when the user asks."
        },
        "rating": {
          "enum": [
            "everyone",
            "teen",
            "mature"
          ],
          "type": "string"
        },
        "domains": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 20,
          "description": "Hostnames allowed to serve ads, e.g. [\"mygame.com\",\"mygame.itch.io\"]. Replaces the whole list; subdomains are included. localhost always works."
        },
        "settings": {
          "type": "object",
          "properties": {
            "formats": {
              "type": "object",
              "properties": {
                "ambient": {
                  "type": "object",
                  "properties": {
                    "enabled": {
                      "type": "boolean"
                    }
                  }
                },
                "takeover": {
                  "type": "object",
                  "properties": {
                    "enabled": {
                      "type": "boolean"
                    },
                    "triggers": {
                      "type": "array",
                      "items": {
                        "enum": [
                          "intermission",
                          "interval",
                          "rewarded"
                        ],
                        "type": "string"
                      },
                      "description": "Which takeover triggers may serve."
                    },
                    "intervalSec": {
                      "type": "integer",
                      "maximum": 9007199254740991,
                      "minimum": 60,
                      "description": "For the interval trigger: offer a round at most this often."
                    }
                  }
                }
              }
            },
            "frequencyCap": {
              "type": "object",
              "properties": {
                "perHour": {
                  "type": "integer",
                  "maximum": 9007199254740991,
                  "minimum": 1
                }
              },
              "description": "Max takeover rounds per player per hour."
            },
            "floorCpmMicros": {
              "type": "object",
              "properties": {
                "ambient": {
                  "type": "integer",
                  "maximum": 9007199254740991,
                  "minimum": 0
                },
                "takeover": {
                  "type": "integer",
                  "maximum": 9007199254740991,
                  "minimum": 0
                }
              },
              "description": "Minimum price per 1,000 impressions, in micros (1 USD = 1,000,000)."
            },
            "blockedCategories": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Advertiser categories never shown in this game. Replaces the whole list."
            }
          }
        },
        "testMode": {
          "type": "boolean",
          "description": "true = only the Fizzpop test ad, never billed. false = live."
        },
        "categories": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Game genres, e.g. [\"arcade\",\"racing\"]"
        }
      }
    }
    arguments 125 lines
  • bonusround_register_game unknown never probed

    Add Bonus Round to a three.js game with no account or API key. Returns the pub id, the exact script tag, a claim link for the human and a game-scoped provisional key (status + verify only). Test mode first (the bonusround.io test ad plays, localhost works). Once the game is on its public HTTPS site, free bonusround.io house ads serve (unbilled: an unclaimed game earns nothing). Creating an account at the claim link turns on paid ads and payouts (or, once the human connects Bonus Round as a connector and signs in, bonusround_claim_game { claimToken } claims it). Finish by telling the human the tellTheHuman line, word for word.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "description": "Where the game runs or will run, e.g. https://mygame.com/play (http://localhost:5173 works for test mode only)."
        },
        "name": {
          "type": "string",
          "maxLength": 80
        },
        "agent": {
          "type": "string",
          "maxLength": 40,
          "description": "Which agent is integrating, e.g. 'claude-code'."
        }
      }
    }
    arguments 22 lines
  • bonusround_claim_game unknown never probed

    Move a game that was registered without an account (bonusround_register_game or POST /api/agent/games, which returned a claimToken "ac_…" and a claimUrl) into the signed-in user's Bonus Round workspace. Pass the claimToken, or the last path segment of the claimUrl. Returns the game, its pub id and install snippet.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "claimToken"
      ],
      "properties": {
        "claimToken": {
          "type": "string",
          "pattern": "^ac_[A-Za-z0-9_-]+$",
          "description": "The claimToken (ac_…), or the last path segment of the claimUrl"
        }
      }
    }
    arguments 14 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 86a3d84e5b09b5a0.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/86a3d84e5b09b5a0/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/86a3d84e5b09b5a0/badge.svg)](https://brick.blue/agent/86a3d84e5b09b5a0?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.