Skip to main content
Glama
dholliday3

blacksmith-usage-mcp

by dholliday3

blacksmith-usage-mcp

A local MCP server that exposes Blacksmith.sh's usage & cost data, which Blacksmith does not officially publish as an API. It lets you pull CI spend into agents, alerts, dashboards, or scheduled reports instead of eyeballing the web UI.

Unofficial / unaffiliated. It replays your own authenticated dashboard session against Blacksmith's private backend. Endpoints may change without notice.

What it gives you

Read-only tools over the metrics the dashboard itself uses:

Tool

Returns

blacksmith_whoami

session identity (auth check)

blacksmith_list_orgs

your GitHub orgs/installations

blacksmith_cost_summary

jobs, minutes, $ cost for a month

blacksmith_cost_daily

per-day jobs / minutes / cost

blacksmith_cost_by_repo

cost per repository

blacksmith_cost_by_runner

cost per runner type

blacksmith_sticky_disk_cost

Docker-cache storage $ + GB-hours (often the biggest line item)

blacksmith_sticky_disk_daily

daily cache footprint (GB held) — the growth curve; spots an unbounded cache

blacksmith_monthly_usage

billable vs included-free minutes

blacksmith_current_vcpu

live vCPU/jobs right now

blacksmith_vcpu_timeseries

usage over time

blacksmith_cost_overview

one-shot month report (totals + free-tier headroom + top repos/runners)

blacksmith_cost_trend

month-over-month compute vs sticky-disk cost (last N months)

Every tool takes an optional month ("YYYY-MM", default current) and org (defaults to $BLACKSMITH_ORG).

Example

Ask your agent "what's my Blacksmith spend this month?" and blacksmith_cost_overview returns:

{
  "org": "your-org",
  "month": "2026-06",
  "compute_cost_usd": 2.13,
  "sticky_disk_cost_usd": 15.47,
  "total_cost_usd": 17.6,
  "total_jobs": 141,
  "billable_minutes": 1064,
  "free_minutes": 3000,
  "free_tier_remaining_minutes": 1936,
  "cost_by_repo": [{ "repo_name": "your-org/app", "cost": 2.13, "runtime_minutes": 267 }],
  "cost_by_runner": [{ "runner_type": "blacksmith-4vcpu-ubuntu-2404", "cost": 2.12, "runtime_minutes": 265 }]
}

Note how sticky-disk (Docker cache) storage can dwarf compute — it's frequently the largest single line item, and the one most worth alerting on.

Related MCP server: cloudscope-mcp

How auth works

Blacksmith's dashboard (app.blacksmith.sh) talks to a Laravel backend at dashboardbackend.blacksmith.sh/api. There is no public API key or bearer token — auth is a stateful session cookie (blacksmith_session, httponly, ~14-day rolling). GitHub OAuth only bootstraps that cookie, and the code → session exchange uses Blacksmith's server-side client secret, so the OAuth flow can't be replayed headlessly.

So the model is: sign in once via GitHub, harvest the cookie, replay it. Two non-obvious details this server handles for you:

  • The backend is Laravel Sanctum (stateful), so every request sends Origin: https://app.blacksmith.sh. Without that header the cookie is rejected with a 401.

  • The server rotates the session cookie on every response; the client persists the fresh value back to storage, so the session stays alive as long as it's used within ~14 days. The durable remember_web_* cookie is harvested too.

Setup

git clone https://github.com/dholliday3/blacksmith-usage-mcp.git
cd blacksmith-usage-mcp
pnpm install                          # or: npm install
pnpm exec playwright install chromium # one-time, for the login helper
pnpm login                            # opens a browser; sign in with GitHub
pnpm check                            # prints a cost overview — confirms it works

pnpm login uses a persistent browser profile under .auth/ (gitignored) so your GitHub session sticks around and future refreshes usually skip 2FA. Re-run pnpm login whenever a tool returns a "session expired" error (~every 14 days if unused).

Set your org once so you can omit it from every call:

export BLACKSMITH_ORG=your-github-org-slug   # find it via `blacksmith_list_orgs`

Register with an MCP client

Claude Code:

claude mcp add blacksmith-usage -s user -- pnpm --dir /abs/path/to/blacksmith-usage-mcp start

Generic mcp.json:

{
  "mcpServers": {
    "blacksmith-usage": {
      "command": "pnpm",
      "args": ["--dir", "/abs/path/to/blacksmith-usage-mcp", "start"],
      "env": { "BLACKSMITH_ORG": "your-github-org-slug" }
    }
  }
}

Where the session is stored

In priority order:

  1. $BLACKSMITH_SESSION_JSON — full session JSON inline. Handy for CI / headless, where you inject a cookie harvested elsewhere.

  2. macOS Keychain (security, service blacksmith-session-cookie) — default on macOS.

  3. A 0600 file at $BLACKSMITH_SESSION_FILE, or ${XDG_CONFIG_HOME:-~/.config}/blacksmith-usage-mcp/session.json — default on Linux/Windows, or whenever $BLACKSMITH_SESSION_FILE is set.

The cookie is a live credential to your Blacksmith account and is never written into the repo. .gitignore blocks .auth/ and any stray .session.json.

Notes

  • Read-only by design — no tool mutates Blacksmith state. (Writes would require sending the X-XSRF-TOKEN header, which this client deliberately never does.)

  • Schemas use .passthrough(), so if Blacksmith adds fields they surface rather than break parsing.

  • Requires Node ≥ 20 (uses fetch + Headers.getSetCookie).

Cost model

docs/blacksmith-cost-model.md explains how Blacksmith bills (compute vs. the two caches), how to run jobs with $0 caching cost, and the unbounded-Docker-cache footgun that makes bills balloon — with citations to Blacksmith's docs and a recording date (pricing can change).

Blacksmith's own LLM docs

Handy to feed an agent alongside this server (product docs, not the usage API):

License

MIT — see LICENSE.

Available Tools

13 tools
blacksmith_cost_by_repoC

Cost broken down by repository for a month.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoGitHub org/installation slug (defaults to $BLACKSMITH_ORG)
monthNoBilling month as "YYYY-MM" (default: current month). Selects the start/end range.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states the grouping and timeframe, but does not disclose whether this is a read-only operation, any default behaviors (e.g., default org, default month), or output characteristics. The description adds minimal behavioral context beyond what the tool name implies.

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 a single, concise sentence with no filler words. It is appropriately front-loaded, starting with the key concept. However, the brevity contributes to under-specification, so it doesn't earn a 5.

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

Completeness3/5

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

Given the tool's simplicity (2 optional params, no output schema, no annotations), the description conveys the essential grouping and timeframe. However, it does not specify whether the output is a list, a total, or how it relates to the org parameter. With many sibling cost tools, more context about the return format or typical use case would improve completeness.

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

Parameters3/5

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

Schema description coverage is 100%, with both 'org' and 'month' parameters having clear descriptions that include defaults and meaning. The description does not add any extra parameter semantics, so the baseline of 3 applies.

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

Purpose4/5

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

The description clearly states the resource (cost) and the grouping dimension (by repository) with a time scope (for a month). While it lacks an explicit verb like 'get' or 'list', 'broken down' conveys an aggregation/listing action. It is distinguishable from sibling tools like cost_daily or cost_by_runner due to the explicit 'by repository' grouping.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool over alternatives. It does not mention any context, exclusions, or sibling tools for comparison. Users must infer from the name which scenario it fits.

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

blacksmith_cost_by_runnerA

Cost broken down by runner type (e.g. blacksmith-4vcpu-ubuntu-2404) for a month.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoGitHub org/installation slug (defaults to $BLACKSMITH_ORG)
monthNoBilling month as "YYYY-MM" (default: current month). Selects the start/end range.

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It explains the output dimension and time scope, but does not disclose details such as whether this is read-only, how costs are aggregated, or what exactly is included/excluded. It provides basic functional transparency without richer 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.

Conciseness5/5

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

The description is a single, clear sentence with no filler. It front-loads the core purpose and includes a useful example, making every word earn its place.

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

Completeness4/5

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

For a simple read-only report tool with 100% schema coverage and no output schema, the description adequately conveys the main output and scope. It could mention default behavior or return format, but the essential information needed to select and invoke the tool is present.

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

Parameters3/5

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

Schema coverage is 100% and both parameters are already documented in the input schema. The description adds an example runner type and 'for a month' context, but it does not significantly enhance parameter semantics beyond what the schema already provides.

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 returns cost data broken down by runner type, with a concrete example and time scope ('for a month'). This distinguishes it from sibling tools like blacksmith_cost_by_repo and blacksmith_cost_summary by identifying the exact grouping dimension.

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

Usage Guidelines3/5

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

The description implies when to use (monthly cost by runner type) but does not explicitly state alternatives or when-not-to-use. Sibling tool names suggest related cost breakdowns, but the description itself offers no comparative guidance.

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

blacksmith_cost_dailyB

Per-day breakdown of jobs, minutes, and cost for a month.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoGitHub org/installation slug (defaults to $BLACKSMITH_ORG)
monthNoBilling month as "YYYY-MM" (default: current month). Selects the start/end range.

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It does not mention permissions, rate limits, output format, sort order, timezone, or whether the operation is read-only. 'Breakdown' implies a read operation, but this is not stated, and no additional behavioral context is provided.

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

Conciseness5/5

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

The description is a single concise sentence with no fluff, fluff-free, and front-loaded with the key information ('Per-day breakdown'). Every word earns its place.

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

Completeness3/5

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

Given low complexity (2 optional params), no output schema, and no annotations, the description gives a clear high-level picture of the result ('jobs, minutes, and cost' per day) and the time scope. However, it lacks detail on the return structure and any behavioral caveats, leaving some gaps for a fully complete description.

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

Parameters3/5

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

Schema description coverage is 100%, with both 'org' and 'month' already well-documented in the schema. The description adds no additional parameter semantics beyond what the schema provides, so the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly identifies a per-day breakdown of jobs, minutes, and cost for a month, providing a specific scope of data. It is clear and distinguishes the tool's daily granularity from some siblings (e.g., cost_by_repo), though it does not explicitly contrast with all sibling tools.

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

Usage Guidelines3/5

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

The phrase 'Per-day breakdown ... for a month' implies this tool is for monthly, day-level cost analysis, but there is no explicit guidance on when to choose it over alternatives like cost_summary or cost_trend. No exclusions or alternative tool names are mentioned.

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

blacksmith_cost_overviewA

One-shot cost report for a month: totals, free-tier headroom, sticky-disk, and the top repos + runner types by cost.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoGitHub org/installation slug (defaults to $BLACKSMITH_ORG)
monthNoBilling month as "YYYY-MM" (default: current month). Selects the start/end range.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It clearly indicates the tool produces a report and names all included components, which transparently sets expectations. However, it does not explicitly state the operation is read-only or mention any potential dependencies or limitations, though the nature of a report makes these omissions less critical.

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

Conciseness5/5

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

The description is a single, compact sentence that front-loads the core purpose ('One-shot cost report') and enumerates key contents efficiently. There is no redundant or filler language.

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

Completeness4/5

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

Given the tool has no output schema, the description competently explains what the report contains (totals, headroom, sticky-disk, top repos/runner types). It is sufficiently complete for an overview tool, though it could have clarified whether any additional configuration or prerequisites exist.

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

Parameters3/5

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

Schema coverage is 100% with both org and month fully described. The description adds minimal extra meaning beyond connecting the month to the report scope, so the baseline score of 3 is appropriate.

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 identifies the tool as a one-shot cost report for a month, listing specific contents (totals, free-tier headroom, sticky-disk, top repos/runner types). This distinguishes it from sibling tools that focus on individual breakdowns, making the purpose unambiguous.

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

Usage Guidelines3/5

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

The phrase 'one-shot cost report' implies use for a consolidated monthly overview, but there is no explicit guidance on when to use this tool versus more specific siblings like cost_by_repo or cost_daily. The usage context is implied rather than stated.

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

blacksmith_cost_summaryB

Headline cost for a month: total jobs, billable minutes, and dollar cost.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoGitHub org/installation slug (defaults to $BLACKSMITH_ORG)
monthNoBilling month as "YYYY-MM" (default: current month). Selects the start/end range.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It only lists output fields and does not mention whether this is a read-only operation, auth requirements, rate limits, or how the month range is determined beyond the default. This is minimal transparency.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the key information: what the tool returns (headline cost) and its composition (total jobs, billable minutes, dollar cost). No wasted words.

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

Completeness3/5

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

For a simple summary tool with 100% schema coverage and no output schema, the description is adequate. However, given the large number of sibling cost tools, a brief note on how this relates to or differs from cost_overview or monthly_usage would improve completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description mentions 'month' but does not add any additional semantic nuance beyond what the schema already provides for org and month parameters.

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

Purpose4/5

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

The description clearly states the tool provides a monthly headline cost with total jobs, billable minutes, and dollar cost. It is specific about the resource (monthly summary) and outputs, though it does not explicitly differentiate from sibling cost tools.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus the many cost-related siblings (e.g., cost_overview, monthly_usage, cost_daily). The phrase 'for a month' implies a monthly summary, but there are no exclusions or alternative tool suggestions.

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

blacksmith_cost_trendA

Month-over-month compute vs sticky-disk cost for the last N months — spots accumulating cache cost vs one-off compute spikes.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoGitHub org/installation slug (defaults to $BLACKSMITH_ORG)
monthsNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of disclosing behavior. It explains that the tool compares compute and sticky-disk costs over months and highlights patterns, which adds useful context. However, it does not mention that this is a read-only operation, nor does it describe the return format or how data is aggregated, leaving some ambiguity.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that conveys the core purpose and a key analytical use. It contains no filler or redundant information, making it highly efficient.

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

Completeness3/5

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

The tool has no output schema and no annotations, so the description should ideally convey the shape of the result. It does imply a multi-month comparison but does not specify whether the output is a time series, a summary table, or a visual representation. The two optional parameters are well covered, but the lack of return-value detail leaves a notable gap for an agent invoking the tool.

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?

The description says 'for the last N months', which directly maps to the 'months' parameter and gives semantic meaning beyond the schema's default and range. The 'org' parameter is described in the schema with its environment variable default, so the description does not need to repeat it. Since schema coverage is only 50%, the description compensates for the undocumented 'months' parameter.

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

Purpose4/5

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

The description clearly states that the tool provides month-over-month compute vs sticky-disk cost for a configurable number of months. This differentiates it from sibling cost tools that focus on daily breakdowns, per-repo, or overall summaries. However, it lacks an explicit action verb like 'returns' or 'shows', which makes the purpose slightly less direct.

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

Usage Guidelines4/5

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

The description gives clear analytical context: it is meant to spot accumulating cache cost versus one-off compute spikes. This implies the appropriate use case and distinguishes it from other cost tools, though it does not explicitly name alternatives or state when not to use it.

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

blacksmith_current_vcpuA

Live vCPU/job usage right now, by architecture (null when idle).

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoGitHub org/installation slug (defaults to $BLACKSMITH_ORG)

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It adds useful behavior ('null when idle') and the architecture breakdown, but does not mention whether the operation is read-only, potential rate limits, or the shape of the returned data. The added context is helpful but not comprehensive.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no redundant words. It conveys the core idea immediately and every word contributes value, making it a model of conciseness.

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

Completeness4/5

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

For a simple one-parameter tool with no output schema, the description covers the essential context: the temporal scope ('right now'), the breakdown ('by architecture'), and idle behavior ('null when idle'). It could improve by specifying response structure or what 'architecture' lists, but given the tool's simplicity, it is sufficiently complete.

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

Parameters3/5

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

The only parameter 'org' is already fully described in the schema with 100% coverage, including its default behavior. The description adds no extra meaning about the parameter, so the baseline score of 3 is appropriate given the schema handles it.

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 identifies the resource (vCPU/job usage), the timeframe ('right now'), and the dimension ('by architecture'), distinguishing it from siblings like blacksmith_vcpu_timeseries which imply historical data. Even without an explicit verb, the noun phrase sets a specific and actionable purpose.

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

Usage Guidelines3/5

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

The description implies usage for current-time queries but does not explicitly state when to use this tool versus alternatives like vcpu_timeseries or cost trend tools. There is no exclusion or when-not-to-use guidance, leaving it to the agent to infer from sibling names.

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

blacksmith_list_orgsA

List GitHub orgs/installations available to the session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description alone must convey behavioral traits. It implies a safe, read-only list operation and adds the useful scope 'available to the session,' but it does not explicitly state that it is read-only, has no side effects, or mention any auth requirements.

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

Conciseness5/5

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

The description is a single, concise sentence with no filler. It front-loads the action and resource, making it immediately scannable and informative.

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 zero-parameter list tool with no output schema, the description sufficiently explains what is returned: GitHub orgs/installations. The session scoping adds important context without unnecessary detail.

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?

The input schema is empty, and with 0 parameters the baseline is 4. The description reinforces that no inputs are needed and clarifies what will be returned.

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 uses a specific verb 'List' with a clear resource ('GitHub orgs/installations available to the session'). It distinguishes itself from sibling cost/usage tools by focusing on session-scoped org/installation enumeration.

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

Usage Guidelines4/5

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

The description provides clear context: this tool is for listing orgs/installations available to the current session. It does not explicitly mention alternatives or exclusions, but the scope is unambiguous and no sibling tool is a direct alternative.

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

blacksmith_monthly_usageB

Billable vs included-free minutes for a month (free-tier headroom).

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoGitHub org/installation slug (defaults to $BLACKSMITH_ORG)
monthNoBilling month as "YYYY-MM" (default: current month). Selects the start/end range.

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of disclosing side effects and operational behavior. It does not explicitly state that this is a read-only query, nor does it describe any permissions, data scope, or impact. The description adds some behavioral context (the comparison of billable vs free minutes), but not enough to satisfy transparency without annotations.

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

Conciseness5/5

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

The description is a single, dense sentence with no wasted words. The parenthetical 'free-tier headroom' adds a useful interpretive frame without bloating the text.

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

Completeness3/5

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

For a simple tool with two optional parameters and no output schema, the description gives the core concept but omits details like return format, how to interpret the comparison, or relationship to sibling cost tools. It is adequate but leaves room for clarification.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. Both 'org' and 'month' are described in the schema with defaults and format. The description's mention of 'for a month' aligns with the month parameter but does not add any semantic detail beyond what the schema already conveys.

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

Purpose4/5

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

The description clearly identifies the resource: billable vs included-free minutes for a month, and adds the useful context of 'free-tier headroom.' It lacks an explicit verb (e.g., 'get' or 'show'), but the meaning is unambiguous and distinguishes it from sibling cost-focused tools.

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

Usage Guidelines3/5

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

The phrase 'free-tier headroom' implies this is for monitoring usage against free allowances, providing some usage context. However, there is no explicit when-to-use guidance, no mention of alternatives, and no exclusions distinguishing it from the many sibling cost/usage tools.

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

blacksmith_sticky_disk_costB

Sticky-disk (Docker cache) storage cost and GB-hours for a month. Often the largest line item.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoGitHub org/installation slug (defaults to $BLACKSMITH_ORG)
monthNoBilling month as "YYYY-MM" (default: current month). Selects the start/end range.

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden, but it only communicates the output type (cost and GB-hours) without any behavioral traits such as read-only status, permissions, rate limits, or data granularity. This is adequate for a simple query tool but misses an explicit safety disclosure.

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

Conciseness5/5

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

The description is only two sentences and front-loads the key purpose in the first. The second sentence adds useful cost context without fluff. Every word earns its place, making it highly efficient.

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

Completeness3/5

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

For a simple tool with two optional params and no output schema, the description covers the return value (cost and GB-hours) and time scope. However, it lacks differentiation from sticky_disk_daily and does not explain the output format or any aggregation details, leaving some completeness gaps given the absence of annotations.

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

Parameters3/5

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

The input schema already provides 100% coverage for both parameters (org and month), including defaults and month format. The description adds no additional parameter-specific meaning beyond confirming the month scope, so the baseline of 3 applies.

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 returns sticky-disk storage cost and GB-hours for a month, with a specific scope. It distinguishes itself from siblings like sticky_disk_daily by emphasizing the monthly breakdown and identifies the resource (Docker cache).

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

Usage Guidelines2/5

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

The description offers no explicit guidance on when to use this tool versus alternatives. It hints at importance ('Often the largest line item') but does not mention sibling tools or exclude cases like daily analysis, leaving the agent to infer usage from the name.

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

blacksmith_sticky_disk_dailyA

Daily sticky-disk / Docker-layer-cache footprint (GB held each day) for a month — the cache growth curve. Steadily-climbing totals mean an unbounded cache (set max-cache-size-mb on setup-docker-builder); a flat line means a stable working set.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoGitHub org/installation slug (defaults to $BLACKSMITH_ORG)
monthNoBilling month as "YYYY-MM" (default: current month). Selects the start/end range.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description bears full responsibility for behavioral context. It goes beyond a simple read operation by explaining what the data means (growth curve) and what conclusions to draw. However, it does not disclose details like response format, pagination, or whether data is cumulative, leaving some minor gaps.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose in the first sentence, and the second sentence adds valuable interpretation without verbosity. Every phrase earns its place, and it is appropriately sized for the tool's complexity.

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

Completeness4/5

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

Given the tool's moderate complexity and absence of an output schema, the description explains what is returned (daily GB held) and how to interpret the data, including actionable insights. It does not specify the exact return shape (e.g., array of date-GB pairs), but for a simple metrics tool, this is sufficiently complete for an agent to understand and invoke the tool.

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

Parameters3/5

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

Schema description coverage is 100%, with both org and month parameters well documented in the schema (org defaults to $BLACKSMITH_ORG, month defaults to current and format YYYY-MM). The description adds interpretive context around 'month' (for a month) but does not provide additional parameter-level detail beyond the schema, scoring at baseline.

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's purpose: it provides the daily sticky-disk / Docker-layer-cache footprint in GB held each day for a month, representing the cache growth curve. It distinguishes itself from siblings like sticky_disk_cost by focusing on daily footprint and growth trends, not on cost.

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

Usage Guidelines4/5

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

The description implies when to use it: to assess whether the Docker cache is bounded or growing unboundedly. It provides explicit interpretive guidance (steadily-climbing totals signal unbounded cache, flat line signals stable working set) and a remediation action (set max-cache-size-mb). It does not explicitly mention alternatives or when not to use, but the context is clear.

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

blacksmith_vcpu_timeseriesC

vCPU/job usage time series for a month (windowed). Large payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoGitHub org/installation slug (defaults to $BLACKSMITH_ORG)
monthNoBilling month as "YYYY-MM" (default: current month). Selects the start/end range.
window_sizeNo

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It notes 'Large payload' and 'windowed', which are helpful, but does not explain whether the operation is read-only, costs quota, requires specific permissions, or how the response is structured. The lack of annotations and minimal behavioral detail is a significant gap for a potentially heavy data retrieval.

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

Conciseness5/5

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

The description is extremely concise: two short sentences, front-loaded with the core purpose and a critical warning. Every word adds value, with no filler or repetition of schema details.

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

Completeness2/5

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

Given that there is no output schema and no annotations, the description must convey what the agent will receive. It only warns about large payload but does not describe the time series format, granularity, or aggregation. The tool has 3 parameters and no return structure documentation, making the description insufficient for a complete understanding of the tool's behavior and output.

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

Parameters2/5

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

Schema description coverage is 67% (org and month have descriptions, window_size does not). The description adds no parameter-specific meaning, and 'windowed' is too vague to clarify the window_size parameter. Since coverage is below 80%, the description should compensate but does not, leaving the window_size parameter semantically underdefined.

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

Purpose4/5

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

The description states the resource (vCPU/job usage) and the time scope (a month, windowed), implying retrieval of a time series. While no explicit verb like 'get' or 'list' is used, the phrase 'usage time series' clearly indicates the operation. It does not explicitly distinguish from siblings like blacksmith_current_vcpu or blacksmith_monthly_usage, but the 'windowed' and 'month' qualifiers provide some differentiation.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. The 'Large payload' warning is a cautionary note but not a usage guideline. It does not mention alternatives like blacksmith_current_vcpu for current usage or blacksmith_monthly_usage for aggregate monthly data, so the agent is left without direction on tool selection.

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

blacksmith_whoamiA

Who the stored Blacksmith session belongs to (verifies auth is live).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses the key behaviors: reporting the session owner and verifying that authentication is live. It doesn't detail error handling or the exact output format, but for a simple whoami this is reasonably transparent.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. Every word contributes meaning: it states what the tool returns and why it matters.

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 trivial, no-parameter auth-check tool, the description is complete. It explains the tool's purpose ('who the session belongs to') and the verification aspect ('verifies auth is live'). No output schema exists, but the return intent is clearly implied.

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?

The tool has zero parameters and an empty input schema, so the description doesn't need to explain parameters. Per the rubric, a 0-parameter tool gets a baseline of 4, and the description adds no irrelevant parameter information.

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 identifies the tool as an identity/auth check: 'Who the stored Blacksmith session belongs to' is a specific, useful purpose. It also distinguishes itself from all sibling cost/usage tools, which are unrelated to session identity.

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

Usage Guidelines4/5

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

The parenthetical '(verifies auth is live)' gives a clear context for when to use the tool—checking that authentication is active. It doesn't explicitly list exclusions, but no sibling tool serves a similar auth-checking purpose, so the guidance is sufficient.

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

TDQS

A3.7/5.0
Disambiguation4/5

Most tools have a clear, distinct purpose (e.g., cost_daily vs cost_by_repo vs cost_by_runner). However, cost_summary and cost_overview overlap in providing headline totals, which could cause an agent to pick the wrong one for a simple total-cost query.

Naming Consistency4/5

The blacksmith_ prefix is consistent, and most names follow a <domain>_<granularity> pattern (cost_summary, cost_daily, vcpu_timeseries). Minor deviations exist: list_orgs uses a verb while others are noun phrases, and whoami is a standalone command, but the overall pattern is predictable.

Tool Count5/5

13 tools is well-scoped for a usage/cost monitoring server. Each tool covers a distinct reporting dimension (summary, daily, by repo, by runner, sticky disk, live usage, trends) without redundancy or bloat.

Completeness5/5

The surface covers the full lifecycle of Blacksmith usage reporting: auth, orgs, compute cost, free-tier allowance, live vCPU, sticky-disk cost and growth, and month-over-month trends. There are no obvious dead ends or critical missing operations for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Local-first FinOps MCP server. Ask about your AWS, Azure, GCP, and SaaS costs in plain English. Anomaly detection, rightsizing, idle-resource cleanup, and Jira/Linear ticketing. Credentials never leave your machine.
    10
    16
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dholliday3/blacksmith-usage-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server