Optionsahoy Mcp

io.github.AlvisoOculus由 GitHub 帳號 AlvisoOculus 發布v1.11.1更新於 Nov 1, 2026

Equity comp tax/trade optimizer: ISO/AMT exercise, NSO, RSU, QSBS, concentration, hedging. 50-state.

已驗證Streamable HTTP可網頁執行金融資料與分析

概覽

AI 產生的概覽

依助理提供的數字,計算美國股權薪酬的稅務與交易決策:ISO/AMT、NSO、RSU、QSBS、集中度、避險與籌資計畫。

可以做什麼
  • 最佳化 ISO 行使排程並處理 AMT,包含跨年度分攤與 AMT 抵減回收
  • 比較 NSO 行使即賣與行使後持有,以及 RSU 歸屬即賣與繼續持有
  • 安排先賣出哪些已歸屬 RSU 批次、在哪幾年賣出,以減持指定比例
  • 評估單一股票集中度風險,並為保護性賣權、零成本領口與賣權價差定價
  • 檢核 QSBS(第 1202 條)資格,並規劃在期限前籌措目標現金的多年度賣出計畫
  • 可選擇以股票代號取代使用者提供的數字,解析波動率、成長率與選擇權鏈
適用情境
適合回答員工股權相關問題:股票選擇權行使、AMT 曝險、RSU 歸屬、大額公司股票部位的分散、避險成本、QSBS 資格,或為有期限的目標賣出股票。它以確定性的聯邦與全美 50 州稅務計算,取代模型在對話中的估算。
執行需求
需要遠端 streamable HTTP 端點;不需帳號、API 金鑰或身分驗證。對僅支援本機伺服器的用戶端,另提供 npm 套件的本機 stdio 版本。股數、履約價、公允市價、收入、申報身分與州等輸入須由使用者提供。
安裝前請注意
結果取決於輸入:工具會做範圍檢核,但無法分辨猜測的波動率、成長率或收入,因此助理應主動詢問缺少的必填欄位,而非自行編造。結果中會出現佔位假設(市場平均成長、隱含波動率中位數),應向使用者說明。託管呼叫會將情境資料傳送給服務方,其會短期保留輸入與輸出;本機版本在本機計算。輸出屬規劃參考,不構成稅務建議。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Optionsahoy Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.AlvisoOculus%2Foptionsahoy-mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "optionsahoy": {
      "type": "http",
      "url": "https://optionsahoy.com/mcp"
    }
  }
}

README

OptionsAhoy MCP Server

[Glama quality score] [npm version] [MCPSafe security grade] [MCP calls in the last 30 days]

Independently verified by third parties. Glama: third-party MCP-directory quality score (tool docs, behavior, completeness). · npm: published with build provenance, a signed SLSA attestation that this package was built from this repo by GitHub Actions (verify with npm audit signatures). · MCPSafe: independent 5-model-consensus security scan (AIVSS), Grade A with zero findings.

Validated against trusted sources (checks we run ourselves, against references we do not control, and that you can reproduce). Computation: every 2026 federal tax constant matches its IRS Rev. Proc. 2025-32 / Internal Revenue Code value, and 14 worked federal cases (ordinary income, long-term capital gains, and the Alternative Minimum Tax including the incentive stock option bargain element) reproduce to the cent against the independently-maintained PSL Tax-Calculator, a tax model we did not write. State income tax is cross-checked the same way: 16 cases across California, New York, New Jersey, Pennsylvania, and Massachusetts reproduce to the cent against OpenTaxSolver, an independent state tax engine we also did not write. The headline answer is recomputed live in your browser.

Tested and hardened. Input safety: requests are validated against the published schema; bad inputs return a clear 400 with the offending field named, never a crash or a wrong number, and the live API is re-checked by a robustness suite after every deploy. · Test suite: the calculation engine is covered by more than a thousand automated tests across the federal and 50-state tax logic, AMT credit recovery, and option pricing; a failing test blocks the release.

Live usage: MCP calls over the last 30 days, served straight from the server's own telemetry (/api/v1/stats, aggregate counts only, no PII).

Deterministic equity-compensation tax math that any Model Context Protocol (MCP) client can call: incentive stock option (ISO) exercise schedules under the alternative minimum tax (AMT), non-qualified stock option (NSO) and restricted stock unit (RSU) decisions, qualified small business stock (QSBS) qualification, single-stock concentration, protective-put hedging, and equity-funding goals. Relevant federal tax code plus all 50 states and DC, 2026 brackets. Built by AlphaLatitude Inc., the company behind OptionsAhoy.

Why not just ask the model? We benchmarked five frontier large language models (LLMs), 3 runs each, 15 trials total, on the same multi-year ISO exercise problem. Every trial overstated the after-tax result of its own proposed schedule, by 2x to 20x. Multi-year scheduling has a search space larger than is practical to work through in-context; these tools return the verifiable answer instead. Live benchmark, updated for the latest models: optionsahoy.com/benchmark. Raw responses and scoring: llm-iso-benchmark. Full write-up: But can it do taxes though?

Install in one line

The hosted endpoint is https://optionsahoy.com/mcp (HTTP, no auth, no account). Quickest paths:

ClientInstall
Any MCP clientAdd https://optionsahoy.com/mcp as a remote HTTP server, or npx add-mcp https://optionsahoy.com/mcp
Claude DesktopDownload optionsahoy.mcpb and double-click it
19 clients via Smitherynpx @smithery/cli install alphalatitude/optionsahoy --client claude
Local stdio (npm)npx -y optionsahoy-mcp

Full install matrix (Gemini CLI extension, config-file JSON, REST API, Google Cloud Agent Registry): optionsahoy.com/for-agents.

The eight tools

Tool nameWhat it computes
amt_iso_optimizeMulti-year ISO exercise schedule that maximizes after-tax net final value at the planning horizon, modeling AMT credit recovery, grant expiration, and the post-termination exercise window
nso_calculateAfter-tax payout on an NSO exercise (federal, state, FICA), comparing sell-at-exercise vs hold for long-term capital gains
rsu_sell_vs_holdRSU vest decision: sell at vest vs hold for long-term capital gains, including the gap between 22% supplemental withholding and your marginal bracket
concentration_analyzeSingle-stock concentration risk (drawdown exposure at 30/50/70% downside), comparing after-tax sell-down, hold, and hedge strategies
protective_put_priceProtective put, zero-cost collar, and put spread pricing via Black-Scholes: annualized hedge cost, maximum loss, upside cap, protected band, floor-hit probability, and which structure it recommends
qsbs_checkSection 1202 QSBS qualification across the six statutory tests, with the OBBBA 2026 tiered exclusion and per-state conformity
equity_funding_planMulti-year, multi-stack sell schedule to hit a target after-tax amount by a deadline; returns four named plans plus the full risk/wealth frontier
rsu_lot_optimizeWhich vested RSU lots to sell, and on which dates, to divest a target share fraction at the lowest computed tax: specific-lot identification, long-term deferral, and multi-year bracket spreading with in-plan loss carryforward, versus a FIFO sell order

The ISO optimizer searches its full discretized candidate space and refines share by share, matching a brute-force maximum to the cent on a published tractable case (see the proof); the planners run deterministic bracket-aware searches and the calculators return exact results. Deterministic computation, not a language-model guess. Coverage spans the relevant federal tax code (ordinary brackets, long-term capital gains, AMT with credit recovery, FICA, NIIT) plus all 50 states and DC (state ordinary brackets, LTCG treatment, state AMT for CA, CO, CT, MN). Same engine as the in-browser calculators at optionsahoy.com/tools; the API response carries the same computed figures as clicking through the tool.

What a call looks like (all eight tools)

One real call per tool, captured from https://optionsahoy.com/mcp and committed under docs/examples/, so every figure below is auditable against the response it came from. The inputs are deliberately explicit (no ticker, every date pinned), so re-running scripts/capture-readme-examples.mts reproduces the same numbers. Each block shows the ask, the arguments that carry the scenario, and what came back.

amt_iso_optimize

"I have 50,000 vested ISOs at a $4 strike and the stock is at $90. Married filing jointly, $300,000 of income, California. Should I exercise the whole block now or spread it out?"

json
{"shares": 50000, "strike": 4, "fmv": 90, "horizon": 4, "filingStatus": "married_joint", "ordinaryIncome": 300000, "stateCode": "CA", "grantDate": "2023-03-15", "expectedGrowth": 0.1, "volatilityDrag": 0.2, "cashReturnRate": 0.05, …}

The optimized schedule exercises 1,401 / 1,339 / 1,280 / 45,980 shares across the four years and ends at a net final value of $1,623,234, against $1,565,849 for exercising the whole block today. The AMT crossover sits at 699 shares: the first $60,185 of bargain element costs no AMT at all. (raw; the same position as the site's published worked example, priced with the explicit growth and drag above)

nso_calculate

"5,000 NSOs at an $8 strike, stock at $75. Do I sell at exercise or hold a year for long-term gains? Single, $250,000 income, California."

json
{"shares": 5000, "strike": 8, "currentPrice": 75, "expectedSalePrice": 90, "holdYears": 1, "holdFunding": "sell-to-cover", "volatility": 0.3, "ordinaryIncome": 250000, "filingStatus": "single", "stateCode": "CA", …}

The exercise itself is a $335,000 bargain element taxed $159,618, leaving $175,382 if you sell everything on the spot. Holding a year with a sell-to-cover projects $193,943 against $184,209 for selling now and investing the proceeds, a $9,734 edge for holding. (raw)

rsu_sell_vs_hold

"1,000 RSUs vesting at $200. Sell at vest or hold another year and a half? Married filing jointly, $300,000 income, New York."

json
{"shares": 1000, "currentPrice": 200, "expectedSalePrice": 220, "holdYears": 1.5, "volatility": 0.25, "ordinaryIncome": 300000, "filingStatus": "married_joint", "stateCode": "NY", "stillEmployed": true, …}

The vest costs $73,896 in total tax, of which $55,716 is federal against only $44,000 withheld at the flat supplemental rate: that gap is the April bill people do not see coming. Selling at vest and investing projects $136,247 at the end of that hold versus $130,817 for holding, so holding loses $5,430 here. (raw)

concentration_analyze

"$750,000 of my $2.25M is in one tech stock I bought in 2022 for $150,000. How exposed am I, and what does selling down cost?"

json
{"positionValue": 750000, "costBasis": 150000, "acquisitionDate": "2022-01-15", "sector": "tech_software", "totalAssets": 2250000, "expectedPositionReturn": 0.12, "volatility": 0.35, "ordinaryIncome": 350000, "filingStatus": "single", "stateCode": "CA", …}

The position is 33% of net worth, which the tool bands as "Concentrated", and a 50% drawdown in that one name would cost $375,000. Selling it down over three years pays $196,709 in tax against $208,368 for selling in a single year. (raw)

protective_put_price

"I want downside protection on a $500,000 tech position for a year, with a floor about 20% below spot. Put, collar, or put spread?"

json
{"positionValue": 500000, "sector": "tech_software", "volatility": 0.35, "protectionLevel": 0.2, "tenorYears": 1, "spreadRiskLevel": 0.1, "expectedReturn": 0.08}

A bare put struck at $400,000 costs $19,348 a year, 3.87% of the position. The zero-cost collar buys the same floor for a net premium of roughly zero by capping upside at $724,518, which it puts a 15.7% chance on reaching, and that is the structure it recommends. (raw) This call passes an explicit sigma, so every leg prices at that one number; pass a ticker instead and each leg prices at its own strike's implied volatility off that stock's listed option chain as of the last close, which costs more for a floor this far out of the money.

qsbs_check

"I bought founder stock in March 2020 and I am selling in March 2026 for a $5M gain. Is it QSBS, and how much is tax-free?"

json
{"acquisitionDate": "2020-03-01", "saleDate": "2026-03-15", "entityType": "us-c-corp", "acquisitionMethod": "original-issuance", "assetCategory": "under-50m", "industry": "tech-software", "adjustedBasis": 50000, "expectedGain": 5000000, …}

Verdict qualifies: all six statutory tests pass at 6.0 years held, so 100% of the $5,000,000 gain is excludable under the $10,000,000 per-issuer cap, worth $1,190,000 in federal tax. California does not conform, so the same gain is fully taxable by the state. (raw)

equity_funding_plan

"I need $400,000 after tax by June 2029 for a house. I hold 3,500 shares at $120 across two lots. What do I sell, and when?"

json
{"targetAfterTax": 400000, "targetDate": "2029-06-30", "stacks": [{"currentPrice": 120, "expectedAnnualGrowth": 0.08, "lots": [{"shares": 2000, "costBasisPerShare": 50, "acquisitionDate": "2022-01-15"}, …]}], "ordinaryIncome": 350000, "stateCode": "CA", …}

Selling everything today falls short: it nets $391,574 against the $400,000 goal. The recommended staged plan sells 3,314 of the 3,500 shares over the years to the deadline, lands at $400,075 after tax with $63,740 of tax paid, and beats a single sale in the target year by $12,976. (raw)

rsu_lot_optimize

"I hold 3,000 vested RSU shares from three vests, the stock is at $180, and I want to cut the position in half over the next two years. Which lots go?"

json
{"lots": [{"vestDate": "2022-08-15", "shares": 1200, "costBasisPerShare": 95}, {"vestDate": "2024-02-15", "shares": 1000, "costBasisPerShare": 130}, …], "currentPrice": 180, "divestFraction": 0.5, "horizonYears": 2, "ordinaryIncome": 200000, …}

To divest 1,500 of the 3,000 shares it pairs the underwater newest lot against long-term gains from an older one, so the whole divestment costs $2,935 in tax and keeps $267,065 after tax, $29,942 more than selling the same fraction in FIFO order. (raw)

Every example above passes volatility and growth explicitly. In a real call you can instead pass ticker: volatility resolves from the published implied-vol snapshot as of the last market close, and growth from the cached trailing-CAGR snapshot. If either cannot be resolved the call returns an error naming the exact field rather than a guessed number, and protective_put_price echoes volatilitySource (explicit, chain, ticker, or sector-default) plus pricingMode (chain-skew or flat) so you always know which sigma was priced and whether the legs were priced at their own strikes.

These captures ran in the 2026 tax year. Figures move in a later tax year for the three tools whose schedules run forward from today's date (amt_iso_optimize, equity_funding_plan, rsu_lot_optimize); everything else is pinned by the dates in the arguments.

Use it in your agent framework (Python)

If you build agents in Python rather than calling the MCP endpoint directly, OptionsAhoy ships installable tool packages for the major agent frameworks. Each one wraps the same calculators behind the framework's native tool interface. All are published on PyPI and all are keyless: no OptionsAhoy account, no API key.

FrameworkInstallImportExample
LangChainpip install optionsahoy-langchainfrom langchain_optionsahoy import get_optionsahoy_toolsequity_agent.py
LlamaIndexpip install llama-index-tools-optionsahoyfrom llama_index.tools.optionsahoy import OptionsAhoyToolSpecequity_agent.py
CrewAIpip install crewai-optionsahoyfrom crewai_optionsahoy import get_optionsahoy_toolsequity_crew.py
Plain Python clientpip install optionsahoyfrom optionsahoy import OptionsAhoyClientbasic_client.py

The three framework adapters pull in the keyless optionsahoy client automatically. There is also an OpenBB Workspace agent (a FastAPI application built on the OptionsAhoy client) for use inside OpenBB Workspace. Source and runnable examples for all of the above live under integrations/python.

More ways to build

However your agent is built, there is a drop-in piece. All are public and keyless.

Building blockWhat it is
Vercel AI SDK toolsA TypeScript package (optionsahoy-ai-sdk) exposing all eight calculators as Vercel AI SDK tool() definitions, ready to spread into generateText / streamText.
Instruction kitsEditor rules and skills for Cursor, Windsurf, Claude Skills, and Claude Code subagents, so your coding agent calls the OptionsAhoy tools for equity-compensation questions.
Coding recipesCopy-paste Python recipes, one self-contained file per question, calling the keyless API with only requests. Also in integrations/recipes.
Builder templatesAn importable n8n workflow plus build recipes for Flowise, Langflow, and Dify.
Tool-use evalAn inspect_ai evaluation measuring whether an agent reaches the provable optimum on a multi-year ISO problem, with and without the tool.
A2A discoveryAn Agent2Agent (A2A) Agent Card so other agents can discover and delegate equity-compensation questions to the planner.
Zed extensionA Zed editor context-server extension that connects the editor's agent to the OptionsAhoy MCP server.
ACI.dev appThe OptionsAhoy app definition for the ACI.dev open-source agent-tool platform.
OpenRouter bridgeA recipe for attaching the keyless OptionsAhoy MCP server to any model routed through OpenRouter's OpenAI-compatible endpoint.

Try it without installing

The live widget on optionsahoy.com/for-agents calls this same endpoint from your browser. No client, no config.

Prefer a chat interface? The same calculators answer plain-language questions at poe.com/OptionsAhoy.

Or watch a real session:

[Demo: Claude Code installing and using the OptionsAhoy MCP]

Real Claude Code session, unedited. A multi-stack META question (10K ISOs + 6K vested RSUs + 2K fresh RSUs + $400K house in 2027) fires 4 OptionsAhoy MCP tools in parallel: concentration risk, equity funding plan, AMT/ISO optimization, protective put pricing. Claude synthesizes the outputs into one plan that overrides each tool's standalone pick because the user is 86% concentrated in META. 2:13. Click the poster to play it on optionsahoy.com.

Endpoints and discovery

Live MCP endpoint: https://optionsahoy.com/mcp Live REST API: https://optionsahoy.com/api/v1 OpenAPI 3.1 spec: /openapi.json Discovery manifests: /.well-known/mcp.json · /.well-known/openapi.json Agent integration docs: optionsahoy.com/for-agents

MCP resources (topical briefings)

Eight markdown resources under resources/list give an LLM enough grounding to discuss the topic before picking a tool. Most map 1:1 with a cornerstone article on optionsahoy.com/learn and the matching calculator; the equity-funding briefing maps to its calculator, and the covered-tickers briefing enumerates the symbols the optional ticker shortcut resolves.

Resource URITopicPair with
https://optionsahoy.com/learn/amt-crossoverISO/AMT crossover and four expensive mistakesamt_iso_optimize
https://optionsahoy.com/learn/nso-sell-vs-holdNSO sell-at-exercise vs hold-for-LTCGnso_calculate
https://optionsahoy.com/learn/rsu-withholding-gapRSU 22% withholding gap and five April surprisesrsu_sell_vs_hold
https://optionsahoy.com/learn/single-stock-concentration-riskConcentration risk and diversification trade-offconcentration_analyze
https://optionsahoy.com/learn/zero-cost-collarsProtective puts, zero-cost collars, and put spreadsprotective_put_price
https://optionsahoy.com/learn/qsbsQSBS qualification and five ways to lose the exclusionqsbs_check
https://optionsahoy.com/tools/equity-fundingSelling equity to fund a cash goal by a deadlineequity_funding_plan
https://optionsahoy.com/tools/covered-tickersWhich symbols the optional ticker shortcut resolvesany tool taking ticker

MCP prompts (workflow scaffolds)

Eight prompts under prompts/list scaffold typical user questions and route to the right tool. In Claude Desktop they appear as named slash-commands; in any MCP client, prompts/get { name, arguments } returns a fully-templated user message.

Prompt nameRoutes to
optimize-iso-exerciseamt_iso_optimize
analyze-nso-decisionnso_calculate
analyze-rsu-vestrsu_sell_vs_hold
analyze-concentrationconcentration_analyze
price-protective-putprotective_put_price
check-qsbs-eligibilityqsbs_check
plan-equity-fundingequity_funding_plan
plan-equity-portfolioseveral tools, reconciled into one plan

A prompts/get invocation, arguments as strings:

json
{"name": "optimize-iso-exercise", "arguments": {"shares": "50000", "strike": "4", "fmv": "90", "expectedGrowth": "0.1",               "volatility": "0.5", "state": "CA", "ordinaryIncome": "300000"}}

It returns one templated user message ("I have 50000 Incentive Stock Options (ISOs) with a strike of $4 per share ...") that already tells the model to call amt_iso_optimize with those values, to ask for any missing required field rather than assume it, and to report the optimized schedule against the lump-sum and even-split alternatives (raw).

Install details

Claude Desktop extension (one-click)

The optionsahoy.mcpb bundle installs by double-click (or drag onto Claude Desktop → Settings → Extensions), with no terminal or config-file editing, using Claude Desktop's built-in Node.js runtime.

To build the bundle from source:

bash
npm install && npm run build:mcpb

Smithery CLI (19 clients, one command)

bash
npx @smithery/cli install alphalatitude/optionsahoy --client claude

Swap claude for any client Smithery supports: claude-code, cursor, vscode, gemini-cli, codex, windsurf, cline, goose, opencode, and 10 more. Listing: smithery.ai/servers/alphalatitude/optionsahoy.

Gemini CLI extension

bash
gemini extensions install https://github.com/AlvisoOculus/optionsahoy-mcp

This repo doubles as a Gemini CLI extension: gemini-extension.json wires the hosted MCP endpoint and GEMINI.md provides usage context to the model.

Local stdio (npm)

For clients that only support local stdio servers (Claude Desktop without mcp-remote, some IDE integrations):

bash
npx -y optionsahoy-mcp

Or add to a Claude Desktop / Cline / Goose config file:

json
{  "mcpServers": {    "optionsahoy": {      "command": "npx",      "args": ["-y", "optionsahoy-mcp"]    }  }}

The local server returns the same computed figures as the hosted endpoint at https://optionsahoy.com/mcp. Source for both lives in functions/_lib/mcp-tools.ts; the stdio entry point is src/stdio-server.ts.

Use the REST API directly

bash
# List endpointscurl https://optionsahoy.com/api/v1
# Run an optimization (the 50,000-ISO example from "What a call looks like")curl -X POST https://optionsahoy.com/api/v1/amt-iso \  -H "content-type: application/json" \  -d '{"shares":50000,"strike":4,"fmv":90,"horizon":4,"filingStatus":"married_joint",       "ordinaryIncome":300000,"stateCode":"CA","grantDate":"2023-03-15",       "hasLeftCompany":false,"expectedGrowth":0.1,"volatilityDrag":0.2,       "carryforwardCredit":0,"cashReturnRate":0.05}'

That returns the same result.schedules.optimized.nfv as the MCP call above (raw). Request body shapes for the other seven endpoints are documented in public/openapi.json.

Repository layout

functions/         Cloudflare Pages Functions (MCP server + REST API endpoints)  mcp.ts           HTTP MCP server  api/v1/*.ts      Eight tool endpoints + stats + GET /api/v1 discovery  _lib/*.ts        Shared helpers, calc-input parsers, MCP tool descriptorslib/               Optimizer + tax-code logic  calc/            Per-tool optimizer functions (computeAmtIso, etc.)  tax/             Federal + 50-state + DC bracket data, AMT, FICA, NIIT  markets/         Sector statistics  options/         Black-Scholes, risk-free rates  data/            Option-chain types, and the readers for the live vol and chain feedspublic/            Static assets: OpenAPI spec, llms.txt, discovery manifeststests/             Vitest suites (an extensive test suite including byte-identity assertions)

Run tests

bash
npm installnpm test         # an extensive test suite, ~3s on a laptopnpm run typecheck

Registry listings

Use from Google Cloud (Gemini agents)

Google Cloud Agent Registry lets each GCP project register external MCP servers for use by Gemini agents. Registration is per-project (no central submission). Two paths:

bash
# Path A: let the Agent Registry introspect our MCP endpointgcloud alpha agent-registry mcp-servers register \  --uri=https://optionsahoy.com/mcp \  --display-name="OptionsAhoy" \  --location=us-central1 \  --import-tools
# Path B: pass our published toolspec.json directly (faster, no introspection)gcloud alpha agent-registry mcp-servers register \  --uri=https://optionsahoy.com/mcp \  --display-name="OptionsAhoy" \  --location=us-central1 \  --tool-spec=<(curl -sSL https://optionsahoy.com/toolspec.json)

The toolspec.json mirrors the MCP tools/list response with readOnlyHint and idempotentHint annotations on all eight tools (all are pure deterministic calculators with no side effects). To regenerate after a tool-shape change:

bash
curl -sS -X POST https://optionsahoy.com/mcp \  -H 'content-type: application/json' \  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}' \  | jq -c '{tools: [.result.tools[] | . + {annotations: {readOnlyHint:true, idempotentHint:true, destructiveHint:false, openWorldHint:false}}]}' \  > public/toolspec.json

Troubleshooting

Connection refused / 404 from the MCP endpoint https://optionsahoy.com/mcp requires POST with content-type: application/json and a JSON-RPC body. A GET returns a JSON server description; any other verb returns 405. Verify with:

bash
curl -X POST https://optionsahoy.com/mcp -H 'content-type: application/json' \  -d '{"jsonrpc":"2.0","method":"initialize","id":1,"params":{}}'

Tool calls fail with Error: ... text in the response The MCP server returns isError: true with a human-readable message when input validation fails. Most common: a required field missing, or a number passed as a string. Check the input against the inputSchema returned by tools/list, or against /openapi.json.

Tool not appearing in Claude.ai or Claude Desktop

  • Confirm the connector URL is exactly https://optionsahoy.com/mcp (no trailing slash, no /v1).
  • In Claude Desktop, restart the app after editing claude_desktop_config.json.
  • In Claude.ai, the connector toggle is per-chat: enable it in the attachments menu.
  • Check the live tools/list response (eight tools expected): curl -X POST https://optionsahoy.com/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'

CORS errors from a browser-based client The server returns access-control-allow-origin: * on all responses including preflight, and accepts the standard MCP headers (content-type, mcp-session-id, mcp-protocol-version). If a browser still blocks, the client is likely sending a non-allowed header — verify the request headers against the access-control-allow-headers response.

Resource / prompt not found Resource URIs and prompt names are case-sensitive. Pull the canonical list with resources/list and prompts/list rather than hand-typing.

Stale tax-year math The tax engine ships with 2026 inflation-adjusted brackets, OBBBA 2026 QSBS rules, and current state-conformity tables. If results look off for a multi-year horizon, verify the input grantDate, acquisitionDate, or saleDate falls in the year you expect — the engine resolves brackets per tax year.

Reporting a calculation bug or unexpected output Email [email protected] with: the exact JSON-RPC request body, the response, the expected value, and (if known) the IRS publication or state statute the expected value derives from.

Privacy Policy

Full policy: optionsahoy.com/privacy.

In short: no account is required and no personally identifiable information is stored — no name, email, IP address, or login. Tool inputs and outputs are retained briefly (about seven days) for debugging and product improvement, alongside aggregate usage metadata (tool, timestamp, coarse location, client type) used to understand usage and detect abuse. The local stdio server and the Claude Desktop extension compute everything on your machine. They make exactly two kinds of network request, both only when you pass a ticker without the number it would resolve: the published implied-volatility file, which is one fixed URL carrying no ticker at all, and, for protective_put_price, that stock's option chain, whose URL contains the symbol. Nothing else about the call leaves the machine.

License

MIT. See LICENSE. The deployed service at https://optionsahoy.com/mcp and https://optionsahoy.com/api/v1 is free during beta under terms.

Contact

For partnerships, early API access, MCP integration support: [email protected]

來源:README.md,提交 0c19368

工具

8

amt_iso_optimize

ISO/AMT Exercise Optimization

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 planning horizon. NFV is the after-all-tax cash equivalent of the position at year `horizon`, summing exercised shares (held to LTCG) plus the time-valued tax stream paid along the way; the search compares per-year share allocations by NFV. The headline result is `schedules.optimized.nfv`, the dollar NFV of the highest-scoring schedule found; `schedules.lumpSum` and `schedules.evenSplit` are baseline plans whose `nfv` deltas show the value added by the optimized schedule. For NSO grants use `nso_calculate`, for RSUs at vest use `rsu_sell_vs_hold`, for §1202 QSBS qualification use `qsbs_check`. Models AMT credit recovery across future years, grant-expiration timing, and the post-termination exercise window. Deterministic computation: federal + 50-state tax tables and AMT brackets are compiled in, and the only data read at call time is OptionsAhoy's own published market data, for a `ticker` or the volatility placeholder. Input values are not stored. `schedules.optimized` comes from searching the full discretized candidate space and refining share by share, and a published test case checks it against an exhaustive search (see https://optionsahoy.com/verification). `departedRecommendation`, when present, comes from a scan over candidate share counts rather than the full search. Also returns `crossoverShares`, `crossoverBargain`, `alreadyInAmt`, `timing`, `stateHasAmt`, `bargainPerShare`, and `effectiveHorizon`; see `outputSchema` for the full shape. The schedules are calculations from the inputs supplied, for planning, not tax or investment advice; the user should have a tax professi

輸入參數fmv必填shares必填strike必填tickerhorizon必填grantDate必填stateCode必填volatilityfilingStatus必填itemizedTaxescashReturnRateexpectedGrowth另有 5 個

nso_calculate

NSO Sell-vs-Hold Analysis

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 (including the 3.8% NIIT on a long-term gain where it applies), state, and FICA (Social Security + Medicare + Additional Medicare), comparing sell-at-exercise vs hold-for-long-term-capital-gains over the chosen horizon. Use for NSOs; for ISOs use `amt_iso_optimize`, for RSUs use `rsu_sell_vs_hold`. Deterministic; tax tables compiled in, and the only data read at call time is OptionsAhoy's own published market data, for a `ticker` or the volatility placeholder. Optional `ticker` resolves `expectedSalePrice` from a bundled trailing-CAGR snapshot. Returns `exercise`, `hold`, `sellNowInvest` (the counterfactual: sell at exercise and reinvest at expectedMarketReturn), `holdMinusCashless` (the dollar delta between those two), and `bracketJump`; see `outputSchema` for the full shape. NSO hold is always long-term (sub-1-year is out of scope), so there is no separate long-term flag. Example call: {shares: 5000, strike: 10, currentPrice: 50, ordinaryIncome: 180000, filingStatus: "single", stateCode: "CA", stillEmployed: true, holdYears: 2, volatility: 0.3, holdFunding: "cash", ticker: "AAPL"}. The expected growth (or return, or sale price) and the volatility come from the user, from a covered public-stock `ticker`, or, for growth only, from the string "market" (the S&P 500 trailing average). With none of these, the tool uses the S&P 500 trailing average for growth and the median implied volatility of the companies OptionsAhoy covers for volatility, both labeled as placeholders in `assumptions` and `assumptionNotice`. Every field in `required` is a fact about the user's situation with no built-in default: a missing one returns an error naming it, and validation cannot tell a supplied figure from a guessed

輸入參數shares必填strike必填tickerhaircutholdYears必填stateCode必填volatilityholdFunding必填currentPrice必填filingStatus必填stillEmployed必填ordinaryIncome必填另有 2 個

rsu_sell_vs_hold

RSU Sell-at-Vest vs Hold

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, long-term capital gains tax including the 3.8% NIIT where it applies, state tax, FICA (Social Security + Medicare + Additional Medicare), and the shortfall between mandatory 22% supplemental withholding and the user's marginal bracket. Use for RSUs at vest; for ISO/AMT use `amt_iso_optimize`, for NSO use `nso_calculate`. Deterministic; tax tables compiled in, and the only data read at call time is OptionsAhoy's own published market data, for a `ticker` or the volatility placeholder. Returns `vest`, `hold`, `sellNowInvest`, `holdMinusSell`, and `bracketJump`; see `outputSchema` for the full shape. Example call: {shares: 1000, currentPrice: 100, ordinaryIncome: 200000, filingStatus: "single", stateCode: "CA", stillEmployed: true, holdYears: 2, volatility: 0.3, ticker: "MSFT"}. The expected growth (or return, or sale price) and the volatility come from the user, from a covered public-stock `ticker`, or, for growth only, from the string "market" (the S&P 500 trailing average). With none of these, the tool uses the S&P 500 trailing average for growth and the median implied volatility of the companies OptionsAhoy covers for volatility, both labeled as placeholders in `assumptions` and `assumptionNotice`. Every field in `required` is a fact about the user's situation with no built-in default: a missing one returns an error naming it, and validation cannot tell a supplied figure from a guessed one. Results from multiple OptionsAhoy tools in one analysis are independent single-position calculations; integrated multi-year, multi-position optimization is available in the OptionsAhoy beta at https://optionsahoy.com/beta?src=mcp_multi.

輸入參數shares必填tickerhaircutholdYears必填stateCode必填volatilitycurrentPrice必填filingStatus必填stillEmployed必填ordinaryIncome必填expectedSalePriceexpectedMarketReturn

concentration_analyze

Single-Stock Concentration Analysis

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 RSU vest that created the concentration, route to `amt_iso_optimize` / `nso_calculate` / `rsu_sell_vs_hold` first. Quantifies drawdown exposure at 30/50/70% downside, then compares three after-tax strategies over a three-year horizon (sell-down to target weight, hold, hedge with put or zero-cost collar), accounting for federal LTCG, state tax, the 3.8% Net Investment Income Tax (NIIT), and reinvestment opportunity cost. `totalAssets` (concentrated position + everything else) frames risk relative to the whole portfolio. Returns a top-level object with keys: `concentration` (position/totalAssets), `riskBand` (Low / Moderate / Concentrated / Highly concentrated / Extreme), `isLongTermToday`, `longTermDate`, `daysUntilLongTerm`, `lossExposure` ({drop, dollarLoss, newConcentration} for 30/50/70% drops), `waitForLtInsight`, `schedule` (yearly sales with per-year tax), `hedging` ({kind, protectionLevel, tenorYears, strike, putPrice, callStrike, callPrice, netPremium, sigma, riskFreeRate} - a 1-year 30%-OTM put by default, or the structure named by `hedgeChoice`), `sectorContextLine`, `advisorBenchmarkLine`. Example call: {positionValue: 400000, costBasis: 100000, acquisitionDate: "2022-01-01", sector: "tech_software", stateCode: "CA", filingStatus: "single", ordinaryIncome: 200000, totalAssets: 1200000, volatility: 0.45, ticker: "NVDA"}. The expected growth (or return, or sale price) and the volatility come from the user, from a covered public-stock `ticker`, or, for growth only, from the string "market" (the S&P 500 trailing average). With none of these, the tool uses the S&P 500 t

輸入參數sector必填tickercostBasis必填stateCode必填volatilityhedgeChoicetotalAssets必填filingStatus必填positionValue必填ordinaryIncome必填volatilityDragacquisitionDate必填另有 2 個

protective_put_price

Protective Put / Collar / Put Spread Pricing

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 `concentration_analyze` with a `hedgeChoice`. Parameter interactions: `volatility` omitted resolves from `ticker`, else a sector-typical implied volatility; an explicit sigma overrides it. For collars, omitting `upsideCapPct` lets the tool back-solve the cap that zeros the net premium (truly zero-cost collar); supplying `upsideCapPct` overrides the solver and yields a non-zero net premium when the cap is wider than zero-cost. `tenorYears` drives the risk-free-rate lookup AND the floor-hit / cap-hit probability metrics, so changing tenor shifts every probability output even at fixed strike. `expectedReturn` affects only the probability metrics (real-world drift in the floor-hit / cap-hit calculations); premium math is risk-neutral and ignores it (when a chain resolves it defaults to that stock's trailing annualized return, else to the sector's long-run return; never 0). `protectionLevel` sets the put strike as `(1 − protectionLevel) × spot`; raising it widens the protected zone but raises premium roughly linearly. `spreadRiskLevel` (default 0.10) sets the put spread's short strike by targeting the probability the stock ends below it; it affects only the `putSpread` block. The put spread finances the same floor with a short put at a lower strike (not a short call), so it is cheaper than the bare put and needs no shares to sell calls against, which makes it the one structure of the three that works on unexercised employee options; the trade-off is that protection stops at the short strike and losses resume below it. Closed-form and deterministic. With a `ticker` and no explicit `

輸入參數sector必填tickertenorYears必填volatilitytickerLabelpositionValue必填expectedReturnprotectionLevel必填spreadRiskLevel

qsbs_check

QSBS Qualification Check

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 on the ISO exercise that produced the QSBS holding, use `amt_iso_optimize` first. Parameter interactions: `entityType="other"` short-circuits the verdict to `disqualified` regardless of other fields; `acquisitionMethod="secondary"` does the same; `assetCategory="over-75m"` likewise fails immediately. Under `acquisitionMethod="gift-or-inheritance"` the holding period tacks from the original holder, so supply that earlier date as `acquisitionDate` if known. `acquisitionDate` drives era classification independent of holding period: before 2009-02-17 caps exclusion at 50%, 2009-02-17 to 2010-09-27 at 75%, 2010-09-28 through 2025-07-04 reaches 100% after a 5-year hold (pre-OBBBA), and 2025-07-05 onward uses the OBBBA tiered schedule (50% at 3y, 75% at 4y, 100% at 5y). The per-issuer exclusion cap is `max($10M, 10 × adjustedBasis)` ($15M base for stock acquired after July 4, 2025); when `expectedGain` exceeds it, the overage is fully taxable and the response surfaces `taxableGain` for that delta. `industry` is the dominant industry (>80% revenue) when the corp operates in multiple. Evaluates the six statutory tests: domestic C-corporation entity, original-issuance acquisition method, gross assets at issuance (under $50M / $50-75M / over $75M tiered cap), qualified-trade-or-business industry, active-business posture (80% asset use), and holding period (3 / 4 / 5-year tiers under OBBBA). Pure stateless check: no filing, reporting, or IRS lookup happens; the six tests are evaluated against the bundled OBBBA 2026 rule set and per-state conformity table. Returns a top-level object wit

輸入參數industry必填saleDate必填stateCode必填entityType必填expectedGain必填filingStatus必填adjustedBasis必填assetCategory必填activeBusiness必填ordinaryIncome必填acquisitionDate必填acquisitionMethod必填

equity_funding_plan

Equity-Funding Plan Comparison

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 today, no further exposure to the stock price), `balanced` (bracket-aware spread across months), `holdForGrowth` (sell at the deadline, full exposure to the stock price), and `recommended` (the plan with the most projected wealth among those whose lognormal shortfall probability is at or below `riskToleranceShortfall`, default 10%). Also returns `frontier`, the full hybrid sweep between Lock-in-now and Balanced. Each plan carries its `plan` schedule plus `wealthAtTarget`, `totalTax`, and `shortfallProbability`; see `outputSchema` for the full shape. Use this when an equity holder needs cash by a deadline; for the upstream tax math on RSU/NSO/ISO events that PRODUCED the holdings, call `rsu_sell_vs_hold` / `nso_calculate` / `amt_iso_optimize` first. Out of scope: FICA, AMT, QSBS routing (use `qsbs_check`). Pass multi-ticker holdings via `stacks`; single-stack legacy callers can use top-level `lots` + `currentPrice`. The plans are calculations from the inputs and risk tolerance supplied, for planning, not investment or tax advice; the user should confirm a sale plan with a tax or financial professional before selling. Example: {targetAfterTax: 400000, targetDate: "2028-06-01", stacks: [{ticker: "NVDA", currentPrice: 140, expectedAnnualGrowth: 0.15, volatility: 0.45, lots: [{shares: 4000, costBasisPerShare: 60, acquisitionDate: "2023-06-15"}]}], ordinaryIncome: 280000, filingStatus: "married_joint", stateCode: "CA", cashInterestRate: 0.04, riskToleranceShortfall: 0.10}. Each stack needs `expectedAnnualGrowth`: a decimal, the string "market" (S&P 500 trailing average), or a covered

輸入參數lotsstacksstateCode必填targetDate必填currentPricefilingStatus必填ordinaryIncome必填targetAfterTax必填cashInterestRatedefaultVolatilityexpectedAnnualGrowthriskToleranceShortfall

rsu_lot_optimize

RSU Lot-Order Divest Plan

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 tax, to divest that many shares, using three levers: specific-lot identification (sell higher-basis lots to realize less gain, or underwater lots to harvest losses that net against gains), long-term deferral (wait past the one-year mark to convert short-term ordinary rates to long-term capital gains), and multi-year bracket spreading (split gains across 1 to 3 tax years, with in-plan capital-loss carryforward). Every sale is priced at today's price (flat-price assumption; there is no growth model). Returns the year-by-year sell schedule grouped by tax year, the total tax (federal LTCG + NIIT + state), what a first-in-first-out (FIFO) oldest-first sell order on the same schedule would have cost (`headlineDeltaVsFifo`), a 1/2/3-year horizon trade-off, and per-lot deferral callouts. This tool owns WHICH LOTS and WHICH DATES; for WHETHER and HOW MUCH to sell down a position use `concentration_analyze`, for a single new vest use `rsu_sell_vs_hold`, and to raise a specific cash amount by a deadline use `equity_funding_plan`. Out of scope: growth/return modeling, wash-sale basis migration, AMT, unvested grants. The lot order is a calculation from the lots and inputs supplied, for planning, not tax or investment advice; the user should have a tax professional confirm it before selling. Example: {lots: [{vestDate: "2022-08-15", shares: 120, costBasisPerShare: 95}, {vestDate: "2024-02-15", shares: 100, costBasisPerShare: 130}, {vestDate: "2026-05-15", shares: 80, costBasisPerShare: 210}], currentPrice: 180, divestFraction: 0.5, horizonYears: 2, ordinaryIncome: 200000, filingStatus:

輸入參數lots必填stateCode必填currentPrice必填filingStatus必填horizonYears必填divestFraction必填ordinaryIncome必填

版本歷史

4
  1. v1.11.1最新Nov 1, 2026
  2. v1.11.0Oct 7, 2026
  3. v1.10.3Oct 4, 2026
  4. v1.10.2Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分