Analysis only. No tool in this server places orders, modifies custodian records or files returns. Every result is scoped to the accounts this principal is entitled to read; an account named in an argument is a request, not a grant. Unknown basis blocks a lot rather than defaulting to zero.
When to use it
Account-scope lot analysis: gain and loss, wash-sale screening, loss-harvest scenarios. This server carries an authenticated principal: an account named in an argument is a request to read it, never a grant.
Requests it answers:
- “Which lots cannot support a tax calculation?”
- “How do I rebalance without realizing a big gain?”
- “What gains and losses are sitting in this account?”
- “Can this harvest be proven the lowest-tax one?”
- “Which losses can I harvest to raise cash?”
- “Which accounts am I allowed to analyse?”
- “Did that tax analysis actually finish?”
- “Where is the evidence behind that result?”
- “What does this server cover, and what does it decline?”
Skills that route here, each with the moment it applies:
gain-loss-review
The user asks what a sale would realize, how much gain they have taken this period, or how a disposal splits between short-term and long-term.
Calculate realized and unrealized gain and loss at lot level, split by holding period, from a frozen snapshot. Use when the user asks what they would realize by selling, where they stand on gains this year, or how a sale splits between short and long term.
harvest-review
The user wants to know what losses could be harvested, or wants to raise cash while keeping realized gains within a limit, in a taxable account.
Review tax-loss harvesting opportunities in one taxable account, with wash-sale screening and an explicit gain budget. Use when the user asks about harvesting losses, offsetting gains, or raising cash tax-efficiently. Produces scenarios for professional review, never a trade instruction.
household-coordination
A request spans several accounts of one household, or several sleeves of a UMA. Also use it whenever different managers may trade the same security for the same taxpayer.
Coordinate harvesting and cash raising across a household's accounts or a UMA's sleeves under one shared gain budget, with cross-account and cross-sleeve wash-sale prevention. Use when a request spans more than one account or manager, or when a UMA overlay must stop one sleeve from washing another's loss.
lot-review
Before relying on any gain, loss or harvest number, and whenever a result came back with `MISSING_BASIS`, `POSITION_MISMATCH` or `DUPLICATE_LOT`.
Check tax-lot completeness and integrity before any tax calculation — basis, acquisition dates, quantities, duplicates and position reconciliation. Use when lots have just been imported, a transfer arrived, or another skill reported blocked calculations.
rebalance-review
The user has approved targets and wants to move toward them, or wants to compare acting now against leaving the drift. Targets come from the advisor. This skill does not propose an allocation: an engine that inferred a target from the current holdings would be measuring drift against its own assumption.
Rebalance one account toward advisor-supplied target weights within a gain budget, showing the tax cost and the drift that remains. Use when the user asks what rebalancing would cost, or wants to compare acting now against leaving the drift.
tax-intake
No snapshot exists, or new source documents have arrived.
Turn uploaded statements and exports into source-cited, normalized tax facts with a missing-information register. Use at the start of any engagement, or when new documents arrive and no snapshot exists yet.
tax-profile
At the start of an engagement, and whenever scope is ambiguous.
Establish the household scope, tax units, account classifications and stated assumptions that every other tax skill depends on. Use before the first analysis of an engagement, or when ownership, registration or residency is unclear.
tax-review-pack
An analysis has completed and a person needs to review it, or a CPA needs a handoff.
Assemble a source-bound review package for a completed analysis — scope, assumptions, results, validation, limitations and version pins — for the responsible professional. Use when the user wants something to review, file, sign off, or hand to a CPA.
wash-sale-review
The user asks whether a loss will be disallowed, mentions buying back something they sold at a loss, or asks about the 30-day rule.
Screen proposed or completed loss sales for wash sales under IRC section 1091, across the accounts available, with explicit coverage gaps. Use when the user asks whether a loss is allowed, about the 30-day rule, or about repurchasing a security they sold at a loss.
Questions it answers
Which lots cannot support a tax calculation?
Build a snapshot from an uploaded export and report the lots that cannot support a tax calculation: unknown basis, missing acquisition date, gaps in coverage. Run this first when a document is new. It needs subject_ref, document_ref, as_of, prices and idempotency_key. The account or household the analysis is scoped to. Naming one is a request to read it, never a grant. Call check_holdings on taxagent-portfolio over MCP. Every result carries the method it used, the rule pack it was pinned to, what is still missing and whether coverage was complete, for a licensed professional to review.
How do I rebalance without realizing a big gain?
Rebalance one account toward target weights, tax-aware. Never sells a security below its target, so with chunky lots it under-trades rather than overshooting and reports the residual drift. Withholds a purchase that would wash a loss sold inside the window. It needs subject_ref, document_ref, as_of, prices, idempotency_key and target_weights. The account or household the analysis is scoped to. Naming one is a request to read it, never a grant. Call review_rebalance on taxagent-portfolio over MCP. Every result carries the method it used, the rule pack it was pinned to, what is still missing and whether coverage was complete, for a licensed professional to review.
What gains and losses are sitting in this account?
Gain and loss by lot with a wash-sale screen across the accounts in scope. Reports what is there; proposes nothing. It needs subject_ref, document_ref, as_of, prices and idempotency_key. The account or household the analysis is scoped to. Naming one is a request to read it, never a grant. Call review_lots on taxagent-portfolio over MCP. Every result carries the method it used, the rule pack it was pinned to, what is still missing and whether coverage was complete, for a licensed professional to review.
Can this harvest be proven the lowest-tax one?
The same harvest problem as review_harvest, solved exactly rather than greedily. Where the search exhausts it proves no other selection raises the cash at lower tax cost. Slower, and it reports a certificate and an optimality gap. It needs subject_ref, document_ref, as_of, prices, idempotency_key and cash_target. The account or household the analysis is scoped to. Naming one is a request to read it, never a grant. Call optimize_harvest on taxagent-portfolio over MCP. Every result carries the method it used, the rule pack it was pinned to, what is still missing and whether coverage was complete, for a licensed professional to review.
Which losses can I harvest to raise cash?
Loss-harvesting scenario for one taxable account against a cash target, screened for wash sales. Produces a proposal for professional review, never a trade instruction. It needs subject_ref, document_ref, as_of, prices, idempotency_key and cash_target. The account or household the analysis is scoped to. Naming one is a request to read it, never a grant. Call review_harvest on taxagent-portfolio over MCP. Every result carries the method it used, the rule pack it was pinned to, what is still missing and whether coverage was complete, for a licensed professional to review.
Which accounts am I allowed to analyse?
Resolve an account or household you are entitled to read and report its tax units. Pass document_ref on the first call of a session: account metadata comes from the document, and nothing resolves until one has been read. It needs subject_ref. The account or household the analysis is scoped to. Naming one is a request to read it, never a grant. Call resolve_subject on taxagent-portfolio over MCP. Every result carries the method it used, the rule pack it was pinned to, what is still missing and whether coverage was complete, for a licensed professional to review.