Remove uploading css functionality. Themes are hard-coded. Change the code
This commit is contained in:
+14
-60
@@ -186,36 +186,23 @@ pub struct DeleteDashboardParams {
|
||||
pub dashboard_id: String,
|
||||
}
|
||||
|
||||
// ---- settings / css ----
|
||||
// ---- settings / theming ----
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, schemars::JsonSchema)]
|
||||
pub struct UpdateSettingsParams {
|
||||
#[serde(default)]
|
||||
pub color_scheme: Option<String>,
|
||||
pub theme: Option<String>,
|
||||
#[serde(default)]
|
||||
pub max_logs: Option<Option<usize>>,
|
||||
#[serde(default)]
|
||||
pub custom_theme_id: Option<Option<String>>,
|
||||
#[serde(default)]
|
||||
pub ntfy_topic: Option<Option<String>>,
|
||||
#[serde(default)]
|
||||
pub ntfy_server: Option<Option<String>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, schemars::JsonSchema)]
|
||||
pub struct ImportCssParams {
|
||||
pub filename: String,
|
||||
pub content: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, schemars::JsonSchema)]
|
||||
pub struct LinkCssParams {
|
||||
pub path_or_url: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, schemars::JsonSchema)]
|
||||
pub struct CssIdParams {
|
||||
pub id: String,
|
||||
pub struct GetThemeContentParams {
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
// ---- alerts ----
|
||||
@@ -734,7 +721,7 @@ impl OttylMcp {
|
||||
|
||||
// ---- settings / theming ----
|
||||
|
||||
#[tool(description = "Read the running instance's global settings (color scheme, active profile, max_logs, ntfy config).")]
|
||||
#[tool(description = "Read the running instance's global settings (theme, active profile, max_logs, ntfy config).")]
|
||||
async fn get_settings(&self) -> Result<CallToolResult, McpError> {
|
||||
json_result(self.get_json("/api/settings", &[]).await?)
|
||||
}
|
||||
@@ -748,52 +735,19 @@ impl OttylMcp {
|
||||
json_result(self.send_json(reqwest::Method::PATCH, "/api/settings", Some(&body)).await?)
|
||||
}
|
||||
|
||||
#[tool(description = "List imported/linked custom CSS theme entries.")]
|
||||
async fn list_css(&self) -> Result<CallToolResult, McpError> {
|
||||
json_result(self.get_json("/api/settings/css", &[]).await?)
|
||||
#[tool(description = "List the names of the themes embedded in this build (see /api/themes).")]
|
||||
async fn list_themes(&self) -> Result<CallToolResult, McpError> {
|
||||
json_result(self.get_json("/api/themes", &[]).await?)
|
||||
}
|
||||
|
||||
#[tool(description = "Import a custom CSS theme file by content.")]
|
||||
async fn import_css(
|
||||
#[tool(description = "Read the raw CSS content of a theme by name.")]
|
||||
async fn get_theme_content(
|
||||
&self,
|
||||
Parameters(params): Parameters<ImportCssParams>,
|
||||
) -> Result<CallToolResult, McpError> {
|
||||
let body = serde_json::to_value(¶ms).map_err(|err| mcp_error("failed to encode params", err))?;
|
||||
json_result(self.send_json(reqwest::Method::POST, "/api/settings/css", Some(&body)).await?)
|
||||
}
|
||||
|
||||
#[tool(description = "Link an external CSS file or URL as a custom theme, instead of importing its content.")]
|
||||
async fn link_css(
|
||||
&self,
|
||||
Parameters(params): Parameters<LinkCssParams>,
|
||||
) -> Result<CallToolResult, McpError> {
|
||||
let body = serde_json::to_value(¶ms).map_err(|err| mcp_error("failed to encode params", err))?;
|
||||
json_result(self.send_json(reqwest::Method::POST, "/api/settings/css/link", Some(&body)).await?)
|
||||
}
|
||||
|
||||
#[tool(description = "Remove a custom CSS entry by id.")]
|
||||
async fn remove_css(
|
||||
&self,
|
||||
Parameters(params): Parameters<CssIdParams>,
|
||||
) -> Result<CallToolResult, McpError> {
|
||||
json_result(
|
||||
self.send_json(
|
||||
reqwest::Method::DELETE,
|
||||
&format!("/api/settings/css/{}", urlencoding_path(¶ms.id)),
|
||||
None,
|
||||
)
|
||||
.await?,
|
||||
)
|
||||
}
|
||||
|
||||
#[tool(description = "Read the raw content of an imported CSS entry by id.")]
|
||||
async fn get_css_content(
|
||||
&self,
|
||||
Parameters(params): Parameters<CssIdParams>,
|
||||
Parameters(params): Parameters<GetThemeContentParams>,
|
||||
) -> Result<CallToolResult, McpError> {
|
||||
let response = self
|
||||
.client
|
||||
.get(self.url(&format!("/api/settings/css/{}/content", urlencoding_path(¶ms.id))))
|
||||
.get(self.url(&format!("/api/themes/{}", urlencoding_path(¶ms.name))))
|
||||
.send()
|
||||
.await
|
||||
.map_err(|err| mcp_error("failed to reach ottyl", err))?;
|
||||
@@ -801,7 +755,7 @@ impl OttylMcp {
|
||||
let text = response
|
||||
.text()
|
||||
.await
|
||||
.map_err(|err| mcp_error("failed to read css content response", err))?;
|
||||
.map_err(|err| mcp_error("failed to read theme content response", err))?;
|
||||
if !status.is_success() {
|
||||
return Err(mcp_error("ottyl rejected the request", text));
|
||||
}
|
||||
@@ -962,7 +916,7 @@ impl ServerHandler for OttylMcp {
|
||||
"Proxies to a running ottyl instance's HTTP API. Covers everything the web UI can do: \
|
||||
logs/timeline/stats, param & metric declarations, PromQL queries, dashboards & panels \
|
||||
(including render_panel/render_dashboard, which return a chart's underlying series data \
|
||||
as JSON so an agent can reason about it without a browser), settings & custom CSS themes, \
|
||||
as JSON so an agent can reason about it without a browser), settings & themes, \
|
||||
alert rules, and profile management. See the embedded SKILL.md (GET /SKILL.md on the \
|
||||
target instance) for examples."
|
||||
.to_string(),
|
||||
|
||||
Reference in New Issue
Block a user