Skip to main content
Glama

Costory: Your Finops MCP

search

Read-only

Unified search across your entire Costory workspace — dimension values, events, alerts, dashboards (with their conditionsCel), dashboard templates, reports, virtual dimensions, and budgets. PRIMARY tool for discovering CEL field names: each dimensions result includes dimension (the exact CEL/groupBy name, e.g. cos_sub_account_id), label, and topMatches. Use type: ["dimensions"] to focus on dimensions only. An empty query (query: "") with type: ["dimensions"] returns every dimension with its top values — use this when you need the full field catalog before building filterCel. With a keyword, results are filtered to matching values (e.g. query: "prod" finds production values across dimensions). Use this when a user mentions a product, team, project, or service name and you need to discover where it appears in the cost data before querying. Returns matching dimension values, related events, alerts, dashboards, dashboardTemplates, reports, virtualDimensions, budgets. Virtual dimension hits include id, name, bqName (immutable query field — set at create, never changes), status, and description. Each dashboard result carries a "conditionsCel" string — the dashboard's CEL filter (empty when none) — so before calling update_dashboard you can decide whether to set "extendDashboardConditions: true" on your new widget. Budget results include id (parent budget id for URLs) and name/year; call get with the budget id to obtain the budgetVersionId needed for query. IMPORTANT: Use short, concise search terms — e.g. if the user says 'my kubernetes dashboard', just search for 'kubernetes', not the full phrase. Optional "type" array restricts results to specific entity buckets (dashboards, reports, alerts, budgets, dimensions, virtual_dimensions, events). FOLLOW-UP: After calling search, use get to fetch full details for dashboards, budgets, reports, virtual dimensions, and cost alerts by ID. For dimension values, use "query" to query data grouped by or filtered on the matched dimensions. When the user wants to add to a dashboard, use the id from the dashboards bucket as input to update_dashboard. EXAMPLES: • "List all CEL dimensions" → { query: "", type: ["dimensions"] } • "Find account-related dimensions" → { query: "account", type: ["dimensions"] } • "Show me kubernetes costs" → { query: "kubernetes" } • "Find the data team dashboard" → { query: "data team" }

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toNoEnd date for event search (YYYY-MM-DD). Defaults to today.
fromNoStart date for event search (YYYY-MM-DD). Defaults to 90 days ago.
slugNoOrganization slug. Omit to auto-detect from your account (fails if you belong to multiple orgs).
typeNoRestrict results to these entity types. Omit for all.
queryYesSearch term (e.g. 'kubernetes', 'account'). Case-insensitive partial matching. Pass empty string with type: ['dimensions'] to list all CEL field names and top values.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint and destructiveHint annotations, the description discloses result structure (dimension, label, topMatches), the behavior of empty queries with type dimensions, and immutability of bqName. It also reveals conditionsCel on dashboard hits and the need to call get for budgetVersionId, providing significant behavioral context.

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?

The description is lengthy but well-structured: leads with the primary purpose, then covers use cases, parameter behavior, follow-up steps, and examples. Each paragraph serves a distinct purpose, and the examples clarify input shapes. It could be trimmed slightly, but the structure keeps it scannable.

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?

With no output schema, the description fully covers return value expectations for each entity type. It includes edge cases (empty query, type restriction), follow-up tool usage, and practical examples. For a complex multi-entity search tool, this description leaves no critical gap for correct invocation.

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 descriptions already cover all 5 parameters, giving a baseline of 3. The description adds meaning beyond schema by explaining empty query + type ['dimensions'] returns the full CEL field catalog, type restricts to entity buckets, and query uses case-insensitive partial matching. This enriches parameter understanding beyond the schema.

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?

The description clearly states the tool performs 'Unified search across your entire Costory workspace' and enumerates all resource types. It explicitly brands itself as the 'PRIMARY tool for discovering CEL field names,' which distinguishes it from sibling tools like query and get.

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?

Provides explicit when-to-use guidance: 'Use this when a user mentions a product, team, project, or service name' before querying. It also names alternatives for follow-up: use get for detailed records, query for dimension values, and update_dashboard for adding widgets. The instruction to use short search terms adds actionable usage advice.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.1/5.0
Disambiguation4/5

Tools are organized by resource (alerts, dashboards, reports, events, virtual dimensions) with distinct actions, so most are clearly separable. The main confusion risks are the three report-delivery side-effect tools (run_report_now, retry_report_execution, transfer_report_execution) and the generic get that spans five resource types, though detailed descriptions mitigate these.

Naming Consistency4/5

The dominant verb_noun pattern (create_*, list_*, update_*, preview_*, get_*) is consistent and predictable across the set. Deviations like bare verbs query/search/get and the noun-only virtual_dimension_overlap_matrix are readable but break the otherwise uniform convention.

Tool Count3/5

44 tools is heavy and exceeds the comfortable range, but the server covers a genuinely broad FinOps platform spanning querying, dashboards, reports, alerts, events, virtual dimensions, docs, skills, and suggestions. Each tool has a distinct job, though the sheer count makes agent navigation harder.

Completeness3/5

Core workflows are well covered: query → dashboard/report/alert/event, plus a full virtual-dimension draft lifecycle. Notable gaps include alerts being create-only with no update/delete, no deletes for dashboards/events/published virtual dimensions, and budget management limited to query/get with no create/update.

Resources