Alpaca Trading API integration for Model Context Protocol (MCP)
Optionsahoy is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Equity-compensation optimizer. ISO/AMT, NSO, RSU, QSBS, single-stock concentration, protective puts/collars, and equity-funding plans. MCP server + REST API with federal + 50-state + DC tax code.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http optionsahoy-mcp https://optionsahoy.com/mcp
# 2 — ask your agent for something these tools do
# amt_iso_optimize, nso_calculate, rsu_sell_vs_hold and 5 more
Optionsahoy costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http optionsahoy-mcp https://optionsahoy.com/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
8 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Use this when someone asks how or when to exercise incentive stock options (ISOs), whether exercising will trigger an AMT bomb or phantom income, whether to exercise early, how to plan around the alternative minimum tax (AMT) on an exercise, or how to spread ISO exercises across several years. Computes multi-year exercise schedules and compares them by after-tax Net Final Value (NFV) at the planni
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shares | integer | yes | Total Incentive Stock Option (ISO) shares available to exercise across the planning horizon. Must come from the user. |
| strike | number | yes | Strike price per share, USD. Must come from the user. |
| fmv | number | yes | Current fair market value per share, USD. Anchors year-1 of the growth path; future years compound from here using expectedGrowth and volatilityDrag. Must come from the user. |
| expectedGrowth | number/string | no | Annual expected stock growth as a decimal (0.10 = 10%), or the string "market" to use the S&P 500 trailing average when the user has no view. Required unless ticker resolves it from trailing CAGR. T |
| ticker | string | no | Optional public-stock symbol (e.g. "NVDA", "AAPL"). When set, the tool substitutes a cached trailing return for any unsupplied expected-return / sale-price field, and the implied vol as of the last cl |
| volatility | number | no | Annualized volatility (sigma) of the stock as a decimal (0.72 = 72%). Pass the volatility itself, not a pre-computed drag: the tool derives the horizon-cumulative drag internally, and the correct form |
| volatilityDrag | number | no | Alternative to volatility: the multiplicative price haircut already computed for the planning horizon. Supply this OR volatility (if both are given, volatilityDrag wins). This field is for a drag |
| filingStatus | string | yes | Federal filing status. Drives the ordinary-bracket walk, the AMT exemption tier ($90,100 single / $140,200 MFJ for 2026), and the AMT exemption phaseout start ($500,000 single / $1,000,000 MFJ). |
| ordinaryIncome | number | yes | Annual ordinary income before this exercise, USD. Baseline for the bracket walk and the AMT exemption phaseout. Must come from the user. This is taxable income after deductions, not gross wages: regul |
| itemizedTaxes | number | no | Only if you itemize deductions: the state and local taxes deducted on Schedule A, line 7. The AMT adds these back instead of the standard deduction. Omit if you take the standard deduction. When omitt |
| stateCode | string | yes | Two-letter US state code (e.g. CA, NY, TX). Drives state ordinary brackets, state long-term capital gains (LTCG) treatment, and state AMT (CA, CO, CT, MN). |
| carryforwardCredit | number | no | Existing federal AMT credit (Minimum Tax Credit, Form 8801) carryforward from prior tax years, USD. Recoverable in future years where regular federal tax exceeds tentative minimum tax. Optional; defau |
| horizon | integer | yes | Planning horizon in years (1..10). The optimizer searches all feasible per-year share allocations across this many years. The user's choice, not a modelling detail, and it changes the answer: use the |
| cashReturnRate | number | no | Annual after-tax return on idle cash (decimal), used to time-value the cash-tax stream. 0.05 = 5% (~short-Treasury yield). Optional: defaults to 0.04 (4%, a short-Treasury-like after-tax yield) when o |
| grantDate | string | yes | ISO grant date (YYYY-MM-DD). Drives the 10-year statutory grant expiration (IRC §422) and the 2-year qualifying-disposition threshold from grant. |
| hasLeftCompany | boolean | yes | True if the user has separated from the company. Activates the 90-day post-termination ISO exercise window measured from terminationDate. |
| terminationDate | no | Separation date (YYYY-MM-DD). Required only when hasLeftCompany=true (it drives the 90-day exercise-window deadline); omit it or pass null when still employed. No longer in required so the common em |
Use this when someone asks whether to exercise and hold or exercise and sell non-qualified stock options (NSOs), about a cashless exercise or same-day sale of NSOs, or what tax an NSO exercise triggers. After-tax payout on a non-qualified stock option (NSO) exercise: federal, state, and FICA (Social Security + Medicare + Additional Medicare), comparing sell-at-exercise vs hold-for-long-term-capita
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shares | integer | yes | Non-qualified Stock Option (NSO) shares to exercise. Must come from the user. |
| strike | number | yes | Strike price per share, USD. Must come from the user. |
| currentPrice | number | yes | Current fair market value per share, USD. The bargain element at exercise is shares × (currentPrice − strike). Must come from the user. |
| ordinaryIncome | number | yes | Annual ordinary income before this exercise, USD. Baseline for the bracket walk on the bargain element. Must come from the user. This is taxable income after deductions, not gross wages: the engine ap |
| filingStatus | string | yes | Federal filing status. Drives ordinary brackets and LTCG brackets used at the hold horizon. |
| stateCode | string | yes | Two-letter US state code. Drives state ordinary and LTCG treatment. |
| stillEmployed | boolean | yes | True if still employed at exercise. FICA (Social Security + Medicare + Additional Medicare) applies only when true. |
| holdYears | number | yes | Years to hold after exercise (minimum 1). At ≥1 year, the appreciation since exercise is LTCG; sub-1-year holds are out of scope. The user's choice, not a modelling detail, and it changes the answer: |
| expectedSalePrice | number/string | no | Projected $/share at end of holdYears, or the string "market" to project currentPrice at the S&P 500 trailing average when the user has no view. Required unless ticker resolves it from currentPrice |
| volatility | number | no | Annualized volatility (sigma) of the stock as a decimal (0.72 = 72%). Pass the volatility itself, not a pre-computed drag: the tool derives the horizon-cumulative drag internally, and the correct form |
| haircut | number | no | Alternative to volatility: the multiplicative volatility-drag haircut on expectedSalePrice already computed for the hold. Supply this OR volatility (if both are given, haircut wins). This field is |
| expectedMarketReturn | number/string | no | Annual after-tax-proceeds reinvestment rate. Defaults to SPY trailing CAGR for holdYears if omitted; the string "market" names that same default explicitly. |
| ticker | string | no | Optional public-stock symbol (e.g. "NVDA", "AAPL"). When set, the tool substitutes a cached trailing return for any unsupplied expected-return / sale-price field, and the implied vol as of the last cl |
| holdFunding | string | yes | How the strike cost and exercise tax are funded. 'sell-to-cover' sells enough shares to cover strike + tax (reduces sharesRetained). 'cash' pays strike + tax from outside funds (full sharesRetained); |
Use this when someone asks whether to sell RSUs at vest or hold them, whether to sell their vested shares or diversify out of company stock, or about the tax and withholding on a restricted stock unit (RSU) vest. After-tax RSU vest analysis: sell-at-vest vs hold-to-long-term-capital-gains (LTCG) over holdYears. Covers federal ordinary tax, state tax, FICA (Social Security + Medicare + Additional
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shares | integer | yes | Restricted Stock Unit (RSU) shares vesting in this tranche. Must come from the user. |
| currentPrice | number | yes | Fair market value per share at vest, USD. Also the cost basis on retained shares. Must come from the user. |
| ordinaryIncome | number | yes | Annual ordinary income before this vest, USD. Baseline for the bracket walk on the vest amount. Must come from the user. This is taxable income after deductions, not gross wages: the engine applies no |
| filingStatus | string | yes | Federal filing status. |
| stateCode | string | yes | Two-letter US state code. |
| stillEmployed | boolean | yes | True if still employed at vest. Drives FICA applicability and whether the 22% supplemental withholding rule applies. |
| holdYears | number | yes | Years to hold after vest (0.25..5). Below 1 year triggers the short-term capital gains cliff (ordinary rates on appreciation). The user's choice, not a modelling detail, and it changes the answer: use |
| expectedSalePrice | number/string | no | Projected $/share at end of holdYears, or the string "market" to project currentPrice at the S&P 500 trailing average when the user has no view. Required unless ticker resolves it from currentPrice |
| volatility | number | no | Annualized volatility (sigma) of the stock as a decimal (0.72 = 72%). Pass the volatility itself, not a pre-computed drag: the tool derives the horizon-cumulative drag internally, and the correct form |
| haircut | number | no | Alternative to volatility: the multiplicative volatility-drag haircut on expectedSalePrice already computed for the hold. Supply this OR volatility (if both are given, haircut wins). This field is |
| expectedMarketReturn | number/string | no | Annual after-tax-proceeds reinvestment rate. Defaults to SPY trailing CAGR for holdYears if omitted; the string "market" names that same default explicitly. |
| ticker | string | no | Optional public-stock symbol (e.g. "NVDA", "AAPL"). When set, the tool substitutes a cached trailing return for any unsupplied expected-return / sale-price field, and the implied vol as of the last cl |
Use this when someone asks how risky a large single-stock position is, whether too much of their net worth is in one stock, whether they are over-concentrated in a single name, or how to reduce or diversify a concentrated position. Single-stock concentration risk analysis on an existing position. For standalone hedge pricing use protective_put_price; for the tax math on the option exercise or RS
| Parameter | Type | Required | Notes |
|---|---|---|---|
| positionValue | number | yes | Current market value of the concentrated single-stock position, USD. Must come from the user. |
| costBasis | number | yes | Total cost basis of the position, USD (sum of strikes paid + ordinary-income inclusions on RSU vest / NSO exercise / disqualified ISO). Must come from the user. |
| acquisitionDate | string | yes | Earliest acquisition date in the lot (YYYY-MM-DD). Drives the 1-year LTCG threshold and the long-term-vs-short-term tax routing. |
| sector | string | yes | Sector tag. Drives the default volatility used in the hedge-cost computation when no explicit volatility is provided (a sector-typical implied volatility). |
| stateCode | string | yes | Two-letter US state code. Drives state LTCG and ordinary brackets. |
| filingStatus | string | yes | Federal filing status. Drives LTCG brackets and the NIIT MAGI threshold. |
| ordinaryIncome | number | yes | Annual ordinary income before any sales, USD. Baseline for LTCG bracket determination. Must come from the user. This is taxable income after deductions, not gross wages: the engine applies no standard |
| totalAssets | number | yes | Total investable portfolio in dollars (concentrated position + everything else). This value must come from the user, never inferred; if the user did not state it, ask. |
| expectedPositionReturn | number/string | no | Annual expected return on the concentrated stock as a decimal (0.10 = 10%), or the string "market" to use the S&P 500 trailing average when the user has no view. Required unless ticker resolves it f |
| expectedMarketReturn | number/string | no | Annual after-tax-proceeds reinvestment rate. Defaults to SPY trailing CAGR for the 3-year horizon if omitted; the string "market" names that same default explicitly. |
| ticker | string | no | Optional public-stock symbol (e.g. "NVDA", "AAPL"). When set, the tool substitutes a cached trailing return for any unsupplied expected-return / sale-price field, and the implied vol as of the last cl |
| volatility | number | no | Annualized volatility (sigma) of the stock as a decimal (0.72 = 72%). Pass the volatility itself, not a pre-computed drag: the tool uses it both for hedge pricing (as implied vol) and for the 3y horiz |
| volatilityDrag | number | no | Alternative to volatility: the multiplicative price haircut already computed for the horizon. Supply this OR volatility (if both are given, volatilityDrag wins). This field is for a drag figure th |
| hedgeChoice | object | no | Optional hedge specification. When supplied, the hedging output block prices this exact structure (kind, protectionLevel, tenorYears, plus a short call for a collar) instead of the default 1-year 30 |
Use this when someone asks how much it costs to hedge or protect a stock position against a drop, to protect gains, get downside protection, or limit losses on a position, or to price a protective put, a zero-cost collar, or a put spread. Closed-form pricing of a protective put, a zero-cost collar, and a put spread on a single-stock position. For concentration-vs-hedge tax-cost comparison, use `co
| Parameter | Type | Required | Notes |
|---|---|---|---|
| positionValue | number | yes | Market value of the underlying single-stock position, USD. Premium and max-loss scale linearly with this. Must come from the user. |
| sector | string | yes | Sector tag. Drives the default volatility when no explicit volatility is supplied (a sector-typical implied volatility). |
| volatility | number | no | Annualized implied volatility (sigma) of the stock. Resolution order: (1) explicit volatility if passed; (2) the ticker's implied vol as of the last close; (3) sector-typical IV as last fallback. |
| ticker | string | no | Optional public-stock symbol (e.g. "NVDA"). When set without an explicit volatility, each leg prices at its own strike's chain-implied vol, else at its at-the-money vol as of the last close, else th |
| protectionLevel | number | yes | Put strike as (1 − this fraction) × spot. 0.10 = 10% OTM put. Range 0.05..0.50. The user's choice, not a modelling detail, and it changes the answer: use the value they gave, and if they gave none, as |
| tenorYears | number | yes | Option tenor in years. 1 = 12-month; 0.25 = ~90-day. The user's choice, not a modelling detail, and it changes the answer: use the value they gave, and if they gave none, ask for it rather than assumi |
| expectedReturn | number | no | Annual expected stock return (decimal). Drives the real-world drift in the cap-hit / floor-hit probability metrics. Does not affect premium math. Default 0. |
| spreadRiskLevel | number | no | Put-spread floor breach risk: target probability the stock ENDS below the spread's short (lower) strike at expiration. Presets 0.20 / 0.10 / 0.05 / 0.01 ("1 in 5 / 10 / 20 / 100"); off-preset values s |
| tickerLabel | string | no | Optional display string echoed back in the result. Not used in pricing. |
Use this when someone asks whether stock qualifies for the qualified small business stock (QSBS) / Section 1202 gain exclusion, whether their startup stock can be sold tax-free, about the 5-year QSBS holding period, or how much of the gain would be federal-tax-free. Section 1202 Qualified Small Business Stock (QSBS) qualification check. Use this tool for §1202 / QSBS qualification. For AMT timing
| Parameter | Type | Required | Notes |
|---|---|---|---|
| acquisitionDate | string | yes | Date the QSBS shares were acquired (YYYY-MM-DD). Drives the holding-period test and the era classification (50% pre-2009 era, 75% pre-2010 era, 100% after a 5-year hold for acquisitions from 2010-09-2 |
| saleDate | string | yes | Planned or actual sale date (YYYY-MM-DD). Together with acquisitionDate determines holdingYears. |
| entityType | string | yes | §1202 Test 1: Type of issuer at the time of acquisition. Only 'us-c-corp' qualifies. S-corps, LLCs, partnerships, and foreign entities fail. |
| acquisitionMethod | string | yes | §1202 Test 2: How the user obtained the shares. 'original-issuance' (direct from the company) qualifies. 'gift-or-inheritance' tacks the original holder's basis and clock. 'secondary' (bought on a sec |
| assetCategory | string | yes | §1202 Test 3: Aggregate gross assets of the issuing corporation at the time of issuance. 'under-50m' qualifies pre-OBBBA. '50m-to-75m' qualifies ONLY under OBBBA 2026+ (post-2025-07-05). 'over-75m' ne |
| industry | string | yes | §1202 Test 4: Industry classification of the corporation. Four values qualify: tech-software, manufacturing, biotech-research, retail-wholesale. Specified service trades or businesses (law, engineerin |
| activeBusiness | string | yes | §1202 Test 5: Did the corporation use ≥80% of its assets in the active conduct of a qualified trade throughout the holding period? 'yes' qualifies. 'no' fails. 'unsure' returns a partial verdict (user |
| adjustedBasis | number | yes | Adjusted basis of the QSBS shares, USD. Used in the 10× basis cap: the per-issuer exclusion cap is max($10M, 10 × adjustedBasis). Must come from the user. |
| expectedGain | number | yes | Expected total gain on sale, USD. Compared against the per-issuer exclusion cap to compute excludableGain and taxableGain. Must come from the user. |
| stateCode | string | yes | Two-letter US state code. Drives the state-conformity verdict: CA/AL/PA/MS do not conform (full state tax owed); HI/MA partial; NJ 2026-01-01 conformity switch; most others fully conform. |
| ordinaryIncome | number | yes | Annual ordinary income, USD. Baseline for the federal LTCG bracket on any taxable gain. Must come from the user. This is taxable income after deductions, not gross wages: the engine applies no standar |
| filingStatus | string | yes | Federal filing status. Drives the LTCG bracket on any non-excluded gain and the NIIT MAGI threshold. |
Use this when someone asks which shares to sell and when to reach a cash goal by a deadline (down payment, tuition, a tax bill), or how to fund a goal from equity at a lower tax cost. Multi-year, multi-stack equity-funding optimizer. Given a target after-tax amount and a deadline (down payment, tax bill, expansion check), returns four named plans on the risk/wealth frontier: lockInNow (sell toda
| Parameter | Type | Required | Notes |
|---|---|---|---|
| targetAfterTax | number | yes | Net cash needed in the user's pocket after all applicable taxes (federal LTCG/ordinary + state + NIIT), USD. Example: a $1M house with 20% down minus existing savings might give a $200,000 target. Mus |
| targetDate | string | yes | Date by which the user needs the net cash (YYYY-MM-DD). Bounds the planning horizon. Sales in non-target years happen on Dec 31; the target year's sale happens on this exact date. Must come from the u |
| stacks | array | no | Holdings, multi-stack form. Provide either stacks (this) OR the legacy lots+currentPrice pair, not both. Each stack is one equity position (one ticker) with its own current price, growth, option |
| lots | array | no | Legacy single-stack input (v1.5 / v1.6). Provide either stacks (v1.7+) or these legacy fields, not both. Lot is one cost-basis cohort (one RSU vest tranche, one ESPP purchase, one open-market buy). |
| currentPrice | number | no | Legacy single-stack current share price, USD. Pair with legacy lots (omit stacks). This value must come from the user. |
| expectedAnnualGrowth | number/string | no | Legacy single-stack annual growth decimal, or the string "market" for the S&P 500 trailing average. Used with lots: pass 0 for a deliberately flat-price plan; if omitted it falls back to the S&P 500 |
| ordinaryIncome | number | yes | Annual ordinary income, USD. Used as the baseline for the federal LTCG bracket walk in each candidate year and for NIIT threshold tests. Must come from the user. This is taxable income after deduction |
| filingStatus | string | yes | Federal filing status. Drives LTCG brackets, NIIT threshold ($200K single / $250K MFJ MAGI), and state bracket lookups. |
| stateCode | string | yes | Two-letter US state code (e.g. CA, NY, TX). Drives state ordinary or LTCG treatment depending on state (CA taxes LTCG as ordinary; WA has no LTCG tax under $250K; TX/FL/etc. have no state income tax). |
| cashInterestRate | number | no | Annualized PRE-tax yield on cash held between each sale and the target date (money-market / short-term Treasury). The tool internally discounts this by the user's marginal federal + state ordinary rat |
| riskToleranceShortfall | number | no | Max acceptable P(realized cash < target) under the lognormal price model, as a fraction (0.10 = 10%). The recommended plan is the plan with the most projected wealth whose shortfall is at or below t |
| defaultVolatility | number | no | Annualized σ assumed for any stack that omits its own volatility. Drives the per-sale σ × √Δt shortfall calculation. Override per-stack on the stack object when one position is materially more or le |
Use this when someone asks which vested RSU lots to sell first, in which years, to divest part of a concentrated company-stock position, compared on total computed tax: "I want to sell down half my Amazon stock; which lots, and when?". Given the vested lots (vest date, shares, cost basis), a current price, and a divest fraction, it compares WHICH lots and WHICH sale dates to use, by computed total
| Parameter | Type | Required | Notes |
|---|---|---|---|
| lots | array | yes | The vested RSU lots still held (after any sell-to-cover), one entry per vest tranche. The tool decides which of these to sell and when. Unvested grants are out of scope. At most 20 lots per call, the |
| currentPrice | number | yes | Current share price, USD. Every sale, on every date, is priced at this value (flat-price assumption). This value must come from the user. |
| divestFraction | number | yes | Fraction of TOTAL shares to divest, as a decimal (0.5 = sell half). Range 0.10 to 1.0. NOTE: a decimal fraction, NOT a percent, so pass 0.5 not 50. The tool sells round(divestFraction x totalShares) s |
| horizonYears | integer | yes | Tax years the plan may span: 1 = sell everything now, 2, or 3. More years let the plan spread gains across brackets and defer short-term lots to long-term, at the cost of staying exposed to the stock |
| ordinaryIncome | number | yes | Total household ordinary income for the year, USD, from all sources. Sets the federal LTCG bracket floor, the short-term ordinary rate, and the net investment income tax (NIIT) threshold test. This is |
| filingStatus | string | yes | Federal filing status. Drives LTCG brackets, the NIIT threshold, and state bracket lookups. |
| stateCode | string | yes | Two-letter US state code (e.g. CA, NY, TX). Drives state capital-gains treatment (CA taxes gains as ordinary; WA/TX/FL have no tax on most capital gains). |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Optionsahoy or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
The scanner has read version 1.10.2 of this listing, but not the release on the shelf, so neither a grade nor a report is shown for it here. Nothing on this tab is ever borrowed from another release or another listing.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.11.0.
- The version the registry reports for this listing; it was 1.10.3.
- The version the registry reports for this listing; it was 1.10.2.
No release note was published with this version.
- The version this listing was on when mcprush began following its releases. The registry was not asked when it shipped, so this row carries no date.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Optionsahoy can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.