Skip to main content
Glama
log-10x

Log10x MCP Server

Official

Set up recurring cost-reduction

log10x_setup_recurring
Read-onlyIdempotent

Configure a recurring log cost-reduction tick: answer seven setup prompts to generate policy.yaml and a scheduler manifest for Kubernetes, GitHub Actions, crontab, EventBridge, or Container Apps.

Instructions

Conversational wizard that configures a scheduled cost-reduction tick (tenx-recur): each run clones the policy repo, recomputes the plan and pushes the changes. Walks the user through seven decisions: target services, savings target (%), tick schedule, scheduler runtime, gitops config repo, exception services, and final confirm, then emits two ready-to-commit artifacts: policy.yaml (the declarative policy the tick CLI consumes) and a scheduler manifest (Kubernetes CronJob YAML, GitHub Actions workflow, or crontab entry + wrapper script depending on the chosen scheduler). Each call merges the latest answer into the wizard session and either asks the next missing question or emits the artifacts once all answers are present. Re-invoke with the same session_id on every subsequent turn; sessions live 30 minutes. To skip interactive Q&A, supply all fields (target_services, target_percent, schedule, scheduler, config_plane, confirm: true) in a single call. Optional overrides: exceptions (services never touched), min_delta_pp (minimum savings delta before committing a new CSV, default 2pp), env_id, namespace, secret_name. Apply instructions for the chosen scheduler are in data.apply_instructions. After the first tick runs, call log10x_commitment_report to verify realized savings. REQUIRES nothing deployed to ASK: it renders manifests from the user's answers and writes to no account. The emitted tick needs a scheduler runtime (k8s CronJob, GitHub Actions, crontab, EventBridge, Container Apps job) and a policy repo or S3 prefix that the customer controls before it runs.

Input Schema

NameRequiredDescriptionDefault
env_idNoLog10x environment ID. Auto-detected from LOG10X_ENV_ID when absent.
confirmNoSet to true to confirm the configuration and emit the artifacts. The wizard asks for confirmation interactively when omitted.
scheduleNoTick schedule. Presets: daily-03utc (default), every-6h, every-12h, every-24h-localtz. Or pass a raw 5-field cron expression (e.g. "0 5 * * 1").
namespaceNoKubernetes namespace for the CronJob. Default: log10x. Only used when scheduler=k8s_cron.
schedulerNoWhere the recurring tick runs. k8s_cron = Kubernetes CronJob (default when kubectl reachable), github_actions = GHA workflow, crontab = crontab + wrapper script, eventbridge = AWS-native (EventBridge Scheduler + CodeBuild, S3 config plane: no cluster, no GitHub; the fit for AWS serverless estates), container_apps_job = Azure-native (Container Apps scheduled Job, git config plane; the fit for Azure serverless estates).
exceptionsNoService names the policy must never touch (audit / regulatory / executive). Optional: defaults to empty. Pass [] to explicitly clear all exceptions.
session_idNoWizard session handle. Omit on the first call: a new session is minted and returned. Pass it back unchanged on every subsequent call.
secret_nameNoName of the Kubernetes Secret holding LOG10X_API_KEY. Default: log10x-secret. Only used when scheduler=k8s_cron.
config_planeNoWhere the recurring CLI reads policy.yaml and writes updated cap CSVs: a gitops repo URL (e.g. https://github.com/acme/log10x-config), a local path, or (required when scheduler=eventbridge) an S3 prefix (e.g. s3://acme-logs/log10x-config).
min_delta_ppNoMinimum change in savings percentage points required before the tick commits a new CSV. Default: 2. Set to 0 to commit on every tick.
target_percentNoDesired savings target, as a percentage of current log volume (1-95). Default: 30. The CLI's per-pattern planner works backward from this target.
target_servicesNoServices the policy targets. Empty array = all services. Use service names from `log10x_services`. The wizard asks if omitted.
budget_gb_monthlyNoVOLUME BUDGET: keep monthly ingest for the targeted services at or under this many GB/mo. A standing line, not a one-shot cut: each tick scales the budget to its lookback window and cuts only the overage: already under budget means every pattern passes. Replaces target_percent in policy.yaml (mutually exclusive). Dollar budgets are a one-shot answer via log10x_estimate_savings (budget_usd_monthly); the recurring tick is byte-denominated.

Output Schema

NameRequiredDescriptionDefault
dataNo
toolYes
viewNosummary
imagesNo
actionsNo
summaryYes
warningsNo
truncatedNo
next_cursorNo
render_hintNo
generated_atYes
schema_epochYes
schema_versionYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv1.30.8
    • changedInput schema / properties / budget_gb_monthly / description
      Previous value: -"VOLUME BUDGET: keep monthly ingest for the targeted services at or under this many GB/mo. A standing line, not a one-shot cut: each tick scales the budget to its lookback window and cuts only the overage — already under budget means every pattern passes. Replaces target_percent in policy.yaml (mutually exclusive). Dollar budgets are a one-shot answer via log10x_estimate_savings (budget_usd_monthly); the recurring tick is byte-denominated."New value: +"VOLUME BUDGET: keep monthly ingest for the targeted services at or under this many GB/mo. A standing line, not a one-shot cut: each tick scales the budget to its lookback window and cuts only the overage: already under budget means every pattern passes. Replaces target_percent in policy.yaml (mutually exclusive). Dollar budgets are a one-shot answer via log10x_estimate_savings (budget_usd_monthly); the recurring tick is byte-denominated."
    • changedInput schema / properties / config_plane / description
      Previous value: -"Where the recurring CLI reads policy.yaml and writes updated cap CSVs: a gitops repo URL (e.g. https://github.com/acme/log10x-config), a local path, or — required when scheduler=eventbridge — an S3 prefix (e.g. s3://acme-logs/log10x-config)."New value: +"Where the recurring CLI reads policy.yaml and writes updated cap CSVs: a gitops repo URL (e.g. https://github.com/acme/log10x-config), a local path, or (required when scheduler=eventbridge) an S3 prefix (e.g. s3://acme-logs/log10x-config)."
    • changedInput schema / properties / exceptions / description
      Previous value: -"Service names the policy must never touch (audit / regulatory / executive). Optional — defaults to empty. Pass [] to explicitly clear all exceptions."New value: +"Service names the policy must never touch (audit / regulatory / executive). Optional: defaults to empty. Pass [] to explicitly clear all exceptions."
    • changedInput schema / properties / scheduler / description
      Previous value: -"Where the recurring tick runs. k8s_cron = Kubernetes CronJob (default when kubectl reachable), github_actions = GHA workflow, crontab = crontab + wrapper script, eventbridge = AWS-native (EventBridge Scheduler + CodeBuild, S3 config plane — no cluster, no GitHub; the fit for AWS serverless estates), container_apps_job = Azure-native (Container Apps scheduled Job, git config plane; the fit for Azure serverless estates)."New value: +"Where the recurring tick runs. k8s_cron = Kubernetes CronJob (default when kubectl reachable), github_actions = GHA workflow, crontab = crontab + wrapper script, eventbridge = AWS-native (EventBridge Scheduler + CodeBuild, S3 config plane: no cluster, no GitHub; the fit for AWS serverless estates), container_apps_job = Azure-native (Container Apps scheduled Job, git config plane; the fit for Azure serverless estates)."
    • changedInput schema / properties / session_id / description
      Previous value: -"Wizard session handle. Omit on the first call — a new session is minted and returned. Pass it back unchanged on every subsequent call."New value: +"Wizard session handle. Omit on the first call: a new session is minted and returned. Pass it back unchanged on every subsequent call."
  2. First observedv1.30.7

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: it clarifies that asking requires nothing deployed and "writes to no account" (reconciling cleanly with readOnlyHint=true), describes the per-call merge semantics of the wizard session, the 30-minute session lifetime, and the interactive-vs-batch confirmation behavior. No contradiction with the read-only/idempotent hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then layers session mechanics, batch mode, overrides, and prerequisites. It is dense and long with heavy parentheticals, but nearly every sentence carries actionable information; only minor trimming would help.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter wizard with an output schema, this covers the session lifecycle, artifact emission, scheduler-specific behavior, and where apply instructions live (`data.apply_instructions`). Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds genuine meaning: it identifies which six fields let the caller bypass the wizard, groups the optional overrides, and calls out defaults (min_delta_pp 2pp) and the target_percent/budget_gb_monthly mutual exclusivity. Some content is redundant with the schema, keeping it just below the top mark.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("configures a scheduled cost-reduction tick") and enumerates the seven decisions it walks through, so an agent knows exactly what the tool produces. It also names adjacent tools (`log10x_commitment_report`, `log10x_estimate_savings`) and the artifacts (`policy.yaml`, scheduler manifest), clearly separating it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit operating instructions: re-invoke with the same `session_id` each turn, sessions live 30 minutes, and supply all six fields with `confirm: true` to skip Q&A. It also states prerequisites (scheduler runtime + customer-controlled policy repo/S3 prefix) and a follow-up step (call `log10x_commitment_report` after the first tick).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.