Bopster MCP
Pins market question metadata to IPFS when preparing a Bopster market, making the metadata available for the Reality.eth question.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Bopster MCPshow me the most active prediction markets on Bopster"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Bopster MCP
MCP server for Bopster prediction markets on Base. AI agents use it to read markets and prepare transactions. It never holds keys or sends anything.
Public server: https://mcp.bopster.fun/mcp
What it does
Bopster is a prediction market on Base. People take YES or NO positions in USDC on a question and the winning side splits the pool. This server exposes it to any Model Context Protocol client (Claude, Cursor and others).
Read tools call the public Bopster API (
https://api.bopster.fun) and the Bopster contracts on Base.The
prepare_*tools return unsigned transactions. The agent's own wallet signs and sends them.No keys, no custody, no stored sessions. It doesn't answer Reality.eth questions or arbitrate either.
To sign from a terminal, use bopster-cli. It checks every transaction against the chain before signing it, so you don't have to trust this server.
Contracts: bopster-market-contract.
Related MCP server: Polymarket MCP Server
Connect
Remote, the public server:
{
"mcpServers": {
"bopster": { "url": "https://mcp.bopster.fun/mcp" }
}
}In Claude, add the same URL as a custom connector.
Local, over stdio (after pnpm build):
{
"mcpServers": {
"bopster": {
"command": "node",
"args": ["/absolute/path/to/bopster-mcp/dist/bin/stdio.js"],
"env": {
"BOPSTER_RPC_URL": "https://mainnet.base.org",
"BOPSTER_FACTORY_ADDRESS": "0x11a2a549286567f7427d990423e5a3560ea16750",
"BOPSTER_REALITY_ARBITRATOR": "0xcB4B48d2A7a44247A00048963F169d2b4Ab045a6"
}
}
}
}Tools
Tool | What it does |
| Search and list markets: status, category, text, sorting, pagination. |
| One market by address: pools, phase, oracle, and a wallet's position if you pass one. |
| Top creators, predictors or oracles for a period. |
| Your own positions, payouts and refunds. Needs a login: |
| Public profile and activity, by wallet or alias. |
| Creator profile: alias, avatar, verified badge, stats. |
| Protocol, creator and resolver fees, read from the factory contract. |
| Checks that the backend is up. |
| What a YES/NO position would pay if its side wins, with the pools as they are now. |
| Approval for exactly the stake, then |
| What a wallet can take out of a market and the transactions to do it, in order: |
| Whether a market can be settled now, the transaction, and the resolver reward for whoever sends it. Covers the emergency refund. |
| Asks the backend to re-read a market after a transaction confirms, so the site shows it straight away. |
| One-time message for the wallet to sign (EIP-191). Step 1 of creating a market, and what |
| Step 2: builds the question from one of the site's five templates, checks every rule, pins the metadata and returns the Reality.eth |
| Step 3: checks the confirmed question is the drafted one and returns |
| Step 4: reads the new market from the receipt, returns its link and tells the backend. |
Amounts from the API are USDC base units (6 decimals). list_markets adds *_formatted and
*_iso fields. The quote_ and prepare_ tools take whole units: "5" is 5 USDC.
Creating a market
Same steps as on the site. Each call returns the arguments for the next one in next.
get_login_message → sign → prepare_market_question → send askQuestion
→ prepare_market_launch → send createMarket → register_marketTemplates only. Agents can't write a free-text question. They pick one of the five templates (
price_threshold,event_outcome,before_date,price_change,compare_assets) and fill in its fields. The question is worded exactly as on bopster.fun.Checked before anything is signed. Template fields, a title of 2 to 120 bytes, a public
source_url, a close on a whole minute between 20 minutes and 10 days away, and one of the site's resolution delays. A Sports match closes at kick-off and the sport sets the delay.Only its own drafts.
prepare_market_questionsigns the draft (HMAC withBOPSTER_DRAFT_SECRET) andprepare_market_launchrefuses anything it didn't sign, or a Reality.eth question with different text. The contracts are permissionless, so anyone calling them directly can still make a free-text market. The backend scores thoselow_trust.No early answers. The question opens for answers at the resolve time.
The backend only marks a market high_trust when:
the params pass the template rules and
metadata.questionis the canonical text;deadlineUtcequals the market'sresolveTime;the Reality.eth question, read from the contract, has the same text, template 0, Bopster's arbitrator and answer window, and opens at
resolveTime.
The backend publishes its template rules at GET /market-templates. This server checks its arbitrator and answer window against them before
preparing a market, test/templateContract.test.ts holds the templates to a saved copy, and
pnpm check:templates compares that copy with a live backend.
Safety
Only Bopster markets. Every market is checked against the factory's registry (
allMarkets) before anything is built, so a look-alike contract can't get an approval.Exact approvals.
prepare_positionalways approves exactly the stake, never more, and the position spends all of it. It doesn't skip the approval based on an allowance read: behind a load-balanced RPC that read can be stale.Gas limits included. Each transaction comes with
gas, about twice what it used in tests. An estimate made right after the previous transaction can hit a node that hasn't seen it yet. Only the gas used is charged.Chain time. Open, closed and ready are decided with the block timestamp, like the contract.
Login limit. Each client gets 3 login messages a minute, keyed by the address nginx sets in
CF-Connecting-IP(thenX-Real-IP). A login can pin metadata to IPFS before any transaction, and wallets are free.Same rules as the contract. Payouts, fees and the settle/claim/refund order follow the
BopsterMarketsource verified on Base mainnet.
Development
Requires Node.js 22+ and pnpm.
pnpm install
pnpm build
pnpm testRun it:
cp .env.example .env # the scripts below read it
pnpm start:stdio # stdio, for local MCP clients
pnpm start # HTTP on port 8788, all interfaces: http://127.0.0.1:8788/mcp
node scripts/smoke.mjs
pnpm inspector # MCP Inspector, then point it at node dist/bin/stdio.jsFork tests
Both suites run on an anvil fork of Base mainnet, start their own server against it and only
send transactions the tools prepared. Market creation uses a local stand-in for the backend that
checks login signatures like the real one. CI runs them in the e2e job (set the BASE_RPC_URL
repository variable for a dedicated RPC). Start the fork right before running them: public RPCs
stop serving a fork's block after a few minutes.
anvil --fork-url <Base mainnet RPC> --port 8545
pnpm build && pnpm test:e2eConfiguration
Variable | Default | |
|
| Bopster API. |
| none | Only for the official server. Sent as |
|
| Timeout for backend requests. |
|
| HTTP port. |
|
|
|
|
| Base RPC. The public one rate-limits bursts, so use a dedicated one in production. It must return transaction receipts (publicnode's free tier doesn't). Checked at startup and shown on |
| none | BopsterFactory. The |
| none | Arbitrator for new questions. Empty turns market creation off. Mainnet: |
|
| Answer window for new questions (12 h, as on the site). |
|
| Bounty sent with new questions. |
|
| Where market links point. |
| random | Signs market drafts between steps 2 and 3. Set it (32+ bytes) so drafts survive a restart. |
Self-hosting
Docker image behind nginx: see DEPLOYMENT.md.
License
Available Tools
17 toolsget_creator_profileGet a Bopster creator profileA
Fetch a public creator profile on Bopster: alias, avatar, verified badge and creator stats. Accepts either a wallet address or an alias.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | A wallet address (0x...) or a creator alias. The tool auto-detects which one it is. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Fetch a public creator profile' implies a safe read, and listing the returned fields adds value, but it omits auth requirements, not-found behavior for invalid handles, and any rate-limit or pagination context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences that front-load the action and resource, then name the accepted input forms. Every sentence earns its place with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with no output schema, the description covers the returned fields and input options well. The main gap is failing to differentiate from get_user_profile and to say what happens when the handle is not found.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the handle parameter is already fully documented in the schema. The description merely restates that a wallet or alias is accepted and adds no new format, validation, or example detail beyond what the schema says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Fetch a public creator profile on Bopster') and names the returned fields (alias, avatar, verified badge, creator stats). It does not distinguish itself from the sibling get_user_profile, leaving an agent to infer which profile tool to use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies a read-only lookup and notes that either a wallet address or alias is accepted, but gives no explicit when-to-use or when-not-to-use guidance and does not mention the get_user_profile alternative. Usage is inferable but not directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feesGet Bopster market feesA
Return the Bopster market fee split (protocol, creator and resolver) as read live from the BopsterFactory contract on Base. Percentages are of the total market pool. No fees are charged when a market refunds (no positions, or nobody on the winning side).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does add real context: values are read live from the BopsterFactory contract on Base, percentages are relative to the total market pool, and fees are zero on refunds (no positions or no winning side). Missing are latency/RPC-failure behavior and whether values can change over time, but the refund edge case is genuinely useful disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the return value and its source, then the interpretation of the numbers, then the edge case. Nothing is wasted and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should characterize the return value, and it does by naming the three fee components and their meaning. It stops short of specifying the numeric format (basis points vs. decimal percentages) or the exact response shape, which would be the final gap to close.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies; there is nothing for the description to disambiguate. The description correctly avoids inventing parameter behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return the Bopster market fee split') and enumerates the exact components returned (protocol, creator, resolver), which no sibling tool covers. The on-chain source (BopsterFactory on Base) further pins down scope so an agent can distinguish it from get_market or quote_position.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent can infer this is the way to fetch fee configuration, but the description never says when to call it versus related siblings like get_market (which may also surface fees) or quote_position. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_leaderboardGet a Bopster leaderboardA
Return a ranked leaderboard of Bopster participants (top market creators, predictors, i.e. position takers, or oracle answerers) over a given time period, with pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number. | |
| type | Yes | Which leaderboard: market creators, position takers (predictors), or oracle answerers. | |
| limit | No | Results per page (max 100). | |
| period | No | Time window for ranking. | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It communicates that this is a read-style return operation with pagination and a time window, but it omits permissions, data visibility, ranking basis, and rate/limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no wasted text. The core purpose, participant categories, time scope, and pagination are all packed efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with a fully described four-parameter schema, the description covers purpose, participant types, time window, and pagination sufficiently to invoke it correctly. Return fields are not detailed, but the absence of an output schema makes that a relatively minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents page, type, limit, and period in detail. The description restates participant categories, time period, and pagination but adds no meaningful syntax, defaults, or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Return'), resource ('ranked leaderboard of Bopster participants'), and scope (creator/predictor/oracle leaderboards over a time period). It is clearly distinct from the sibling tools, none of which appear to offer leaderboard data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear: retrieve rankings for a given participant type and time window. It does not explicitly state when not to use the tool or name alternatives, but no sibling tool offers a comparable leaderboard function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_login_messageGet a Bopster login messageA
Step 1 of creating a Bopster market, and what get_portfolio needs. Returns a one-time message for the wallet to sign with personal_sign (EIP-191). The signature opens a short session with the Bopster backend, used only for the one request that needs it: pinning a new market's metadata to IPFS, or reading this wallet's own portfolio. It can't move funds or sign transactions. Each client gets 3 a minute: ask for one only when you're about to sign it.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | Yes | The wallet that will sign and send the transactions (0x...). Balances and positions are read for this address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so well: it discloses that the message is one-time, the signing standard, that the resulting session is short-lived and limited to IPFS pinning and portfolio reads, and that it cannot move funds or sign transactions. The rate limit is also stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Despite being several sentences, every sentence adds useful context: purpose, prerequisite, signature format, session scope, safety boundary, and rate limit. The most important routing information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description explains what is returned (a one-time message), how it is used, how long the session lasts, what the session can and cannot do, and the rate limit. Nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single wallet parameter is already documented with its format and meaning. The description reinforces that the wallet signs the message but adds no syntax or format detail beyond the schema, making baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (a one-time login message) and its exact purpose: signed with personal_sign (EIP-191) to open a short backend session. It also positions the tool as step 1 of creating a market and as a prerequisite for get_portfolio, so an agent can distinguish it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use it (step 1 of market creation, or before get_portfolio) and when not to overuse it ('ask for one only when you're about to sign it'), with an explicit rate limit of 3 per minute. This is exactly the routing and timing guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marketGet a Bopster marketA
Fetch the full detail of a single Bopster prediction market by its on-chain address: question, category, source, YES/NO pools, market phase, oracle state and (optionally) a given wallet’s positions. Amounts are USDC base units (6 decimals); times are unix seconds (UTC).
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The on-chain market contract address (0x...). | |
| user_address | No | Optional wallet address to include that user’s positions and claimable state. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It helpfully discloses data semantics — amounts in USDC base units (6 decimals) and times in unix seconds (UTC) — and that positions are only included when a wallet is supplied, but it says nothing about read-only nature, behavior on an unknown/invalid address, or response size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence, front-loaded with the purpose and followed by the return fields and unit conventions. Every clause carries information; nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the field enumeration and unit conventions are essential and present. The only gap for a simple two-parameter read is the lack of any error/not-found behavior, which is minor but not negligible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema, establishing a baseline of 3. The description echoes the optional-wallet behavior but adds no format or edge-case detail beyond what the schema's patterns and descriptions already say.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — fetch the full detail of a single Bopster prediction market — and constrains it to lookup by on-chain address. It also enumerates exactly what comes back (question, category, source, pools, phase, oracle state, optional positions), which separates it cleanly from list_markets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'single ... by its on-chain address' implies this is the point-lookup counterpart to a listing tool, but no sibling is named and there is no explicit when-not guidance. An agent can infer the usage but must do the routing itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolioGet a wallet portfolioA
Fetch the Bopster portfolio of a wallet you control: its open positions across markets, claimable rewards and refunds. Amounts are USDC base units (6 decimals). The backend shows a portfolio only to its own wallet, so this needs a login: call get_login_message for the wallet, sign the message with personal_sign, then pass wallet, nonce and signature here. Each signature works once. The session can't move funds and isn't kept.
| Name | Required | Description | Default |
|---|---|---|---|
| nonce | Yes | The nonce get_login_message returned for this wallet. | |
| wallet | Yes | The wallet whose portfolio to fetch (0x...). It must be the wallet that signed the login message. | |
| signature | Yes | The personal_sign signature of that login message, from this wallet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does so well: it discloses the auth requirement and why it exists (backend only shows a portfolio to its own wallet), that each signature is single-use, that the session cannot move funds, and that it is not persisted. It also pins down the amount encoding (USDC base units, 6 decimals), which is a real correctness hazard.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then the units caveat, then the login mechanics. Every sentence carries information an agent would otherwise have to discover by failing a call; nothing is redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by naming what is returned (positions, claimable rewards, refunds) and the amount encoding. Combined with the fully documented three-parameter schema and the disclosed auth lifecycle, an agent has everything needed to call this correctly on the first attempt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes beyond it by explaining how the three parameters relate (wallet must be the signer, nonce and signature must come from the get_login_message flow, each signature is spent after one call). It doesn't add format details, but the schema already carries those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch the Bopster portfolio of a wallet') and enumerates the payload ('open positions across markets, claimable rewards and refunds'). This is clearly distinct from siblings like get_user_profile or quote_position, which return different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the exact prerequisite chain: call get_login_message for the wallet, sign with personal_sign, then pass wallet/nonce/signature here. It also scopes applicability to 'a wallet you control' and names the sibling that supplies the nonce, so the agent knows both when to use it and what must happen first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_profileGet a Bopster user profileB
Fetch a public Bopster user profile plus aggregate activity (as creator, predictor and oracle participant). Accepts either a wallet address or an alias.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | A wallet address (0x...) or a creator alias. The tool auto-detects which one it is. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Public' and 'Fetch' imply a safe read, and the aggregate-activity scope is useful, but nothing is said about auth requirements, behavior for an unknown or ambiguous handle, auto-detection failure modes, or response shape beyond a list of role categories.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste; the resource and its return scope are front-loaded before the accepted input forms. Nothing is padded or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool this covers what is returned at a high level and what input forms are accepted, which is largely sufficient with no output schema. However, it leaves the agent unable to choose between this and get_creator_profile, a meaningful gap in a 17-tool namespace.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is fully documented in the schema, including the auto-detect behavior. The description merely restates that a wallet address or alias is accepted, adding no syntax, format, or ambiguity-handling detail beyond the structured field. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch a public Bopster user profile') and adds scope detail: aggregate activity broken down by creator, predictor and oracle roles. It does not distinguish itself from the sibling get_creator_profile, which an agent could easily confuse with this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, and no mention of the obvious alternative get_creator_profile. The only framing sentence ('Accepts either a wallet address or an alias') is parameter information already present in the schema, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_marketsList Bopster marketsA
Search and list prediction markets on Bopster (a non-custodial prediction market on Base). Supports filtering by status, category and text, plus sorting and pagination. Returns each market with YES/NO pools, total volume and end/resolve times, and a pagination block (page, size, total, pages). Amounts are USDC (6 decimals); *_formatted and *_iso fields are added for readability.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number. | |
| size | No | Page size (max 100). | |
| title | No | Case-insensitive search within the market title. | |
| status | No | Filter by high-level market status. | |
| creator | No | Filter by creator: their wallet address, or the exact creator name shown on the market. | |
| category | No | Filter by category, e.g. Crypto, Tech, AI, Sports, Gaming, Politics, Memes, Culture. | |
| question | No | Case-insensitive search within the market question. | |
| sort_field | No | Field to sort by. Defaults to the backend default. | |
| sort_order | No | Sort direction. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does add real context beyond the schema: it states the return payload (YES/NO pools, total volume, end/resolve times, a pagination block with page/size/total/pages) and the USDC 6-decimal unit convention plus the added *_formatted and *_iso convenience fields. It does not mention auth requirements or caching/rate behavior, which is the main remaining gap for a non-annotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero filler, front-loaded with purpose and followed by capability, then return shape and units. Every clause conveys information an agent cannot get from the structured fields alone.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is doing the necessary work of describing the return shape, pagination block and unit conventions, which makes it largely complete for a 9-parameter read tool. It stops short of covering auth/access requirements or the relationship to sync_market, but nothing an agent needs to invoke it correctly is clearly missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and three params have enums, so the schema already documents every parameter thoroughly. The description only summarizes filter families at a high level and adds nothing about title vs question search granularity, the creator address/name dual lookup, or the sort_field enum. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Search and list prediction markets on Bopster', and adds identifying context (non-custodial market on Base). It is clearly a filtered-list operation, but it never names a sibling such as get_market (single-market fetch), so the differentiation is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sentence 'Supports filtering by status, category and text, plus sorting and pagination' implies the browsing/search use case, but there is no explicit guidance on when to use this versus get_market or sync_market, nor any stated exclusions. Usage is inferable rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ping_healthCheck Bopster backend healthA
Verify that the Bopster read API is reachable and responding. Useful before running other tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden; it implies a non-mutating read check via "read API" and "verify," but never states that it has no side effects or what a success versus failure response looks like. For a zero-parameter health probe the risk surface is small, which keeps this at adequate rather than poor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the action front-loaded and the usage hint second. Nothing repeats the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A no-param, no-output-schema probe is nearly self-contained, and the description covers what it does and when to run it. The one remaining gap is what the result signals (boolean, status string, latency), which matters for an agent deciding whether to proceed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The schema is empty and fully consistent with the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: verifying that the Bopster read API is reachable and responding. Against a sibling set made up entirely of market, position, and profile operations, a pure reachability check is unmistakably distinct, so no sibling routing is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Useful before running other tools" gives a clear triggering context rather than leaving timing to inference. It stops short of any exclusion or failure-handling guidance (e.g., what to do if the check fails), so it is strong but not a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_claimPrepare a Bopster claimA
Work out what a wallet can take out of a Bopster market on Base and build the unsigned transactions to do it, in order: settling the market first when it's ready but nobody has (finalize, or the emergency refund path), then claim() or claimRefund(). Says why when there's nothing to claim. Non-custodial: this server never holds keys or sends anything.
| Name | Required | Description | Default |
|---|---|---|---|
| market | Yes | The Bopster market contract address (0x...). | |
| wallet | Yes | The wallet that will sign and send the transactions (0x...). Balances and positions are read for this address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden well: it discloses the non-custodial model, says the server never holds keys or sends anything, explains the ordered transaction flow, and notes that it reports why there is nothing to claim. These are exactly the behavioral traits an agent needs before invoking a transaction-preparation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: it leads with the purpose, then explains transaction ordering and the non-custodial guarantee. Every sentence adds useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a claim-preparation tool with two fully documented parameters and no output schema, the description is complete enough. It covers the purpose, sequencing, edge case when there is nothing to claim, and the non-custodial safety model, leaving no critical gap for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the market and wallet parameters are already fully documented in the input schema. The description does not add further parameter semantics beyond the schema's contract address and signer/position-reading explanations, making baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: determine what a wallet can withdraw from a Bopster market and build unsigned transactions for claim()/claimRefund(), including finalize or emergency refund when needed. This clearly distinguishes the tool's claim-focused scope from sibling preparation tools such as prepare_finalize.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: use it to work out a wallet's claimable amount and assemble the ordered transactions, including settling first when the market is ready but un-finalized. It does not explicitly name alternatives like prepare_finalize or quote_position for previewing, so there is no explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_finalizePrepare to settle a Bopster marketA
Check whether a Bopster market on Base can be settled now and build the unsigned transaction(s) to do it. Anyone can settle a market once its Reality.eth answer is final; the sender earns the resolver reward when the market has winners. Also covers the emergency refund path for markets whose answer never became final. Non-custodial: this server never holds keys or sends anything.
| Name | Required | Description | Default |
|---|---|---|---|
| market | Yes | The Bopster market contract address (0x...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses permissionless settlement, resolver reward incentives, emergency refund support, and that the server is non-custodial and never holds keys or sends transactions. It stops short of describing response behavior or whether settlement is irreversible once submitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, followed by eligibility, reward context, emergency path, and non-custodial behavior. It is efficient, though slightly more compact phrasing could improve it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers eligibility, permissionless access, reward behavior, the emergency refund path, and custody safety for a one-parameter tool. However, with no output schema and no annotations, it could do more to explain the return shape, such as readiness result versus unsigned transaction list, and any failure cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single market parameter, so the schema already documents the required 0x address format. The description adds only contextual meaning that the market is on Base and is a Bopster market, which is useful but does not add syntax or semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: check settlement readiness and build unsigned transaction(s) for a Bopster market on Base, including the emergency refund path. It is clear without opening the schema, but does not explicitly name or differentiate from siblings such as prepare_claim or prepare_position.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear conditions for use: after the Reality.eth answer is final for normal settlement, or via the emergency refund path when an answer never became final. It also notes that anyone can settle and that the sender may earn the resolver reward, but it does not explicitly state when to use a sibling tool instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_market_launchPrepare a Bopster market launchA
Step 3 of creating a Bopster market. Only launches drafts prepare_market_question built: pass its next.arguments unchanged, plus the question tx hash. Reads the confirmed askQuestion transaction, checks it is exactly the drafted question (same text, asker, arbitrator, answer window and opening time), and returns the unsigned createMarket transaction. Non-custodial: nothing is signed or sent here.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | Yes | The wallet that will sign and send the transactions (0x...). Balances and positions are read for this address. | |
| end_time | Yes | Unix seconds, from prepare_market_question. | |
| question | Yes | The question text, from prepare_market_question. | |
| draft_token | Yes | From prepare_market_question. Proves this server drafted the market. | |
| metadata_uri | Yes | ||
| resolve_time | Yes | Unix seconds, from prepare_market_question. | |
| question_tx_hash | Yes | Hash of the confirmed askQuestion transaction. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the tool reads a confirmed transaction, verifies exact matchup against the draft, returns an unsigned transaction, and is non-custodial ('nothing is signed or sent here'). It does not cover failure behavior on mismatch, fees, or idempotency, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The workflow step is front-loaded, followed by the prerequisite, verification behavior, return value, and non-custodial note. Every sentence earns its place and no space is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-required-parameter preparation tool with no output schema, the description explains what is returned (an unsigned createMarket transaction) and how verification works. It is nearly complete, though it could note what happens when verification fails or what the caller should do next with the returned transaction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (86%), so the baseline is 3. The description adds meaningful provenance guidance beyond the schema by instructing that `next.arguments` be passed unchanged and that the question tx hash be supplied alongside it. It reinforces the relationship between the draft token and prior tool output without restating every field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Prepare a Bopster market launch') and precisely locates it as step 3 of the creation flow. It distinguishes itself from prepare_market_question by making clear that it only launches drafts that tool built.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Only launches drafts prepare_market_question built' and tells the caller to pass that tool's `next.arguments` unchanged, plus the question tx hash. This gives a clear prerequisite and alternative routing rule with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_market_questionPrepare a Bopster market questionA
Step 2 of creating a Bopster market. The question is built from one of the five Bopster templates (price threshold, event outcome, before a date, price change, compare assets), worded exactly as bopster.fun words it; free-text questions are not accepted. Checks the market against every rule the site, the backend and the factory enforce, pins its metadata to IPFS, and returns the unsigned Reality.eth askQuestion transaction. Non-custodial: nothing is signed or sent here.
| Name | Required | Description | Default |
|---|---|---|---|
| nonce | Yes | The nonce from get_login_message. | |
| title | Yes | Short title shown on the market card, e.g. "BTC above $90K on Oct 12". | |
| wallet | Yes | The wallet that will sign and send the transactions (0x...). Balances and positions are read for this address. | |
| category | Yes | One of Crypto, Tech, Internet, Business, Entertainment, Sports, Culture, Politics, Science, General (others are accepted, but can't be filtered for). | |
| end_time | Yes | When positions close: ISO 8601 with a timezone, on a whole minute, e.g. "2026-10-12T18:00:00Z". 20 minutes to 10 days from now. For a match, the kick-off. | |
| template | Yes | The question, as one of the five Bopster templates. Free-text questions are not accepted. | |
| signature | Yes | The personal_sign signature of the login message. | |
| source_url | Yes | The public page that will settle the answer. | |
| accept_terms | Yes | Creating a market accepts Bopster Fun's Terms and Conditions of Use, the same as on bopster.fun/create. | |
| creator_name | No | Display name for wallets without a Bopster profile. Ignored when the wallet has one: its alias is used. | |
| sports_match | No | Required when category is Sports. For a single match, the sport (end_time is then the kick-off, and the sport sets the resolution delay: football 180 min, knockout 240, basketball 180, ice hockey 210, rugby 180, American football/baseball 240, Formula 1 240); "other" for a sport not listed (set the delay yourself); "not_a_match" for transfers, tournaments and the like. | |
| resolution_delay_minutes | No | How long after close the oracle may answer: long enough for the result to exist. One of 15, 30, 60, 120, 180, 210, 240, 300, 360, 720, 1440, 2880, 4320, 5760, 7200; default 30. The question names close plus this delay as its deadline. Set by the sport for a match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the validation layer (site, backend and factory rules), the IPFS metadata pinning side effect, the exact return artifact, and the absence of signing/broadcast. It stops short of stating failure behaviour, idempotency, or what happens if validation fails, which keeps it at a 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each doing distinct work: sequence, input constraint, processing/validation, output and safety boundary. The step number and the template restriction are front-loaded before the behavioural detail, and no sentence is redundant with the title or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, 9-required tool with no output schema, the description covers the essentials: what it produces (unsigned transaction), what it costs side-effect-wise (IPFS pin, nothing sent), and the hard input constraint. Authentication mechanics are delegated to the schema's wallet/nonce/signature descriptions, which is acceptable, though a sentence on ordering relative to sibling steps would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 12 parameters is already documented, including the template oneOf branches and their per-field constraints. The description adds only the framing that the template must be one of the five named shapes with site-exact wording, which is a modest gloss on what the schema already enforces.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb-plus-resource statement: it names the step (2 of creating a Bopster market), the constrained input space (five templates, no free-text), and the concrete outcome (validation, IPFS pinning, unsigned Reality.eth askQuestion transaction). An agent can distinguish this from prepare_market_launch and register_market because it is the question-preparation step that produces an unsigned tx rather than launching or registering anything.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes clear sequencing ('Step 2 of creating a Bopster market') and an exclusion ('free-text questions are not accepted'), and clarifies the non-custodial boundary ('nothing is signed or sent here'). It does not name the sibling tools that come before or after (get_login_message, prepare_market_launch, register_market), so the agent must infer the workflow edges from the sibling list rather than being routed explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_positionPrepare a Bopster positionA
Build the unsigned transactions to take a YES or NO position on a Bopster market on Base: an exact-amount token approval, then the position. Checks the market is open, is a real Bopster market and that the wallet holds enough. Non-custodial: this server never holds keys or sends anything; the agent's wallet signs and sends the transactions in order.
| Name | Required | Description | Default |
|---|---|---|---|
| side | Yes | Which side to take. | |
| amount | Yes | Stake in whole token units, e.g. "5" for 5 USDC (not base units). | |
| market | Yes | The Bopster market contract address (0x...). | |
| wallet | Yes | The wallet that will sign and send the transactions (0x...). Balances and positions are read for this address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the two-step transaction structure (exact-amount approval then position), the validation checks performed, and the non-custodial model (server never holds keys, never sends; agent's wallet signs and sends in order). It stops short of describing failure modes or what the returned payload looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and the chain, followed by the behavioral guarantees. No filler and nothing repeated from the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation-adjacent prepare tool with no annotations and no output schema, the description covers chain, transaction sequence, validation, and custody model. The main remaining gap is the shape of the return value (ordered list of unsigned transactions?), which an agent must infer from 'signs and sends the transactions in order'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters including the whole-token-units amount and the wallet-vs-market address distinction. The description adds one useful nuance — the approval is for an *exact* amount rather than an unlimited allowance — but provides no further per-parameter semantics. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact ('Build the unsigned transactions') plus the exact resource and scope ('take a YES or NO position on a Bopster market on Base'). This clearly separates it from read-only siblings like get_market, quote_position, and from other prepare_* tools (claim, finalize, market_launch).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear context for use: the agent has already chosen a market and side and needs transactions it will sign. It also states the preconditions the tool validates (market open, real Bopster market, sufficient wallet balance), which implicitly tells the agent it need not pre-check those. It does not, however, mention alternatives such as quote_position for pricing or explain ordering against prepare_claim/prepare_finalize.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_positionQuote a Bopster positionA
Estimate what a YES or NO position of a given size would pay on a Bopster market if its side wins, read from the market contract on Base. Read-only: builds no transaction. Payouts are parimutuel, so the estimate moves with every later position.
| Name | Required | Description | Default |
|---|---|---|---|
| side | Yes | Which side to take. | |
| amount | Yes | Stake in whole token units, e.g. "5" for 5 USDC (not base units). | |
| market | Yes | The Bopster market contract address (0x...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a solid job: it declares read-only behavior, explicitly states no transaction is built, and warns that parimutuel payouts shift with every later position so the estimate is not a fixed quote. It omits any note on auth/network prerequisites and does not say what the returned estimate looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: what it does first, then the read-only clarification, then the volatility caveat. Nothing is repeated and no sentence could be dropped without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations and no output schema, so the description must cover the behavioral profile — and it does, covering read-only status and the moving-estimate caveat. The only gap is the shape of the returned estimate, which an agent must discover by calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so side/amount/market are already documented with enum and format details. The description only restates that size and side feed the estimate, adding no format or edge-case guidance beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ("Estimate") and a precise resource ("what a YES or NO position of a given size would pay on a Bopster market if its side wins"), and identifies the chain (Base). The phrase "builds no transaction" separates it from the prepare_* siblings without requiring a schema look.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is clear — this is a pre-trade estimate, and the note that it builds no transaction tells the agent it is not the execution path. It stops short of naming prepare_position as the tool to call when the user actually wants to place the stake, leaving the alternative to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_marketRegister a new Bopster marketA
Step 4 of creating a Bopster market. Reads the confirmed createMarket transaction, returns the new market and its link, and tells the Bopster backend so it shows up on the site right away. The backend re-reads the market from the chain itself, and its indexer would find it anyway; this only saves the wait.
| Name | Required | Description | Default |
|---|---|---|---|
| tx_hash | Yes | Hash of the confirmed createMarket transaction. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the backend notification side effect, that the backend re-reads state from the chain, and that the operation is non-critical because the indexer would eventually catch up. Missing are failure modes (e.g., unknown or unconfirmed tx_hash) and any idempotency statement about re-registering the same market.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the workflow position, then the effect, then the caveat. The final sentence is justification rather than instruction but still earns its place by telling the agent the call is optional and safe to skip.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description correctly names the return ('the new market and its link'). For a single-parameter, side-effecting registration tool with no annotations, the important behavioral facts are covered; only error handling and repeat-call semantics are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents the expected hash format via pattern and description. The description adds only that the transaction must be confirmed, which is marginal beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs and resources: reads the confirmed createMarket transaction, returns the new market and its link, and notifies the Bopster backend. The 'Step 4 of creating a Bopster market' framing positions it in the workflow. It does not explicitly contrast with the sibling sync_market, which is the main residual ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Step 4 of creating a Bopster market' clearly places it after the createMarket transaction is confirmed. The closing sentence signals it is an optional optimization ('its indexer would find it anyway; this only saves the wait'), which is real when-to-use guidance. It stops short of naming an alternative tool or an explicit when-not condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_marketSync a Bopster marketA
Ask the Bopster backend to re-read a market from the chain after a transaction confirms, so the site and the other tools show it right away instead of after the next indexer pass. Changes nothing on-chain and moves no funds; the chain stays the source of truth either way.
| Name | Required | Description | Default |
|---|---|---|---|
| market | Yes | The Bopster market contract address (0x...). | |
| wallet | No | The wallet that sent it, if any (0x...). | |
| tx_hash | Yes | Hash of the confirmed transaction. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does real work: it discloses that the call changes nothing on-chain, moves no funds, and that the chain remains the source of truth. It also explains the observable effect (site and other tools update immediately). It stops short of stating failure behavior when tx_hash is unconfirmed or invalid, or whether the call is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and the reason, then the safety clarification. Every clause carries information; nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter, no-output, unannotated tool, the description covers purpose, trigger timing and side-effect safety. It omits what the tool returns or does on failure, which is a modest gap since there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so market, wallet and tx_hash are already documented with types and patterns; baseline 3 applies. The description reinforces that tx_hash is a confirmed transaction and that the tool acts on that market, but adds no format or edge-case semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Ask the Bopster backend to re-read a market from the chain') plus the exact triggering condition ('after a transaction confirms'). It is clearly a refresh trigger rather than a read, which separates it from get_market/list_markets in spirit, but it never names those siblings, so a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the precise moment to call it: after a transaction confirms, instead of waiting for the next indexer pass. That is clear usage context, but there are no explicit exclusions (e.g. do not call before confirmation, do not call if the tx reverted) and no sibling tool is named as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
17 tool updates
v0.1.0- First observed
get_creator_profile - First observed
get_fees - First observed
get_leaderboard - First observed
get_login_message - First observed
get_market - First observed
get_portfolio - First observed
get_user_profile - First observed
list_markets - First observed
ping_health - First observed
prepare_claim - First observed
prepare_finalize - First observed
prepare_market_launch - First observed
prepare_market_question - First observed
prepare_position - First observed
quote_position - First observed
register_market - First observed
sync_market
TDQS
Scored across 17 tools
Most tools have clearly distinct purposes, but a few boundaries require reading descriptions: get_user_profile vs get_creator_profile overlap as public profile lookups, and prepare_claim vs prepare_finalize both touch settlement. sync_market and register_market also overlap in refreshing backend state, though the step-wise creation tools are otherwise well separated.
All tool names use snake_case with a consistent verb_noun pattern, such as get_market, list_markets, prepare_position, and prepare_market_launch. Prefixes like get_, prepare_, and list_ are applied predictably across the set.
Seventeen tools is slightly above the ideal compact range, but each maps to a distinct part of the prediction-market lifecycle or a distinct read operation. There is little obvious redundancy, though the surface is heavier than a minimal server would need.
The set covers discovery, market detail, quoting, position preparation, claim/finalize flows, the multi-step market creation pipeline, profiles, leaderboard, portfolio, fees, and health checks. Minor gaps remain around generic transaction-status inspection and possible market edge-case operations, but core workflows are well covered.
Maintenance
Related MCP Connectors
AI-agent token launchpad on Base: quotes, tokens and unsigned launch/buy/sell/claim/vote txs.
Read-only on-chain intelligence for AI agents on Base: balances, tokens, gas, tx status.
Read-only on-chain intelligence for AI agents on Base: balances, tokens, gas, tx status.
Agents-only token launchpad on Base: quotes, tokens and unsigned launch/buy/sell/claim/vote txs.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI agents to discover and analyze prediction markets, execute trades, and manage positions on Polymarket via the Model Context Protocol.718 npm20MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with Polymarket prediction markets, including retrieving market data, user positions, and trading history.85 npm12Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to trade on Limitless prediction markets on Base via MCP, with tools for wallet management, market discovery, order placement, and portfolio tracking.PolyForm Noncommercial 1.0.0
- AlicenseBqualityDmaintenanceEnables AI agents to trade Solana prediction markets, including market creation, betting, claims, and affiliate management, all without exposing private keys.7674 npm1MIT