A tool call returns a number and the time that number was true. Then the model writes a sentence, and the time often goes missing. You are left with a clean figure and no way to know whether it is from this minute or this morning. The fix is to make the agent carry the stamp through to the answer.
The fields
Every reading from NoVo’s server carries three freshness fields. as_of is the moment the reading describes. age_seconds is how old it was when the response was built. as_of_kind says how that time was established. The reasoning behind publishing them is in every number we publish carries its age.
Why the agent drops them
A model is trained to write smooth prose. A timestamp in the middle of a sentence is not smooth. So unless the question or the instructions ask for it, the model summarizes the figure and leaves the metadata behind. It has not hidden anything. It has tidied the answer, and the tidy version is less useful.
Why you need them
A level read a moment ago and a level read this morning are different pieces of information. On a quiet afternoon the gap may not matter. Around a data release it matters a great deal. Without the age you cannot tell which case you are in. With it, you can decide for yourself whether the reading is fresh enough for what you are doing.
There is a second reason. The age is how you tell delayed data from stale data. The free dealer levels are delayed by design, and a delayed reading has a steady, expected age. A feed that has stopped shows an age that keeps growing. The two are separated in delayed data and stale data.
The instruction
Tell the agent this, in whatever standing instructions your app allows. With every market figure, state the tool it came from, the as_of time, and the age in plain words. If a response has more than one section, quote the age of the section the figure came from. If the kind is unknown, say unknown.
Plain words matters. Nobody wants to read a raw count of seconds. Ask for a few minutes old, or as of the last close. The agent can do that conversion. It should not round a stale reading into something that sounds current.
What a good answer looks like
A good answer reads like this. The SPY call wall is at a given strike, from get_dealer_levels, delayed, with the time it was measured and its age in minutes. You can act on that sentence or discard it, and either choice is informed. An answer without the last clause asks you to take the timing on trust.
Where it shows up
The same three fields ride on every tool in the MCP & API, free and paid. An agent has no excuse for not knowing how old its number is. It only needs to be told to say it.