# snodo_otp v0.4.3 - Table of Contents > GenServer calls and casts over MCP, on Snodo.Tool.GenServer ## Pages - [snodo_otp](readme.md) ## Modules - [Snodo.OTP.Contract](Snodo.OTP.Contract.md): 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. - [Snodo.OTP.Proxy](Snodo.OTP.Proxy.md): 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. - [Snodo.OTP.Server](Snodo.OTP.Server.md): `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.