Skip to main content
Glama

Jock Taxes Developer MCP

Compare NFL move

player_movement_nfl

Compare after-tax income when a NFL player moves from one team to another at the same gross pay. Ask for the origin team, destination team, filing status, and either gross_salary or base_salary. Do not invent team codes. Call list_tax_calculator_inputs for allowed values. Present the result as a calculation, not as tax or legal advice. Required before this call: from_team, to_team, and gross_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).

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "from_team": "<from_team>",
      "to_team": "<to_team>"
    },
    "name": "player_movement_nfl"
  }
}

Input Schema

NameRequiredDescriptionDefault
to_teamYesTeam the player joins.
from_teamYesTeam the player leaves.
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 gross_salary.
gross_salaryNoOne season total, taxed entirely as duty-day pay. Leave this out when sending base_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, from_after_tax and to_after_tax use net_pay.net_economic and the response adds from_ and to_ net_pay, payroll_taxes, agent_fee and retirement_contribution.
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.
comparison_primary_domicileNoResident tax home modeled on the destination team.
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, from_after_tax and to_after_tax use net_pay.net_economic and the response adds from_ and to_ net_pay, payroll_taxes, agent_fee and retirement_contribution.",
      +  "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

A3.8/5.0
Behavior4/5

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

Annotations only declare the safety profile (not read-only, non-destructive, closed-world), and the description adds real behavioral detail beyond that: which result field comparisons match on (net_pay.net_economic), how RCA payout tax is estimated, and which extra response fields appear when take-home options are set. It does not state idempotency or failure behavior, but the added context is substantial.

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

Conciseness3/5

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

The purpose is front-loaded, which is good, but the body is a dense run-on string mixing input requirements, tool-call ordering, tax-domain rules, and output-field semantics in one block. Every sentence is relevant, yet the lack of structure makes it harder to scan than it should be for a high-traffic tool.

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?

With 24 optional parameters, no enum-typed params (filing_status uses anyOf), and an existing output schema, the description does enough: it covers required inputs, the take-home opt-in path, and the key comparison field. A reader still has to lean on the schema for the long tail of bonus/retirement flags, which is acceptable given an output schema exists.

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% and the property descriptions are unusually thorough, including the RCA and retirement-contribution rules. The description's parameter notes (other_duty_day_pay into duty-day base, other_inducement_pay into signing bonus) largely restate what the schema already says, so it adds only cross-field selection logic (base_salary vs gross_salary) rather than new meaning.

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 opening sentence names a specific verb+resource and scope: after-tax income comparison for an NFL player moving between two teams at equal gross pay. It is clear enough to distinguish from list/calculation siblings, but it never explicitly contrasts with calculate_nfl_tax or equivalent_nfl_salary, so an agent must infer the boundary.

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

Usage Guidelines4/5

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

Strong procedural guidance: required inputs, a prohibition on inventing team codes, a directive to call list_tax_calculator_inputs for valid values, sequencing rules for list_team_players, and instructions for when to escalate to take-home/payroll-tax mode. It stops short of saying when to use this versus equivalent_nfl_salary or calculate_nfl_tax.

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