Skip to main content
Glama
lopeselio

terrace

by lopeselio

terrace-mcp

Terrace for Claude, and for any other MCP client. Your Claude turns a football take into a 1v1 bet and gives you a link. Your mate's Claude reads the link and accepts. Chainlink CRE settles it from official match data, or its AI judge does for takes no data rule fits, and the winner collects. It runs on Terrace's live contracts on Monad testnet, with free test dollars.

you    > bet my mate $5 that Haaland scores before the hour tonight
claude > Rule: settles YES if Haaland scores between minutes 0 and 60. $5 each, winner takes $10. Go?
you    > yes
claude > Challenge #15 is live: play.terrace.social/c/15. Send your friend this: …

mate   > accept play.terrace.social/c/15
claude > You're on: you back NO with $5. Winner takes $10 once Chainlink settles it.

Install

Claude Code

claude mcp add terrace -- npx -y terrace-mcp

Claude Desktop: add this to claude_desktop_config.json (Settings → Developer → Edit Config), then restart:

{
  "mcpServers": {
    "terrace": { "command": "npx", "args": ["-y", "terrace-mcp"] }
  }
}

Cursor: the same block in ~/.cursor/mcp.json. Any other MCP client: run npx -y terrace-mcp over stdio.

Node 20.10 or newer. Nothing else to set up: the first bet creates the account and funds it with test dollars.

From source instead of npm:

git clone https://github.com/lopeselio/terrace-mcp && cd terrace-mcp
npm install && npm run build

then point your client at "command": "node", "args": ["/full/path/to/terrace-mcp/dist/index.js"].

Related MCP server: Baozi MCP Server

Try it: two Claudes on one machine

Each player is a key in its own folder (TERRACE_HOME), so two folders make two players.

  1. You, in Claude Code: claude mcp add terrace -- npx -y terrace-mcp

  2. Your mate, in Claude Desktop (or a second client), with their own folder and name:

    {
      "mcpServers": {
        "terrace": {
          "command": "npx",
          "args": ["-y", "terrace-mcp"],
          "env": { "TERRACE_HOME": "/Users/you/.terrace-mate", "TERRACE_AGENT_NAME": "Mate's Claude" }
        }
      }
    }
  3. Ask the first Claude: "What's on today? Bet my mate $5 that [player] scores in the first half of [match]." It shows the rule it settles by and asks before staking, then gives you a play.terrace.social/c/<n> link.

  4. Give the second Claude the link: "Accept this: play.terrace.social/c/."

  5. Open the link in a browser to watch the 1v1 on Terrace. After full time, ask either Claude to collect.

With a friend instead: send them the link and the install line above.

Tools

Tool

What it does

terrace_matches

Upcoming and live matches, with ids

terrace_preview_take

The rule a take settles by, before any money moves

terrace_challenge

Post a take and challenge a friend 1v1 (or challenge on an existing take market). Returns the link and a message to send

terrace_challenge_details

Read a challenge from its link: take, rule, sides, stake, status

terrace_accept_challenge

Take the other side by matching the stake

terrace_call_off

Call off a challenge nobody has accepted

terrace_open_takes / terrace_back

Back or fade the fans' open take markets

terrace_my_bets

Your challenges and bets, and what's ready to collect

terrace_collect

Pay out settled 1v1s and bets, and refund challenges nobody took

terrace_account

Address, balances, per-bet cap

Account and limits

  • On first run, a key is created at ~/.terrace/key (mode 600). That key is this Claude's Terrace account. To use your own key, set TERRACE_PRIVATE_KEY.

  • On its first bet, Terrace tops the account up with gas and $100 in test dollars, and it tops up again when the account runs low. The money is test money on Monad testnet, with no real value.

  • Before its first move, the account registers as an AI player (named by TERRACE_AGENT_NAME, default "Claude"), so Terrace shows it with an AI badge and keeps it out of the human fan counts and points.

  • TERRACE_MAX_STAKE caps every bet (default $25). Approvals are always for the exact stake, never unlimited.

  • Stakes sit in escrow in the matchups contract (0xd411…0E4B) until it pays the winner. Nobody holds the money: not Terrace, and not either player.

  • Betting closes at kickoff, or two minutes after posting for an in-play take with no time window. Send the link early. A challenge nobody takes is refunded by terrace_collect once betting closes.

Other settings: TERRACE_URL (default https://play.terrace.social), MONAD_RPC_URL, and TERRACE_HOME (where the key lives).

Contracts it touches (Monad testnet, chain 10143)

Contract

Address

Used for

Test dollars (tUSD)

0xA20a…E2Fe

Stakes, exact-amount approvals

Matchups

0xd411…0E4B

1v1 escrow and payout

Markets

0xCa6a…8773

Take markets (the rule each 1v1 settles by)

Chat

0x7C79…08E7

Posting the take in the match room

Reputation

0x7d53…F0B3

Registering this account as an AI player

Reads go through Terrace's API (play.terrace.social/api), which compiles takes into rules and serves the match list and the index of bets.

Test

From a clone, after npm run build: node test/client.mjs lists the tools. node test/client.mjs <tool> '<json args>' calls one tool the way Claude would. Set a different TERRACE_HOME to play as a second person.

About

Part of Terrace, a social prediction game for football: fans post takes, back or fade them, and challenge mates, settled by Chainlink CRE on Monad. MIT licensed.

Available Tools

11 tools
terrace_accept_challengeAccept a 1v1 challengeA

Take the other side of a Terrace 1v1 challenge by matching its stake (test dollars). Show the user the take, sides and stake (terrace_challenge_details) and get a yes first.

NameRequiredDescriptionDefault
challengeYesA play.terrace.social/c/<n> link, or the challenge number

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare openWorldHint and destructiveHint=false, so the description carries most of the weight, and it delivers the key fact that this commits the user's stake (test dollars) and acts as counterparty. The required human confirmation step is a genuine behavioral constraint not captured by annotations. It stops short of covering irreversibility or what happens if the challenge was already taken.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the action is front-loaded, followed by the required pre-step. No filler or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter state-changing call with no output schema, the description covers the input flow and the confirmation requirement but says nothing about the resulting state after acceptance (escrow, match creation, returned identifiers) or failure conditions. Adequate, with a clear gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single 'challenge' parameter, which already documents that it accepts a play.terrace.social/c/<n> link or a challenge number. The description adds nothing about the parameter itself, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete action ("Take the other side of a Terrace 1v1 challenge") and the mechanism (matching the stake), so the agent knows exactly what the call does. It does not explicitly distinguish itself from nearby siblings like terrace_back or terrace_challenge, which keeps it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear procedural precondition: call terrace_challenge_details first, show the user the take/sides/stake, and obtain confirmation before invoking. That is strong 'when to use' guidance, but there is no statement of when *not* to use it or which sibling handles the alternative case (e.g., backing vs. accepting).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terrace_accountTerrace accountA
Read-only

This Claude's Terrace account on Monad testnet: address, test-dollar and gas balances, and the per-bet cap.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint already declares the safety profile; the description adds that results are scoped to Monad testnet and lists what data comes back (balances, cap), which is real behavioral context. It stops short of stating whether balances are freshly fetched or cached, or the units/format of the balances.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It leads with what the tool is and immediately enumerates what it returns; every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must cover return values, and it does list the fields. Minor gaps remain: units/format for balances and whether the per-bet cap is a limit or a current setting are not stated, though the omission is small for such a simple read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so the baseline is 4. The description correctly requires no input and instead uses its space to describe the output contents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource precisely (this agent's Terrace account) and enumerates the fields returned: address, test-dollar and gas balances, per-bet cap. That distinguishes it from sibling tools like terrace_my_bets or terrace_matches, though there's no explicit verb ("returns" / "fetches") marking it as a read.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies usage — fetch it to learn the address, balances or per-bet cap — but there is no explicit statement of when to call it versus alternatives, nor any prerequisite or trigger condition. For a zero-parameter info tool this is largely self-evident, hence 3 rather than lower.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terrace_backBack or fade a take marketA

Put test dollars on yes (back) or no (fade) in an open take market from terrace_open_takes. Pari-mutuel: winners split the pool.

NameRequiredDescriptionDefault
sideYes
stakeYes
marketYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare openWorldHint=true and destructiveHint=false, so the safety profile is partly covered. The description adds meaningful context beyond that: the currency is test dollars and the payout is pari-mutuel ('winners split the pool'), which clarifies financial behavior. However, it omits whether the stake is deducted immediately, whether the bet can be cancelled (terrace_call_off exists as a sibling), and what the agent receives back.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the action, market source, and payout rule front-loaded. Every clause adds information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a mutation-style tool with no output schema and three required params, the description covers purpose, side semantics, and payout economics, but leaves open the commit/irreversibility question and the relationship to terrace_preview_take and terrace_call_off. It is minimally sufficient to call correctly but not fully complete for a wager-placing operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It fully explains the 'side' enum (yes=back, no=fade) and points to terrace_open_takes as the source of the 'market' identifier, but 'stake' is only implied ('put test dollars on') with no unit, minimum, or format guidance to compensate for the exclusiveMinimum constraint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (put test dollars on yes/back or no/fade) against a specific resource (an open take market), which is far more concrete than the title alone. It ties the market to the sibling terrace_open_takes, but does not distinguish itself from terrace_preview_take, which is the closest alternative for this operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implicitly tells the agent where markets come from ('from terrace_open_takes') and what the side values mean, but gives no explicit when-to-use/when-not guidance and never references terrace_preview_take as a pre-commit check. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terrace_call_offCall off a challengeA
Destructive

Call off a 1v1 challenge nobody has accepted yet; your stake comes back.

NameRequiredDescriptionDefault
challengeYesA play.terrace.social/c/<n> link, or the challenge number

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond the annotations: the stake is returned, and the operation only applies to unaccepted challenges. That refund outcome is the most decision-relevant fact for an agent. It doesn't say what happens on an accepted challenge (error vs. no-op) or whether the action 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence that front-loads the action and the gating condition, with the refund outcome appended. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation with no output schema, the description covers action, precondition, and side effect (stake returned), which is nearly everything needed. Edge-case behavior (already-accepted challenge, repeat calls) is the only meaningful omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 accepted formats (play.terrace.social/c/<n> link or challenge number). The description adds nothing about the parameter, which is acceptable at this coverage level.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('call off') plus specific resource ('a 1v1 challenge nobody has accepted yet'), which cleanly separates it from siblings like terrace_accept_challenge and terrace_challenge. An agent can pick this without reading any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The precondition 'nobody has accepted yet' tells the agent when this tool is valid, which is the key gating condition. It doesn't name a sibling alternative or say what to do if the challenge has already been accepted, so it stops short of explicit when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terrace_challengeChallenge someone to a 1v1 on a takeA

Bet a friend 1v1 on a football take. Posts the take in the match room, lists it as a market, and puts your stake in escrow on Terrace's matchups contract. Returns a link: whoever accepts it (their Claude can use terrace_accept_challenge) matches your stake and takes the other side; the winner gets both stakes when Chainlink settles it. Test dollars only, at most $25 a bet. Confirm the rule (terrace_preview_take) and the stake with the user first. Pass take and match for a new take, or market to challenge on an existing take market.

NameRequiredDescriptionDefault
sideNoyes = you say the take happens; no = you say it won'tyes
takeNoThe take in plain words
matchNoMatch id from terrace_matches (with take)
stakeYesYour stake in test dollars; the taker matches it
marketNoAn existing take market to challenge on, instead of take + match
opponentNoOnly this address may accept. Leave out for anyone with the link

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover openWorldHint and destructiveHint, so the description must carry the rest — and it does: funds go into escrow on a named contract, the taker matches the stake, Chainlink settles, the return value is a shareable link, and there is a hard $25 test-dollar cap. These are exactly the side effects and limits an agent needs before committing a stake.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its consequences, then the return value, then the safety constraints, then the parameter mode switch — a sensible order. It is dense but long-ish; a couple of clauses (e.g. restating the Chainlink settlement) could be trimmed without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter, fund-moving, open-world tool with no output schema, the description supplies the contract/escrow model, the $25 ceiling, the confirmation prerequisite, the mode selection rule, and what the return value is. Nothing material an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds value the schema cannot: it explains the mutual exclusivity of the two modes (take+match vs market), which is otherwise only implicit in the property descriptions. It does not elaborate on the side/opponent semantics beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Bet a friend 1v1 on a football take') and immediately enumerates the concrete effects: posts the take, lists a market, escrows the stake. It also names the sibling that consumes its output (terrace_accept_challenge), so the agent can place it in the workflow without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit sequencing ('Confirm the rule (terrace_preview_take) and the stake with the user first') and an explicit branching rule: 'Pass take and match for a new take, or market to challenge on an existing take market.' It also names the accepting counterpart tool, so when-to-use and what-happens-next are both unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terrace_challenge_detailsLook at a 1v1 challengeA
Read-only

Show a Terrace 1v1 challenge from its link or number: the take, the rule, who's on which side, the stake and its status. Use before accepting.

NameRequiredDescriptionDefault
challengeYesA play.terrace.social/c/<n> link, or the challenge number

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe read, and the description adds the useful detail that it resolves a challenge from either a URL or a number. Beyond that it says nothing about behavior on an invalid/expired challenge id, permission requirements, or whether the stake/status are live values — modest added value over the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence describing the payload followed by a two-word usage cue; no filler and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with no output schema, the description's enumeration of returned fields (take, rule, sides, stake, status) effectively substitutes for the missing return documentation, and the annotation covers the safety profile. Nothing an agent needs in order to call it is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema coverage is 100%, with the schema already explaining 'A play.terrace.social/c/<n> link, or the challenge number.' The description restates the same link-or-number duality without adding format examples or edge-case handling, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Show a Terrace 1v1 challenge') and enumerates what comes back (take, rule, sides, stake, status), so the agent knows exactly what this retrieves. It also distinguishes itself by the identifier-based lookup ('from its link or number'), though it never names the sibling browsing tools (terrace_open_takes, terrace_challenge) it differs from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use before accepting' gives a concrete usage trigger that implicitly positions it against terrace_accept_challenge. There are no explicit exclusions or named alternatives for browsing/listing cases, so it stops short of a full routing statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terrace_collectCollect winningsA
Idempotent

Pay out everything this account can collect: settled 1v1s, finished market bets, and refunds for challenges nobody took before betting closed.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (idempotent, non-destructive), so the description's job is to add semantics — which it does by naming the three payout buckets that get swept. It stops short of stating what happens when nothing is collectible or what the response contains, but the added scope detail is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the action front-loaded and the three payout categories listed compactly. No filler, no redundancy with title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-param, no-output-schema tool, the definition tells the agent what will be collected, which is the key decision input. Missing only the return shape (e.g., total amount credited) or no-op behavior, which are minor given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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; baseline for a no-param tool applies. The description correctly implies a full sweep of all eligible funds rather than any targeted selection.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('pay out') plus the exact resources swept: settled 1v1s, finished market bets, and refunds for untaken challenges. This enumerates the payout categories precisely enough that an agent can distinguish it from siblings like terrace_my_bets or terrace_account without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The enumeration of what can be collected makes the triggering condition clear: call this when the user wants to realize winnings or reclaim stakes. No explicit 'when not to use' or sibling callout is given, but the sibling set has little overlap, so the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terrace_matchesFootball matches on TerraceA
Read-only

Upcoming and live football matches you can bet on, with their match ids.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint=true annotation is consistent with the description's read-only framing, and the description adds that results include match ids and cover both upcoming and live fixtures. It says nothing about ordering, freshness, pagination, or result size, which matters for a list tool with no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with no filler, front-loading the resource and scope. Nothing redundant and nothing wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, no output schema, and readOnlyHint already covering safety, the description covers the essentials and even names the key returned field (match ids). It falls short of 5 only because return shape details like volume or ordering are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain; the baseline for a parameterless tool applies. The description correctly implies the tool returns an unfiltered set of matches.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (football matches), scopes it (upcoming and live), and states what comes back (match ids). The verb is implicit ('list'), but an agent can still distinguish this from siblings like terrace_my_bets or terrace_open_takes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'you can bet on' implies the tool is a discovery step before terrace_back, but there is no explicit when-to-use, when-not, or named alternative. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terrace_my_betsMy Terrace betsA
Read-only

This account's 1v1 challenges and market bets, and which can be collected.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds that results cover two categories and indicate collectibility, but it does not clarify whether resolved/historical bets are included, whether results are paginated, or how 'this account' is determined.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single front-loaded sentence with no obvious filler. The grammar is slightly awkward ('and which can be collected'), but it remains compact and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-argument read tool with no output schema, the description should carry more of the return-value burden. It states the high-level categories and the collectible flag but does not describe the shape of the results or whether open, settled, or historical bets are included.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, and the schema is empty, so there is no parameter semantics burden. The baseline for a no-parameter tool is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific resource: this account's 1v1 challenges and market bets, plus which are collectible. The retrieval verb is only implied, but the scope is clear enough to distinguish it from general sibling tools like terrace_challenge_details and terrace_open_takes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied as a read of the current account's bets, and the phrase 'which can be collected' hints at a follow-up collection action. However, it never explicitly names terrace_collect as the next tool or states when to use this versus terrace_account or terrace_challenge_details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terrace_open_takesOpen takesA
Read-only

The hottest open take markets fans have posted, with their pools, so you can back or fade one.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe read. The description adds useful context that results are curated to the 'hottest' open markets and include pool data, but it says nothing about ordering, recency, volume, or result limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. The purpose and the downstream action are both stated in under fifteen words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-argument, read-only discovery tool with no output schema, the description covers what is returned and why. A small gap remains around how 'hottest' is ranked and whether results are paginated or capped.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain; the baseline for a 0-param tool applies. The description correctly conveys that the agent needs no arguments to fetch the list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (open take markets fans have posted) and what comes with it (their pools), so an agent understands this is a discovery/list tool. It doesn't explicitly use a verb like 'list' and only implicitly distinguishes itself from siblings such as terrace_matches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'so you can back or fade one' implies the downstream purpose and hints at the back/fade siblings, but there is no explicit when-to-use rule or statement of how this differs from terrace_matches or terrace_preview_take. Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terrace_preview_takePreview a takeA
Read-only

Turn a football take into the rule Terrace will settle it by, without betting. Claude compiles the take into a checkable rule that Chainlink CRE verifies from match data; takes no data rule fits go to an AI judge after full time.

NameRequiredDescriptionDefault
takeYesThe take in plain words, e.g. "Haaland scores before the hour"
matchYesMatch id from terrace_matches

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true is consistent with 'without betting', and the description goes beyond it by explaining the downstream mechanics: compilation into a verifiable rule, Chainlink CRE checking match data, and an AI-judge fallback for takes no data rule fits. It does not say whether the preview is persisted or costs anything, so not 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, the read-only/no-bet constraint front-loaded, and the second sentence doing real work by explaining how the rule gets settled. No filler or repetition of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should say what a preview returns — the compiled rule text, whether it is machine-checkable, or a rejection reason — because that is the entire value of a preview call. It covers the settlement path but not the response shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters (take, match) are already documented in the schema, including the plain-words example and the terrace_matches reference. The description adds no format or constraint detail beyond that, which is the baseline case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: turn a take into a settlement rule and preview it, with 'without betting' distinguishing it from the mutating siblings like terrace_challenge. The Chainlink CRE / AI-judge sentences clarify what the produced rule actually is, so an agent can tell this apart from challenge-creation tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Without betting' implies this is the pre-flight check before terrace_challenge, but no sibling is named and no explicit when/when-not is given. The usage is inferable rather than stated, which is the definition of implied guidance.

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.

  1. 11 tool updatesv0.1.1
    • First observedterrace_accept_challenge
    • First observedterrace_account
    • First observedterrace_back
    • First observedterrace_call_off
    • First observedterrace_challenge
    • First observedterrace_challenge_details
    • First observedterrace_collect
    • First observedterrace_matches
    • First observedterrace_my_bets
    • First observedterrace_open_takes
    • First observedterrace_preview_take

TDQS

A4/5.0

Scored across 11 tools

Disambiguation5/5

Each tool targets a distinct action or resource: account info, match discovery, rule preview, challenge details, own bets, open markets, create/accept/cancel challenge, back/fade, and collect. The challenge-related tools are clearly separable by lifecycle stage.

Naming Consistency4/5

All names use the terrace_ prefix and snake_case, which is highly predictable. There is a minor mix of noun-phrase getters (terrace_account, terrace_matches, terrace_my_bets) and verb-phrase actions (terrace_back, terrace_collect), but readability remains high.

Tool Count5/5

Eleven tools is well within the appropriate range and each one supports a distinct part of the betting workflow. No tool appears redundant or purely ornamental.

Completeness5/5

The surface covers account inspection, match discovery, rule preview, 1v1 challenge creation/acceptance/cancellation/details, market backing/fading, and payout collection. Together these cover the full described lifecycle for test-dollar football betting.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    A pay-per-pick World Cup edge API on Injective EVM where the x402 USDC receipt IS the pre-kickoff timestamp, plus a free public ledger that CLV-scores every settled pick — losses included.
    MIT