Skip to main content
Glama

Jock Taxes for ChatGPT

Calculate NFL tax

calculate_nfl_tax

Calculate professional-athlete tax for one NFL season with the Jock Taxes engine. Ask the user for a missing team or salary. Do not invent team codes, seasons, salaries, or filing status. Call list_tax_calculator_inputs for allowed values. Send salary when the user has one season total taxed entirely as duty-day pay. Send base_salary plus optional signing_bonus and performance_bonus to match the site Salary + Bonuses form. Do not send salary together with base_salary or a bonus. exempt_signing_bonus_from_jock_tax defaults to true for a split, so the signing bonus is taxed only in the player's domicile. performance_bonus is included only when include_performance_bonus_in_jock_tax is true. art_xvi4_inducement_sb applies to an exempt signing bonus paid by a Canadian club to a U.S. resident. Present the result as a calculation, not as tax or legal advice. Required before this call: team, and salary or base_salary. Match a player with list_team_players only after league, team, and season_id are known. Repeat inputs and defaults from the result in the reply. On NFL, other_duty_day_pay is added to the duty-day base and other_inducement_pay is added into the signing bonus. Send those with base_salary, not with a single season total. Results are income tax only unless the user asks for take-home: then send include_payroll_taxes, agent_fee_pct, retirement_contribution (401(k), or RRSP on a Canadian club) or rca_contribution (Canadian clubs), and report result.net_pay. Comparisons then match on net_pay.net_economic, which counts an RCA after its estimated payout tax (rca_payout_tax_rate; default 25% Canadian withholding on the US-duty-day share and the US federal marginal rate on the rest, or 25% on all of it for a US person).

Input Schema

NameRequiredDescriptionDefault
teamYesTeam code, such as BOS.
salaryNoOne season total in whole dollars, taxed entirely as duty-day pay. Leave this out when sending base_salary.
season_idNoSchedule season as eight digits, such as 20252026. Defaults to the latest season for the league when omitted.
base_salaryNoDuty-day base in whole dollars before signing and performance bonuses. Send this with the bonus fields to match Salary + Bonuses. Leave it out when sending salary.
agent_fee_pctNoAgent fee as a percent of gross pay (0-10), treated as a non-deductible cost. Default 0.
birth_countryNoBirth country code used with is_us_person.
filing_statusNoSingle or Married_Joint. Defaults to Single when omitted.
signing_bonusNoSigning bonus in whole dollars. The site adds this into the season total. On NFL it also includes other inducement pay.
contract_seasonNoContract season label, such as 2025-26.
primary_domicileNoResident tax home: a state, a city, or a mode such as local_jurisdiction. Defaults to local_jurisdiction when omitted.
rca_contributionNoSalary deferred into a Retirement Compensation Arrangement by a Canadian club, in USD. Excluded from Canadian employment income until paid out: from worldwide income for a Canadian resident and in full from Canadian-source pay for a non-resident (Martin v. The King, 2024 TCC 153). US tax is unchanged. Not applied for US clubs. Comparisons count it after the estimated tax at payout (see rca_payout_tax_rate). Default 0.
performance_bonusNoPerformance bonus in whole dollars. Included in the total only when include_performance_bonus_in_jock_tax is true.
other_duty_day_payNoNFL cash bucket added to the duty-day base before the season total is summed.
rca_payout_tax_rateNoEstimated tax on the RCA when it is paid out, as a percent (0-100). Default models a player who retires to a no-tax US state and draws the RCA and its refundable tax account down at once: the US-duty-day share, already taxed by the US when contributed, bears Canada's 25% non-resident withholding, and the rest bears the US federal marginal rate on it (37% for a high earner). For a US person, who pays US tax on the whole contribution now, the default is the 25% withholding alone. Lowers net_pay.net_economic, which comparisons match on.
retirement_catch_upNonone (default), 50_plus (+$8,000) or 60_to_63 (+$11,250). Catch-up contributions are always Roth for athletes (prior-year FICA wages over $150,000).
other_inducement_payNoNFL cash bucket added into signing_bonus.
include_payroll_taxesNoOpt in to employee payroll taxes for each team's employer: FICA (Social Security, Medicare, Additional Medicare) and the home state's disability or paid-leave levy for US clubs; CPP/QPP, EI and QPIP for Canadian clubs. Default false. For a Canadian resident it also applies the CPP/QPP and EI credits and the enhanced CPP/QPP deduction on the Canadian return. With any take-home option set, the response adds net_pay (net = cash take-home, net_economic = net plus the 401(k) deferral), agent_fee, retirement_contribution, and payroll_taxes when payroll is on. amounts.total stays income tax only.
estimated_playoff_gamesNoExtra postseason games. Use 0 when there are none.
retirement_contributionNoAnnual retirement contribution in USD. On a US club it is a 401(k) elective deferral capped at the 2026 limit ($24,500 plus catch-up). On a Canadian club it is an RRSP contribution capped at C$33,810, deducted from Canadian taxable income only. Default 0.
retirement_contribution_typeNo401(k) only: pretax (default) lowers income-tax wages except in Pennsylvania, Philadelphia, Pittsburgh, Ohio cities, Kansas City and St. Louis; roth lowers nothing. RRSP contributions are always deductible.
exempt_signing_bonus_from_jock_taxNoWhen true, the signing bonus is taxed in the player's domicile and left out of duty-day allocation.
include_performance_bonus_in_jock_taxNoWhen true, performance_bonus is part of the season total and of duty-day pay.

Output Schema

NameRequiredDescriptionDefault
sportYes
inputsYes
resultYes
defaultsYes
disclaimerYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • addedInput schema / properties / agent_fee_pct
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Agent fee as a percent of gross pay (0-10), treated as a non-deductible cost. Default 0.",
      +  "title": "Agent Fee Pct"
      +}
    • addedInput schema / properties / include_payroll_taxes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Opt in to employee payroll taxes for each team's employer: FICA (Social Security, Medicare, Additional Medicare) and the home state's disability or paid-leave levy for US clubs; CPP/QPP, EI and QPIP for Canadian clubs. Default false. For a Canadian resident it also applies the CPP/QPP and EI credits and the enhanced CPP/QPP deduction on the Canadian return. With any take-home option set, the response adds net_pay (net = cash take-home, net_economic = net plus the 401(k) deferral), agent_fee, retirement_contribution, and payroll_taxes when payroll is on. amounts.total stays income tax only.",
      +  "title": "Include Payroll Taxes"
      +}
    • addedInput schema / properties / rca_contribution
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Salary deferred into a Retirement Compensation Arrangement by a Canadian club, in USD. Excluded from Canadian employment income until paid out: from worldwide income for a Canadian resident and in full from Canadian-source pay for a non-resident (Martin v. The King, 2024 TCC 153). US tax is unchanged. Not applied for US clubs. Comparisons count it after the estimated tax at payout (see rca_payout_tax_rate). Default 0.",
      +  "title": "Rca Contribution"
      +}
    • addedInput schema / properties / rca_payout_tax_rate
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Estimated tax on the RCA when it is paid out, as a percent (0-100). Default models a player who retires to a no-tax US state and draws the RCA and its refundable tax account down at once: the US-duty-day share, already taxed by the US when contributed, bears Canada's 25% non-resident withholding, and the rest bears the US federal marginal rate on it (37% for a high earner). For a US person, who pays US tax on the whole contribution now, the default is the 25% withholding alone. Lowers net_pay.net_economic, which comparisons match on.",
      +  "title": "Rca Payout Tax Rate"
      +}
    • addedInput schema / properties / retirement_catch_up
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "none (default), 50_plus (+$8,000) or 60_to_63 (+$11,250). Catch-up contributions are always Roth for athletes (prior-year FICA wages over $150,000).",
      +  "title": "Retirement Catch Up"
      +}
    • addedInput schema / properties / retirement_contribution
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Annual retirement contribution in USD. On a US club it is a 401(k) elective deferral capped at the 2026 limit ($24,500 plus catch-up). On a Canadian club it is an RRSP contribution capped at C$33,810, deducted from Canadian taxable income only. Default 0.",
      +  "title": "Retirement Contribution"
      +}
    • addedInput schema / properties / retirement_contribution_type
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "401(k) only: pretax (default) lowers income-tax wages except in Pennsylvania, Philadelphia, Pittsburgh, Ohio cities, Kansas City and St. Louis; roth lowers nothing. RRSP contributions are always deductible.",
      +  "title": "Retirement Contribution Type"
      +}
  2. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare readOnly=false, destructive=false, openWorld=false, so the description carries the real weight and does: it discloses the mutually exclusive input shapes, the salary-vs-base_salary trap, defaults (exempt_signing_bonus_from_jock_tax=true for a split, RCA payout at 25%/federal marginal), and the framing constraint to present results as a calculation rather than tax advice. That is behavioral context well beyond what annotations provide.

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 purpose and the input-shape rule, and nearly every sentence carries a constraint. It is long and the RCA payout-tax-rate sentence is a dense parenthetical that slows an agent, so it falls short of maximal conciseness despite earning most of its length.

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 22-parameter, single-required-field calculation tool with an output schema, the description covers everything an agent must know to call it correctly: required inputs, allowed value source, conditional defaults, take-home opt-in, and which result field to surface. Return values are left to the output schema, which is correct.

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

Parameters5/5

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

Schema coverage is 100%, so baseline is 3, but the description adds cross-parameter meaning the schema states only per-field: never send salary with base_salary or a bonus, other_duty_day_pay rolls into the duty-day base while other_inducement_pay rolls into the signing bonus, performance_bonus counts only when include_performance_bonus_in_jock_tax is true, and comparisons match on net_pay.net_economic.

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?

States a specific verb and resource: calculate professional-athlete tax for one NFL season via the Jock Taxes engine. The league scoping plus the engine name distinguishes it cleanly from calculate_mlb_tax, calculate_nba_tax and calculate_nhl_tax without needing to open any schema.

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

Usage Guidelines5/5

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

Explicit routing rules: ask the user for a missing team or salary, never invent inputs, call list_tax_calculator_inputs for allowed values, and match a player with list_team_players only after league, team and season_id are known. It also says exactly when to use the take-home path (include_payroll_taxes, agent_fee_pct, retirement/RCA contributions) and which result field to report.

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.

Resources