Skip to main content
Glama

eng-leadership-toolkit

Get your company to pay: ROI math, manager email, one-pager

build_mentoring_business_case
Read-onlyIdempotent

Build the case that gets your company to pay for leadership mentoring — everything on marian.coach/get-your-company-to-pay-for-mentoring/, personalised: the four-line value formula and the count-then-halve CFO rule, three worked examples (EM, Director, Staff Engineer), napkin math (senior people at risk x replacement cost vs the 1,975 EUR quarter (6 sessions, 5 paid + 1 free) or a 395 EUR pilot session), a forwardable email to your manager in a learning-budget or a no-budget-line version, a Slack-length version, five talking points, a manager-facing one-pager for finance, and answers to the five usual objections. English or Czech, tykani or vykani. Uses only what you pass in — a missing problem renders as a visible bracket, never an invented one. From 3,611 mentoring sessions at marian.coach.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
kpisNo1–3 measurable 90-day targets; default = the role's suggestions
langNoOutput language (default en) One of: en, cs.
roleNoRequired. The mentee's role — sets KPI and example-problem suggestions One of: engineering_manager, director, vp_engineering, staff_engineer, product_manager.
companyNoCompany name, for the invoice line
contextNoOptional. A short description of your goal and why you are calling this tool. Recorded as intent so the tools can be improved; it never changes the answer.
problemNoThe ONE thing to fix in the next 90 days, in the user's words. Never invent it; leave empty to get a visible placeholder
decide_byNoDecision date, free text (e.g. 'Friday 22 Aug')
formalityNoCzech only: ty (informal, default) or Vy (formal) One of: informal, formal.
situationNold_budget = a learning/L&D budget exists (asks for the 6-session quarter, 5 paid + 1 free, 1,975 EUR); no_budget = no budget line (asks for one 395 EUR pilot session first). Default ld_budget One of: ld_budget, no_budget.
team_sizeNoTeam size, context for the one-pager (and the legacy team-lift line)
your_nameNoThe mentee's first name (signs the email)
alternativesNoAlternatives already considered One or more of: conference, course, internal_coach.
manager_nameNoThe manager's first name
avg_salary_eurNoLegacy: fully-loaded annual cost per engineer in EUR, only with team_size
at_risk_attritionNoSenior people at risk of leaving (0–5). Drives the napkin math
first_time_in_roleNoFirst time in this role? Adds the first-time-manager evidence
delayed_revenue_eurNoLegacy: annual revenue attached to a slipping roadmap item, in EUR

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
mathNoNapkin math behind the case.
emailNoForwardable email to the manager.
levelNoSeniority level the score maps to, when the tool computes one.
reportYesThe full human-readable report.
sourceYesCanonical marian.coach page this answer is derived from.
verdictNoHeadline verdict, when the tool returns one.
evidenceNoSources the case may cite.
onePagerNoManager-facing one-pager, forwardable to finance.
salaryEurNoEstimated 2026 Western-Europe gross annual salary in EUR.
objectionsNoThe usual objections, answered.
slackShortNoSlack/Teams-length version of the ask.
totalScoreNoWeighted 0-10 score, when the tool computes one.
valueFormulaNoThe four value lines to add up (money saved, cost of delay, missed opportunity, roadmap slippage) plus the count-then-halve CFO rule.
talkingPointsNoFive talking points for the conversation.
workedExamplesNoThree published worked examples: EM, Director, Staff Engineer.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed32 schema fields changed
    • addedInput schema / properties / alternatives / anyOf
      Added value: +[
      +  {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / alternatives / description
      Previous value: -"Alternatives already considered"New value: +"Alternatives already considered One or more of: conference, course, internal_coach."
    • removedInput schema / properties / alternatives / items
      Removed value: -{
      -  "enum": [
      -    "conference",
      -    "course",
      -    "internal_coach"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / alternatives / type
      Removed value: -"array"
    • addedInput schema / properties / at_risk_attrition / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / at_risk_attrition / maximum
      Removed value: -5
    • removedInput schema / properties / at_risk_attrition / minimum
      Removed value: -0
    • removedInput schema / properties / at_risk_attrition / type
      Removed value: -"integer"
    • addedInput schema / properties / avg_salary_eur / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / avg_salary_eur / type
      Removed value: -"number"
    • changedInput schema / properties / context / description
      Previous value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Optional. A short description of your goal and why you are calling this tool. Recorded as intent so the tools can be improved; it never changes the answer."
    • addedInput schema / properties / delayed_revenue_eur / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / delayed_revenue_eur / type
      Removed value: -"number"
    • addedInput schema / properties / first_time_in_role / anyOf
      Added value: +[
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / first_time_in_role / type
      Removed value: -"boolean"
    • changedInput schema / properties / formality / description
      Previous value: -"Czech only: ty (informal, default) or Vy (formal)"New value: +"Czech only: ty (informal, default) or Vy (formal) One of: informal, formal."
    • removedInput schema / properties / formality / enum
      Removed value: -[
      -  "informal",
      -  "formal"
      -]
    • addedInput schema / properties / kpis / anyOf
      Added value: +[
      +  {
      +    "items": {
      +      "maxLength": 160,
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "maxLength": 160,
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / kpis / items
      Removed value: -{
      -  "maxLength": 160,
      -  "type": "string"
      -}
    • removedInput schema / properties / kpis / maxItems
      Removed value: -3
    • removedInput schema / properties / kpis / type
      Removed value: -"array"
    • changedInput schema / properties / lang / description
      Previous value: -"Output language (default en)"New value: +"Output language (default en) One of: en, cs."
    • removedInput schema / properties / lang / enum
      Removed value: -[
      -  "en",
      -  "cs"
      -]
    • changedInput schema / properties / role / description
      Previous value: -"The mentee's role — sets KPI and example-problem suggestions"New value: +"Required. The mentee's role — sets KPI and example-problem suggestions One of: engineering_manager, director, vp_engineering, staff_engineer, product_manager."
    • removedInput schema / properties / role / enum
      Removed value: -[
      -  "engineering_manager",
      -  "director",
      -  "vp_engineering",
      -  "staff_engineer",
      -  "product_manager"
      -]
    • changedInput schema / properties / situation / description
      Previous value: -"ld_budget = a learning/L&D budget exists (asks for the 6-session quarter, 5 paid + 1 free, 1,975 EUR); no_budget = no budget line (asks for one 395 EUR pilot session first). Default ld_budget"New value: +"ld_budget = a learning/L&D budget exists (asks for the 6-session quarter, 5 paid + 1 free, 1,975 EUR); no_budget = no budget line (asks for one 395 EUR pilot session first). Default ld_budget One of: ld_budget, no_budget."
    • removedInput schema / properties / situation / enum
      Removed value: -[
      -  "ld_budget",
      -  "no_budget"
      -]
    • addedInput schema / properties / team_size / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / team_size / maximum
      Removed value: -5000
    • removedInput schema / properties / team_size / minimum
      Removed value: -0
    • removedInput schema / properties / team_size / type
      Removed value: -"integer"
    • removedInput schema / required
      Removed value: -[
      -  "role",
      -  "context"
      -]
  2. Changed1 schema field changed
    • changedInput schema / properties / situation / description
      Previous value: -"ld_budget = a learning/L&D budget exists (asks for the 6-session quarter, 2,580 EUR); no_budget = no budget line (asks for one 430 EUR pilot session first). Default ld_budget"New value: +"ld_budget = a learning/L&D budget exists (asks for the 6-session quarter, 5 paid + 1 free, 1,975 EUR); no_budget = no budget line (asks for one 395 EUR pilot session first). Default ld_budget"
  3. Changed2 schema fields changed
    • addedInput schema / properties / context
      Added value: +{
      +  "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "role"
      -]New value: +[
      +  "role",
      +  "context"
      +]
  4. Changed32 schema fields changed
    • addedInput schema / properties / alternatives
      Added value: +{
      +  "description": "Alternatives already considered",
      +  "items": {
      +    "enum": [
      +      "conference",
      +      "course",
      +      "internal_coach"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / at_risk_attrition / description
      Previous value: -"Senior people with a foot out the door (default 0)"New value: +"Senior people at risk of leaving (0–5). Drives the napkin math"
    • addedInput schema / properties / at_risk_attrition / maximum
      Added value: +5
    • addedInput schema / properties / at_risk_attrition / minimum
      Added value: +0
    • changedInput schema / properties / at_risk_attrition / type
      Previous value: -"number"New value: +"integer"
    • changedInput schema / properties / avg_salary_eur / description
      Previous value: -"Average fully-loaded annual cost per engineer in EUR (default 100000)"New value: +"Legacy: fully-loaded annual cost per engineer in EUR, only with team_size"
    • addedInput schema / properties / company
      Added value: +{
      +  "description": "Company name, for the invoice line",
      +  "maxLength": 120,
      +  "type": "string"
      +}
    • addedInput schema / properties / decide_by
      Added value: +{
      +  "description": "Decision date, free text (e.g. 'Friday 22 Aug')",
      +  "maxLength": 60,
      +  "type": "string"
      +}
    • changedInput schema / properties / delayed_revenue_eur / description
      Previous value: -"Annual revenue attached to a slipping roadmap item, in EUR (default 0)"New value: +"Legacy: annual revenue attached to a slipping roadmap item, in EUR"
    • addedInput schema / properties / first_time_in_role
      Added value: +{
      +  "description": "First time in this role? Adds the first-time-manager evidence",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / formality
      Added value: +{
      +  "description": "Czech only: ty (informal, default) or Vy (formal)",
      +  "enum": [
      +    "informal",
      +    "formal"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / kpis
      Added value: +{
      +  "description": "1–3 measurable 90-day targets; default = the role's suggestions",
      +  "items": {
      +    "maxLength": 160,
      +    "type": "string"
      +  },
      +  "maxItems": 3,
      +  "type": "array"
      +}
    • addedInput schema / properties / lang
      Added value: +{
      +  "description": "Output language (default en)",
      +  "enum": [
      +    "en",
      +    "cs"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / manager_name
      Added value: +{
      +  "description": "The manager's first name",
      +  "maxLength": 80,
      +  "type": "string"
      +}
    • changedInput schema / properties / problem / description
      Previous value: -"The one problem to fix, e.g. \"delivery predictability at 60%\""New value: +"The ONE thing to fix in the next 90 days, in the user's words. Never invent it; leave empty to get a visible placeholder"
    • addedInput schema / properties / problem / maxLength
      Added value: +400
    • changedInput schema / properties / role / description
      Previous value: -"The mentee's role — sets the suggested KPIs"New value: +"The mentee's role — sets KPI and example-problem suggestions"
    • addedInput schema / properties / situation
      Added value: +{
      +  "description": "ld_budget = a learning/L&D budget exists (asks for the 6-session quarter, 2,580 EUR); no_budget = no budget line (asks for one 430 EUR pilot session first). Default ld_budget",
      +  "enum": [
      +    "ld_budget",
      +    "no_budget"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / team_size / description
      Previous value: -"Number of engineers in the team/org affected"New value: +"Team size, context for the one-pager (and the legacy team-lift line)"
    • addedInput schema / properties / team_size / maximum
      Added value: +5000
    • addedInput schema / properties / team_size / minimum
      Added value: +0
    • changedInput schema / properties / team_size / type
      Previous value: -"number"New value: +"integer"
    • addedInput schema / properties / your_name
      Added value: +{
      +  "description": "The mentee's first name (signs the email)",
      +  "maxLength": 80,
      +  "type": "string"
      +}
    • addedOutput schema / properties / email
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Forwardable email to the manager.",
      +  "properties": {
      +    "body": {
      +      "type": "string"
      +    },
      +    "subject": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "subject",
      +    "body"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / evidence
      Added value: +{
      +  "description": "Sources the case may cite.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "claim": {
      +        "type": "string"
      +      },
      +      "source": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "claim",
      +      "source",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / math
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Napkin math behind the case.",
      +  "properties": {
      +    "askEur": {
      +      "type": "number"
      +    },
      +    "discountedEur": {
      +      "type": "number"
      +    },
      +    "lines": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "packPriceEur": {
      +      "type": "number"
      +    },
      +    "roiMultiple": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "totalEur": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "lines",
      +    "totalEur",
      +    "discountedEur",
      +    "askEur",
      +    "packPriceEur",
      +    "roiMultiple",
      +    "note"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / objections
      Added value: +{
      +  "description": "The usual objections, answered.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "answer": {
      +        "type": "string"
      +      },
      +      "objection": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "objection",
      +      "answer"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / onePager
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Manager-facing one-pager, forwardable to finance.",
      +  "properties": {
      +    "sections": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "body": {
      +            "type": "string"
      +          },
      +          "bullets": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "heading": {
      +            "type": "string"
      +          },
      +          "table": {
      +            "items": {
      +              "items": [
      +                {
      +                  "type": "string"
      +                },
      +                {
      +                  "type": "string"
      +                }
      +              ],
      +              "type": "array"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "heading"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "title": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "title",
      +    "sections"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / slackShort
      Added value: +{
      +  "description": "Slack/Teams-length version of the ask.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / talkingPoints
      Added value: +{
      +  "description": "Five talking points for the conversation.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / valueFormula
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The four value lines to add up (money saved, cost of delay, missed opportunity, roadmap slippage) plus the count-then-halve CFO rule.",
      +  "properties": {
      +    "heading": {
      +      "type": "string"
      +    },
      +    "lines": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "rule": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "heading",
      +    "lines",
      +    "rule"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / workedExamples
      Added value: +{
      +  "description": "Three published worked examples: EM, Director, Staff Engineer.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "kpis": {
      +        "type": "string"
      +      },
      +      "math": {
      +        "type": "string"
      +      },
      +      "role": {
      +        "type": "string"
      +      },
      +      "setup": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "role",
      +      "setup",
      +      "kpis",
      +      "math"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  5. Added

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is low. The description adds genuine behavioral context beyond them: it will never fabricate input ('a missing problem renders as a visible bracket, never an invented one'), it is fully personalized to passed-in data, and it emits a fixed set of deliverables with concrete pricing. It does not mention rate limits or latency, hence not a 5.

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?

Front-loaded with the core purpose, then a dense enumeration of deliverables. The list is long but every element corresponds to something the tool actually returns, so little is wasted; a slightly tighter grouping of the artifact list would earn a 5.

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 17-parameter, zero-required generation tool with an output schema, the description is complete: it sets expectations for output shape, personalization behavior, language/formality options, and non-invention of missing inputs. Nothing needed to invoke it correctly is absent.

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 schema already documents all 17 parameters and baseline is 3. The description reinforces the pricing/situation semantics (1,975 EUR quarter at 5 paid + 1 free, or 395 EUR pilot) and the count-then-halve CFO rule, but adds no per-parameter meaning beyond what the schema 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?

Names a specific verb+resource ('build the case that gets your company to pay for leadership mentoring') and then enumerates the concrete artifacts produced: value formula, worked examples, ROI napkin math, forwardable manager email, Slack version, talking points, one-pager, objection answers. An agent can immediately distinguish this from calculate_developer_value or estimate_coaching_cost, which do calculation only.

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 context is strongly implied ('gets your company to pay', budget vs no-budget variants), but the description never states when to reach for this tool instead of the sibling cost/value calculators, nor any prerequisite beyond 'uses only what you pass in'. The when-vs-alternatives dimension is left to inference.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.