use rust_mcp_schema::schema_utils::CallToolError;
use rust_mcp_schema::CallToolResult;
use rust_mcp_sdk::macros::{mcp_tool, JsonSchema};
use serde::{Deserialize, Serialize};
use crate::op::OpClient;
use crate::tools::enums::{features_to_vec, EventFeature, TokenExpiry};
use crate::tools::{op_error_to_tool_error, text_result};
#[mcp_tool(
name = "events_api_create",
description = "Create a new 1Password Events API integration token. The Events API allows you to receive notifications about events in your 1Password account. Returns a bearer token that must be saved securely."
)]
#[derive(Debug, Deserialize, Serialize, JsonSchema)]
pub struct EventsApiCreateTool {
pub name: String,
#[serde(default)]
pub expires_in: Option<TokenExpiry>,
#[serde(default)]
pub features: Option<Vec<EventFeature>>,
}
impl EventsApiCreateTool {
pub async fn call(&self, client: &OpClient) -> Result<CallToolResult, CallToolError> {
let expires_in_str = self.expires_in.as_ref().map(|e| e.to_string());
let features_refs: Option<Vec<&str>> = self
.features
.as_ref()
.map(|f| features_to_vec(f));
let result = client
.events_api_create(&self.name, expires_in_str.as_deref(), features_refs.as_deref())
.await
.map_err(op_error_to_tool_error)?;
text_result(result)
}
}