Lessons / Power
MCP servers — give the agent new hands
When the agent needs to touch a system it can't yet reach, you wrap that system as an MCP server — a set of tools the agent can call. This is the Agents-First idea in practice: every product now has an agent as a customer, and an MCP server is how you make your system delegable instead of only consuming others'.
The key is to expose verb-first tools with typed parameters and structured errors — create_task(...), not a raw run_query(sql) wrapper. A lazy wrapper just renames a database call; a real tool models the action.
You don't have to be an engineer for this lesson to land. The hard, valuable part isn't writing the server — it's designing the contract: the verb, the typed inputs, the structured errors (e.g. LP_NOT_FOUND, STALE_VALUATION), and a short AGENTS.md saying how it's used. That design is the actual skill; the implementation is an engineering hand-off you can delegate or commission.
What a real tool contract looks like
Don't take it on faith — here's the difference, shown. Say you run a fund and want the agent to look up a limited partner's position:
- ❌ Lazy wrapper:
run_query(sql)— renames a database call, leaks the mechanism, and hands the agent a footgun (it now has to write SQL, and can write any SQL). - ✅ Verb-first tool:
get_lp_position(lp_id, as_of?)→ returns a typed result{ committed, called, nav, as_of }, with named errors the agent can actually reason about:LP_NOT_FOUND— no LP with that id.STALE_VALUATION— the NAV is older than the date you asked for; it returns the last-known value plus a warning instead of silently passing off stale numbers as current.
Then one line of AGENTS.md tells the agent the rules of use:
get_lp_positionis read-only. Always passas_offor board materials. OnSTALE_VALUATION, surface the warning — never present a stale NAV as current.
That contract — the verb, the typed shape, the named errors, the usage rule — is the lesson. Whether you write the code or hand the spec to an engineer is secondary. (If you are technical: that same design drops straight into an MCP server — stand it up and connect it the way you connected email in the from-scratch track.)
Try it now
Take one real capability of a system you own and expose it:
Help me wrap [system] as an MCP server. Start with the single most-used operation as a verb-first tool with typed parameters and structured errors — not a raw query wrapper. Write the tool definition first, then a short AGENTS.md contract, then implement it.
You've got it when…
You've designed a clean contract for one real capability — a verb-first tool with a typed schema and structured errors, not a thin wrapper around a query string — whether or not you've implemented it yet. You've moved from using agent tools to designing them.
Quiz — did it land?
Your tutor checks these before marking the lesson complete:
- What's the difference between a verb-first tool and a "lazy wrapper"?
- Expose one real capability you own as an MCP tool with a typed schema — which capability?