Modules
One module describes a GenServer's remote-callable operations for both
sides. The server side (Snodo.OTP.Server.expose/2) turns it into
Snodo.Tool.GenServer declarations: JSON in, Elixir message, reply term,
JSON out. The client side (Snodo.OTP.Proxy) uses the inverse pair:
Elixir message in, JSON out over the wire, JSON reply back to a term.
A local GenServer that stands in for a GenServer behind an MCP endpoint.
Application code keeps GenServer.call/3 and GenServer.cast/2; each
becomes a tools/call chosen by the contract.
expose Contract, target: Module inside a Snodo.Server emits one
genserver_call/genserver_cast declaration per contract operation, so
the existing Snodo.Tool.GenServer adapter does the serving: schema
validation, bounded call, tool errors for missing targets and timeouts.