Tools are how LLMs interact with the world now. Which means tools are the runtime. Which means someone gets to define the contract.
Everyone has. Differently.
The divergences
- Parallel vs. sequential: some models emit one call at a time, others emit batches.
- Schema style: strict JSON Schema subsets, loose JSON, TypeScript-flavored, GraphQL-like.
- Error semantics: some return structured errors, others let the model see raw exceptions.
- Streaming: some stream tool-call arguments as they form, others wait for the whole call.
None of these are wrong in isolation. They're all defensible choices. But they mean you cannot write a single tool server that works identically across providers.
The tax this puts on teams
- Every tool ships with N adapters, one per provider.
- Tracing and observability needs N parsers.
- A regression in any one provider's tool behavior blocks releases for the app, even if the others are fine.
What to watch for
Two initiatives worth tracking: the Model Context Protocol from Anthropic, which tries to standardize the server side, and the various "agent gateway" products that abstract the client side. Neither has won yet. One of them probably will by 2027.
Until then: pick one provider as your primary, treat the others as secondary with a thin compatibility shim, and don't let anyone sell you a multi-provider abstraction that papers over all four differences above. It'll leak.