Skip to content

Commit f0c9411

Browse files
committed
Rename MCP burned budget tool
Signed-off-by: Slok Bot <slok69+slokbot@gmail.com>
1 parent f8dee08 commit f0c9411

3 files changed

Lines changed: 18 additions & 18 deletions

File tree

internal/http/mcp/mcp.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func New(cfg Config) (http.Handler, error) {
6464
getSLOTool, getSLOToolHandler := tools.NewGetSLOTool(cfg.ServiceApp, cfg.Logger.WithValues(log.Kv{"tool": "get_slo"}))
6565
registerTool(server, getSLOTool, getSLOToolHandler)
6666
registeredTools++
67-
getBurnedBudgetRangeTool, getBurnedBudgetRangeToolHandler := tools.NewGetBurnedBudgetRangeTool(cfg.ServiceApp, cfg.Logger.WithValues(log.Kv{"tool": "get_burned_budget_range"}))
67+
getBurnedBudgetRangeTool, getBurnedBudgetRangeToolHandler := tools.NewGetSLOBurnedBudgetRangeTool(cfg.ServiceApp, cfg.Logger.WithValues(log.Kv{"tool": "get_slo_burned_budget_range"}))
6868
registerTool(server, getBurnedBudgetRangeTool, getBurnedBudgetRangeToolHandler)
6969
registeredTools++
7070

internal/http/mcp/tools/get_burned_budget_range.go renamed to internal/http/mcp/tools/get_slo_burned_budget_range.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,24 @@ type BurnedBudgetRangeLister interface {
1818
ListBurnedBudgetRange(ctx context.Context, req backendapp.ListBurnedBudgetRangeRequest) (*backendapp.ListBurnedBudgetRangeResponse, error)
1919
}
2020

21-
func NewGetBurnedBudgetRangeTool(app BurnedBudgetRangeLister, logger log.Logger) (*sdkmcp.Tool, sdkmcp.ToolHandlerFor[GetBurnedBudgetRangeToolInput, GetBurnedBudgetRangeToolOutput]) {
21+
func NewGetSLOBurnedBudgetRangeTool(app BurnedBudgetRangeLister, logger log.Logger) (*sdkmcp.Tool, sdkmcp.ToolHandlerFor[GetSLOBurnedBudgetRangeToolInput, GetSLOBurnedBudgetRangeToolOutput]) {
2222
if logger == nil {
2323
logger = log.Noop
2424
}
2525

2626
return &sdkmcp.Tool{
27-
Name: "get_burned_budget_range",
27+
Name: "get_slo_burned_budget_range",
2828
Description: "Get actual and expected burned budget evolution for an SLO over a standard time range. Values use a 0-100 normalized remaining-budget scale over the selected period, where 100 means the full budget is still available and 0 means the budget is exhausted. Returns current real and expected values plus compressed real and perfect series. Each comma-separated series entry advances by one step from start_ts, and x means the real value is missing at that step.",
2929
Annotations: &sdkmcp.ToolAnnotations{ReadOnlyHint: true},
30-
}, newGetBurnedBudgetRangeToolHandler(app, logger)
30+
}, newGetSLOBurnedBudgetRangeToolHandler(app, logger)
3131
}
3232

33-
type GetBurnedBudgetRangeToolInput struct {
33+
type GetSLOBurnedBudgetRangeToolInput struct {
3434
SLOID string `json:"slo_id" jsonschema:"required,The SLO ID to retrieve"`
3535
RangeType string `json:"range_type,omitempty" jsonschema:"Optional range type: monthly, weekly, quarterly, yearly"`
3636
}
3737

38-
type GetBurnedBudgetRangeToolOutput struct {
38+
type GetSLOBurnedBudgetRangeToolOutput struct {
3939
CurrentBurnedValuePercent float64 `json:"current_burned_value_percent" jsonschema:"the current real remaining budget percentage on a 0-100 scale for the selected period"`
4040
CurrentExpectedBurnedValuePercent float64 `json:"current_expected_burned_value_percent" jsonschema:"the current expected remaining budget percentage on a 0-100 scale for the selected period"`
4141
StartTS string `json:"start_ts" jsonschema:"the RFC3339 timestamp of the first point in both series"`
@@ -44,24 +44,24 @@ type GetBurnedBudgetRangeToolOutput struct {
4444
PerfectSeries string `json:"perfect_series" jsonschema:"comma-separated expected remaining budget values from start_ts advancing by step"`
4545
}
4646

47-
func newGetBurnedBudgetRangeToolHandler(app BurnedBudgetRangeLister, logger log.Logger) sdkmcp.ToolHandlerFor[GetBurnedBudgetRangeToolInput, GetBurnedBudgetRangeToolOutput] {
48-
return func(ctx context.Context, _ *sdkmcp.CallToolRequest, input GetBurnedBudgetRangeToolInput) (*sdkmcp.CallToolResult, GetBurnedBudgetRangeToolOutput, error) {
47+
func newGetSLOBurnedBudgetRangeToolHandler(app BurnedBudgetRangeLister, logger log.Logger) sdkmcp.ToolHandlerFor[GetSLOBurnedBudgetRangeToolInput, GetSLOBurnedBudgetRangeToolOutput] {
48+
return func(ctx context.Context, _ *sdkmcp.CallToolRequest, input GetSLOBurnedBudgetRangeToolInput) (*sdkmcp.CallToolResult, GetSLOBurnedBudgetRangeToolOutput, error) {
4949
logger.WithValues(log.Kv{"input": fmt.Sprintf("%+v", input)}).Debugf("MCP tool called")
5050

5151
resp, err := app.ListBurnedBudgetRange(ctx, backendapp.ListBurnedBudgetRangeRequest{
5252
SLOID: input.SLOID,
5353
BudgetRangeType: backendapp.BudgetRangeType(input.RangeType),
5454
})
5555
if err != nil {
56-
return nil, GetBurnedBudgetRangeToolOutput{}, err
56+
return nil, GetSLOBurnedBudgetRangeToolOutput{}, err
5757
}
5858

5959
startTS, step := getSeriesMeta(resp.PerfectBurnedDataPoints)
6060
if startTS == "" {
6161
startTS, step = getSeriesMeta(resp.RealBurnedDataPoints)
6262
}
6363

64-
return nil, GetBurnedBudgetRangeToolOutput{
64+
return nil, GetSLOBurnedBudgetRangeToolOutput{
6565
CurrentBurnedValuePercent: resp.CurrentBurnedValuePercent,
6666
CurrentExpectedBurnedValuePercent: resp.CurrentExpectedBurnedValuePercent,
6767
StartTS: startTS,

internal/http/mcp/tools/get_burned_budget_range_test.go renamed to internal/http/mcp/tools/get_slo_burned_budget_range_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@ import (
1616
"github.com/stretchr/testify/require"
1717
)
1818

19-
func TestNewGetBurnedBudgetRangeTool(t *testing.T) {
19+
func TestNewGetSLOBurnedBudgetRangeTool(t *testing.T) {
2020
ts1 := time.Date(2026, 5, 25, 10, 0, 0, 0, time.UTC)
2121
ts2 := time.Date(2026, 5, 25, 11, 0, 0, 0, time.UTC)
2222

2323
tests := map[string]struct {
24-
input tools.GetBurnedBudgetRangeToolInput
24+
input tools.GetSLOBurnedBudgetRangeToolInput
2525
mock func(m *toolsmock.BurnedBudgetRangeLister)
2626
expErr bool
27-
expResp tools.GetBurnedBudgetRangeToolOutput
27+
expResp tools.GetSLOBurnedBudgetRangeToolOutput
2828
}{
2929
"It should map the backend request and response.": {
30-
input: tools.GetBurnedBudgetRangeToolInput{SLOID: "slo-id", RangeType: string(backendapp.BudgetRangeTypeMonthly)},
30+
input: tools.GetSLOBurnedBudgetRangeToolInput{SLOID: "slo-id", RangeType: string(backendapp.BudgetRangeTypeMonthly)},
3131
mock: func(m *toolsmock.BurnedBudgetRangeLister) {
3232
expReq := backendapp.ListBurnedBudgetRangeRequest{SLOID: "slo-id", BudgetRangeType: backendapp.BudgetRangeTypeMonthly}
3333
m.On("ListBurnedBudgetRange", mock.Anything, expReq).Once().Return(&backendapp.ListBurnedBudgetRangeResponse{
@@ -37,7 +37,7 @@ func TestNewGetBurnedBudgetRangeTool(t *testing.T) {
3737
PerfectBurnedDataPoints: []model.DataPoint{{TS: ts1, Value: 98.2}, {TS: ts2, Value: 97.1}},
3838
}, nil)
3939
},
40-
expResp: tools.GetBurnedBudgetRangeToolOutput{
40+
expResp: tools.GetSLOBurnedBudgetRangeToolOutput{
4141
CurrentBurnedValuePercent: 87.1,
4242
CurrentExpectedBurnedValuePercent: 92.2,
4343
StartTS: ts1.Format(time.RFC3339),
@@ -47,7 +47,7 @@ func TestNewGetBurnedBudgetRangeTool(t *testing.T) {
4747
},
4848
},
4949
"Having a backend error should fail.": {
50-
input: tools.GetBurnedBudgetRangeToolInput{SLOID: "slo-id", RangeType: string(backendapp.BudgetRangeTypeWeekly)},
50+
input: tools.GetSLOBurnedBudgetRangeToolInput{SLOID: "slo-id", RangeType: string(backendapp.BudgetRangeTypeWeekly)},
5151
mock: func(m *toolsmock.BurnedBudgetRangeLister) {
5252
m.On("ListBurnedBudgetRange", mock.Anything, backendapp.ListBurnedBudgetRangeRequest{SLOID: "slo-id", BudgetRangeType: backendapp.BudgetRangeTypeWeekly}).Once().Return(nil, fmt.Errorf("something wrong"))
5353
},
@@ -62,9 +62,9 @@ func TestNewGetBurnedBudgetRangeTool(t *testing.T) {
6262
test.mock(m)
6363
}
6464

65-
tool, handler := tools.NewGetBurnedBudgetRangeTool(m, log.Noop)
65+
tool, handler := tools.NewGetSLOBurnedBudgetRangeTool(m, log.Noop)
6666
require.NotNil(t, tool)
67-
assert.Equal(t, "get_burned_budget_range", tool.Name)
67+
assert.Equal(t, "get_slo_burned_budget_range", tool.Name)
6868
result, gotResp, err := handler(context.Background(), nil, test.input)
6969
assert.Nil(t, result)
7070

0 commit comments

Comments
 (0)