// An example script to run an MCP server use anyhow::Result; use goose_mcp::MemoryRouter; use mcp_server::router::RouterService; use mcp_server::{ByteTransport, Server}; use tokio::io::{stdin, stdout}; use tracing_appender::rolling::{RollingFileAppender, Rotation}; use tracing_subscriber::{self, EnvFilter}; #[tokio::main] async fn main() -> Result<()> { // Set up file appender for logging let file_appender = RollingFileAppender::new(Rotation::DAILY, "logs", "goose-mcp-example.log"); // Initialize the tracing subscriber with file and stdout logging tracing_subscriber::fmt() .with_env_filter(EnvFilter::from_default_env().add_directive(tracing::Level::INFO.into())) .with_writer(file_appender) .with_target(false) .with_thread_ids(true) .with_file(true) .with_line_number(true) .init(); tracing::info!("Starting MCP server"); // Create an instance of our counter router let router = RouterService(MemoryRouter::new()); // Create and run the server let server = Server::new(router); let transport = ByteTransport::new(stdin(), stdout()); tracing::info!("Server initialized and ready to handle requests"); Ok(server.run(transport).await?) }