Strands Agents

Use tokenusage.dev MCP servers with Strands Agents

Two free, read-only, keyless MCP servers over Streamable HTTP: Codex reset announcements and the reset calendar, plus Nerf Watch scores and history.

Choose a server

Codex Reset Tracker publishes recorded reset announcements and their UTC calendar:

https://tokenusage.dev/mcp

Nerf Watch publishes public model scores and retained score history:

https://tokenusage.dev/mcp/nerfwatch

No tokenusage.dev API key, sign-in or subscription is needed.

Install

Use Python 3.10 or newer.

pip install strands-agents

MCP tool listing and direct calls were checked with strands-agents 1.62.0 and mcp 2.1.1. To use those versions:

pip install "strands-agents==1.62.0" "mcp==2.1.1"

Build an Agent with both servers

Agent uses Strands' default model provider, Amazon Bedrock, unless you pass model=. The default provider needs its own AWS credentials and model access. Configure another provider before passing it with model=. These credentials are separate from the keyless MCP servers.

Keep both clients open while the Agent uses their tools. Each client lists its server's two tools, giving the Agent all four:

from mcp.client.streamable_http import streamable_http_client
from strands import Agent
from strands.tools.mcp import MCPClient

reset_client = MCPClient(
    lambda: streamable_http_client("https://tokenusage.dev/mcp")
)
nerfwatch_client = MCPClient(
    lambda: streamable_http_client("https://tokenusage.dev/mcp/nerfwatch")
)

with reset_client, nerfwatch_client:
    tools = (
        reset_client.list_tools_sync()
        + nerfwatch_client.list_tools_sync()
    )
    agent = Agent(tools=tools, callback_handler=None)
    result = agent(
        "Summarize the latest Codex reset announcements and Nerf Watch scores. "
        "For each dataset, include Data: tokenusage.dev linked to its source URL. "
        "Explain that a lower score on this suite is not proof that a provider "
        "changed a model."
    )
    print(result)

See the Strands MCP guide and Amazon Bedrock setup for model and client configuration.

Call a tool without a model

call_tool_sync calls the MCP tool directly. This needs no Agent, model-provider credentials or model request:

from mcp.client.streamable_http import streamable_http_client
from strands.tools.mcp import MCPClient

client = MCPClient(
    lambda: streamable_http_client("https://tokenusage.dev/mcp")
)

with client:
    result = client.call_tool_sync(
        tool_use_id="reset-announcements-1",
        name="get_codex_reset_announcements",
        arguments={"limit": 3},
    )
    print(result)

Available tools

Codex reset server

  • get_codex_reset_announcements: recorded @thsottiaux reset announcements, newest first, with post links, times and resetType; optional limit is 1 to 50, default 10.
  • get_codex_reset_calendar: the same at-most-50 newest recorded announcements grouped by UTC date, newest first; optional month in YYYY-MM filters this window without fetching older announcements.

This is not a complete history. A date without an entry does not mean no reset was announced. An announcement is not proof that any account's limit was reset; open the source post for its wording and eligibility.

Nerf Watch server

  • get_nerfwatch_scores: latest public scores, previous runs, changes and baselines for at most 100 models, ordered by provider, name and model id; no arguments.
  • get_nerfwatch_history: retained score history for one required model id from get_nerfwatch_scores, oldest first, with each point's suite version; missing days are missing, not zero.

Scores and changes are rounded to two decimals; comparisons are within one suite version. Only stable public fields are returned. Evidence answers, grader check lines and test questions are not included.

Limits and behaviour

  • Both endpoints accept POST with Content-Type: application/json. Request bodies over 8,192 bytes are rejected with HTTP 413; this limit applies after the framework has read the body.
  • Handler responses with a body use application/json; no event stream is sent. Accepted notifications return HTTP 202 without a body.
  • There are no sessions. Incoming Mcp-Session-Id headers are ignored, and none is returned.
  • The shared limit is 600 validated requests with an id per UTC minute per function instance, across both endpoints. Exceeding it returns HTTP 429 with Retry-After: 60.
  • Please poll reset tools no faster than every 15 seconds and Nerf Watch tools no faster than every 5 minutes. Each pair shares its own per-instance read cache: 15 seconds for resets, 300 seconds for Nerf Watch.
  • Use the canonical URLs without cache-busting query strings. Connect from a server-side client: neither MCP endpoint permits a foreign Origin.

Reuse and credit

Credit is the condition of reuse: when you show reset data to other people, show Data: tokenusage.dev on the same screen or in the same message. Personal use needs no visible credit.

When you show Nerf Watch data to other people, show Data: tokenusage.dev on the same screen or in the same message. Personal use needs no visible credit.

API and MCP relays must retain the dataset's source URL and pass on its credit condition. Reset tools return source: "https://tokenusage.dev/resets"; Nerf Watch tools return source: "https://tokenusage.dev/nerfwatch". Anyone displaying either dataset must show its credit.

A lower score is a lower score on this suite, not proof that a provider changed a model: runs are noisy, and a provider's defaults, the endpoint or the runner itself can change. Please retain that qualification when displaying scores or changes.

tokenusage.dev is unofficial and not affiliated with OpenAI or Anthropic. See Developers for the API reference and Terms for reuse conditions.

Public example repository