Skip to content
Merged
152 changes: 152 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ members = [
"crates/term",
"crates/preview-mcp",
"crates/orchestrate-mcp",
"crates/computer-use-mcp",
"crates/ui",
"crates/app",
]
Expand Down
1 change: 1 addition & 0 deletions crates/agent/examples/acp_probe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ fn main() {
interaction_mode: InteractionMode::Build,
mcp_server: None,
orchestrate_server: None,
computer_use_server: None,
launch_env: LaunchEnv::default(),
extra_args: Vec::new(),
acp: Some(AcpAgent {
Expand Down
1 change: 1 addition & 0 deletions crates/agent/examples/image_probe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ fn main() {
interaction_mode: InteractionMode::Build,
mcp_server: None,
orchestrate_server: None,
computer_use_server: None,
launch_env: Default::default(),
extra_args: Vec::new(),
acp: None,
Expand Down
1 change: 1 addition & 0 deletions crates/agent/examples/interrupt_probe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ fn main() {
interaction_mode: Default::default(),
mcp_server: None,
orchestrate_server: None,
computer_use_server: None,
launch_env: Default::default(),
extra_args: Vec::new(),
acp: None,
Expand Down
1 change: 1 addition & 0 deletions crates/agent/examples/probe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ fn main() {
interaction_mode,
mcp_server: None,
orchestrate_server: None,
computer_use_server: None,
launch_env: Default::default(),
extra_args: Vec::new(),
acp: None,
Expand Down
1 change: 1 addition & 0 deletions crates/agent/examples/read_only_probe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ async fn run(provider: ProviderKind) -> i32 {
interaction_mode: InteractionMode::Build,
mcp_server: None,
orchestrate_server: None,
computer_use_server: None,
launch_env: Default::default(),
extra_args: Vec::new(),
acp: None,
Expand Down
1 change: 1 addition & 0 deletions crates/agent/examples/steer_probe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ fn main() {
interaction_mode: InteractionMode::Build,
mcp_server: None,
orchestrate_server: None,
computer_use_server: None,
launch_env: Default::default(),
extra_args: Vec::new(),
acp: None,
Expand Down
23 changes: 19 additions & 4 deletions crates/agent/src/acp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -410,10 +410,14 @@ async fn handshake(
let caps = init.agent_capabilities.clone();
// Capability gate: tcode's MCP servers are loopback streamable-HTTP
// endpoints, so they may only be offered to agents that speak MCP over HTTP.
let registrations: Vec<_> = [&opts.mcp_server, &opts.orchestrate_server]
.into_iter()
.flatten()
.collect();
let registrations: Vec<_> = [
&opts.mcp_server,
&opts.orchestrate_server,
&opts.computer_use_server,
]
.into_iter()
.flatten()
.collect();
let mcp_servers = mcp_servers(&registrations, &caps);
if !registrations.is_empty() && mcp_servers.is_empty() {
log::info!(
Expand Down Expand Up @@ -2261,6 +2265,17 @@ mod tests {
};
assert_eq!(mcp_servers(&[&registration, &orchestrate], &caps).len(), 2);
assert_eq!(mcp_servers(&[&orchestrate], &caps).len(), 1);

let computer_use = McpRegistration {
name: McpRegistration::SERVER_NAME_COMPUTER_USE.into(),
url: "http://127.0.0.1:5322/mcp".into(),
bearer_token: "computer-token".into(),
};
let servers = mcp_servers(&[&registration, &orchestrate, &computer_use], &caps);
assert_eq!(servers.len(), 3);
let value = serde_json::to_value(&servers[2]).unwrap();
assert_eq!(value["name"], "tcode_computer_use");
assert_eq!(value["headers"][0]["value"], "Bearer computer-token");
}

#[test]
Expand Down
Loading