feat(mcp): add MCP client abstraction and feature flag
Introduce the foundation for the Multi-Client Provider (MCP) architecture.
This phase includes:
- A new `McpClient` trait to abstract tool execution.
- A `LocalMcpClient` that executes tools in-process for backward compatibility ("legacy mode").
- A placeholder `RemoteMcpClient` for future development.
- An `McpMode` enum in the configuration (`mcp.mode`) to toggle between `legacy` and `enabled` modes, defaulting to `legacy`.
- Refactoring of `SessionController` to use the `McpClient` abstraction, decoupling it from the tool registry.
This lays the groundwork for routing tool calls to a remote MCP server in subsequent phases.
This commit is contained in:
33
crates/owlen-core/src/mcp/client.rs
Normal file
33
crates/owlen-core/src/mcp/client.rs
Normal file
@@ -0,0 +1,33 @@
|
||||
use super::{McpToolCall, McpToolDescriptor, McpToolResponse};
|
||||
use crate::{Error, Result};
|
||||
use async_trait::async_trait;
|
||||
|
||||
/// Trait for a client that can interact with an MCP server
|
||||
#[async_trait]
|
||||
pub trait McpClient: Send + Sync {
|
||||
/// List the tools available on the server
|
||||
async fn list_tools(&self) -> Result<Vec<McpToolDescriptor>>;
|
||||
|
||||
/// Call a tool on the server
|
||||
async fn call_tool(&self, call: McpToolCall) -> Result<McpToolResponse>;
|
||||
}
|
||||
|
||||
/// Placeholder for a client that connects to a remote MCP server.
|
||||
pub struct RemoteMcpClient;
|
||||
|
||||
#[async_trait]
|
||||
impl McpClient for RemoteMcpClient {
|
||||
async fn list_tools(&self) -> Result<Vec<McpToolDescriptor>> {
|
||||
// TODO: Implement remote call
|
||||
Err(Error::NotImplemented(
|
||||
"Remote MCP client is not implemented".to_string(),
|
||||
))
|
||||
}
|
||||
|
||||
async fn call_tool(&self, _call: McpToolCall) -> Result<McpToolResponse> {
|
||||
// TODO: Implement remote call
|
||||
Err(Error::NotImplemented(
|
||||
"Remote MCP client is not implemented".to_string(),
|
||||
))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user