feat: MCP support for agentic CLI providers (#6972)

Signed-off-by: Adrian Cole <adrian@tetrate.io>
This commit is contained in:
Adrian Cole
2026-02-12 07:37:52 +08:00
committed by GitHub
parent c6e27b8f84
commit 8d59c2dced
57 changed files with 1196 additions and 254 deletions
+6 -4
View File
@@ -740,7 +740,7 @@ impl GooseAcpAgent {
goose::model::ModelConfig::new(&model_id)?
}
};
let provider = (self.provider_factory)(model_config).await?;
let provider = (self.provider_factory)(model_config, Vec::new()).await?;
agent.update_provider(provider.clone(), &session.id).await?;
Ok(provider)
}
@@ -958,9 +958,11 @@ impl GooseAcpAgent {
let model_config = goose::model::ModelConfig::new(model_id).map_err(|e| {
sacp::Error::invalid_params().data(format!("Invalid model config: {}", e))
})?;
let provider = (self.provider_factory)(model_config).await.map_err(|e| {
sacp::Error::internal_error().data(format!("Failed to create provider: {}", e))
})?;
let provider = (self.provider_factory)(model_config, Vec::new())
.await
.map_err(|e| {
sacp::Error::internal_error().data(format!("Failed to create provider: {}", e))
})?;
let agent = {
let sessions = self.sessions.lock().await;
+2 -2
View File
@@ -33,7 +33,7 @@ impl AcpServer {
let disable_session_naming = config.get_goose_disable_session_naming().unwrap_or(false);
let config_dir = self.config.config_dir.clone();
let provider_factory: ProviderConstructor = Arc::new(move |model_config| {
let provider_factory: ProviderConstructor = Arc::new(move |model_config, extensions| {
let config_dir = config_dir.clone();
Box::pin(async move {
let config_path = config_dir.join(goose::config::base::CONFIG_YAML_NAME);
@@ -41,7 +41,7 @@ impl AcpServer {
let provider_name = config
.get_goose_provider()
.map_err(|_| anyhow::anyhow!("No provider configured"))?;
goose::providers::create(&provider_name, model_config).await
goose::providers::create(&provider_name, model_config, extensions).await
})
});
+1 -1
View File
@@ -63,7 +63,7 @@ pub async fn run_initialize_without_provider() {
let temp_dir = tempfile::tempdir().unwrap();
let provider_factory: ProviderConstructor =
Arc::new(|_| Box::pin(async { Err(anyhow::anyhow!("no provider configured")) }));
Arc::new(|_, _| Box::pin(async { Err(anyhow::anyhow!("no provider configured")) }));
let agent = Arc::new(
GooseAcpAgent::new(
+1 -1
View File
@@ -203,7 +203,7 @@ pub async fn spawn_acp_server_in_process(
}
let provider_factory = provider_factory.unwrap_or_else(|| {
let base_url = openai_base_url.to_string();
Arc::new(move |model_config| {
Arc::new(move |model_config, _extensions| {
let base_url = base_url.clone();
Box::pin(async move {
let api_client =