Part 1 of 3 — building and testing MCP agents

"Agent" has become one of those words that means everything and nothing. So let's ground it.

On its own, a large language model does one thing: it turns text into text. Ask it a question, it predicts an answer. It can't look anything up, check a fact against a live system, or take an action in the world. Everything it "knows" is frozen at training time.

An agent changes that by wiring the model into a loop with tools. Give it a set of functions it can call — read a file, hit an API, query a database — and a loop that feeds each tool's result back to it, and something different happens. The model can now decide it needs information, ask for a tool, read what comes back, decide whether that's enough or whether it needs another tool, and only then answer.

That loop — call a tool, or answer, repeat until done — is the core of every system people call an agent, dressed up in different frameworks. But to me it seems the loop alone is not the whole definition. A loop with no stop condition is a runaway process; a loop with no tool policy is a security incident waiting to happen. When I tried to pin down what I actually configure when I set up an agent, I ended up with two separate things.