Allow setting the server `instructions` returned at the initialize handshake
### Problem There's currently no way to populate the MCP `instructions` field. The protocol lets a server hand the client a short "here's how to use me" string in its `initialize` response, and the SDK already supports it (`Mcp\Server\Builder::setInstructions()`) — but `McpServerFactory` never calls it, and there's no config key or hook to supply a value. So the plumbing is sitting there one method call away, and nothing can actually reach it. It's worth wiring up because that field is the most direct place to tell an agent something at connect time (e.g. "use this server's tools before doing X"). It goes to every client on initialize, it's client-agnostic, and it needs no file or out-of-band setup. Right now that channel is just dark. ### Proposed resolution Keep it small and additive: - Add an optional `server_instructions` setting, empty by default. - Add `hook_mcp_server_instructions_alter()` so a module can set or refine the value in code rather than only through config. - Have the factory read the setting, run it through the alter hook, and pass the result to `setInstructions()`. Empty or whitespace-only normalizes to `NULL` so the field is simply omitted — meaning default output is byte-for-byte what it is today, and nobody who isn't using this notices a thing. No update hooks / no BC concerns, per the "still pre-release, no migrations" rule. ### Status I've got a branch ready with the change plus a kernel test covering the three paths (configured value passes through, empty/whitespace is omitted, and the alter hook can set/override/clear it). Also confirmed over STDIO that the `instructions` field shows up in the handshake when set and is absent when not. Will open the MR against `2.x`.
issue