goose/documentation/blog/2026-01-15-why-tool-descriptions-arent-enough/index.md
Adewale Abati 3f5277538d
Some checks failed
Canary / Prepare Version (push) Has been cancelled
Unused Dependencies / machete (push) Has been cancelled
CI / changes (push) Has been cancelled
CI / Build Rust Project on Windows (push) Has been cancelled
Deploy Documentation / deploy (push) Has been cancelled
Live Provider Tests / check-fork (push) Has been cancelled
Publish Ask AI Bot Docker Image / docker (push) Has been cancelled
Publish Docker Image / docker (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
Canary / build-cli (push) Has been cancelled
Canary / Upload Install Script (push) Has been cancelled
Canary / bundle-desktop (push) Has been cancelled
Canary / bundle-desktop-intel (push) Has been cancelled
Canary / bundle-desktop-linux (push) Has been cancelled
Canary / bundle-desktop-windows (push) Has been cancelled
Live Provider Tests / changes (push) Has been cancelled
Canary / Release (push) Has been cancelled
CI / Check Rust Code Format (push) Has been cancelled
CI / Build and Test Rust Project (push) Has been cancelled
CI / Lint Rust Code (push) Has been cancelled
CI / Check Generated Schemas are Up-to-Date (push) Has been cancelled
CI / Test and Lint Electron Desktop App (push) Has been cancelled
Live Provider Tests / Build Binary (push) Has been cancelled
Live Provider Tests / Smoke Tests (push) Has been cancelled
Live Provider Tests / Smoke Tests (Code Execution) (push) Has been cancelled
Live Provider Tests / Compaction Tests (push) Has been cancelled
Live Provider Tests / goose server HTTP integration tests (push) Has been cancelled
docs: blog layout update (#8472)
Signed-off-by: Angie Jones <jones.angie@gmail.com>
Co-authored-by: Angie Jones <jones.angie@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 23:26:49 +00:00

4.7 KiB
Raw Blame History

title description image authors
Why Tool Descriptions Arent Enough I thought better tool descriptions would solve everything. They didnt. Heres what finally made MCP sampling click for me. /img/blog/tool-descriptions-banner.png
ebony

blog banner

The first question I had when I heard about MCP sampling was:

“Cant I just write better tool descriptions and tell the tool its an expert?”

Because honestly, thats what I was already doing.

If a tool wasnt behaving how I expected, Id tweak the wording. Add more detail. Clarify intent. Be more explicit. And sure, that helped a little.

But something still felt off.

The tools still werent really thinking. They were fetching data, returning text, and leaving all the heavy reasoning to my LLM. Thats when I realized the issue wasnt my descriptions. It was how the system actually worked under the hood.

Thats where MCP sampling came in. Not as a magic feature, but as a different way of structuring how tools and the LLM actually collaborate.

What actually changed my understanding

Once I realized the issue wasnt my tool descriptions but how the system itself was structured, I needed a clearer way to understand the difference.

This is the distinction that helped it click for me:

Tool descriptions influence how a tool is used Sampling changes how a tool participates in reasoning

That might still sound a little abstract, so I mapped it out visually below.

without sampling

Without sampling, the tool mostly acts like a messenger. It fetches data, returns content, and all the real reasoning happens at the top level in the LLM.

with sampling

With sampling, the behavior changes. The tool gathers its data, then uses the same LLM you already configured in Goose to ask a targeted question from its own context before returning anything. Instead of just passing information upward, its now contributing to the thinking.

Its the same model and the same agent, but the behavior changes completely.

Where Council of Mine fits in

Seeing the flow change helped me understand sampling conceptually. Council of Mine helped me understand it viscerally.

Its not MCP sampling itself. Its an example of what becomes possible once sampling exists.

Instead of making a single request to the LLM, Council of Mine uses sampling repeatedly and intentionally. Each perspective is its own conversation with the same LLM, framed by a different point of view. Those responses are then compared, debated, and synthesized into a final answer.

The server handles the orchestration. The LLM does the reasoning. Sampling is what allows that back-and-forth to happen at all.

What made this click for me was watching one question turn into multiple independent perspectives, then seeing how those perspectives shaped the final output. It took sampling from an abstract idea to something concrete.

What I landed on

Good tool descriptions still matter. This isnt a replacement for them.

But on their own, they wont get you to truly agentic behavior. Descriptions shape behavior at the surface. Sampling changes how the reasoning itself is structured.

That distinction was the missing piece for me. And once I could actually see the flow, everything else started to make more sense.

If this helped make things click, Id recommend trying the Council of Mine extension for yourself. Its one of the clearest ways to see MCP sampling in action.

<head> </head>