Five tasks, done twice
Each task was executed once through a live endpoint published by an agent registered in the ERC-8004 Identity Registry on BNB Smart Chain, and once by hand through public APIs and a plain EVM RPC. Every request below was really sent. Every response is attached in full.
Two of the five do not go the agent's way, and one is a flat failure to answer the question at all. Those are written up at the same length as the wins, because a report where the agent wins five times out of five tells you only that its author picked the tasks carefully.
- Run of record:
- 2026-09-07 05:51 UTC
- Samples per leg:
- 3
- Runner:
- Node v26.5.0, darwin/arm64
Tasks, run both ways
5
Agent machine time, total
5.57 s
Manual machine time, total
12.14 s
Hand-stamped manual time
137 s
What the track asked for
Minimum 3 real tasks executed both ways
5 tasks, each run through a live agent endpoint and again by hand
Document time, cost and output quality per task
Median of three timed samples per leg, the price each side actually charged, and a verdict tied to a named measurement
Attach actual outputs for comparison
10 raw responses attached in full below and committed under docs/agent-advantage/outputs
At least one task from trading, stocks or security
Three trading tasks and two security tasks, including an independent audit of an onchain commit-reveal claim
Results at a glance
Machine time is the median of 3 samples per leg. The last column is the one that matters: speed is rarely the interesting difference between the two routes.
| Task | Category | Agent | Manual | Machine time | Who answered the question |
|---|---|---|---|---|---|
| Pre-match 1X2 odds across the top five European leagues | Trading | 1470.5 ms | 1266.4 ms | no measurable difference | Agent wins |
| Win rate and risk metrics for a live trading agent | Trading | 820.4 ms | 1644.3 ms | agent 2.00x faster | Neither answered |
| Verify the ERC-20 contract behind a spend approval | Security | 497.5 ms | 1549.0 ms | agent 3.11x faster | Agent wins |
| Best route to bridge 100 USDC from BNB Chain to Base | Trading | 1546.3 ms | 1536.7 ms | no measurable difference | Too close to call |
| Independently audit a trading agent's onchain commit-reveal claim | Security | 1232.3 ms | 6142.3 ms | agent 4.98x faster | Manual wins |
Totals come to 5.57 s of agent time against 12.14 s of manual time, a 2.18x ratio. That is quoted because it is what was measured, and qualified immediately: the manual leg of task 1 produced no answer at all, so the two totals are not measuring equal work.
Pre-match 1X2 odds across the top five European leagues
List upcoming football fixtures in the top European leagues with 1X2 prices from more than one bookmaker.
OpenOdds.Ai · token 49637
MCP (Streamable HTTP) · ERC-8004 identity on BNB Smart Chain
POST https://api.openodds.ai/mcp
tools/call list_supported_leagues {} ; tools/call get_upcoming_matches { limit: 100 }samples 3160.0 / 1470.5 / 1213.4
samples 3527.8 / 1266.4 / 1241.1
Requests issued
- 200MCP list_supported_leagues - 5 leagues
- 200MCP get_upcoming_matches limit=100 - 53 rows
What came back
- Leagues
- Bundesliga, EPL, LaLiga, Ligue1, SerieA
- Rows returned
- 53
- Rows with two bookmakers
- 53
- Rows actually in the future
- 4
- Status counts
- {"finished":30,"upcoming":23}
- Date range
- {"from":"2026-09-01","to":"2026-09-08"}
No payment required. The endpoint is unauthenticated and free at the point of use.
Raw response, attachedoutputs/odds-snapshot.agent.json
{
"leagues": {
"total": 5,
"leagues": [
{
"league": "Bundesliga",
"configured": true,
"live_matches_30d": 18,
"predictions_total": 53
},
{
"league": "EPL",
"configured": true,
"live_matches_30d": 30,
"predictions_total": 46
},
{
"league": "LaLiga",
"configured": true,
"live_matches_30d": 40,
"predictions_total": 49
},
{
"league": "Ligue1",
"configured": true,
"live_matches_30d": 28,
"predictions_total": 1
},
{
"league": "SerieA",
"configured": true,
"live_matches_30d": 30,
"predictions_total": 60
}
]
},
"matches": {
"total": 53,
"matches": [
{
"match_id": 2993771,
"league": "SerieA",
"round": 2,
"match_date": "2026-09-01T00:30:00+00:00",
"home_team": "Lecce",
"away_team": "Roma",
"b365_odds": {
"home": 7.5,
"draw": 4.33,
"away": 1.44
},
"wh_odds": {
"home": 7,
"draw": 4,
"away": 1.44
},
"lb_odds": {
"home": 6.5,
"draw": 4.2,
"away": 1.5
},
"match_status": "finished"
},
{
"match_id": 3013667,
"league": "LaLiga",
"round": 3,
"match_date": "2026-09-01T01:30:00+00:00",
"home_team": "Osasuna",
"away_team": "Getafe",
"b365_odds": {
"home": 2.1,
"draw": 2.9,
"away": 4.2
},
"wh_odds": {
"home": 2.15,
"draw": 2.8,
"away": 4
},
"lb_odds": {
"home": 2.15,
"draw": 2.87,
"away": 4
},
"match_status": "finished"
},
{
"match_id": 2993766,
"league": "SerieA",
"round": 2,
"match_date": "2026-09-01T02:45:00+00:00",
"home_team": "Atalanta",
"away_team": "Bologna",
"b365_odds": {
"home": 1.9,
"draw": 3.5,
"away": 4.1
},
"wh_odds": {
"home": 1.85,
"draw": 3.4,
"away": 4
},
"lb_odds": {
"home": 1.85,
"draw": 3.6,
"away": 4
},
"match_status": "finished"
},
{
"match_id": 3003860,
"league": "EPL",
"round": 2,
"match_date": "2026-09-01T03:00:00+00:00",
"home_team": "Aston Villa",
"away_team": "Arsenal",
"b365_odds": {
"home": 6.5,
"draw": 4.33,
"away": 1.48
},
"wh_odds": {
"home": 6.5,
"draw": 4.33,
"away": 1.44
},
"lb_odds": {
"home": 6,
"draw": 4.2,
"away": 1.48
},
"match_status": "finished"
},
{
"match_id": 3013665,
"league": "LaLiga",
"round": 3,
"match_date": "2026-09-01T03:30:00+00:00",
"home_team": "Barcelona",
"away_team": "Vallecano",
"b365_odds": {
"home": 1.1,
"draw": 10,
"away": 19
},
"wh_odds": {
"home": 1.11,
"draw": 10,
"away": 19
},
"lb_odds": {
"home": 1.12,
"draw": 10,
"away": 15
},
"match_status": "finished"
},
{
"match_id": 2995333,
"league": "Ligue1",
"round": 3,
"match_date": "2026-09-04T02:45:00+00:00",
"home_team": "Toulouse",
"away_team": "Lille",
"b365_odds": {
"home": 3.6,
"draw": 3.5,
"away": 2.05
},
"wh_odds": {
"home": 3.6,
"draw": 3.3,
"away": 2
},
"lb_odds": {
"home": 3.5,
"draw": 3.4,
"away": 2.05
},
"match_status": "finished"
},
{
"match_id": 2995329,
"league": "Ligue1",
"round": 3,
"match_date": "2026-09-05T01:00:00+00:00",
"home_team": "Lyon",
"away_team": "Auxerre",
"b365_odds": {
"home": 1.38,
"draw": 5,
"away": 7.5
},
"wh_odds": {
"home": 1.36,
"draw": 4.6,
"away": 7
},
"lb_odds": {
"home": 1.4,
"draw": 5,
"away": 7
},
"match_status": "finished"
},
{
"match_id": 3018802,
"league": "Bundesliga",
"round": 2,
"match_date": "2026-09-05T02:30:00+00:00",
"home_team": "Stuttgart",
"away_team": "FC Koln",
"b365_odds": {
"home": 1.44,
"draw": 5.25,
"away": 6.25
},
"wh_odds": {
"home": 1.44,
"draw": 4.8,
"away": 5.8
},
"lb_odds": {
"home": 1.44,
"draw": 5.25,
"away": 5.5
},
"match_status": "finished"
},
{
"match_id": 2993780,
"league": "SerieA",
"round": 3,
"match_date": "2026-09-05T02:45:00+00:00",
"home_team": "Genoa",
"away_team": "Como",
"b365_odds": {
"home": 5.75,
"draw": 3.5,
"away": 1.67
},
"wh_odds": {
"home": 5,
"draw": 3.6,
"away": 1.67
},
"lb_odds": {
"home": 5,
"draw": 3.6,
"away": 1.7
},
"match_status": "finished"
},
{
"match_id": 3003875,
"league": "EPL",
"round": 3,
"match_date": "2026-09-05T03:00:00+00:00",
"home_team": "Ipswich",
"away_team": "Liverpool",
"b365_odds": {
"home": 4.75,
"draw": 4.33,
"away": 1.62
},
"wh_odds": {
"home": 4.8,
"draw": 4,
"away": 1.62
},
"lb_odds": {
"home": 4.33,
"draw": 4,
"away": 1.61
},
"match_status": "finished"
},
{
"match_id": 3013674,
"league": "LaLiga",
"round": 4,
"match_date": "2026-09-05T03:00:00+00:00",
"home_team": "Betis",
"away_team": "Real Madrid",
"b365_odds": {
"home": 8,
"draw": 5,
"away": 1.36
},
"wh_odds": {
"home": 6.5,
"draw": 5,
"away": 1.4
},
"lb_odds": {
"home": 6.5,
"draw": 5.25,
"away": 1.4
},
"match_status": "upcoming"
},
{
"match_id": 2995332,
"league": "Ligue1",
"round": 3,
"match_date": "2026-09-05T03:05:00+00:00",
"home_team": "Paris SG",
"away_team": "Monaco",
"b365_odds": {
"home": 1.3,
"draw": 5.75,
"away": 8
},
"wh_odds": {
"home": 1.3,
"draw": 5,
"away": 7.5
},
"lb_odds": {
"home": 1.33,
"draw": 5.75,
"away": 7
},
"match_status": "finished"
},
{
"match_id": 3003877,
"league": "EPL",
"round": 3,
"match_date": "2026-09-05T19:30:00+00:00",
"home_team": "Newcastle",
"away_team": "Bournemouth",
"b365_odds": {
"home": 2.15,
"draw": 3.5,
"away": 3.25
},
"wh_odds": {
"home": 2.1,
"draw": 3.4,
"away": 3.3
},
"lb_odds": {
"home": 2.05,
"draw": 3.5,
"away": 3.1
},
"match_status": "finished"
},
{
"match_id": 2993778,
"league": "SerieA",
"round": 3,
"match_date": "2026-09-05T21:00:00+00:00",
"home_team": "Fiorentina",
"away_team": "Torino",
"b365_odds": {
"home": 2.1,
"draw": 3.2,
"away": 3.75
},
"wh_odds": {
"home": 2.05,
"draw": 3.3,
"away": 3.4
},
"lb_odds": {
"home": 2.1,
"draw": 3.3,
"away": 3.6
},
"match_status": "finished"
},
{
"match_id": 3018796,
"league": "Bundesliga",
"round": 2,
"match_date": "2026-09-05T21:30:00+00:00",
"home_team": "M'gladbach",
"away_team": "Elversberg",
"b365_odds": {
"home": 1.91,
"draw": 3.9,
"away": 3.5
},
"wh_odds": {
"home": 1.85,
"draw": 3.75,
"away": 3.6
},
"lb_odds": {
"home": 1.91,
"draw": 3.9,
"away": 3.5
},
"match_status": "finished"
},
{
"match_id": 3018803,
"league": "Bundesliga",
"round": 2,
"match_date": "2026-09-05T21:30:00+00:00",
"home_team": "Werder Bremen",
"away_team": "RB Leipzig",
"b365_odds": {
"home": 3.75,
"draw": 4.2,
"away": 1.83
},
"wh_odds": {
"home": 3.8,
"draw": 3.9,
"away": 1.8
},
"lb_odds": {
"home": 3.6,
"draw": 4.2,
"away": 1.83
},
"match_status": "finished"
},
{
"match_id": 3018799,
"league": "Bundesliga",
"round": 2,
"match_date": "2026-09-05T21:30:00+00:00",
"home_team": "Hoffenheim",
"away_team": "Dortmund",
"b365_odds": {
"home": 2.4,
"draw": 3.8,
"away": 2.7
},
"wh_odds": {
"home": 2.45,
"draw": 3.6,
"away": 2.5
},
"lb_odds": {
"home": 2.4,
"draw": 3.9,
"away": 2.6
},
"match_status": "finished"
},
{
"match_id": 3018800,
"league": "Bundesliga",
"round": 2,
"match_date": "2026-09-05T21:30:00+00:00",
"home_team": "Paderborn",
"away_team": "Freiburg",
"b365_odds": {
"home": 3.6,
"draw": 3.8,
"away": 1.91
},
"wh_odds": {
"home": 3.6,
"draw": 3.6,
"away": 1.91
},
"lb_odds": {
"home": 3.5,
"draw": 3.7,
"away": 1.95
},
"match_status": "finished"
},
{
"match_id": 3018795,
"league": "Bundesliga",
"round": 2,
"match_date": "2026-09-05T21:30:00+00:00",
"home_team": "Leverkusen",
"away_team": "Union Berlin",
"b365_odds": {
"home": 1.33,
"draw": 5.25,
"away": 7.5
},
"wh_odds": {
"home": 1.36,
"draw": 5,
"away": 7
},
"lb_odds": {
"home": 1.33,
"draw": 5.75,
"away": 7.5
},
"match_status": "finished"
},
{
"match_id": 3003871,
"league": "EPL",
"round": 3,
"match_date": "2026-09-05T22:00:00+00:00",
"home_team": "Brighton",
"away_team": "Leeds",
"b365_odds": {
"home": 1.91,
"draw": 3.7,
"away": 3.75
},
"wh_odds": {
"home": 1.95,
"draw": 3.5,
"away": 3.7
},
"lb_odds": {
"home": 1.91,
"draw": 3.5,
"away": 3.6
},
"match_status": "finished"
},
{
"match_id": 3003873,
"league": "EPL",
"round": 3,
"match_date": "2026-09-05T22:00:00+00:00",
"home_team": "Fulham",
"away_team": "Crystal Palace",
"b365_odds": {
"home": 2.2,
"draw": 3.4,
"away": 3.4
},
"wh_odds": {
"home": 2.15,
"draw": 3.2,
"away": 3.5
},
"lb_odds": {
"home": 2.1,
"draw": 3.25,
"away": 3.3
},
"match_status": "finished"
},
{
"match_id": 3003876,
"league": "EPL",
"round": 3,
"match_date": "2026-09-05T22:00:00+00:00",
"home_team": "Man City",
"away_team": "Coventry",
"b365_odds": {
"home": 1.18,
"draw": 7.5,
"away": 13
},
"wh_odds": {
"home": 1.2,
"draw": 7,
"away": 12
},
"lb_odds": {
"home": 1.2,
"draw": 6.5,
"away": 10
},
"match_status": "finished"
},
{
"match_id": 3003878,
"league": "EPL",
"round": 3,
"match_date": "2026-09-05T22:00:00+00:00",
"home_team": "Nott'm Forest",
"away_team": "Tottenham",
"b365_odds": {
"home": 2.7,
"draw": 3.3,
"away": 2.63
},
"wh_odds": {
"home": 2.7,
"draw": 3.2,
"away": 2.6
},
"lb_odds": {
"home": 2.5,
"draw": 3.2,
"away": 2.6
},
"match_status": "finished"
},
{
"match_id": 3003870,
"league": "EPL",
"round": 3,
"match_date": "2026-09-05T22:00:00+00:00",
"home_team": "Brentford",
"away_team": "Sunderland",
"b365_odds": {
"home": 1.7,
"draw": 3.8,
"away": 4.75
},
"wh_odds": {
"home": 1.7,
"draw": 3.6,
"away": 4.8
},
"lb_odds": {
"home": 1.67,
"draw": 3.6,
"away": 4.6
},
"match_status": "finished"
},
{
"match_id": 3013673,
"league": "LaLiga",
"round": 4,
"match_date": "2026-09-05T22:15:00+00:00",
"home_team": "Ath Bilbao",
"away_team": "Ath Madrid",
"b365_odds": {
"home": 3,
"draw": 3.3,
"away": 2.38
},
"wh_odds": {
"home": 2.9,
"draw": 3.3,
"away": 2.3
},
"lb_odds": {
"home": 3,
"draw": 3.4,
"away": 2.3
},
"match_status": "upcoming"
},
{
"match_id": 2995328,
"league": "Ligue1",
"round": 3,
"match_date": "2026-09-05T23:15:00+00:00",
"home_team": "Lens",
"away_team": "Lorient",
"b365_odds": {
"home": 1.5,
"draw": 4.33,
"away": 6.25
},
"wh_odds": {
"home": 1.53,
"draw": 4,
"away": 5.5
},
"lb_odds": {
"home": 1.53,
"draw": 4.4,
"away": 5.5
},
"match_status": "finished"
},
{
"match_id": 2993781,
"league": "SerieA",
"round": 3,
"match_date": "2026-09-06T00:00:00+00:00",
"home_team": "Inter",
"away_team": "Napoli",
"b365_odds": {
"home": 1.62,
"draw": 4,
"away": 5.25
},
"wh_odds": {
"home": 1.62,
"draw": 3.75,
"away": 5
},
"lb_odds": {
"home": 1.61,
"draw": 3.9,
"away": 5.25
},
"match_status": "finished"
},
{
"match_id": 3018801,
"league": "Bundesliga",
"round": 2,
"match_date": "2026-09-06T00:30:00+00:00",
"home_team": "Schalke 04",
"away_team": "Bayern Munich",
"b365_odds": {
"home": 13,
"draw": 7,
"away": 1.2
},
"wh_odds": {
"home": 11,
"draw": 6.5,
"away": 1.2
},
"lb_odds": {
"home": 9.5,
"draw": 7.5,
"away": 1.22
},
"match_status": "finished"
},
{
"match_id": 3003874,
"league": "EPL",
"round": 3,
"match_date": "2026-09-06T00:30:00+00:00",
"home_team": "Hull",
"away_team": "Aston Villa",
"b365_odds": {
"home": 4,
"draw": 3.6,
"away": 1.91
},
"wh_odds": {
"home": 4,
"draw": 3.5,
"away": 1.85
},
"lb_odds": {
"home": 3.7,
"draw": 3.4,
"away": 1.91
},
"match_status": "finished"
},
{
"match_id": 3013679,
"league": "LaLiga",
"round": 4,
"match_date": "2026-09-06T00:30:00+00:00",
"home_team": "Vallecano",
"away_team": "Santander",
"b365_odds": {
"home": 2.2,
"draw": 3.4,
"away": 3.2
},
"wh_odds": {
"home": 2.25,
"draw": 3.3,
"away": 3.1
},
"lb_odds": {
"home": 2.3,
"draw": 3.4,
"away": 3
},
"match_status": "upcoming"
},
{
"match_id": 2995327,
"league": "Ligue1",
"round": 3,
"match_date": "2026-09-06T02:45:00+00:00",
"home_team": "Le Havre",
"away_team": "Brest",
"b365_odds": {
"home": 2.88,
"draw": 3.2,
"away": 2.5
},
"wh_odds": {
"home": 2.8,
"draw": 3,
"away": 2.45
},
"lb_odds": {
"home": 2.75,
"draw": 3.25,
"away": 2.5
},
"match_status": "finished"
},
{
"match_id": 2993775,
"league": "SerieA",
"round": 3,
"match_date": "2026-09-06T02:45:00+00:00",
"home_team": "Roma",
"away_team": "Atalanta",
"b365_odds": {
"home": 1.65,
"draw": 3.8,
"away": 5.25
},
"wh_odds": {
"home": 1.67,
"draw": 3.6,
"away": 5
},
"lb_odds": {
"home": 1.65,
"draw": 3.9,
"away": 5
},
"match_status": "finished"
},
{
"match_id": 2995331,
"league": "Ligue1",
"round": 3,
"match_date": "2026-09-06T02:45:00+00:00",
"home_team": "Nice",
"away_team": "Le Mans",
"b365_odds": {
"home": 1.62,
"draw": 4,
"away": 5.25
},
"wh_odds": {
"home": 1.62,
"draw": 3.8,
"away": 4.8
},
"lb_odds": {
"home": 1.65,
"draw": 4,
"away": 4.8
},
"match_status": "finished"
},
{
"match_id": 3013681,
"league": "LaLiga",
"round": 4,
"match_date": "2026-09-06T03:00:00+00:00",
"home_team": "Villarreal",
"away_team": "La Coruna",
"b365_odds": {
"home": 1.48,
"draw": 4.2,
"away": 6.25
},
"wh_odds": {
"home": 1.44,
"draw": 4.33,
"away": 6
},
"lb_odds": {
"home": 1.5,
"draw": 4.4,
"away": 6
},
"match_status": "upcoming"
},
{
"match_id": 2993779,
"league": "SerieA",
"round": 3,
"match_date": "2026-09-06T21:00:00+00:00",
"home_team": "Frosinone",
"away_team": "Venezia",
"b365_odds": {
"home": 2.75,
"draw": 3.3,
"away": 2.55
},
"wh_odds": {
"home": 2.63,
"draw": 3.3,
"away": 2.5
},
"lb_odds": {
"home": 2.62,
"draw": 3.4,
"away": 2.5
},
"match_status": "upcoming"
},
{
"match_id": 3003872,
"league": "EPL",
"round": 3,
"match_date": "2026-09-06T21:00:00+00:00",
"home_team": "Everton",
"away_team": "Man United",
"b365_odds": {
"home": 3.5,
"draw": 3.6,
"away": 2.05
},
"wh_odds": {
"home": 3.25,
"draw": 3.4,
"away": 2.15
},
"lb_odds": {
"home": 3.1,
"draw": 3.5,
"away": 2.1
},
"match_status": "upcoming"
},
{
"match_id": 2995334,
"league": "Ligue1",
"round": 3,
"match_date": "2026-09-06T21:00:00+00:00",
"home_team": "Troyes",
"away_team": "Strasbourg",
"b365_odds": {
"home": 3,
"draw": 3.4,
"away": 2.38
},
"wh_odds": {
"home": 2.9,
"draw": 3.25,
"away": 2.3
},
"lb_odds": {
"home": 2.87,
"draw": 3.4,
"away": 2.37
},
"match_status": "upcoming"
},
{
"match_id": 2993783,
"league": "SerieA",
"round": 3,
"match_date": "2026-09-06T21:00:00+00:00",
"home_team": "Parma",
"away_team": "Monza",
"b365_odds": {
"home": 2.6,
"draw": 3,
"away": 2.9
},
"wh_odds": {
"home": 2.5,
"draw": 2.9,
"away": 2.9
},
"lb_odds": {
"home": 2.5,
"draw": 3.1,
"away": 2.9
},
"match_status": "upcoming"
},
{
"match_id": 3018798,
"league": "Bundesliga",
"round": 2,
"match_date": "2026-09-06T21:30:00+00:00",
"home_team": "Hamburg",
"away_team": "Mainz",
"b365_odds": {
"home": 2.88,
"draw": 3.5,
"away": 2.4
},
"wh_odds": {
"home": 2.75,
"draw": 3.4,
"away": 2.4
},
"lb_odds": {
"home": 2.7,
"draw": 3.5,
"away": 2.4
},
"match_status": "upcoming"
},
{
"match_id": 3013680,
"league": "LaLiga",
"round": 4,
"match_date": "2026-09-06T22:15:00+00:00",
"home_team": "Valencia",
"away_team": "Barcelona",
"b365_odds": {
"home": 10,
"draw": 6,
"away": 1.25
},
"wh_odds": {
"home": 8.5,
"draw": 5.8,
"away": 1.3
},
"lb_odds": {
"home": 8.5,
"draw": 5.75,
"away": 1.3
},
"match_status": "upcoming"
},
{
"match_id": 2995326,
"league": "Ligue1",
"round": 3,
"match_date": "2026-09-06T23:15:00+00:00",
"home_team": "Angers",
"away_team": "Rennes",
"b365_odds": {
"home": 4,
"draw": 3.75,
"away": 1.85
},
"wh_odds": {
"home": 3.75,
"draw": 3.6,
"away": 1.85
},
"lb_odds": {
"home": 3.7,
"draw": 3.75,
"away": 1.91
},
"match_status": "upcoming"
},
{
"match_id": 3003869,
"league": "EPL",
"round": 3,
"match_date": "2026-09-06T23:30:00+00:00",
"home_team": "Arsenal",
"away_team": "Chelsea",
"b365_odds": {
"home": 1.67,
"draw": 3.9,
"away": 5
},
"wh_odds": {
"home": 1.73,
"draw": 3.75,
"away": 4.6
},
"lb_odds": {
"home": 1.65,
"draw": 3.9,
"away": 4.4
},
"match_status": "upcoming"
},
{
"match_id": 3018797,
"league": "Bundesliga",
"round": 2,
"match_date": "2026-09-06T23:30:00+00:00",
"home_team": "Ein Frankfurt",
"away_team": "Augsburg",
"b365_odds": {
"home": 1.95,
"draw": 3.9,
"away": 3.5
},
"wh_odds": {
"home": 1.95,
"draw": 3.75,
"away": 3.3
},
"lb_odds": {
"home": 1.91,
"draw": 4,
"away": 3.5
},
"match_status": "upcoming"
},
{
"match_id": 2993776,
"league": "SerieA",
"round": 3,
"match_date": "2026-09-07T00:00:00+00:00",
"home_team": "Bologna",
"away_team": "Sassuolo",
"b365_odds": {
"home": 2.05,
"draw": 3.4,
"away": 3.75
},
"wh_odds": {
"home": 2,
"draw": 3.25,
"away": 3.6
},
"lb_odds": {
"home": 2,
"draw": 3.4,
"away": 3.7
},
"match_status": "upcoming"
},
{
"match_id": 3013678,
"league": "LaLiga",
"round": 4,
"match_date": "2026-09-07T00:30:00+00:00",
"home_team": "Malaga",
"away_team": "Levante",
"b365_odds": {
"home": 2.45,
"draw": 3.1,
"away": 2.88
},
"wh_odds": {
"home": 2.45,
"draw": 3.1,
"away": 2.9
},
"lb_odds": {
"home": 2.5,
"draw": 3.1,
"away": 2.87
},
"match_status": "upcoming"
},
{
"match_id": 3013672,
"league": "LaLiga",
"round": 4,
"match_date": "2026-09-07T00:30:00+00:00",
"home_team": "Alaves",
"away_team": "Osasuna",
"b365_odds": {
"home": 2.2,
"draw": 3.1,
"away": 3.4
},
"wh_odds": {
"home": 2.25,
"draw": 3,
"away": 3.4
},
"lb_odds": {
"home": 2.25,
"draw": 3.1,
"away": 3.3
},
"match_status": "upcoming"
},
{
"match_id": 2995330,
"league": "Ligue1",
"round": 3,
"match_date": "2026-09-07T02:45:00+00:00",
"home_team": "Marseille",
"away_team": "Paris FC",
"b365_odds": {
"home": 1.75,
"draw": 4,
"away": 4.1
},
"wh_odds": {
"home": 1.75,
"draw": 3.7,
"away": 4
},
"lb_odds": {
"home": 1.75,
"draw": 4,
"away": 4
},
"match_status": "upcoming"
},
{
"match_id": 2993782,
"league": "SerieA",
"round": 3,
"match_date": "2026-09-07T02:45:00+00:00",
"home_team": "Juventus",
"away_team": "Milan",
"b365_odds": {
"home": 2.1,
"draw": 3.25,
"away": 3.75
},
"wh_odds": {
"home": 2.1,
"draw": 3.1,
"away": 3.5
},
"lb_odds": {
"home": 2.05,
"draw": 3.3,
"away": 3.6
},
"match_status": "upcoming"
},
{
"match_id": 3013676,
"league": "LaLiga",
"round": 4,
"match_date": "2026-09-07T03:00:00+00:00",
"home_team": "Espanol",
"away_team": "Sevilla",
"b365_odds": {
"home": 2.25,
"draw": 3.2,
"away": 3.25
},
"wh_odds": {
"home": 2.3,
"draw": 3.1,
"away": 3.2
},
"lb_odds": {
"home": 2.3,
"draw": 3.25,
"away": 3.1
},
"match_status": "upcoming"
},
{
"match_id": 2993777,
"league": "SerieA",
"round": 3,
"match_date": "2026-09-08T00:30:00+00:00",
"home_team": "Cagliari",
"away_team": "Lecce",
"b365_odds": {
"home": 2,
"draw": 3.1,
"away": 4.33
},
"wh_odds": {
"home": 1.95,
"draw": 3.1,
"away": 3.9
},
"lb_odds": {
"home": 2,
"draw": 3.2,
"away": 4
},
"match_status": "upcoming"
},
{
"match_id": 3013677,
"league": "LaLiga",
"round": 4,
"match_date": "2026-09-08T01:00:00+00:00",
"home_team": "Getafe",
"away_team": "Celta",
"b365_odds": {
"home": 2.63,
"draw": 2.8,
"away": 3.1
},
"wh_odds": {
"home": 2.5,
"draw": 2.8,
"away": 3.2
},
"lb_odds": {
"home": 2.5,
"draw": 2.87,
"away": 3.1
},
"match_status": "upcoming"
},
{
"match_id": 2993784,
"league": "SerieA",
"round": 3,
"match_date": "2026-09-08T02:45:00+00:00",
"home_team": "Udinese",
"away_team": "Lazio",
"b365_odds": {
"home": 2.88,
"draw": 3.1,
"away": 2.63
},
"wh_odds": {
"home": 2.8,
"draw": 3,
"away": 2.5
},
"lb_odds": {
"home": 2.87,
"draw": 3.2,
"away": 2.5
},
"match_status": "upcoming"
},
{
"match_id": 3013675,
"league": "LaLiga",
"round": 4,
"match_date": "2026-09-08T03:30:00+00:00",
"home_team": "Elche",
"away_team": "Sociedad",
"b365_odds": {
"home": 2.8,
"draw": 3.4,
"away": 2.35
},
"wh_odds": {
"home": 2.8,
"draw": 3.3,
"away": 2.4
},
"lb_odds": {
"home": 2.87,
"draw": 3.4,
"away": 2.37
},
"match_status": "upcoming"
}
]
}
}Without the agent
Public odds APIs, tried in the order a developer reaches for them
Hand-stamped analyst time
14 s
Wall clock for this leg only, at machine speed with the endpoints already known. The agent leg was not stamped, so the two are not compared.
Requests issued
- 401the-odds-api v4 (EPL h2h) - rejected without an API key
- 403api-football v3 (odds, league 39) - rejected without an API key
- 403football-data.org v4 (PL matches) - rejected without an API key
- 200OpenLigaDB (Bundesliga 2026) - 306 rows, odds fields: none
What came back
- Sources tried
- 4
- Sources that answered
- 1
- Sources carrying 1X2 odds
- 0
Free tier only. No key was bought, so the paid tiers behind the three 401/403 responses were not exercised.
Raw response, attachedoutputs/odds-snapshot.manual.json
{
"the-odds-api v4 (EPL h2h)": "{\"message\":\"API key is missing\",\"error_code\":\"MISSING_KEY\",\"details_url\":\"https://the-odds-api.com/liveapi/guides/v4/api-error-codes.html#missing-key\"}\n",
"api-football v3 (odds, league 39)": "{\"get\": \"\",\"parameters\": [],\"errors\": {\"token\": \"Missing application key, Check our documentation on how to add your API key in headers.\",\"error\": \"4xHe\"},\"results\": 0,\"paging\": {\"current\": 1,\"total\": 1},\"response\": []}",
"football-data.org v4 (PL matches)": "{\"message\":\"The resource you are looking for is restricted and apparently not within your permissions. Please check your subscription.\",\"errorCode\":403}",
"OpenLigaDB (Bundesliga 2026)": {
"rows": 306,
"firstRowFields": [
"matchID",
"matchDateTime",
"timeZoneID",
"leagueId",
"leagueName",
"leagueSeason",
"leagueShortcut",
"matchDateTimeUTC",
"group",
"team1",
"team2",
"lastUpdateDateTime",
"matchIsFinished",
"matchResults",
"goals",
"location",
"numberOfViewers"
]
}
}The only route to the answer, carrying a label that is wrong.
Machine time: no measurable differenceThe manual leg was marginally faster and returned nothing usable. Three of the four public sources price an API key and refused without one; the single free source that answered is a fixtures-and-results database whose schema has no odds, price or bookmaker field anywhere in it.
The agent returned 53 fixtures across five leagues, every one of them carrying 1X2 decimals from three separate books. There is no free unauthenticated equivalent, so this is a real advantage rather than a marginal one.
It is also mislabelled. The tool is named get_upcoming_matches and 30 of its 53 rows report match_status "finished". Only four kick off after the moment of the call. A caller who trusts the name and skips a match_date filter will price week-old settled fixtures as live.
The measurement that carries it: 4 of 53 returned fixtures are actually in the future; 0 of 4 manual sources carry odds.
Win rate and risk metrics for a live trading agent
What is OpenOdds.Ai's settled win rate, Brier score and calibration error, and how much of its record is anchored onchain?
OpenOdds.Ai · token 49637
MCP (Streamable HTTP) · ERC-8004 identity on BNB Smart Chain
POST https://api.openodds.ai/mcp
tools/call get_metrics {} ; tools/call get_prediction_summary { days: 365 }samples 2588.9 / 811.0 / 820.4
samples 4292.8 / 1644.3 / 1642.9
Requests issued
- 200MCP get_metrics - model 1.2.0
- 200MCP get_prediction_summary days=365 - 209 predictions
What came back
- Model version
- 1.2.0
- All time settled
- 177
- All time scored
- 0
- Win rate
- null
- Brier score
- null
- Calibration error
- null
- Committed onchain
- 177
- Revealed onchain
- 177
- Data range
- {"from":"2026-03-21","to":"2026-05-12"}
No payment required.
Raw response, attachedoutputs/track-record.agent.json
{
"metrics": {
"overall": {
"total_predictions": 0,
"settled_predictions": 0,
"pending_predictions": 0,
"stale_predictions": 0,
"scored_predictions": 0,
"probability_scored_predictions": 0,
"decision_coverage": null,
"clean_predictions": 0,
"clean_win_rate": null,
"pass_predictions": 0,
"lean_predictions": 0,
"lean_win_rate": null,
"void_predictions": 0,
"expired_predictions": 0,
"avg_prediction_score": null,
"win_rate": null,
"brier_score": null,
"market_brier_score": null,
"brier_improvement": null,
"rps_score": null,
"log_loss": null,
"calibration_error": null,
"signal_accuracy": {
"bullish": null,
"trap": null,
"neutral": null
}
},
"by_league": {},
"by_month": {},
"model_version": "1.2.0",
"backbone_version": "37node_pchip1x2_v4",
"data_range": {},
"baseline_status": "pending",
"is_shadow_only": false,
"evaluation_scope": "current_production",
"current_level_source": "unified_dynamic_fair_backbone",
"current_production": {
"total_predictions": 0,
"settled_predictions": 0,
"pending_predictions": 0,
"stale_predictions": 0,
"scored_predictions": 0,
"probability_scored_predictions": 0,
"decision_coverage": null,
"clean_predictions": 0,
"clean_win_rate": null,
"pass_predictions": 0,
"lean_predictions": 0,
"lean_win_rate": null,
"void_predictions": 0,
"expired_predictions": 0,
"avg_prediction_score": null,
"win_rate": null,
"brier_score": null,
"market_brier_score": null,
"brier_improvement": null,
"rps_score": null,
"log_loss": null,
"calibration_error": null,
"signal_accuracy": {
"bullish": null,
"trap": null,
"neutral": null
}
},
"current_by_league": {},
"current_data_range": {},
"all_time_overall": {
"total_predictions": 177,
"settled_predictions": 177,
"pending_predictions": 0,
"stale_predictions": 0,
"scored_predictions": 0,
"probability_scored_predictions": 0,
"decision_coverage": 0,
"clean_predictions": 0,
"clean_win_rate": null,
"pass_predictions": 0,
"lean_predictions": 0,
"lean_win_rate": null,
"void_predictions": 0,
"expired_predictions": 30,
"avg_prediction_score": null,
"win_rate": null,
"brier_score": null,
"market_brier_score": null,
"brier_improvement": null,
"rps_score": null,
"log_loss": null,
"calibration_error": null,
"signal_accuracy": {
"bullish": null,
"trap": null,
"neutral": null
}
},
"all_time_by_league": {
"SerieA": {
"total": 49,
"settled": 49,
"scored": 0,
"avg_score": null,
"win_rate": null
},
"EPL": {
"total": 45,
"settled": 45,
"scored": 0,
"avg_score": null,
"win_rate": null
},
"Bundesliga": {
"total": 44,
"settled": 44,
"scored": 0,
"avg_score": null,
"win_rate": null
},
"LaLiga": {
"total": 39,
"settled": 39,
"scored": 0,
"avg_score": null,
"win_rate": null
}
},
"all_time_data_range": {
"from": "2026-03-21",
"to": "2026-05-12"
},
"metrics_schema_version": "2.0",
"metrics_status": "ok",
"metrics_error": null
},
"summary": {
"window_days": 365,
"league": null,
"total": 209,
"settled": 179,
"pending": 30,
"committed_onchain": 177,
"revealed_onchain": 177,
"error_count": 0,
"by_status": {
"settled": 179,
"expired": 30
}
}
}Without the agent
The agent's public website, plus its ERC-8004 reputation record
Hand-stamped analyst time
3 s
Wall clock for this leg only, at machine speed with the endpoints already known. The agent leg was not stamped, so the two are not compared.
Requests issued
- 200GET openodds.ai (HTML) - 2938 bytes, metric words present: none
- 200GET 8004scan agent record 56/49637 - 3 feedbacks
What came back
- Site bytes
- 2938
- Metric words in HTML
- empty
- Onchain feedbacks
- 3
- Onchain average score
- 100
- Onchain stars
- 8
- Win rate
- null
- Brier score
- null
Free.
Raw response, attachedoutputs/track-record.manual.json
{
"siteHtmlFirst2kb": "<!DOCTYPE html><html><head><meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>OpenOdds AI — Football Odds Intelligence Agent</title>\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap\">\n<link rel=\"stylesheet\" href=\"/_nuxt/entry.CO4N3YXn.css\" crossorigin>\n<link rel=\"modulepreload\" as=\"script\" crossorigin href=\"/_nuxt/DMSMBirI.js\">\n<script type=\"module\" src=\"/_nuxt/DMSMBirI.js\" crossorigin></script>\n<meta name=\"description\" content=\"A verified OpenOdds AI football odds intelligence agent with commit-reveal integrity and ERC-8004 identity.\">\n<meta property=\"og:title\" content=\"OpenOdds AI — ERC-8004 Verified Football Odds Intelligence Agent\">\n<meta property=\"og:description\" content=\"AI-powered football odds predictions with cryptographic commit-reveal proof. Verify predictions on-chain before match kickoff.\">\n<meta property=\"og:image\" content=\"https://oddsmarketspace.sgp1.cdn.digitaloceanspaces.com/markets/general/og-card/1776911169952-footballaiog-en.png\">\n<meta property=\"og:url\" content=\"https://openodds.ai\">\n<meta property=\"og:type\" content=\"website\">\n<meta name=\"twitter:card\" content=\"summary_large_image\">\n<meta name=\"twitter:title\" content=\"OpenOdds AI — ERC-8004 Verified Football Odds Intelligence Agent\">\n<meta name=\"twitter:description\" content=\"AI-powered football odds predictions with cryptographic commit-reveal proof. Verify predictions on-chain before match kickoff.\">\n<meta name=\"twitter:image\" content=\"https://oddsmarketspace.sgp1.cdn.digitaloceanspaces.com/markets/general/og-card/1776911169952-footballaiog-en.png\">\n<link rel=\"icon\" type=\"image/x-icon\" href=\"/favicon.ico\">\n<link rel=\"icon\" type=\"image/svg+xml\" href=\"/logo.svg\">\n<link rel=\"apple-touch-icon\" href=\"/logo.svg\">\n<script id=\"unhead:payload\" type=\"application/json\">{\"titl",
"scanRecord": {
"total_feedbacks": 3,
"average_score": 100,
"star_count": 8,
"total_score": 30.52,
"health_score": 100
}
}The metric the track asks for does not exist, on either route.
Machine time: agent 2.00x fasterget_metrics returns a serious schema - win rate, Brier, market Brier, Brier improvement, RPS, log loss, calibration error, per-signal accuracy, split by league and by month. Every one of those fields is null. 177 predictions are settled and none has been scored.
The manual route does worse. The public site is a 2.9 KB client-rendered shell with no metric word and no percentage in it, and the ERC-8004 record gives reputation rather than performance: three feedbacks at 100/100 says three counterparties were satisfied, not that any prediction was right.
What the agent does deliver is a denominator and an anchor: 209 predictions, 179 settled, 177 committed and 177 revealed onchain. The win rate it declines to compute is computable by someone else. That is falsifiability, not a track record, and it is what task 5 goes on to exploit.
For a marketplace this is a constraint rather than a footnote. The highest-scoring trading agent on the BNB index publishes no win rate, so any marketplace that shows one for it has invented it.
The measurement that carries it: 177 settled predictions, 0 scored, win_rate null, brier_score null, calibration_error null.
Verify the ERC-20 contract behind a spend approval
Before approving a spend, confirm what 0xcE24439F2D9C6a2289F741120FE202248B666666 on BNB Smart Chain actually is: name, symbol, decimals, supply, and who controls it.
ClawdMint · token 2468
MCP (Streamable HTTP, SSE framed) · ERC-8004 identity on BNB Smart Chain
POST https://clawdmint-api.vercel.app/mcp
tools/call get_token_info { token_address: "0xcE24439F2D9C6a2289F741120FE202248B666666", chain: "bsc" }samples 1597.6 / 423.4 / 497.5
samples 2291.6 / 1532.9 / 1549.0
Requests issued
- 200MCP get_token_info - 6 fields returned
What came back
- Name
- United Stables
- Symbol
- U
- Decimals
- 18
- Total supply
- 956298607.90846715
- Owner
- null
- Paused
- null
- Fields returned
- address, chain, name, symbol, decimals, total_supply
No payment required.
Raw response, attachedoutputs/token-contract-check.agent.json
{
"address": "0xcE24439F2D9C6a2289F741120FE202248B666666",
"chain": "bsc",
"name": "United Stables",
"symbol": "U",
"decimals": 18,
"total_supply": "956298607.90846715"
}Without the agent
Six eth_call reads against a public BNB Chain node, decoded by hand
Hand-stamped analyst time
46 s
Wall clock for this leg only, at machine speed with the endpoints already known. The agent leg was not stamped, so the two are not compared.
Requests issued
- 200eth_call name() 0x06fdde03 - returned data
- 200eth_call symbol() 0x95d89b41 - returned data
- 200eth_call decimals() 0x313ce567 - returned data
- 200eth_call totalSupply() 0x18160ddd - returned data
- 200eth_call owner() 0x8da5cb5b - returned data
- 200eth_call paused() 0x5c975abb - returned data
What came back
- Name
- United Stables
- Symbol
- U
- Decimals
- 18
- Total supply
- 956298607.90846715
- Owner
- 0x59F94AdE4F881f21ea608AD4448bf70B78e37187
- Paused
- false
- Fields returned
- name, symbol, decimals, totalSupply, owner, paused
Free. Public dataseed node, no key.
Raw response, attachedoutputs/token-contract-check.manual.json
{
"selectors": {
"name": "0x06fdde03",
"symbol": "0x95d89b41",
"decimals": "0x313ce567",
"totalSupply": "0x18160ddd",
"owner": "0x8da5cb5b",
"paused": "0x5c975abb"
},
"rawReturnData": {
"name": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000e556e6974656420537461626c6573000000000000000000000000000000000000",
"symbol": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000015500000000000000000000000000000000000000000000000000000000000000",
"decimals": "0x0000000000000000000000000000000000000000000000000000000000000012",
"totalSupply": "0x00000000000000000000000000000000000000000317081b697649c38e388c00",
"owner": "0x00000000000000000000000059f94ade4f881f21ea608ad4448bf70b78e37187",
"paused": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
}Three times faster, exactly right, and still not enough to sign on.
Machine time: agent 3.11x fasterEvery field the agent returned matches the chain: name, symbol, decimals, and a total supply agreeing to its final digit. There is no discrepancy to report and none is manufactured.
It returned six fields, two of which the caller supplied. No owner, no pause flag, no mint authority, no upgradeability. For "what is this token" it is correct and three times faster. For the question actually asked - who controls the contract I am about to grant an allowance to - it is silent, and the six-call manual read is not: a single externally owned account holds owner().
A good first read and a bad last one. Bazar signs an approve against this exact contract on every hire, so its hire flow keeps reading owner() itself.
The measurement that carries it: Agent 4 of 4 returned fields match the chain; owner() and paused() are absent from its response.
Best route to bridge 100 USDC from BNB Chain to Base
Which bridge gives the most USDC on Base for 100 USDC sent from BNB Chain, and what does it cost?
ClawdMint · token 2468
MCP (Streamable HTTP, SSE framed) · ERC-8004 identity on BNB Smart Chain
POST https://clawdmint-api.vercel.app/mcp
tools/call get_bridge_route { from_chain: "bsc", to_chain: "base", from_token: "USDC", to_token: "USDC", amount: "100" }samples 1546.3 / 1604.3 / 1354.5
samples 2001.1 / 1107.4 / 1536.7
Requests issued
- 200MCP get_bridge_route - 3 routes ranked
What came back
- Top bridge
- AcrossV4
- Top min received
- 99.7366 USDC
- Top total cost USD
- $0.2714
- Routes returned
- 3
- Cheapest route by total cost
- LI.FI Intents
- Rank one is cheapest
- false
No payment required.
Raw response, attachedoutputs/bridge-route.agent.json
{
"from": "100 USDC on bsc",
"to": "~99.9866 USDC on base",
"bridge": "AcrossV4",
"gas_cost_usd": "$0.0081",
"bridge_fee_usd": "$0.2633",
"total_cost_usd": "$0.2714",
"estimated_time": "~1 min",
"slippage": "0.26%",
"min_received": "99.7366 USDC",
"jumper_url": "https://jumper.exchange/?fromChain=56&toChain=8453&fromToken=0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d&toToken=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"routes": [
{
"rank": 1,
"bridge": "AcrossV4",
"to": "~99.9866 USDC",
"min_received": "99.7366 USDC",
"bridge_fee_usd": "$0.2633",
"gas_cost_usd": "$0.0081",
"total_cost_usd": "$0.2714",
"estimated_time": "~1 min",
"slippage": "0.26%"
},
{
"rank": 2,
"bridge": "LI.FI Intents",
"to": "~99.9834 USDC",
"min_received": "99.7334 USDC",
"bridge_fee_usd": "$0.2499",
"gas_cost_usd": "$0.0142",
"total_cost_usd": "$0.2641",
"estimated_time": "~1 min",
"slippage": "0.27%"
},
{
"rank": 3,
"bridge": "NearIntents",
"to": "~99.9693 USDC",
"min_received": "99.7193 USDC",
"bridge_fee_usd": "$0.2898",
"gas_cost_usd": "$0.0142",
"total_cost_usd": "$0.3040",
"estimated_time": "~1 min",
"slippage": "0.28%"
}
]
}Without the agent
One GET to the LI.FI quote API, fields extracted by hand
Hand-stamped analyst time
16 s
Wall clock for this leg only, at machine speed with the endpoints already known. The agent leg was not stamped, so the two are not compared.
Requests issued
- 200GET li.quest/v1/quote - tool across
What came back
- Top bridge
- AcrossV4
- Top min received
- 99.736594
- Top total cost USD
- $0.2805
- Routes returned
- 1
- Cheapest route by total cost
- AcrossV4
- Rank one is cheapest
- null
Free. Public endpoint, no key.
Raw response, attachedoutputs/bridge-route.manual.json
{
"tool": "across",
"toolName": "AcrossV4",
"estimate": {
"fromAmount": "100000000000000000000",
"toAmount": "99736594",
"toAmountMin": "99736594",
"fromAmountUSD": "99.9623",
"toAmountUSD": "100.2259",
"executionDuration": 2,
"gasCosts": [
{
"amountUSD": "0.0172"
}
],
"feeCosts": [
{
"name": "LIFI Fixed Fee",
"amountUSD": "0.2499"
},
{
"name": "Relayer fee",
"amountUSD": "0.0100"
},
{
"name": "Relayer gas fee",
"amountUSD": "0.0034"
}
]
}
}Faithful numbers, wrong ordering. Take the data, ignore the ranking.
Machine time: no measurable differenceNine milliseconds apart. Neither route is faster in any sense that matters.
The agent is accurate where it counts: its minimum received reproduces the aggregator's own toAmountMin exactly, and it names the same winning bridge. It adds two alternatives the direct call never surfaced and a prefilled execution link, which is genuine added value.
Its ranking contradicts its own cost column. Rank 1 carries a total cost of $0.2714 while rank 2 carries $0.2641. It is ordering by estimated output and presenting that order as best. This is reported rather than smoothed over because "the agent ranked it for you" is exactly the kind of convenience that gets trusted without being checked.
The two legs also differ by $0.0091 on total cost. Quotes move between calls; that is drift, and no significance is claimed for it.
The measurement that carries it: Agent rank 1 total cost $0.2714 against its own rank 2 at $0.2641.
Independently audit a trading agent's onchain commit-reveal claim
Did OpenOdds.Ai really commit prediction pred_c0bc19d214a24fd9 onchain before kickoff, and does the revealed content hash to the committed value?
OpenOdds.Ai · token 49637
MCP (Streamable HTTP) · ERC-8004 identity on BNB Smart Chain
POST https://api.openodds.ai/mcp
tools/call verify_prediction { prediction_id: "pred_c0bc19d214a24fd9" }samples 1274.4 / 1232.3 / 377.0
samples 7832.7 / 6142.3 / 5532.9
Requests issued
- 200MCP verify_prediction - status verified
What came back
- Verification status
- verified
- Verification source
- local_db
- Names the chain
- false
- Commit tx
- a784bbc3a79f12ff01b02cd9cec8f10a775d055431f98fae6a93e9b3b81af7fd
- Commit block
- 45756452
- Revealed
- true
- Content hash match
- true
- Commitment hash match
- true
- Independently checked
- false
No payment required.
Raw response, attachedoutputs/commit-reveal-audit.agent.json
{
"prediction_id": "pred_c0bc19d214a24fd9",
"match_id": "0xccf4b1a6f24937d129ffe8da2141ea7f6e3e4edcf75d12a3ad8e070d58d50d6f",
"match_time": "2026-05-11T01:30:00",
"content_hash": "0xb79743557bd43c703b034beb6082649d1c829e1766447fd3ba4edf13132ed4d3",
"commitment_hash": "0x83b13fbe60937d2d92ca889408a693284d9ddb5199e45a2e96cfe6a9a9a1bb0f",
"commit_tx": "a784bbc3a79f12ff01b02cd9cec8f10a775d055431f98fae6a93e9b3b81af7fd",
"commit_block": 45756452,
"commit_timestamp": "2026-05-09T04:50:45.702367",
"commit_before_match": true,
"revealed": true,
"reveal_tx": "5accfd504b2a1b7568c5c68b214b1e415f31197792234fc5c75cbc98fd169b12",
"salt": "0xbc833638a69227d04dd690de59477df1ff864f8b11b0ef06d9efa70bff57ba04",
"ipfs_uri": "ipfs://QmRwhE3fGrJYTC2U2PJiQ1hj98E6TYekhYsSm2s8A6der1",
"verification_source": "local_db",
"verification_status": "verified",
"content_hash_match": true,
"commitment_hash_match": true
}Without the agent
Locate the commit tx across seven EVM chains, read the calldata, re-derive the hash
Hand-stamped analyst time
58 s
Wall clock for this leg only, at machine speed with the endpoints already known. The agent leg was not stamped, so the two are not compared.
Requests issued
- 200Take the claim to be tested (verify_prediction) - claim under audit
- 200eth_getTransactionByHash on BNB Smart Chain - not present
- 200eth_getTransactionByHash on opBNB - not present
- 200eth_getTransactionByHash on Base - FOUND
- 401eth_getTransactionByHash on Polygon - not present
- 200eth_getTransactionByHash on Arbitrum One - not present
- 200eth_getTransactionReceipt on Base - success
- 200eth_getBlockByNumber on Base - block header read
What came back
- Verification status
- verified
- Verification source
- local_db
- Names the chain
- true
- Chain found on
- Base
- Commit tx
- 0xa784bbc3a79f12ff01b02cd9cec8f10a775d055431f98fae6a93e9b3b81af7fd
- Commit block
- 45756452
- Tx succeeded
- true
- Contract called
- 0x3002fd6411b7f89abcc2319126b95c4a2eaa03d5
- Selector
- 0x3bab54e6
- Match id in calldata
- true
- Content hash in calldata
- true
- Commitment hash in calldata
- true
- Derived commitment
- 0x83b13fbe60937d2d92ca889408a693284d9ddb5199e45a2e96cfe6a9a9a1bb0f
- Derived matches onchain
- true
- Block time UTC
- 2026-05-09T04:50:51.000Z
- Agent claimed commit time
- 2026-05-09T04:50:45.702367
- Committed before kickoff
- true
- Independently checked
- true
Free. Public RPC endpoints, no key.
Raw response, attachedoutputs/commit-reveal-audit.manual.json
{
"claimUnderAudit": {
"prediction_id": "pred_c0bc19d214a24fd9",
"match_id": "0xccf4b1a6f24937d129ffe8da2141ea7f6e3e4edcf75d12a3ad8e070d58d50d6f",
"match_time": "2026-05-11T01:30:00",
"content_hash": "0xb79743557bd43c703b034beb6082649d1c829e1766447fd3ba4edf13132ed4d3",
"commitment_hash": "0x83b13fbe60937d2d92ca889408a693284d9ddb5199e45a2e96cfe6a9a9a1bb0f",
"commit_tx": "a784bbc3a79f12ff01b02cd9cec8f10a775d055431f98fae6a93e9b3b81af7fd",
"commit_block": 45756452,
"commit_timestamp": "2026-05-09T04:50:45.702367",
"commit_before_match": true,
"revealed": true,
"reveal_tx": "5accfd504b2a1b7568c5c68b214b1e415f31197792234fc5c75cbc98fd169b12",
"salt": "0xbc833638a69227d04dd690de59477df1ff864f8b11b0ef06d9efa70bff57ba04",
"ipfs_uri": "ipfs://QmRwhE3fGrJYTC2U2PJiQ1hj98E6TYekhYsSm2s8A6der1",
"verification_source": "local_db",
"verification_status": "verified",
"content_hash_match": true,
"commitment_hash_match": true
},
"chainFoundOn": "Base",
"transaction": {
"hash": "0xa784bbc3a79f12ff01b02cd9cec8f10a775d055431f98fae6a93e9b3b81af7fd",
"blockNumber": "0x2ba3024",
"from": "0x0d68a153897b73a6e4d2eaa9b0d4802bae69532d",
"to": "0x3002fd6411b7f89abcc2319126b95c4a2eaa03d5",
"input": "0x3bab54e6ccf4b1a6f24937d129ffe8da2141ea7f6e3e4edcf75d12a3ad8e070d58d50d6fb79743557bd43c703b034beb6082649d1c829e1766447fd3ba4edf13132ed4d383b13fbe60937d2d92ca889408a693284d9ddb5199e45a2e96cfe6a9a9a1bb0f000000000000000000000000000000000000000000000000000000006a00c098"
},
"receiptStatus": "0x1",
"blockTimestampHex": "0x69febd2b",
"calldataWords": [
"0xccf4b1a6f24937d129ffe8da2141ea7f6e3e4edcf75d12a3ad8e070d58d50d6f",
"0xb79743557bd43c703b034beb6082649d1c829e1766447fd3ba4edf13132ed4d3",
"0x83b13fbe60937d2d92ca889408a693284d9ddb5199e45a2e96cfe6a9a9a1bb0f",
"0x000000000000000000000000000000000000000000000000000000006a00c098"
],
"derivedCommitment": "0x83b13fbe60937d2d92ca889408a693284d9ddb5199e45a2e96cfe6a9a9a1bb0f"
}The claim was true. That is not why it should have been believed.
Machine time: agent 4.98x fasterThe agent answered "verified" in a fifth of the time the chain took to confirm it, and the field beside that answer reads verification_source: local_db. It verified its own database against its own database. Had the commitment been absent from every chain, the same response would have come back.
The independent check stands it up completely. The transaction is real, it succeeded, its calldata carries the match id, the content hash and the commitment hash in the clear, and keccak256(content hash ‖ salt) reproduces the onchain commitment byte for byte. It was committed 1.86 days before kickoff. Nothing was fabricated and the audit found no discrepancy.
Two things the agent never says. The transaction is not on the chain its identity lives on - the ERC-8004 identity is on BNB Smart Chain and the commitment is anchored on Base, found only by trying five networks in turn. And "verified" from this endpoint means self-reported until somebody reads the calldata.
Six seconds of machine time and 58 seconds of hand work turned a self-attestation into a fact. That is the whole argument for a marketplace layer: the value of the agent is that it publishes enough to be checked, and the value of the marketplace is that it checks.
The measurement that carries it: Agent says verified from local_db; the chain confirms it on Base at block 45756452, 1.86 days pre-kickoff.
What agents charge
Every task above ran against an endpoint that answers for free, which leaves a misleading impression in the cost column. These three agents on the same index publish their prices in-band without being paid anything. None was paid and none was executed: Bazar holds no keys, and the harness will not sign a payment. No output, timing or quality judgement is reported for any of them, because none was obtained.
| Agent | Token | Price | Network | Mechanism |
|---|---|---|---|---|
| Cast Transaction Agent | 44942 | 0.001 USDC | eip155:8453 | x402 |
| Agentscan Agent | 51945 | 0.001 USDC | eip155:84532 | x402 |
| Sentinels Audit | 258641 | 0.2 BNB on BSC | eip155:56 | native BNB transfer, tx hash redeemed once |
Worth flagging from the discovery run: Agentscan Agent prices its work on chain 84532, which is Base Sepolia - a testnet. A buyer reading "0.001 USDC" off that header is being quoted in play money.
Published prices, read from the agents themselves. Nothing here was paid for and no paid task was executed.
How to check this
Re-run the measurements
node scripts/advantage/run-benchmark.mjs node scripts/advantage/run-benchmark.mjs --samples 5 node scripts/advantage/price-discovery.mjs
Writes docs/agent-advantage/results.json and the raw outputs this page renders. Nothing on this page is typed in by hand; every number is read from that file.
What re-running will not reproduce
The findings will reproduce: the null win rate, the six-field token response, the mis-ranked bridge routes, the Base transaction and the commitment hash.
The milliseconds will not. Latency moves, and both agent endpoints are cold-start serverless deployments whose first call after an idle period runs several times slower than steady state - visible in the raw samples above, where a first sample of 3160.0 ms sits against a third of 1213.4 ms. Medians are shown beside the full sample sets rather than instead of them, and no timing gap under 20 percent is called a win.
The claim this report will not make
It does not claim to know how much human time an agent saves. Nothing here was executed by a human. The hand-stamped analyst times are wall clock from an automated run at machine speed, with the endpoints, chain ids and token addresses already known - a best case for the manual route and a lower bound on what a person would spend. Turning that into a productivity claim about people would be a fabrication, so it is not turned into one.
- Machine wall clock only, one machine, one network, 3 samples per leg.
- Analyst time was stamped for the manual legs only. The agent legs were not stamped, so no side-by-side analyst comparison appears anywhere on this page.
- No paid agent was invoked and no payment was signed.
- Task 1's manual leg tested free tiers only. The three keyed services were not purchased, and nothing is claimed about what they would have returned.