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/mcpNerf Watch publishes public model scores and retained score history:
https://tokenusage.dev/mcp/nerfwatchNo tokenusage.dev API key, sign-in or subscription is needed.
Install
Use Python 3.10 or newer.
pip install strands-agentsMCP 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; optionallimitis 1 to 50, default 10.get_codex_reset_calendar: the same at-most-50 newest recorded announcements grouped by UTC date, newest first; optionalmonthinYYYY-MMfilters 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 requiredmodelid fromget_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-Idheaders 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.