# Reported issues for cloudcostsmcp

Pod holds 19 of 25 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [cloudcostsmcp](/mcp/cloudcostsmcp).

## Most discussed

### RC3-014 (P2, DEFERRED — blocked on RC3-004): compare_bom's 4-type enum blocks CUR-native services like DynamoDB

**Citation:** customer-feedback §1 (Line-item shape row)

**Current behavior:**
`compare_bom(workload={"table":{"type":"dynamodb",...}})` returns `unsupported workload type "dynamodb" (supported: compute, storage, database, cache)` — a hard 4-type allowlist in `workloadItemToSpec`'s default case (compare_bom.go L536). `estimate_bom` has no type enum, but a DynamoDB-shaped call still fails via the AWS provider's `Supports()` check inside `processBOMItems` (bom.go L245). Note: distinct from the Dy

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/33) · 2026-07-03 · closed · 4 comments

### RC3-032 (P1, PARTIAL — see #74): no canonical price field/unit across tools — naming, size_gb scaling, monthly_estimate mixing, egress unit label, no published schema

**Citation:** customer-feedback prioritized summary #5; gcp-report prioritized summary #6

**Current behavior:**
Doubly-attested theme (its own prioritized-summary row in both source reports). Five distinct sub-issues: (a) inconsistent field naming — `get_price` returns unit price under `price.amount`, `compare_prices` under `price_per_unit.amount`. (b) `size_gb` is accepted as an input but silently does not scale the returned `price_per_unit` — nothing in the response tells the caller whether t

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/30) · 2026-07-03 · closed · 4 comments

### RC3-004 (P1, IN PROGRESS — AWS v1, see #75): Add compare_bom_regions — weighted, SKU-native BoM tool with regions[] fan-out

**Citation:** customer-feedback §1 ('The big one: weighted-BoM regional comparison')

**Current behavior:**
No such tool exists today. `compare_bom`'s only region control is `region_preference`, a 3-value enum mapped to exactly one region per provider — no `regions[]` array, no `baseline_region`. `estimate_bom` has no top-level region concept at all. Neither can do what `compare_prices` already does for a single spec via `Regions []string` + `BaselineRegion` fan-out + `applyBaselineDeltas`.

**P

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/31) · 2026-07-03 · open · 3 comments

### RC3-019 (P2, IN PROGRESS): no get_coverage(provider) endpoint exists

**Citation:** customer-feedback §4 ('A coverage/completeness endpoint')

**Current behavior:**
Grep for `get_coverage`/`GetCoverage`/`coverage_pct` across `opencloudcosts-go/internal` returns zero matches. The live tool surface (16 tools) contains no coverage-endpoint equivalent. `describe_catalog` is the closest existing tool but actively misrepresents coverage for at least two domains (RC3-020, RC3-021).

**Proposed fix:**
Build `get_coverage(provider)` returning, per domain/service/region, on

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/38) · 2026-07-03 · closed · 2 comments

### Server exits on a malformed JSON-RPC frame (denial-of-service)

Hello, and apologies for the unsolicited report.

Your MCP server **`io.github.x7even/cloudcostsmcp`** (`opencloudcosts`) was included in an automated
conformance study of publicly registered Model Context Protocol servers. The study
installed and executed every eligible server in the official registry and drove it
through a set of protocol checks. One result looked worth reporting to you directly.

## What we observed

**Server crashes or stops responding after a malformed JSON-RPC fra

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/101) · 2026-07-31 · open · external user · 1 comment

### RC3-023d (P2, needs live GCP catalog access): GCP Pub/Sub has zero catalog entry

Split from #39. Pricing is per-GB throughput — human-scoped per #39's DACI.

**Not implemented this pass** — no \`OCC_GCP_API_KEY\` in this environment, no way to fetch/verify the real GCP Billing Catalog serviceID and rate structure.

**Proposed fix:** find the GCP Billing Catalog serviceID for Pub/Sub, add a \`getPubSubPrice\` function following the \`buildXIndex → match-by-description\` pattern, register in \`DescribeCatalog\`. Region-invariant — candidate for \`scope:"global"\`.

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/79) · 2026-07-04 · closed · 1 comment

### RC3-023b (P2, needs live GCP catalog access): GCP Cloud KMS has zero catalog entry

Split from #39. Pricing is per-key-version + per-operation — more complex than External IP (#76), human-scoped per #39's DACI (not a good fit for a future autonomous pass without hands-on rate verification).

**Not implemented this pass** — no \`OCC_GCP_API_KEY\` in this environment, no way to fetch/verify the real GCP Billing Catalog serviceID and rate structure.

**Proposed fix:** find the GCP Billing Catalog serviceID for Cloud KMS, add a \`getKMSPrice\` function in a new or existing gcp prov

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/77) · 2026-07-04 · closed · 1 comment

### RC3-031 (P3): search_pricing stub's runtime error message contradicts its own tool-list description

**Citation:** gcp-report §4.5 (and priority table row 8)

**Current behavior:**
Confirmed live and current (verified against git history that the current stub was an intentional replacement introduced in commit 7806b79, not leftover cruft from an incomplete removal). Runtime payload: `{"error":"search_pricing_unavailable","message":"search_pricing does not exist in this server."}`. The tool-list description ("Deprecated helper that redirects to the correct tools...") is honest and matches the RE

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/50) · 2026-07-03 · closed · 1 comment

## Most recent

### RC3-023a (P2, LOWEST-RISK — needs live GCP catalog access): GCP External IP has zero catalog entry

Split from #39. External IP is the cleanest first target of the five services in #39: pricing is ≈per-hour, region-invariant (candidate for \`scope:"global"\` on \`models.NormalizedPrice\`).

**Not implemented this pass** — this environment has no \`OCC_GCP_API_KEY\` configured, so there's no way to fetch and live-verify the real GCP Billing Catalog serviceID/rate here. Per #39's DACI, this specific service is judged low-risk enough for a future autonomous pass *if* that pass has live catalog ac

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/76) · 2026-07-04 · closed · 0 comments

### RC3-029 (P3): find_available_regions requires spec-wrapped input; validation error is opaque SDK jsonschema text

**Citation:** aws-report §6

**Current behavior:**
`FindAvailableRegionsInput` declares `Spec map[string]any` json:"spec" as required — consistent with `get_price`'s own spec-wrapping convention, so this is deliberate, not an isolated footgun. The literal error text quoted in the AWS report is generated by the mcp-go SDK's jsonschema validator, not custom application text, and could not be reproduced live (the loaded schema enforces wrapping before a call can even be issued).

**Proposed fix:**

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/48) · 2026-07-03 · closed · 1 comment

### RC3-028 (P2): publish canonical server-instructions text and a minimal-instructions commitment in README

**Citation:** customer-feedback §7; gcp-report §5.3

**Current behavior:**
Both source reports independently investigated and closed a false-attribution concern: a third-party "superpowers" plugin SessionStart hook was mistaken for cloudcost's own MCP instructions, purely due to render timing adjacency. Rendered instructions match `server.go` L168 verbatim and are clean/pricing-only. Grep confirms this text exists ONLY in `server.go` — absent from README, CHANGELOG, and docs. No written commitme

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/47) · 2026-07-03 · closed · 1 comment

### RC3-026 (P2): aurora_postgresql naming trap — advertised as a service name but get_price rejects it

**Citation:** aws-report §6, prioritized summary #7

**Current behavior:**
`describe_catalog(provider=aws)` shows `Services["database"] = ["rds","elasticache","aurora_postgresql"]` — presented as a peer service name. `get_price(service="aurora_postgresql", ...)` is rejected with `not_supported`. However `describe_catalog(domain=database, service="aurora_postgresql")` DOES return correct working guidance (pointing to `service:"rds", engine:"aurora-postgresql"`). Root cause: `aws_finops.go`'s `Des

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/45) · 2026-07-03 · closed · 1 comment

### RC3-025 (P2): describe_catalog returns egress's example_invocation for lb, nat, and waf services

**Citation:** aws-report §6 (report cites only service='lb')

**Current behavior:**
Beyond the originally reported `service="lb"`: `service="nat"` and `service="waf"` both also return the identical egress `example_invocation`. `service="data_transfer"` correctly redirects. Same root cause as RC3-022 — fix together in that bundled issue/PR.

**Proposed fix:**
See RC3-022 — same fix, same PR: add `ExampleInvocations` entries for `"network/lb"`, `"network/nat"`, `"network/waf"`.

**Effort:** S

**F

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/44) · 2026-07-03 · closed · 1 comment

### RC3-022 (P2): describe_catalog(network, lb) still returns egress's example_invocation

**Citation:** aws-report §6 ('Wrong service's example_invocation')

**Current behavior:**
`describe_catalog(domain=network, service="lb")` has correctly-scoped `filter_hints` but `example_invocation` is still the egress shape (`service:"egress"`, `destination_type`, `data_gb_per_month`). Root cause: `ExampleInvocations` map (aws_finops.go L720-857) has no `"network/lb"` key; `HandleDescribeCatalog` falls back from the missing service-specific key to the domain-level `"network"` key (lookup.go L1

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/42) · 2026-07-03 · closed · 1 comment

### RC3-021 (P2): describe_catalog(domain=database) returns service:null with no service list or hint

**Citation:** aws-report §6 ('Unhelpful domain-level catalog response')

**Current behavior:**
Returns exactly `{"domain":"database","provider":"aws","service":null,"supported_terms":[...]}` — no `available_services`, no `filter_hints`, no `example_invocation`, no tip. Root cause: `catalog.SupportedTerms` has a domain-level "database" key distinct from the service-level "database/rds" key, so `hasTerms` is true; the "nothing found → show available_services" branch (lookup.go L1090) only fires wh

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/41) · 2026-07-03 · closed · 1 comment

### RC3-023 (P2, DEFERRED): flat/global-rate GCP services (Firestore, Pub/Sub, KMS, Cloud DNS, external IPs) have zero catalog entries

**Citation:** customer-feedback §6

**Current behavior:**
`gcp_catalog.go`'s `DescribeCatalog` Services map has no entries for these five services under any domain. `get_price` for each returns `not_supported` with zero catalog data. These five services have genuinely different pricing units (external IP ≈ per-hour is the cleanest fit; KMS is per-key-version+operation; Cloud DNS is per-zone+query-volume; Pub/Sub is per-GB throughput; Firestore is per-operation+storage and plausibly region-varyin

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/39) · 2026-07-03 · closed · 1 comment

### RC3-018 (P2, SCOPED): not_available_in emitted by only 3 of ~9 fan-out/BoM tools

**Citation:** customer-feedback §4 ('Keep and extend not_available_in')

**Current behavior:**
Grep for `not_available_in` across `internal/tools` hits only `availability.go` (`HandleFindCheapestRegion`, `HandleFindAvailableRegions`) and `lookup.go` (`HandleComparePrices`). `HandleGetPrice`, `HandleGetPricesBatch`, `HandleCompareBOM`, `HandleEstimateBOM` have no `not_available_in`. `get_price_by_sku` has zero hits for either mechanism.

**Proposed fix:**
Add `not_available_in` to `HandleGetPrice

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/37) · 2026-07-03 · closed · 1 comment

### RC3-017 (P2): cache_stats has no per-provider breakdown or as_of ages; no cache-warm endpoint

**Citation:** customer-feedback §3

**Current behavior:**
`cache_stats` returns `{"db_path":...,"db_size_mb":56.84,"metadata_entries":0,"price_entries":158}` — flat global counts only. `HandleCacheStats` (cachetool.go L84-102) sources from `CacheManager.Stats()`, which exposes only `EntryCount`/`FileSizeBytes`/`FilePath` — no breakdown data model exists. No `warm_cache` tool is registered anywhere.

**Proposed fix:**
Extend `CacheManager.Stats()` to key entries by provider/service and record las

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/36) · 2026-07-03 · closed · 1 comment

### RC3-015 (P2, SCOPED — GCP-first, needs live catalog access to implement): no GCP equivalent of get_price_by_sku exists

**Citation:** customer-feedback §2 ('A GCP/Azure equivalent')

**Current behavior:**
`sku_lookup.go` imports only the AWS provider; `LookupSKUAcrossRegions` hard-rejects any `providerName != "aws"` with `SKUErrUnsupportedProvider`. Grep of GCP/Azure provider packages for SKU-lookup logic finds nothing. `get_price_by_sku(..., provider="gcp")` returns `{"error":"unsupported_provider",...}`. The AWS tool's whole design (region-prefix stripping keyed to AWS usage-type shape, canonical-default attrib

[Read the thread](https://github.com/x7even/cloudcostsmcp/issues/35) · 2026-07-03 · open · 1 comment

The remaining reports are on [the project's issue tracker](https://github.com/x7even/cloudcostsmcp/issues).
