Thursdays with Koog: MCP Knosh 0.4.0, an agent harness from CommonsWare, now supports the Model Context Protocol (MCP) via a Koog-supplied bridge, allowing developers to configure remote or local MCP servers in its knosh.json file. The update introduces an 'mcp' object that maps server identifiers to MCP server details, with support for both remote servers over Streamable HTTP and local servers spawned as child processes. When working with coding agents, you will from time to time see sites that tell you to "add an MCP server". Here, MCP is the Model Context Protocol https://en.wikipedia.org/wiki/Model Context Protocol , a specification from Anthropic. MCP is a way to extend agent harnesses with new tools, where the protocol itself describes how the harness discovers available tools and how it invokes them. Developers creating agent harnesses like Knosh https://knosh.commonsware.com or otherwise interacting with LLMs though libraries like Koog https://docs.koog.ai have two main angles for considering MCP: Knosh 0.4.0 handles the former, by way of a Koog-supplied MCP bridge, surfacing MCP-supplied tools into Koog's own tool system https://pac.commonsware.com/archive/thursdays-with-koog-tools/ . Knosh's config file by default at ~/.config/knosh/knosh.json now supports an mcp object: { "mcp": { "composables": { "type": "remote", "url": "https://composables.com/mcp" } } // rest of configuration } That gets turned into a Map tying string identifiers e.g., composables to details of the MCP server that should be made available to agents. MCP supports two types of servers: The data being exchanged and the general JSON structure of that data is the same in both cases. The difference is mostly in the transport layer. However, that difference requires dedicated configuration structures, as a remote server requires a URL, while a local server requires the command to run to start the server. In Knosh's case, the JSON configuration eventually turns into McpServerEntry instances https://codeberg.org/commonsguy/knosh/src/tag/0.4.0/lib/knosh-agents/src/main/kotlin/com/commonsware/knosh/agents/McpServerEntry.kt : / A resolved MCP server, built from a KnoshConfig.mcp entry. Either a LocalMcpServerEntry spawned as a child process or a RemoteMcpServerEntry reached over MCP Streamable HTTP . / public sealed interface McpServerEntry { / The in-Knosh server identifier the key under mcp in knosh.json . / public val name: String / The server type: "local" or "remote" . / public val type: String / Whether this server is active. / public val enabled: Boolean / The server's timeout in seconds, or null for no configured timeout. / public val timeout: Int? / Whether a startup failure is fatal. / public val required: Boolean } / A resolved local MCP server, spawned as a child process. @property name the in-Knosh server identifier the key under mcp in knosh.json @property command the server's resolved argv from McpServerConfig.effectiveCommand @property enabled whether this server is active @property environment environment variables to pass to the server process @property timeout the server's timeout in seconds, or null for no configured timeout @property required whether a startup failure is fatal / @Poko public class LocalMcpServerEntry public override val name: String, public val command: List