MCPcopy Create free account
hub / github.com/ScriptedAlchemy/tracedecay / project_server

Method project_server

src/daemon.rs:1430–1485  ·  view source on GitHub ↗
(
        &self,
        handshake: &DaemonHandshake,
    )

Source from the content-addressed store, hash-verified

1428 }
1429
1430 async fn project_server(
1431 &self,
1432 handshake: &DaemonHandshake,
1433 ) -> Result<Arc<crate::mcp::McpServer>> {
1434 let Some(project_path) = handshake.project_path.as_ref() else {
1435 return Err(TraceDecayError::Config {
1436 message: "project server requested without project_path".to_string(),
1437 });
1438 };
1439 let canonical_project_path = project_path
1440 .canonicalize()
1441 .unwrap_or_else(|_| project_path.clone());
1442 let key = ProjectServerKey::from_handshake(canonical_project_path.clone(), handshake);
1443
1444 let mut servers = self.project_servers.lock().await;
1445 if let Some(server) = servers.get(&key) {
1446 let server = Arc::clone(server);
1447 drop(servers);
1448 // A freshly-handshaken project should be watched even on a cache
1449 // hit (the watcher may have started after this server was cached).
1450 self.git_watcher
1451 .ensure_watching(&canonical_project_path)
1452 .await;
1453 Box::pin(self.ensure_automation_scheduler(
1454 key,
1455 canonical_project_path,
1456 handshake.clone(),
1457 ))
1458 .await;
1459 return Ok(server);
1460 }
1461
1462 let cg = Box::pin(open_project_for_handshake(
1463 &canonical_project_path,
1464 handshake,
1465 ))
1466 .await?;
1467 let accounting_db = accounting_db_for_handshake(handshake).await;
1468 let registry_db = registry_db_for_handshake(handshake).await;
1469 let server = crate::mcp::McpServer::new_with_dbs(
1470 cg,
1471 handshake.scope_prefix.clone(),
1472 accounting_db,
1473 registry_db,
1474 false,
1475 )
1476 .await;
1477 servers.insert(key.clone(), Arc::clone(&server));
1478 drop(servers);
1479 self.git_watcher
1480 .ensure_watching(&canonical_project_path)
1481 .await;
1482 Box::pin(self.ensure_automation_scheduler(key, canonical_project_path, handshake.clone()))
1483 .await;
1484 Ok(server)
1485 }
1486
1487 async fn ensure_automation_scheduler(

Callers 1

serve_socket_clientFunction · 0.80

Calls 6

ensure_watchingMethod · 0.80
insertMethod · 0.80

Tested by

no test coverage detected