40 lines
2.4 KiB
Markdown
40 lines
2.4 KiB
Markdown
# Why ollie Does Not Support MCP
|
|
|
|
MCP (Model Context Protocol) is an open protocol that standardizes how applications provide context and tools to LLMs via JSON-RPC over stdio. Many agent frameworks implement MCP client support to interoperate with a growing ecosystem of MCP servers.
|
|
|
|
ollie removed its MCP client implementation after observing that the protocol adds complexity without adding capability, given ollie's architecture.
|
|
|
|
## The argument
|
|
|
|
ollie exposes exactly one built-in tool: `shell`. Every other capability — file operations, memory, search, sub-agents — is a tool script promoted to a native callable function via the tool registry. Skills teach the agent when and how to use each tool.
|
|
|
|
This means any operation an MCP server can perform, a tool script can also perform:
|
|
|
|
- An MCP server that queries a database becomes a `s/{id}/t/db_query` script that calls the database CLI.
|
|
- An MCP server that searches the web becomes a `s/{id}/t/web_search` script that calls `curl` or a search CLI.
|
|
- An MCP server that manages files is redundant — `s/{id}/t/file_read`, `s/{id}/t/file_write`, `s/{id}/t/file_edit` already exist.
|
|
|
|
The `x/elevate` plugin is a concrete example: it replaced an MCP server that ran commands outside the sandbox with a 50-line shell script. Same capability, no protocol overhead, composable with pipes, debuggable with `cat`.
|
|
|
|
## What MCP adds vs. what ollie already has
|
|
|
|
| MCP feature | ollie equivalent |
|
|
|---|---|
|
|
| `tools/list` (structured discovery) | `ls $OLLIE_TOOLS_PATH/` + `grep` for descriptions |
|
|
| `tools/call` (invoke a tool) | `shell` or promoted tool call |
|
|
| JSON-RPC framing | stdin/stdout/exit code |
|
|
| Subprocess lifecycle management | The sandbox manages process lifecycle |
|
|
| Typed tool schemas | Tool scripts are self-documenting; skills describe usage |
|
|
|
|
## What MCP costs
|
|
|
|
- A JSON-RPC client, transport layer, and initialization handshake (`mcp/client.go`, `mcp/transport.go`).
|
|
- A `tools.Server` adapter wrapping the MCP client (`tools.NewServer`, `mcpServer`).
|
|
- MCP server configuration in the agent config (`mcpServers` in config JSON).
|
|
- Connection management and error handling for subprocess-backed servers.
|
|
- An abstraction boundary that obscures what is actually a shell command.
|
|
|
|
## Interop with existing MCP servers
|
|
|
|
If a third-party MCP server is genuinely needed, a thin bridge script in `t/` can shell out to an MCP client CLI. This keeps MCP as an optional external dependency rather than a core architectural concern.
|