Skip to main content
Glama

Complexity Cost Calculator

Server Details

Prices the cost of software complexity and how AI adoption changes engineering cost over time.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A3.7/5.0

Scored across 2 tools

Disambiguation5/5

The two tools are clearly distinct: calculate performs the domain computation, while health checks API availability. There is no plausible overlap or risk of misselection.

Naming Consistency4/5

Both names are simple lowercase identifiers, but calculate is an action verb while health is a conventional diagnostic noun. This is a minor deviation from a strict verb-based pattern and remains readable.

Tool Count3/5

The server exposes only one functional tool plus a health check, making the surface feel thin. Two tools is borderline for the stated purpose, though the narrow calculator scope makes it defensible.

Completeness4/5

The calculate tool appears to cover the main domain outputs: per-feature, quarterly/yearly costs, AI adoption effects, and Pro levers. Minor gaps exist around inspecting assumptions, comparing scenarios, or retrieving prior calculations, but core usage is covered.

Available Tools

2 tools
calculateB
Read-only
Inspect

Calculate what software complexity costs an engineering organization per feature, per quarter and per year, how AI adoption changes that cost over the coming quarters, and (Pro) which levers lower it.

NameRequiredDescriptionDefault
teamsYesTeams in the organization (not more than engineers)
leversNoPro. Levers that put people back in the loop, or automate, where AI makes a cost worse: human_interfaces (people design and review every change that crosses a module boundary), explain_before_merge, safety_net (contract tests, monitoring, canary releases with automatic rollback) and decision_rights (decisions move to the teams that own the code). Each has its own cost. On Pro the response also has a plan with the cheapest mix of levers for every AI level.
engineersYesEngineers in the organization
ai_adoptionNoAI adoption for every team. Leave it out for no AI.
hourly_rateNoCost of one engineering hour; adds dollar amounts to the results
team_adoptionNoPro. Different AI levels per group of teams; the team counts must add up to teams. Use instead of ai_adoption.
vacuum_effortYesHours a typical change would take in a perfectly modular system
ai_assumptionsNoPro. Your own AI values instead of the starting values
decision_peopleNoPeople outside the teams who take part in a typical cross-team decision (default 2)
teams_per_changeNoTeams a typical change crosses (not more than teams)
features_per_yearNoFeatures shipped per year (default 20)
lever_assumptionsNoPro. Your own values for the levers instead of the starting values
connascence_degreeYesHow many other modules usually change along with it (a count)
coordination_hoursYesHours of meetings, threads and reviews the change causes
calibration_changesNoPro. Past changes with their actual hours, to fit the interdependence factor. Use instead of interdependence_factor.
incident_cost_hoursNoHours an incident costs; give it together with incident_likelihood
incident_likelihoodNoChance that a change causes an incident; give it together with incident_cost_hours
projection_quartersNoQuarters to project (default 12)
interdependence_factorNoHow strongly coupled modules drag work along (default 0.5)
maintenance_hours_per_quarterNoMaintenance hours per quarter
infrastructure_hours_per_quarterNoInfrastructure hours per quarter
connascence_degree_change_per_quarterNoPro. Planned change in coupling per quarter (negative when you decouple)

Output Schema

NameRequiredDescription
aiYesTeam ownership, lost understanding, and which costs AI made cheaper or more expensive than no AI
planYesPro: the cheapest lever mix for the chosen adoption and for every AI level; null on Free
leversYes
noticeNoPresent when Pro fields were sent on the Free plan and ignored
horizonYesHours (and dollars) over the projection, with and without AI
per_yearYes
projectionYesOne entry per quarter with expected, low, high and no-AI values
assumptionsYesStarting values used, not fitted
calibrationNo
per_featureYes
per_quarterYes
model_versionYes
sync_tax_multiplierYes

TDQS

B3.4/5.0
Behavior3/5

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

readOnlyHint=true is consistent with a pure computation, and the description usefully discloses the three time horizons and that lever analysis is gated behind Pro. It does not say the output is a model estimate driven by default assumptions, nor that defaults exist for many inputs (projection_quarters, interdependence_factor, features_per_year) — context the schema only hints at. With annotations carrying the safety profile, this is adequate but not rich.

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?

A single front-loaded sentence that packs the cost dimensions, the AI projection, and the Pro lever capability without filler. It is dense but well ordered by time horizon. No wasted wording, though the parenthetical '(Pro)' reads slightly awkwardly mid-clause.

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 is a complex 22-parameter model with nested objects, but it ships a fully described schema and an output schema, so return values need not be explained. The description covers scope and Pro gating but omits that results are estimates resting on default assumptions and how this relates to the sibling 'health' tool. Adequate, with clear remaining gaps for a model of this complexity.

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 every one of the 22 parameters, including nested Pro objects, is already documented in the schema. The description adds only the aggregate notion of 'levers' and Pro gating; it explains no parameter's meaning, units, or defaults beyond what the schema states. Baseline 3 applies when the schema does the heavy lifting.

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?

States a specific verb (Calculate) and the exact quantity produced: software complexity cost per feature, per quarter, per year, plus AI-driven projections and (Pro) levers. An agent can immediately tell this is a cost-modeling calculator rather than a diagnostic. It does not explicitly contrast itself with the sibling 'health' tool, so it stops short of a 5.

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?

Usage is only implied by the name and the phrase '(Pro) which levers lower it', which hints at a tiered capability. There is no statement of when to reach for this versus 'health', nor prerequisites such as required inputs or what the model assumes. An agent must infer the selection rule.

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

healthA
Read-only
Inspect

Health check for the Complexity Cost Calculator API. No API key required.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
okNo
messageNo
serviceNo
versionNo
databaseNo
environmentNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuinely non-redundant context beyond that: no API key is required, which tells an agent this call works pre-authentication. It does not say what a healthy vs unhealthy result looks like, but an output schema exists to cover the return shape.

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?

Two short sentences, front-loaded with purpose before the auth note. Every clause carries information and there is no filler.

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 parameterless health check with an output schema and a readOnly annotation, the description is essentially sufficient. The only minor gap is that it does not state what conditions constitute a healthy response, but the output schema can carry that.

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 takes zero parameters, so there is no parameter meaning to convey; the baseline for a 0-param tool applies. Nothing in the description misleads about inputs.

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 names a specific operation and target: a health check for the Complexity Cost Calculator API. That is unambiguous and clearly distinct from the sibling 'calculate', though the description does not explicitly name that sibling as the contrast.

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?

Usage is only implied: an agent can infer this is the liveness/availability probe to call before or instead of 'calculate'. There is no explicit when-to-use or when-not-to-use statement, and no mention of whether it checks liveness vs readiness.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedcalculate100 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / ai_adoption / additionalProperties
        Removed value: -false
      • addedInput schema / properties / ai_adoption / properties / level / anyOf
        Added value: +[
        +  {
        +    "const": 0,
        +    "type": "number"
        +  },
        +  {
        +    "const": 1,
        +    "type": "number"
        +  },
        +  {
        +    "const": 2,
        +    "type": "number"
        +  },
        +  {
        +    "const": 3,
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / ai_adoption / properties / level / enum
        Removed value: -[
        -  0,
        -  1,
        -  2,
        -  3
        -]
      • removedInput schema / properties / ai_adoption / properties / level / type
        Removed value: -"number"
      • removedInput schema / properties / ai_assumptions / additionalProperties
        Removed value: -false
      • removedInput schema / properties / ai_assumptions / properties / levels / additionalProperties
        Removed value: -false
      • removedInput schema / properties / ai_assumptions / properties / levels / properties / 1 / additionalProperties
        Removed value: -false
      • removedInput schema / properties / ai_assumptions / properties / levels / properties / 1 / properties / automation_saving / $ref
        Removed value: -"#/properties/lever_assumptions/properties/human_interfaces/properties/understanding_kept"
      • addedInput schema / properties / ai_assumptions / properties / levels / properties / 1 / properties / automation_saving / maximum
        Added value: +1
      • addedInput schema / properties / ai_assumptions / properties / levels / properties / 1 / properties / automation_saving / minimum
        Added value: +0
      • addedInput schema / properties / ai_assumptions / properties / levels / properties / 1 / properties / automation_saving / type
        Added value: +"number"
      • removedInput schema / properties / ai_assumptions / properties / levels / properties / 1 / properties / review_share / $ref
        Removed value: -"#/properties/maintenance_hours_per_quarter"
      • addedInput schema / properties / ai_assumptions / properties / levels / properties / 1 / properties / review_share / minimum
        Added value: +0
      • addedInput schema / properties / ai_assumptions / properties / levels / properties / 1 / properties / review_share / type
        Added value: +"number"
      • removedInput schema / properties / ai_assumptions / properties / levels / properties / 1 / properties / understanding_kept / $ref
        Removed value: -"#/properties/lever_assumptions/properties/human_interfaces/properties/understanding_kept"
      • addedInput schema / properties / ai_assumptions / properties / levels / properties / 1 / properties / understanding_kept / maximum
        Added value: +1
      • addedInput schema / properties / ai_assumptions / properties / levels / properties / 1 / properties / understanding_kept / minimum
        Added value: +0
      • addedInput schema / properties / ai_assumptions / properties / levels / properties / 1 / properties / understanding_kept / type
        Added value: +"number"
      • removedInput schema / properties / ai_assumptions / properties / levels / properties / 2 / $ref
        Removed value: -"#/properties/ai_assumptions/properties/levels/properties/1"
      • addedInput schema / properties / ai_assumptions / properties / levels / properties / 2 / properties
        Added value: +{
        +  "ai_speedup": {
        +    "description": "Share of own work time AI saves",
        +    "exclusiveMaximum": 1,
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "automation_saving": {
        +    "description": "Share of maintenance and infrastructure work AI automates",
        +    "maximum": 1,
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "event_response": {
        +    "description": "Share of incident cost AI's reaction to events saves",
        +    "exclusiveMaximum": 1,
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "review_share": {
        +    "description": "Review time added, as a share of own work",
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "understanding_kept": {
        +    "description": "Share of code understanding a team keeps for code AI writes",
        +    "maximum": 1,
        +    "minimum": 0,
        +    "type": "number"
        +  }
        +}
      • addedInput schema / properties / ai_assumptions / properties / levels / properties / 2 / type
        Added value: +"object"
      • removedInput schema / properties / ai_assumptions / properties / levels / properties / 3 / $ref
        Removed value: -"#/properties/ai_assumptions/properties/levels/properties/1"
      • addedInput schema / properties / ai_assumptions / properties / levels / properties / 3 / properties
        Added value: +{
        +  "ai_speedup": {
        +    "description": "Share of own work time AI saves",
        +    "exclusiveMaximum": 1,
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "automation_saving": {
        +    "description": "Share of maintenance and infrastructure work AI automates",
        +    "maximum": 1,
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "event_response": {
        +    "description": "Share of incident cost AI's reaction to events saves",
        +    "exclusiveMaximum": 1,
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "review_share": {
        +    "description": "Review time added, as a share of own work",
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "understanding_kept": {
        +    "description": "Share of code understanding a team keeps for code AI writes",
        +    "maximum": 1,
        +    "minimum": 0,
        +    "type": "number"
        +  }
        +}
      • addedInput schema / properties / ai_assumptions / properties / levels / properties / 3 / type
        Added value: +"object"
      • removedInput schema / properties / calibration_changes / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / engineers / maximum
        Added value: +9007199254740991
      • removedInput schema / properties / incident_cost_hours / $ref
        Removed value: -"#/properties/maintenance_hours_per_quarter"
      • addedInput schema / properties / incident_cost_hours / minimum
        Added value: +0
      • addedInput schema / properties / incident_cost_hours / type
        Added value: +"number"
      • removedInput schema / properties / infrastructure_hours_per_quarter / $ref
        Removed value: -"#/properties/maintenance_hours_per_quarter"
      • addedInput schema / properties / infrastructure_hours_per_quarter / minimum
        Added value: +0
      • addedInput schema / properties / infrastructure_hours_per_quarter / type
        Added value: +"number"
      • removedInput schema / properties / lever_assumptions / additionalProperties
        Removed value: -false
      • removedInput schema / properties / lever_assumptions / properties / decision_rights / additionalProperties
        Removed value: -false
      • removedInput schema / properties / lever_assumptions / properties / decision_rights / properties / people_removed / $ref
        Removed value: -"#/properties/lever_assumptions/properties/human_interfaces/properties/understanding_kept"
      • addedInput schema / properties / lever_assumptions / properties / decision_rights / properties / people_removed / maximum
        Added value: +1
      • addedInput schema / properties / lever_assumptions / properties / decision_rights / properties / people_removed / minimum
        Added value: +0
      • addedInput schema / properties / lever_assumptions / properties / decision_rights / properties / people_removed / type
        Added value: +"number"
      • removedInput schema / properties / lever_assumptions / properties / decision_rights / properties / record_hours_per_change / $ref
        Removed value: -"#/properties/maintenance_hours_per_quarter"
      • addedInput schema / properties / lever_assumptions / properties / decision_rights / properties / record_hours_per_change / minimum
        Added value: +0
      • addedInput schema / properties / lever_assumptions / properties / decision_rights / properties / record_hours_per_change / type
        Added value: +"number"
      • removedInput schema / properties / lever_assumptions / properties / explain_before_merge / additionalProperties
        Removed value: -false
      • removedInput schema / properties / lever_assumptions / properties / explain_before_merge / properties / speedup_given_up / $ref
        Removed value: -"#/properties/lever_assumptions/properties/human_interfaces/properties/understanding_kept"
      • addedInput schema / properties / lever_assumptions / properties / explain_before_merge / properties / speedup_given_up / maximum
        Added value: +1
      • addedInput schema / properties / lever_assumptions / properties / explain_before_merge / properties / speedup_given_up / minimum
        Added value: +0
      • addedInput schema / properties / lever_assumptions / properties / explain_before_merge / properties / speedup_given_up / type
        Added value: +"number"
      • removedInput schema / properties / lever_assumptions / properties / explain_before_merge / properties / understanding_recovered / $ref
        Removed value: -"#/properties/lever_assumptions/properties/human_interfaces/properties/understanding_kept"
      • addedInput schema / properties / lever_assumptions / properties / explain_before_merge / properties / understanding_recovered / maximum
        Added value: +1
      • addedInput schema / properties / lever_assumptions / properties / explain_before_merge / properties / understanding_recovered / minimum
        Added value: +0
      • addedInput schema / properties / lever_assumptions / properties / explain_before_merge / properties / understanding_recovered / type
        Added value: +"number"
      • removedInput schema / properties / lever_assumptions / properties / human_interfaces / additionalProperties
        Removed value: -false
      • removedInput schema / properties / lever_assumptions / properties / human_interfaces / properties / incident_share / $ref
        Removed value: -"#/properties/lever_assumptions/properties/human_interfaces/properties/understanding_kept"
      • addedInput schema / properties / lever_assumptions / properties / human_interfaces / properties / incident_share / maximum
        Added value: +1
      • addedInput schema / properties / lever_assumptions / properties / human_interfaces / properties / incident_share / minimum
        Added value: +0
      • addedInput schema / properties / lever_assumptions / properties / human_interfaces / properties / incident_share / type
        Added value: +"number"
      • removedInput schema / properties / lever_assumptions / properties / human_interfaces / properties / review_share / $ref
        Removed value: -"#/properties/maintenance_hours_per_quarter"
      • addedInput schema / properties / lever_assumptions / properties / human_interfaces / properties / review_share / minimum
        Added value: +0
      • addedInput schema / properties / lever_assumptions / properties / human_interfaces / properties / review_share / type
        Added value: +"number"
      • removedInput schema / properties / lever_assumptions / properties / safety_net / additionalProperties
        Removed value: -false
      • removedInput schema / properties / lever_assumptions / properties / safety_net / properties / build_hours_per_team / $ref
        Removed value: -"#/properties/maintenance_hours_per_quarter"
      • addedInput schema / properties / lever_assumptions / properties / safety_net / properties / build_hours_per_team / minimum
        Added value: +0
      • addedInput schema / properties / lever_assumptions / properties / safety_net / properties / build_hours_per_team / type
        Added value: +"number"
      • removedInput schema / properties / lever_assumptions / properties / safety_net / properties / test_share / $ref
        Removed value: -"#/properties/maintenance_hours_per_quarter"
      • addedInput schema / properties / lever_assumptions / properties / safety_net / properties / test_share / minimum
        Added value: +0
      • addedInput schema / properties / lever_assumptions / properties / safety_net / properties / test_share / type
        Added value: +"number"
      • removedInput schema / properties / lever_assumptions / properties / safety_net / properties / upkeep_hours_per_team_per_quarter / $ref
        Removed value: -"#/properties/maintenance_hours_per_quarter"
      • addedInput schema / properties / lever_assumptions / properties / safety_net / properties / upkeep_hours_per_team_per_quarter / minimum
        Added value: +0
      • addedInput schema / properties / lever_assumptions / properties / safety_net / properties / upkeep_hours_per_team_per_quarter / type
        Added value: +"number"
      • removedInput schema / properties / levers / additionalProperties
        Removed value: -false
      • removedInput schema / properties / team_adoption / items / additionalProperties
        Removed value: -false
      • removedInput schema / properties / team_adoption / items / properties / level / $ref
        Removed value: -"#/properties/ai_adoption/properties/level"
      • addedInput schema / properties / team_adoption / items / properties / level / anyOf
        Added value: +[
        +  {
        +    "const": 0,
        +    "type": "number"
        +  },
        +  {
        +    "const": 1,
        +    "type": "number"
        +  },
        +  {
        +    "const": 2,
        +    "type": "number"
        +  },
        +  {
        +    "const": 3,
        +    "type": "number"
        +  }
        +]
      • addedInput schema / properties / team_adoption / items / properties / level / description
        Added value: +"AI adoption level: 0 none, 1 coding help, 2 AI does all the coding, 3 AI does coding, checks, reviews and monitoring"
      • addedInput schema / properties / team_adoption / items / properties / teams / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / teams / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / teams_per_change / maximum
        Added value: +9007199254740991
      • changedOutput schema / properties / ai / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / assumptions / additionalProperties
        Previous value: -trueNew value: +{}
      • removedOutput schema / properties / calibration / $ref
        Removed value: -"#/properties/per_quarter"
      • addedOutput schema / properties / calibration / additionalProperties
        Added value: +{}
      • addedOutput schema / properties / calibration / properties
        Added value: +{}
      • addedOutput schema / properties / calibration / type
        Added value: +"object"
      • changedOutput schema / properties / horizon / additionalProperties
        Previous value: -trueNew value: +{}
      • removedOutput schema / properties / levers / $ref
        Removed value: -"#/properties/per_quarter"
      • addedOutput schema / properties / levers / additionalProperties
        Added value: +{}
      • addedOutput schema / properties / levers / properties
        Added value: +{}
      • addedOutput schema / properties / levers / type
        Added value: +"object"
      • changedOutput schema / properties / notice / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / per_feature / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / per_quarter / additionalProperties
        Previous value: -trueNew value: +{}
      • removedOutput schema / properties / per_year / $ref
        Removed value: -"#/properties/per_quarter"
      • addedOutput schema / properties / per_year / additionalProperties
        Added value: +{}
      • addedOutput schema / properties / per_year / properties
        Added value: +{}
      • addedOutput schema / properties / per_year / type
        Added value: +"object"
      • changedOutput schema / properties / plan / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/properties/per_quarter"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / projection / items / $ref
        Removed value: -"#/properties/per_quarter"
      • addedOutput schema / properties / projection / items / additionalProperties
        Added value: +{}
      • addedOutput schema / properties / projection / items / properties
        Added value: +{}
      • addedOutput schema / properties / projection / items / type
        Added value: +"object"
  2. 2 tool updates
    • First observedcalculate
    • First observedhealth

Publisher details

Operator
Beamer - Complexity Cost Calculator · Publisher source
Vendor relationship
First-party · Publisher source
Trust center
Not applicable
Restrictions
Free tier: up to 100 requests per day. Paid tier: $29/month 10k requests per day + additional features · Publisher source

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources