use serde::Serialize;
use serde_json::Value;
pub const SUPPORTED_VERSIONS: &[&str] = &["2025-11-25", "2024-11-05"];
#[derive(Debug, Clone)]
#[allow(dead_code)]
pub struct OAuthConfig {
pub enabled: bool,
pub audience: Option<String>,
pub issuer: Option<String>,
pub scopes: Vec<String>,
pub jwks_uri: Option<String>,
}
impl Default for OAuthConfig {
fn default() -> Self {
Self {
enabled: false,
audience: None,
issuer: None,
scopes: vec!["mcp:read".to_string(), "mcp:write".to_string()],
jwks_uri: None,
}
}
}
#[derive(Debug, Serialize)]
pub struct InitializeResult {
#[serde(rename = "protocolVersion")]
pub protocol_version: String,
pub capabilities: Value,
#[serde(rename = "serverInfo")]
pub server_info: Value,
}
#[derive(Debug, Serialize)]
pub struct McpTool {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
pub description: String,
#[serde(rename = "inputSchema")]
pub input_schema: Value,
}
#[derive(Debug, Serialize, Clone)]
pub struct ToolStub {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
pub description: String,
}
impl From<McpTool> for ToolStub {
fn from(tool: McpTool) -> Self {
Self {
name: tool.name,
title: tool.title,
description: tool.description,
}
}
}
#[derive(Debug, Serialize)]
pub struct ListToolsResult {
pub tools: Vec<McpTool>,
}
#[derive(Debug, Serialize)]
pub struct ListToolStubsResult {
pub tools: Vec<ToolStub>,
}
#[derive(Debug, Serialize)]
pub struct DescribeToolResult {
pub tool: McpTool,
}
#[derive(Debug, Serialize)]
pub struct DescribeToolsResult {
pub tools: Vec<McpTool>,
}
#[derive(Debug, Serialize)]
pub struct ProtectedResourceMetadata {
#[serde(rename = "authorizationServers", skip_serializing_if = "Vec::is_empty")]
pub authorization_servers: Vec<String>,
pub resource: String,
#[serde(rename = "scopesSupported", skip_serializing_if = "Vec::is_empty")]
pub scopes_supported: Vec<String>,
#[serde(rename = "resourceMetadata")]
pub resource_metadata: Option<String>,
}