Skip to main content
Glama
irs-taxpayer-mcp

irs-taxpayer-mcp

by dma9527

process_1099_income

Read-onlyIdempotent

Processes multiple 1099 forms and calculates the tax impact of each income type, including freelance, interest, dividend, investment, and miscellaneous income.

Instructions

Process multiple 1099 forms and calculate the tax impact of each income type. Handles 1099-NEC (freelance), 1099-INT (interest), 1099-DIV (dividends), 1099-B (investments), 1099-MISC.

Input Schema

NameRequiredDescriptionDefault
formsYesArray of 1099 forms
taxYearYesTax year
w2IncomeNoW-2 income (for context)
filingStatusYes
qualifiedBusinessIsSstbNo
qualifiedBusinessW2WagesNo
longTermCapitalLossCarryoverNo
shortTermCapitalLossCarryoverNo
qualifiedBusinessPropertyBasisNo

Output Schema

NameRequiredDescriptionDefault
textYes
errorNo
isErrorYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv1.2.4
    • removedInput schema / additionalProperties
      Removed value: -false
    • removedInput schema / properties / forms / items / additionalProperties
      Removed value: -false
  2. Changed9 schema fields changedv1.0.1
    • addedInput schema / properties / forms / items / properties / earlyDistributionSubjectToPenalty
      Added value: +{
      +  "description": "For 1099-R: taxable early-distribution amount after exceptions",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / forms / items / properties / taxableAmount
      Added value: +{
      +  "description": "For 1099-R: taxable amount in box 2a",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • changedInput schema / properties / forms / items / properties / type / enum
      Previous value: -[
      -  "1099-NEC",
      -  "1099-INT",
      -  "1099-DIV",
      -  "1099-B",
      -  "1099-MISC"
      -]New value: +[
      +  "1099-NEC",
      +  "1099-INT",
      +  "1099-DIV",
      +  "1099-B",
      +  "1099-MISC",
      +  "1099-R"
      +]
    • addedInput schema / properties / longTermCapitalLossCarryover
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / qualifiedBusinessIsSstb
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / qualifiedBusinessPropertyBasis
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / qualifiedBusinessW2Wages
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / shortTermCapitalLossCarryover
      Added value: +{
      +  "minimum": 0,
      +  "type": "number"
      +}
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "error": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "code": {
      +          "type": "string"
      +        },
      +        "message": {
      +          "type": "string"
      +        },
      +        "suggestion": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "code",
      +        "message",
      +        "suggestion"
      +      ],
      +      "type": "object"
      +    },
      +    "isError": {
      +      "type": "boolean"
      +    },
      +    "text": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "text",
      +    "isError"
      +  ],
      +  "type": "object"
      +}
  3. First observedv0.5.3

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so safety and side-effect profile are fully covered without the description. The description adds scope information about which form types are handled, which is useful. However, it omits 1099-R even though the schema explicitly supports it (with taxableAmount and earlyDistributionSubjectToPenalty fields), leaving a mismatch an agent would only discover by reading the enum.

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?

Two sentences with no filler, and the core action is front-loaded ahead of the form-type enumeration. The form list is a compact and scannable way to convey scope, though it could have been extended to 1099-R at no cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex calculation tool with 9 parameters, an array of heterogeneous form objects, and several conditional fields, yet the description covers only the form-type axis. The presence of an output schema relieves it of explaining return values, but the QBI, carryover, and filing-status inputs go entirely unmentioned, so an agent cannot tell from the description which inputs are required for a correct result.

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

Parameters2/5

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

Schema description coverage is only 33% across 9 parameters, so the description must compensate and it does not. It says nothing about taxYear, filingStatus, w2Income, the three Section 199A qualified-business fields, or the short/long-term capital loss carryovers, all of which materially change the computed result. It also lists five form types while the enum allows six, adding a semantic gap rather than closing one.

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 and resource: 'Process multiple 1099 forms and calculate the tax impact of each income type.' Enumerating the supported form types (NEC, INT, DIV, B, MISC) makes the scope concrete and distinguishable from generic siblings like calculate_federal_tax. It does not explicitly contrast itself with estimate_self_employment_tax or calculate_total_tax, which handle overlapping concerns.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance. An agent is left to infer from the form-type list that this applies when the user has 1099 income, but nothing says how this differs from calculate_total_tax, estimate_self_employment_tax, or optimize_capital_gains, which are the obvious alternative paths for the same inputs.

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