use crate::commands::build_auth;
use crate::commands::safety::SafetyProfile;
use crate::core::prelude::*;
use anyhow::Result;
use clap::Args;
#[derive(Args, Debug, Clone)]
pub struct McpArgs {
#[arg(long)]
pub readonly: bool,
}
pub async fn run_mcp(args: McpArgs) -> Result<()> {
let config = ConfigLoader::load().await?;
let auth = build_auth(&config).await?;
let readonly = args.readonly;
let profile = SafetyProfile {
readonly,
..SafetyProfile::default()
};
let server = crate::mcp::McpServer::new(auth, profile);
eprintln!(
"grr mcp: {} tools over stdio (JSON-RPC 2.0, newline-delimited){}",
server.tool_count(),
if readonly {
"; --readonly: writes refused"
} else {
""
}
);
let reader = tokio::io::BufReader::new(tokio::io::stdin());
let mut writer = tokio::io::stdout();
crate::mcp::serve(&server, reader, &mut writer).await
}