Koskamo

Complexity Cost Calculator MCP

An MCP server that allows AI agents to calculate the cost of software complexity, including sync tax, total cost of complexity, and failure risk, while projecting how AI adoption impacts engineering costs over time.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Complexity Cost Calculator MCP logo, by BeamerCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by Beamer
You need:Get your free API key at your account pageConnect your MCP client to https://mcp.complexity-cost-calculator.beamercloud.com/mcp and send your API key in the X-API-Key header
MCP endpoint (Streamable HTTP)
https://mcp.complexity-cost-calculator.beamercloud.com/mcp
Vendor documentation

What its tools do

2 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Read-only (2)

2 of 2 have a description · 2 of 2 declare behavior hints · 1 of 1 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Calculate the cost of complexity for a typical software change
  • Analyze how AI adoption levels change engineering costs over time
  • Estimate coordination hours and coupling impacts on development
  • Compare costs with and without AI assistance

Source and maintenance

Community listingRegistry 0.2.1
Maintenance checked

Protocol and capabilities

Server
complexity-cost-calculator-mcp 0.2.1
MCP protocol negotiated in check
2025-11-25
Tools
2 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Prices the cost of software complexity with the model from The Engineering Tax article series: the Sync Tax multiplier, the Total Cost of Complexity and the Failure Risk Multiplier, with a quarterly projection of how AI adoption changes engineering cost. Use `calculate` for one typical change in an organization (vacuum_effort, connascence_degree, coordination_hours, engineers, teams; ai_adoption for the AI level). AI tool and inference spend is not included. AI and lever values are starting values, not fitted. levers, plan and the other Pro fields need a Pro API key; on the Free plan they are ignored and listed in `notice`. Use `health` to check that the API is up; it needs no API key.

Tools

2 advertised

calculate
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

calculate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "vacuum_effort",
    "connascence_degree",
    "coordination_hours",
    "engineers",
    "teams"
  ],
  "properties": {
    "teams": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Teams in the organization (not more than engineers)",
      "exclusiveMinimum": 0
    },
    "levers": {
      "type": "object",
      "properties": {
        "safety_net": {
          "type": "boolean"
        },
        "decision_rights": {
          "type": "boolean"
        },
        "human_interfaces": {
          "type": "boolean"
        },
        "explain_before_merge": {
          "type": "boolean"
        }
      },
      "description": "Pro. 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."
    },
    "engineers": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Engineers in the organization",
      "exclusiveMinimum": 0
    },
    "ai_adoption": {
      "type": "object",
      "required": [
        "level"
      ],
      "properties": {
        "level": {
          "anyOf": [
            {
              "type": "number",
              "const": 0
            },
            {
              "type": "number",
              "const": 1
            },
            {
              "type": "number",
              "const": 2
            },
            {
              "type": "number",
              "const": 3
            }
          ],
          "description": "AI adoption level: 0 none, 1 coding help, 2 AI does all the coding, 3 AI does coding, checks, reviews and monitoring"
        },
        "quarters_at_level": {
          "type": "number",
          "minimum": 0,
          "description": "Quarters the teams have been at this level"
        }
      },
      "description": "AI adoption for every team. Leave it out for no AI."
    },
    "hourly_rate": {
      "type": "number",
      "description": "Cost of one engineering hour; adds dollar amounts to the results",
      "exclusiveMinimum": 0
    },
    "team_adoption": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "teams",
          "level",
          "quarters_at_level"
        ],
        "properties": {
          "level": {
            "anyOf": [
              {
                "type": "number",
                "const": 0
              },
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "number",
                "const": 2
              },
              {
                "type": "number",
                "const": 3
              }
            ],
            "description": "AI adoption level: 0 none, 1 coding help, 2 AI does all the coding, 3 AI does coding, checks, reviews and monitoring"
          },
          "teams": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "quarters_at_level": {
            "type": "number",
            "minimum": 0
          }
        }
      },
      "minItems": 1,
      "description": "Pro. Different AI levels per group of teams; the team counts must add up to teams. Use instead of ai_adoption."
    },
    "vacuum_effort": {
      "type": "number",
      "description": "Hours a typical change would take in a perfectly modular system",
      "exclusiveMinimum": 0
    },
    "ai_assumptions": {
      "type": "object",
      "properties": {
        "levels": {
          "type": "object",
          "properties": {
            "1": {
              "type": "object",
              "properties": {
                "ai_speedup": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Share of own work time AI saves",
                  "exclusiveMaximum": 1
                },
                "review_share": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Review time added, as a share of own work"
                },
                "event_response": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Share of incident cost AI's reaction to events saves",
                  "exclusiveMaximum": 1
                },
                "automation_saving": {
                  "type": "number",
                  "maximum": 1,
                  "minimum": 0,
                  "description": "Share of maintenance and infrastructure work AI automates"
                },
                "understanding_kept": {
                  "type": "number",
                  "maximum": 1,
                  "minimum": 0,
                  "description": "Share of code understanding a team keeps for code AI writes"
                }
              }
            },
            "2": {
              "type": "object",
              "properties": {
                "ai_speedup": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Share of own work time AI saves",
                  "exclusiveMaximum": 1
                },
                "review_share": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Review time added, as a share of own work"
                },
                "event_response": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Share of incident cost AI's reaction to events saves",
                  "exclusiveMaximum": 1
                },
                "automation_saving": {
                  "type": "number",
                  "maximum": 1,
                  "minimum": 0,
                  "description": "Share of maintenance and infrastructure work AI automates"
                },
                "understanding_kept": {
                  "type": "number",
                  "maximum": 1,
                  "minimum": 0,
                  "description": "Share of code understanding a team keeps for code AI writes"
                }
              }
            },
            "3": {
              "type": "object",
              "properties": {
                "ai_speedup": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Share of own work time AI saves",
                  "exclusiveMaximum": 1
                },
                "review_share": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Review time added, as a share of own work"
                },
                "event_response": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Share of incident cost AI's reaction to events saves",
                  "exclusiveMaximum": 1
                },
                "automation_saving": {
                  "type": "number",
                  "maximum": 1,
                  "minimum": 0,
                  "description": "Share of maintenance and infrastructure work AI automates"
                },
                "understanding_kept": {
                  "type": "number",
                  "maximum": 1,
                  "minimum": 0,
                  "description": "Share of code understanding a team keeps for code AI writes"
                }
              }
            }
          }
        },
        "decision_penalty": {
          "type": "number",
          "minimum": 0
        },
        "incident_penalty": {
          "type": "number",
          "minimum": 0
        },
        "coordination_penalty": {
          "type": "number",
          "minimum": 0
        },
        "code_turnover_per_quarter": {
          "type": "number",
          "maximum": 1,
          "exclusiveMinimum": 0
        }
      },
      "description": "Pro. Your own AI values instead of the starting values"
    },
    "decision_people": {
      "type": "number",
      "maximum": 100,
      "minimum": 0,
      "description": "People outside the teams who take part in a typical cross-team decision (default 2)"
    },
    "teams_per_change": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Teams a typical change crosses (not more than teams)",
      "exclusiveMinimum": 0
    },
    "features_per_year": {
      "type": "number",
      "description": "Features shipped per year (default 20)",
      "exclusiveMinimum": 0
    },
    "lever_assumptions": {
      "type": "object",
      "properties": {
        "safety_net": {
          "type": "object",
          "properties": {
            "cost_cut": {
              "type": "number",
              "minimum": 0,
              "exclusiveMaximum": 1
            },
            "test_share": {
              "type": "number",
              "minimum": 0
            },
            "likelihood_cut": {
              "type": "number",
              "minimum": 0,
              "exclusiveMaximum": 1
            },
            "build_hours_per_team": {
              "type": "number",
              "minimum": 0
            },
            "upkeep_hours_per_team_per_quarter": {
              "type": "number",
              "minimum": 0
            }
          }
        },
        "decision_rights": {
          "type": "object",
          "properties": {
            "people_removed": {
              "type": "number",
              "maximum": 1,
              "minimum": 0
            },
            "record_hours_per_change": {
              "type": "number",
              "minimum": 0
            }
          }
        },
        "human_interfaces": {
          "type": "object",
          "properties": {
            "review_share": {
              "type": "number",
              "minimum": 0
            },
            "incident_share": {
              "type": "number",
              "maximum": 1,
              "minimum": 0
            },
            "understanding_kept": {
              "type": "number",
              "maximum": 1,
              "minimum": 0
            }
          }
        },
        "explain_before_merge": {
          "type": "object",
          "properties": {
            "speedup_given_up": {
              "type": "number",
              "maximum": 1,
              "minimum": 0
            },
            "understanding_recovered": {
              "type": "number",
              "maximum": 1,
              "minimum": 0
            }
          }
        }
      },
      "description": "Pro. Your own values for the levers instead of the starting values"
    },
    "connascence_degree": {
      "type": "number",
      "minimum": 0,
      "description": "How many other modules usually change along with it (a count)"
    },
    "coordination_hours": {
      "type": "number",
      "minimum": 0,
      "description": "Hours of meetings, threads and reviews the change causes"
    },
    "calibration_changes": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "vacuum_effort",
          "connascence_degree",
          "coordination_hours",
          "actual_hours"
        ],
        "properties": {
          "actual_hours": {
            "type": "number",
            "minimum": 0
          },
          "vacuum_effort": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "connascence_degree": {
            "type": "number",
            "minimum": 0
          },
          "coordination_hours": {
            "type": "number",
            "minimum": 0
          }
        }
      },
      "minItems": 1,
      "description": "Pro. Past changes with their actual hours, to fit the interdependence factor. Use instead of interdependence_factor."
    },
    "incident_cost_hours": {
      "type": "number",
      "minimum": 0,
      "description": "Hours an incident costs; give it together with incident_likelihood"
    },
    "incident_likelihood": {
      "type": "number",
      "minimum": 0,
      "description": "Chance that a change causes an incident; give it together with incident_cost_hours",
      "exclusiveMaximum": 1
    },
    "projection_quarters": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "Quarters to project (default 12)"
    },
    "interdependence_factor": {
      "type": "number",
      "minimum": 0,
      "description": "How strongly coupled modules drag work along (default 0.5)"
    },
    "maintenance_hours_per_quarter": {
      "type": "number",
      "minimum": 0,
      "description": "Maintenance hours per quarter"
    },
    "infrastructure_hours_per_quarter": {
      "type": "number",
      "minimum": 0,
      "description": "Infrastructure hours per quarter"
    },
    "connascence_degree_change_per_quarter": {
      "type": "number",
      "description": "Pro. Planned change in coupling per quarter (negative when you decouple)"
    }
  }
}
calculate output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "model_version",
    "sync_tax_multiplier",
    "per_feature",
    "per_quarter",
    "per_year",
    "ai",
    "levers",
    "horizon",
    "plan",
    "projection",
    "assumptions"
  ],
  "properties": {
    "ai": {
      "type": "object",
      "properties": {},
      "description": "Team ownership, lost understanding, and which costs AI made cheaper or more expensive than no AI",
      "additionalProperties": {}
    },
    "plan": {
      "anyOf": [
        {
          "type": "object",
          "properties": {},
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "Pro: the cheapest lever mix for the chosen adoption and for every AI level; null on Free"
    },
    "levers": {
      "type": "object",
      "properties": {},
      "additionalProperties": {}
    },
    "notice": {
      "type": "object",
      "required": [
        "ignored_paid_fields",
        "message",
        "upgrade"
      ],
      "properties": {
        "message": {
          "type": "string"
        },
        "upgrade": {
          "type": "string"
        },
        "ignored_paid_fields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "description": "Present when Pro fields were sent on the Free plan and ignored",
      "additionalProperties": {}
    },
    "horizon": {
      "type": "object",
      "properties": {},
      "description": "Hours (and dollars) over the projection, with and without AI",
      "additionalProperties": {}
    },
    "per_year": {
      "type": "object",
      "properties": {},
      "additionalProperties": {}
    },
    "projection": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": {}
      },
      "description": "One entry per quarter with expected, low, high and no-AI values"
    },
    "assumptions": {
      "type": "object",
      "properties": {},
      "description": "Starting values used, not fitted",
      "additionalProperties": {}
    },
    "calibration": {
      "type": "object",
      "properties": {},
      "additionalProperties": {}
    },
    "per_feature": {
      "type": "object",
      "required": [
        "total_hours",
        "all_in_hours"
      ],
      "properties": {
        "all_in_usd": {
          "type": "number"
        },
        "total_hours": {
          "type": "number"
        },
        "all_in_hours": {
          "type": "number"
        }
      },
      "additionalProperties": {}
    },
    "per_quarter": {
      "type": "object",
      "properties": {},
      "additionalProperties": {}
    },
    "model_version": {
      "type": "string"
    },
    "sync_tax_multiplier": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
calculate annotations
{
  "readOnlyHint": true
}
health
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

health input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
health output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "message": {
      "type": "string"
    },
    "service": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "database": {
      "type": "string"
    },
    "environment": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
health annotations
{
  "readOnlyHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
297 ms
95th percentile latency
297 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 297 ms · metadata changed · 2 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http complexity-cost-calculator-mcp https://mcp.complexity-cost-calculator.beamercloud.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add complexity-cost-calculator-mcp --url https://mcp.complexity-cost-calculator.beamercloud.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable complexity-cost-calculator-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "complexity-cost-calculator-mcp": {
      "url": "https://mcp.complexity-cost-calculator.beamercloud.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "complexity-cost-calculator-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.complexity-cost-calculator.beamercloud.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start complexity-cost-calculator-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "complexity-cost-calculator-mcp": {
      "type": "http",
      "url": "https://mcp.complexity-cost-calculator.beamercloud.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http complexity-cost-calculator-mcp https://mcp.complexity-cost-calculator.beamercloud.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.complexity-cost-calculator.beamercloud.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "complexity-cost-calculator-mcp": {
      "serverUrl": "https://mcp.complexity-cost-calculator.beamercloud.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Complexity Cost Calculator MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.