use rmcp::model::{ElicitationAction, PromptArgument, PromptMessage, ResourceContents};
use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};
#[derive(Debug, Clone)]
pub struct McpToolInfo {
pub name: String,
pub description: String,
pub provider: String,
pub input_schema: Value,
}
#[derive(Debug, Clone)]
pub struct McpResourceInfo {
pub(crate) provider: String,
pub(crate) uri: String,
pub(crate) name: String,
pub(crate) description: Option<String>,
pub(crate) mime_type: Option<String>,
pub(crate) size: Option<i64>,
}
#[derive(Debug, Clone)]
pub struct McpResourceData {
pub(crate) provider: String,
pub(crate) uri: String,
pub(crate) contents: Vec<ResourceContents>,
pub(crate) meta: Map<String, Value>,
}
#[derive(Debug, Clone)]
pub struct McpPromptInfo {
pub(crate) provider: String,
pub(crate) name: String,
pub(crate) description: Option<String>,
pub(crate) arguments: Vec<PromptArgument>,
}
#[derive(Debug, Clone)]
pub struct McpPromptDetail {
pub(crate) provider: String,
pub(crate) name: String,
pub(crate) description: Option<String>,
pub(crate) messages: Vec<PromptMessage>,
pub(crate) meta: Map<String, Value>,
}
#[derive(Debug, Clone)]
pub struct McpClientStatus {
pub enabled: bool,
pub provider_count: usize,
pub active_connections: usize,
pub configured_providers: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct McpElicitationRequest {
pub message: String,
pub requested_schema: Value,
pub(crate) meta: Option<Value>,
}
#[derive(Debug, Clone)]
pub struct McpElicitationResponse {
pub action: ElicitationAction,
pub content: Option<Value>,
pub meta: Option<Value>,
}
pub const OPENAI_FILE_PARAMS_META_KEY: &str = "_meta";
pub const OPENAI_FILE_PARAMS_VALUE: &str = "openai/fileParams";
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProvidedFilePayload {
#[serde(rename = "fileId")]
file_id: String,
#[serde(rename = "fileName")]
file_name: String,
#[serde(rename = "mimeType")]
mime_type: String,
#[serde(rename = "fileSize")]
file_size: i64,
}
#[derive(Debug, Clone)]
pub struct FileUploadResult {
file_id: String,
payload: ProvidedFilePayload,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileParamSchemaEntry {
property_name: String,
description: String,
required: bool,
}