Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ description: Release history for OpenChoreo

| Version | Date | Changelog |
| ----------- | ---------- | ----------------------------------------------------------------------------------------- |
| v1.2.0-rc.2 | 2026-07-24 | [Changelog](https://github.com/openchoreo/openchoreo/compare/v1.2.0-rc.1...v1.2.0-rc.2) |
| v1.2.0-rc.1 | 2026-07-17 | [Changelog](https://github.com/openchoreo/openchoreo/compare/v1.1.0...v1.2.0-rc.1) |
| v1.2.0-m.1 | 2026-06-12 | [Changelog](https://github.com/openchoreo/openchoreo/compare/v1.1.1...v1.2.0-m.1) |
| v1.1.3 | 2026-07-22 | [Changelog](https://github.com/openchoreo/openchoreo/blob/release-v1.1/CHANGELOG.md#v113) |
Expand Down
5 changes: 5 additions & 0 deletions docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,11 @@ const config: Config = {
docs: {
lastVersion,
versions: {
'v1.2.0-rc.2': {
label: 'v1.2.0-rc.2 (pre-release)',
banner: 'unreleased',
noIndex: true,
},
'v1.2.0-rc.1': {
label: 'v1.2.0-rc.1 (pre-release)',
banner: 'unreleased',
Expand Down
13 changes: 13 additions & 0 deletions versioned_docs/version-v1.2.0-rc.2/_constants.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[//] # (This file stores the constants used across the documentation.)

export const versions = {
dockerTag: "v1.2.0-rc.2",
githubRef: "release-v1.2.0-rc.2", // Used for the GitHub Raw URL references. Example: main, latest, v0.1.0
helmChart: "1.2.0-rc.2",
helmSource: "oci://ghcr.io/openchoreo/helm-charts",
};

export const defaultCredentials = {
username: "admin@openchoreo.dev",
password: "Admin@123",
};
195 changes: 195 additions & 0 deletions versioned_docs/version-v1.2.0-rc.2/ai/finops-agent.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
---
title: FinOps Agent
description: Configure the FinOps Agent in OpenChoreo for AI-powered cloud cost analysis and optimization.
---

import CodeBlock from "@theme/CodeBlock";
import { versions } from "../_constants.mdx";

# FinOps Agent

The FinOps Agent is an AI-powered component that analyzes Kubernetes resource usage and cloud cost data from your OpenChoreo components to generate reports with cost optimization recommendations. It integrates with Large Language Models (LLMs) to provide cost attribution, rightsizing suggestions, and actionable insights to help teams reduce cloud spend.

## Prerequisites

Before enabling the FinOps Agent, ensure the following:

- OpenChoreo Observability Plane installed with at least a metrics module.
- An LLM API key from [OpenAI](https://platform.openai.com/) (support for other providers coming soon)
- [Metrics collection configured](../platform-engineer-guide/observability-alerting.mdx) for your components.

## Enabling the FinOps Agent

### Step 1: Install a FinOps module

The FinOps Agent relies on a FinOps module to provide Kubernetes resource cost data. Install a FinOps module before enabling the agent — for example, the [OpenCost FinOps module](https://github.com/openchoreo/community-modules/tree/main/finops-opencost).

### Step 2: Create the FinOps Agent Secret

The FinOps Agent requires a Kubernetes Secret named `finops-agent` in the `openchoreo-observability-plane` namespace with the following keys:

| Key | Description |
| --------------------- | -------------------------------------------------- |
| `LLM_API_KEY` | Your LLM provider API key |
| `OAUTH_CLIENT_SECRET` | OAuth client secret (only needed for external IdP) |

You can create this secret using any method you prefer. If you followed the [Try It Out on k3d locally](../getting-started/try-it-out/on-k3d-locally.mdx) guide, you can follow along:

```bash
kubectl exec -n openbao openbao-0 -- \
env BAO_ADDR=http://127.0.0.1:8200 BAO_TOKEN=root \
bao kv put secret/finops-llm-api-key value="<YOUR_LLM_API_KEY>"
```

```bash
kubectl apply -f - <<EOF
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: finops-agent
namespace: openchoreo-observability-plane
spec:
refreshInterval: 1h
secretStoreRef:
kind: ClusterSecretStore
name: default
target:
name: finops-agent
data:
- secretKey: LLM_API_KEY
remoteRef:
key: finops-llm-api-key
property: value
- secretKey: OAUTH_CLIENT_SECRET
remoteRef:
key: finops-agent-oauth-client-secret
property: value
EOF
```

### Step 3: Upgrade the Observability Plane

Enable the FinOps Agent and configure the LLM model. The `--reuse-values` flag preserves your existing configuration.

<CodeBlock language="bash">
{`helm upgrade --install openchoreo-observability-plane ${versions.helmSource}/openchoreo-observability-plane \\
--version ${versions.helmChart} \\
--namespace openchoreo-observability-plane \\
--reuse-values \\
--set finOpsAgent.enabled="true" \\
--set finOpsAgent.llmName=<model-name> \\
--set finOpsAgent.remediationEnabled=true`}
</CodeBlock>

:::note Supported Models
The FinOps Agent currently supports the [OpenAI](https://platform.openai.com/) GPT model series (e.g., `gpt-5.4`, `gpt-5.2-pro`, `gpt-5` etc.). Support for additional model providers is coming soon.

The `gpt-5.6` series is not supported at the moment. Support is coming soon.
:::

If the observability plane and control plane are in separate clusters, also set `finOpsAgent.openchoreoApiUrl` to the control plane API URL (defaults to `http://api.openchoreo.localhost:8080`).

### Step 4: Register with the control plane

Configure `finOpsAgentURL` in the `ClusterObservabilityPlane` resource so the UI knows where to reach the FinOps Agent:

<CodeBlock language="bash">
{`kubectl patch clusterobservabilityplane default --type=merge -p '{"spec":{"finOpsAgentURL":"http://finops-agent.openchoreo.localhost:11080"}}'`}
</CodeBlock>

### Step 5: Verify the installation

Check that the FinOps Agent pod is running:

```bash
kubectl get pods -n openchoreo-observability-plane -l app.kubernetes.io/component=finops-agent
```

If you are using the default identity provider (ThunderID) and the default SQLite report storage, your setup is complete.

<details id="authentication-and-authorization">
<summary><strong>Authentication and Authorization (External IdP)</strong></summary>

By default, OpenChoreo configures ThunderID as the identity provider for the FinOps Agent with a pre-configured OAuth client for testing purposes. If you are using an external identity provider, follow the steps below.

#### Authentication

Create an OAuth 2.0 client that supports the `client_credentials` grant type for service-to-service authentication.

Store your OAuth client secret in OpenBao:

```bash
kubectl exec -n openbao openbao-0 -- \
env BAO_ADDR=http://127.0.0.1:8200 BAO_TOKEN=root \
bao kv put secret/finops-agent-oauth-client-secret value="<YOUR_OAUTH_CLIENT_SECRET>"
```

Then configure the Observability Plane Helm values with your client credentials:

```yaml
security:
oidc:
tokenUrl: "<your-idp-token-url>"

finOpsAgent:
secretName: "finops-agent"
oauth:
clientId: "<your-client-id>"
```

See [Identity Provider Configuration](../platform-engineer-guide/identity-configuration.mdx) for detailed setup instructions.

#### Authorization

The FinOps Agent uses the `client_credentials` grant to authenticate with the OpenChoreo API as a service account. The API matches the `sub` claim in the issued JWT to identify the caller, so the new client must be granted the `finops-agent` role via a bootstrap authorization mapping.

Add the following to your Control Plane values override, replacing `<your-client-id>` with the same client ID used above:

```yaml
openchoreoApi:
config:
security:
authorization:
bootstrap:
mappings:
- name: finops-agent-binding
roleRef:
name: finops-agent
entitlement:
claim: sub
value: "<your-client-id>"
effect: allow
```

</details>

<details>
<summary><strong>Report Storage</strong></summary>

By default, FinOps reports are stored in **SQLite** with a persistent volume — no external database required.

For production deployments that need horizontal scaling or shared storage, you can use **PostgreSQL** instead.

Store the PostgreSQL connection URI in OpenBao:

```bash
kubectl exec -n openbao openbao-0 -- \
env BAO_ADDR=http://127.0.0.1:8200 BAO_TOKEN=root \
bao kv put secret/finops-sql-backend-uri value="postgresql+asyncpg://<USER>:<PASSWORD>@<HOST>:<PORT>/<DBNAME>"
```

Add the `SQL_BACKEND_URI` key to the ExternalSecret from [Step 2](#step-2-create-the-finops-agent-secret):

```bash
kubectl patch externalsecret finops-agent -n openchoreo-observability-plane --type=json \
-p '[{"op":"add","path":"/spec/data/-","value":{"secretKey":"SQL_BACKEND_URI","remoteRef":{"key":"finops-sql-backend-uri","property":"value"}}}]'
```

Then set the report backend in your Helm values:

```yaml
finOpsAgent:
reportBackend: postgresql
```

</details>
70 changes: 70 additions & 0 deletions versioned_docs/version-v1.2.0-rc.2/ai/mcp-prompt-scenarios.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
---
title: MCP Prompt Scenarios
---

# MCP Prompt Scenarios

This page provides a collection of practical prompt scenarios for using the OpenChoreo MCP server with AI assistants. Each scenario is a hands-on guide that walks you through real-world tasks using natural language prompts.

## Prerequisites

Before trying these scenarios:

1. **Configure your MCP server** — follow the [Configuring MCP Servers with AI Assistants](./mcp-servers.mdx) guide
2. **Review available tools** — see the [MCP Servers Reference](../reference/mcp-servers.mdx) for the full list of MCP tools

## Scenarios

### 1. Getting Started

Learn the basics of connecting your AI assistant to OpenChoreo and performing simple operations like listing namespaces and projects.

**Time:** ~2 minutes

[View guide on GitHub →](https://github.com/openchoreo/openchoreo/tree/main/samples/mcp/getting-started)

---

### 2. Service Deployment

Deploy a complete service from source code to production using the OpenChoreo MCP server. Choose between a step-by-step guided walkthrough or a natural conversation-based deployment.

**Time:** ~15-20 minutes

[View guide on GitHub →](https://github.com/openchoreo/openchoreo/tree/main/samples/mcp/service-deployment)

---

### 3. Log Analysis & Debugging

Debug a cascading failure in the GCP Microservices Demo (Online Boutique) application. You'll intentionally break the product catalog service by scaling it to zero replicas, then use AI-assisted observability — logs, distributed traces, and deployment inspection — to diagnose and fix the issue across service boundaries.

**Key MCP tools:** `list_components`, `query_component_logs`, `query_traces`, `query_trace_spans`, `get_release_binding`, `update_release_binding`

**Time:** ~10 minutes

[View guide on GitHub →](https://github.com/openchoreo/openchoreo/tree/main/samples/mcp/log-analysis)

---

### 4. Build Failure Diagnosis

Debug a Docker build failure in the Go Greeter service. You'll trigger a build with a misconfigured Dockerfile path, then use AI-assisted workflow inspection and log analysis to diagnose the root cause, compare with the previous successful build, and apply the fix.

**Key MCP tools:** `list_workflow_runs`, `get_workflow_run`, `query_workflow_logs`, `create_workflow_run`

**Time:** ~10 minutes

[View guide on GitHub →](https://github.com/openchoreo/openchoreo/tree/main/samples/mcp/build-failures)

---

### 5. Resource Optimization

Detect and fix over-provisioned deployments in the GCP Microservices Demo (Online Boutique). You'll intentionally allocate excessive CPU and memory to several services, then use AI-assisted analysis to compare allocation vs actual usage, get right-sizing recommendations, and apply optimized configurations.

**Key MCP tools:** `list_components`, `list_release_bindings`, `get_release_binding`, `query_resource_metrics`, `update_release_binding`

**Time:** ~10 minutes

[View guide on GitHub →](https://github.com/openchoreo/openchoreo/tree/main/samples/mcp/resource-optimization)
Loading