AI Engineer World's Fair 2025
Will Agent Evaluation via MCP Stabilize Agent Networks?
Read the talk
Can MCP-connected evaluations help agents correct themselves?
A marketing-message revision and a hotel reservation agent show how evaluator discovery, scores and explanations can become a feedback loop inside an agent.
From a talk by Ari Heljakka
Before you start: Familiarity with LLM agents and tool calling is helpful; no prior experience with MCP or Root Signals is required.
How do you know an agent is making progress?
When an agent cannot finish a task in one shot, how do you know its next action moves it closer to the goal? The question becomes harder for a network of agents: you cannot observe everything, the environment changes, and advance testing cannot cover every situation. Ari Heljakka, introducing himself as CEO of Root Signals, starts with the prospect of stable agent swarms handling broad knowledge work. Stability is the condition that makes that prospect interesting—and the part that remains difficult.
Evaluations offer a way to measure progress, but attaching an evaluation stack is only the beginning. The feedback process must improve both the agent and its evaluators. Checks need systematic use, maintenance and adjustment as the actual business requirements become clearer. Otherwise, adding more measurements does little to make the workflow more dependable.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Evaluate what the agent understands and what it does
An agent has more than one surface to evaluate. Its representation of the world can be wrong even when its actions look reasonable; its actions can be inappropriate even when it has the facts right. Heljakka separates these concerns into two broad groups:
| Evaluation surface | Questions to ask |
|---|---|
| Representation | Does it model reality accurately, communicate it correctly and ground claims in truth? |
| Behavior | Does it infer the right goals, make progress and select appropriate tools? |
Comprehensive coverage would address both groups. A practical starting point is a smaller set of checks that can be applied consistently, rather than an exhaustive evaluation design that never becomes part of the workflow.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Turn hotel requirements into a feedback loop
A hotel reservation agent makes the evaluation requirements concrete. It needs checks for policy adherence to that hotel's reservation rules, accuracy of its answers to guests, and appropriate behavior overall. The demonstration uses evaluators configured in Root Signals, but the operational requirement applies to any platform: you need to see what each evaluator does, maintain the collection and improve it systematically when dozens of checks run repeatedly.
The stabilization loop turns those checks into information the agent can use:
- The agent attempts a task and produces an output.
- An evaluation engine assesses that output.
- The engine returns a numeric score and an explanation of what went wrong or well.
- The agent uses that feedback to adjust its work.
The score supplies a measurement; the explanation supplies material for a revision. Model Context Protocol, or MCP, connects the agent to the evaluation engine. The corrective information comes from the evaluators reached through that connection.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Discover a judge, then revise a marketing message
The first experiment uses text rather than agent code: “Root Signals MCP Server is awesome, lets you access evals nicely.” Before trying to improve that sentence, the client needs to discover which evaluations are available. In Cursor, Heljakka asks MCP to list his judges. In Root Signals terminology, a judge is a collection of evaluators; individual evaluators can also be listed directly.
The Root Signals MCP server has already been attached to Cursor before the demonstration. It exposes evaluators Heljakka configured earlier, along with general-purpose evaluators. The discovery request finds a marketing message quality judge, providing a relevant evaluation target without requiring him to navigate the evaluator collection manually.
He then asks: “Optimize the message by using the marketing message optimization judge.” Cursor goes back through MCP to find the requested judge and score the sentence. It identifies issues and proposes an improved version based on that feedback, then runs a final evaluation. This is the feedback loop in an inspectable form: discover, evaluate, revise and evaluate again.
The interface does not immediately expose all the scores. Heljakka points out that the user can ask to see them; the displayed dimensions include persuasiveness, quality of writing and engagingness. The final displayed scores are between zero and one. The demonstration shows feedback and a proposed revision, but does not establish a numerical before-and-after improvement.
This manual interaction makes visible the process that could run inside an agent. There are two ways to choose its checks:
- Prescribed evaluation: tell the agent exactly which evaluators or judges to run.
- Agent-selected evaluation: let the agent discover the collection and choose relevant checks itself.
The next demonstration moves that choice from a Cursor conversation into a running agent.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Run the hotel agent with evaluation off, then on
The second experiment uses a hotel reservation agent built with Pydantic AI. Cursor now serves as the environment for viewing the code; it is no longer the MCP client conducting the conversation. Heljakka runs the agent separately in a console.
The agent represents Shire Hotel, next door to ACME Hotel. Its business policy prohibits recommending ACME and preferably avoids mentioning it at all. The test request asks about Shire while hinting at interest in the neighboring hotel. Heljakka describes this as an artificial example: it is designed to expose a precise conflict between responding helpfully to the guest and following the hotel's policy.
With MCP evaluation disabled, the agent politely explains that rooms will be available later—but also calls ACME Hotel a great option. That is the unwanted behavior. Heljakka returns to the configuration, sets the flag controlling MCP evaluation to true, and reruns the same console command.
During the enabled run, the console shows evaluator discovery and repeated calls through the MCP server. Multiple evaluators run, with some called more than once. The resulting response no longer mentions ACME, and the trace shows that the agent invoked the Hotel Shire booking policy evaluator without being explicitly told to select that particular evaluator.
| Demonstrated run | Evaluation activity | Response concerning ACME |
|---|---|---|
| MCP evaluation disabled | No MCP evaluation | Recommends ACME as a great option |
| MCP evaluation enabled | Discovers and invokes evaluators | Does not mention ACME |
The relevant distinction is selection of the particular hotel evaluator, not an agent spontaneously deciding to evaluate without any guidance. Heljakka presents relevant evaluator selection as usually possible, while allowing specific checks to be enforced when required. The observed result demonstrates correction in this hotel example; it does not establish reliable stabilization of an agent network or swarm. Extending the same feedback pattern to more complex agents remains the proposed next step.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Make evaluator maintenance part of agent development
Putting this approach into practice starts with the evaluation platform. It needs to support diverse checks and their lifecycle: creating, maintaining and optimizing evaluators as well as the agent. Repeated evaluation has an operating cost, so improving the evaluation stack is also an economic concern. A growing collection of checks must remain useful enough to justify running it.
The adoption sequence follows the demonstrations. First, run evaluations manually, outside the agent's live workflow, as with the marketing message. Inspect how the evaluators behave, what their feedback reveals and where they fail. Then attach them to the agent through MCP. Greater control, transparency and dynamic self-correction are the intended benefits of that sequence, rather than measured guarantees.
Heljakka closes by describing the Root Signals MCP server as freely available and anticipating similar integrations from other evaluation platforms. Free server availability does not make repeated evaluation execution free. The useful capability is a connection through which an agent can receive maintained, task-relevant feedback and act on it.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Resources
From the talk
Evaluator and judge tools for MCP clients, now preserved in an archived repository under the Scorable name.
Further reading
A Pydantic AI hotel agent with competitor restrictions, evaluator acceptance criteria and MCP integration.
- MCP tools specificationDocumentation
The March 2025 specification for exposing and invoking tools through MCP.
Updates since the talk
Current setup and lifecycle guidance for connecting Pydantic AI agents to local and remote MCP servers.
Read the complete timestamped transcript
- 0:03
Hi, this is Ari Heljakka, the CEO of Root Signals, uh, the platform for measuring, controlling, and optimizing LLM-based agents, chatbots, and workflows, both for AI product companies and enterprises.
- 0:19
And today, I'm trying to answer the question whether agent evaluation by MCP, or Model Context Protocol, could stabilize agents and agent networks and swarms.
- 0:33
So most of us are already thinking along the lines that if you only had a stable agent swarm, you could, in principle, solve any kinds of knowledge work problems.
- 0:47
And the only limitation here is that those swarms tend not to be stable when you try to solve increasingly complex problems. And the reasons relate to, uh, both for our inability to observe them perfectly and the dynamic environment, uh, difficulties of testing them, uh, comprehensively beforehand, et cetera.
- 1:10
And, uh, also it is often not clear whether the agents are making progress consistently towards the goal in the cases where they just don't achieve it on basically one shot.
- 1:20
Uh, so, uh, h-how do we start, uh, solving this problem in a more robust manner? The general answer to the question is going to be evaluations or evals, uh, but not in a way that you would think.
- 1:34
So, uh, firstly, many people tend to oversimplify, uh, the questions or question of evaluations. And, uh, if you just go out there and you s- you basically just take some eval stack and you add it, then the outcome is, is, is like this.
- 1:51
That alone will probably not take you anywhere. Just the same, uh, same, uh,
- 1:59
kind of, uh, outcome if you don't actually systematically use evaluations, uh, in a way that, uh, not only improves those agents and workflows, but also those evaluation stacks themselves continuously develop and, uh, and, uh, grow more aligned with, uh, with your actual, uh, business requirements.
- 2:22
So the reason, uh, this is difficult is fundamentally because, uh, if you want to evaluate all aspects of agent behaviors and internal representations, you have a very complex landscape as shown here.
- 2:35
Uh, on the links below the video or attached to the video, you can also find, uh, my previous talk on this same topic where I, I went through this in more detail.
- 2:43
But in short, you have both, uh, evaluations for the left-hand side, which is, uh, in a way the agent represents reality. Well, how it, uh, models the reality and discusses the reality with the user, and how it's grounded to reality in terms of, uh, what is true.
- 3:02
And on the other hand, on the right-hand side, you have behavioral aspects, such as whether the a- agent actually inferred the right goals, whether it's, uh, making progress towards those goals, whether it selects the light- right tools on the path to get there, et cetera, et cetera.
- 3:17
Uh, so in principle, you would want to evaluate all these things, but at least getting started with some would probably take us somewhere if we are just, uh, be able to do that consistently.
- 3:29
Uh, so first to get started as an example, uh, we need to have some kind of a, a clear, uh, framework for actually setting up the evaluators. So for example, in this case, we are looking at, uh, reservation, uh, agent for a hotel.
- 3:47
And for this purpose, we would have eva- evaluators such as, uh, the ones mentioned here, like policy adherence to that spec- specific hotel's, uh, reservation policy, uh, accuracy of, of the, uh, outputs of the agent to the user, and, uh, and then of course, the, uh, um, the appropriate, uh, behavior overall.
- 4:08
Uh, so you need to, to, to set up, uh, these evaluators somewhere. These has-- have been set up, uh, in Root Signals. But wherever you do, uh, make sure that you have both, uh, good visibility to how you can create large stacks of evaluators and how you can maintain them and improve them systematically over time when you,
- 4:27
when you have to run dozens of them all the time. Uh, so what we want to achieve is, uh, is a stabilization loop where, uh, the agent attempts a certain task.
- 4:39
It-- the out- output of the task will get evaluated by the evaluation engine, and then feedback in the form of, uh, numeric score and also, uh, explanation of what went wrong comes back to the agent, or the explanation of, uh, what went well as well.
- 4:56
Uh, so using that information, the agent can then improve its own performance. So these needs to come, come from the eval engine. And in order to attach these agents, uh, the new, uh, latest, greatest method is going to be the Model Context Protocol or the MCP.
- 5:12
So let's look at, uh, some practical examples next. And we will start with, uh, with something very simple.
- 5:22
So for this, uh, first experiment, we will not even have code. We will just be looking at, at text. So if the agent or whatever workflow you're running would, uh, out- output, uh, this sort of, uh, sentence, like a Root Signals MCP Server is awesome, lets you access evals nicely.
- 5:39
And, and now you want to measure and also improve, uh, this
- 5:46
specific text that might be coming out of the agent. So for this purpose, uh, you firstly need to find which evals you want to run on it. So we can actually ask, uh, the cursor UI, uh, through MCP to firstly list the judges that I have available.
- 6:07
You can also list evaluators directly. Judges would be collections of evaluators in this, uh, specific terminology. So I've already attached the, uh, the, the free Root Signals MCP server that you can get from GitHub, and I just added it on, on Cursor.
- 6:24
And what this MCP, uh, server lets you do is gives you access to these evaluators and these judges that I have created for myself earlier and then some, some universal judges, uh, universal evaluators that can be used, used anywhere.
- 6:38
So importantly, the first one here that I happen to be interested in in this case was this marketing message quality judge. So it was just found by, by what I wrote here.
- 6:47
So I can then very freely just, uh, or loosely just, uh, ask Cursor to measure and improve this, uh, this marketing statement on the left by just saying that, uh, [keyboard clacking] "Optimize the message by using the marketing message optimization judge."
- 7:08
And at this point, Cursor is going again through, through the MCP interface, uh, back to the, uh, judge and evaluator stack. It will find again that specific judge I was interested in.
- 7:22
It will score, uh, this message on the left, and then it will, uh, try to figure out how to improve that score and score it again if everything goes nicely.
- 7:34
So let's, let's see if it's, uh, able to actually do that. And this is actually now real time. Okay. Actually, at least it's finding various issues with it, and then it continues, uh, the process of trying to improve.
- 7:50
Let's see if we can, we can get the scores. Okay, it's already suggesting an improved version of that based on the scores. But let's see if we'll also see the scores from, from here.
- 8:02
Sometimes they are shown immediately, sometimes, uh, they are shown later. So apparently, this time it didn't show the original scores for us. But now it's, uh, it's, uh, running the final evaluation to get us with the final scores.
- 8:19
If you don't see the scores, you can actually ask it to show them. Now it's showing them. So, okay, so persuasiveness, quality of writing, engagingness, uh, numbers shown here.
- 8:29
You can see numbers that, that it started out with. You can, you can see, uh, final numbers. Now it's only showing the, the final, final numbers between zero and one.
- 8:37
So this is basically the same thing that will happen inside your agent, but now we just called it manually to make it easy for us to, us to see.
- 8:45
For the agent, you can either exactly explain which evaluators and which judges to run, or you can just, uh, just let it pick, uh, pick them, uh, itself. So next we'll look at an actual agent example.
- 9:03
And, uh, now I want to be really clear. We are no longer talking to MCP through Cursor, uh, so I'm removing this from, from our field of view. Uh, so I have now an actual very simple, uh, hotel reservation agent here, uh, running on Pydantic AI.
- 9:24
And this is, uh, this is just, just happens to be implemented or actually, uh, viewed through Cursor. Uh, and, uh, in, in fact, I'm going to run this, uh, th- this, uh, separately on the console.
- 9:38
And, uh, what happens in this, uh, reservation agent is that the user is going to ask something a little bit dangerous. So this is a reservation agent for Shire Hotel.
- 9:51
And the, the Shire Hotel happens to be next to the ACME Hotel. So in no circumstances is the Shire Hotel reservation system supposed to be, uh, recommending or preferably saying anything about the ACME Hotel.
- 10:05
Uh, so the user is now asking about the Shire specifically, but actually hinting that it would also be interested on the, on the hotel, uh, next to it. A bit maybe artificial example, but just, uh, showing this, uh, this very precisely what is the problem.
- 10:19
So let's see what happens when you run this without the MCP.
- 10:28
So currently, the MCP is off, and let's see what the agent returns. Okay, it will, uh, politely say that, uh, there will be rooms available a bit later. Uh, but it's also saying that, uh, that the ACME Hotel is also a great option.
- 10:44
So this is what they don't want to see. So let's go back. We will turn on, uh, the MCP server here and see if that makes a difference. It just, uh, set this to true, and it will then add, uh, it will actually use this, uh, this MCP server here for evaluation.
- 11:04
So let's go back to, uh, then running this same command again.
- 11:11
And while it's running, it's, uh, calling the MCP server here. So you will see that, uh, there will be a lot of activity happening, uh, where evaluators are being listed and they will be, uh, there will be calls back and forth through the evaluator, uh, lists and running many of them and some of them several times even
- 11:30
if we want to, uh, make maximum use of this.
- 11:38
All right. Uh, so as you can see now, the agent came back, and now it's, uh, not talking about the ACME Hotel again. And we can see that it was invoking this Hotel Shire booking policy evaluator, even though we didn't even ask it specifically to do that.
- 11:53
So it can, uh, in most circumstances, pick relevant ones from the list. But you can also, uh, enforce specific ones if, if you, if you want to be sure.
- 12:03
Uh, so this seems to have w- worked. And, uh, then let's go back to the big picture
- 12:12
So what we have now seen is, uh, agent being attached to the evaluation engine through the MCP and getting the feedback and improving its own behavior, and you can see how this, uh, sort of approach would scale to more complex examples.
- 12:26
So then, uh, to, uh, to summarize on how to approach this, you should first start by making sure that your evaluation library, evaluation platform, whatever you're using, is sufficiently powerful to, to support all this, both in terms of diversity of evaluators that you can create and also their, uh, life cycle maintenance and optimization on both the,
- 12:51
uh, letting you both optimize the agent itself, but also you need to be able to optimize, uh, the, uh, the evaluators, uh, because, uh, you will be running a lot of them and they will cost you money.
- 13:04
Also, uh, it's a good idea to start with, uh, running the MCP manually offline like we did with the marketing message example, so you- so that you first understand roughly what is happening, and then you're able to, uh, get better and better transparency to, uh, to the, uh, ways in which those evaluators can work and, and not
- 13:22
work. And finally, then you will be attaching them, uh, the evaluators through the MCP, uh, to the agents, and, uh, this promises to make everything more controllable, more transparent, and also, like, dynamically, uh, self, uh, improving and self-correcting.
- 13:41
So this is all, uh, the Root Signals MCP Server is, uh, is available for free. Uh, others will surely be, be appearing f- to allow all kinds of evaluating, evaluation platforms and framework to be implemented, uh, as, uh, as part of your, uh, agent stack.
- 13:59
Uh, so I thank you for your interest, and, uh, uh, happy hacking.