Portfolio Terminal
com.portfolio-terminal/portfolio-terminalportfolio-terminal.comstreamable-httpv1.1.0Scanned
Dated ETF, stock and calendar data, plus tax-loss, withholding and fee math on your holdings.
10 tools: 8 change things and 2 only read.
- Reads private data · 0
- Reads text others write · 6
- Can send data out · 0
- No findings
Anlyon alternative
8 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
10 tools
Changes things 8Claude Code: ask
dividend_calendarUS stocks and ETFs (of the 420 Portfolio Terminal covers) going ex-dividend in a month or a date range: ex-dividend date, pay date, dividend per share, yield, frequency, and whethe…Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it US stocks and ETFs (of the 420 Portfolio Terminal covers) going ex-dividend in a month or a date range: ex-dividend date, pay date, dividend per share, yield, frequency, and whether the date is confirmed by the company or estimated from its payment rhythm. Buy before the ex-date to receive the dividend. Filter by one ticker with `symbol`.
Annotations the server declares
- title: Dividend calendar
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
earnings_calendarUS companies (of the 390 Portfolio Terminal covers) reporting earnings in a month or a date range: the day, before the open or after the close, EPS and revenue estimates, whether t…Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it US companies (of the 390 Portfolio Terminal covers) reporting earnings in a month or a date range: the day, before the open or after the close, EPS and revenue estimates, whether the date is confirmed or estimated, and once out, the result against the consensus and how many recent quarters beat it. Filter by one ticker with `symbol`.
Annotations the server declares
- title: Earnings calendar
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
etf_holdingsAn ETF's or index fund's holdings from the issuer's full file (or its latest SEC N-PORT report for funds outside the catalog): the largest lines with their weights, the sector mix,…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it An ETF's or index fund's holdings from the issuer's full file (or its latest SEC N-PORT report for funds outside the catalog): the largest lines with their weights, the sector mix, and how concentrated it is (weight of the top 10, how many names make up half the fund, effective number of holdings). Share classes of one fund (VFIAX → VOO) resolve to its file.
Annotations the server declares
- title: Everything an ETF holds
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
etf_overlapHow much of two ETFs is the same money: overlap by weight (the sum, over companies both hold, of the smaller of the two weights), how many companies they share, what share of each …No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it How much of two ETFs is the same money: overlap by weight (the sum, over companies both hold, of the smaller of the two weights), how many companies they share, what share of each fund sits in names the other also holds, and the largest shared holdings. Full issuer files, matched on ISIN. Use it for "VOO vs QQQ overlap", "is IVV the same as VOO".
Annotations the server declares
- title: How much two ETFs overlap
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
fund_feesComputes, on the funds and amounts the user gives, what each fund's expense ratio takes a year (amount × expense ratio), the total and the weighted ratio, with the expense ratios o…Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Computes, on the funds and amounts the user gives, what each fund's expense ratio takes a year (amount × expense ratio), the total and the weighted ratio, with the expense ratios of Portfolio Terminal's fees view (the fund's latest annual report as Yahoo Finance lists it). A fact, not a verdict: no other fund is suggested. A line that is not a fund, or whose ratio is not published, is named. Nothing is stored. Use it for "how much do my ETFs cost me a year".
Annotations the server declares
- title: What your funds cost a year
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
tax_loss_harvestComputes, on the lots the user gives (ticker, shares, price, date, account and its type), the losses a sale before December 31 would realize and what they offset, with the engine o…Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Computes, on the lots the user gives (ticker, shares, price, date, account and its type), the losses a sale before December 31 would realize and what they offset, with the engine of Portfolio Terminal's "Before December 31" panel. US resident: FIFO lots per account, short vs long term, this year's realized gains, the year netted as Schedule D nets it (the $3,000 off ordinary income, the carryforward), and the wash-sale rule across every account, IRA and 401(k) included: losses it took this year, windows still open, and the first day the same security can be bought back without one (IRS Publication 550). French resident: weighted average cost across accounts at ECB rates, PEA and crypto left out, and the flat tax those losses erase against this year's net gains (CGI art. 150-0 D, 200 A). Funds on the same index are flagged, never judged "substantially identical". Current prices are fetched unless given in `prices`. Nothing is stored. Use it for "how much tax can my losses save before December 31", "would this be a wash sale".
Annotations the server declares
- title: Tax-loss harvesting before December 31
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
who_holdsWhich of the 54 tracked US ETFs hold a US-listed stock (weight and rank, from each issuer's full holdings file, matched on ISIN), and which famous investors hold it in their latest…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Which of the 54 tracked US ETFs hold a US-listed stock (weight and rank, from each issuer's full holdings file, matched on ISIN), and which famous investors hold it in their latest SEC Form 13F (share of their reported portfolio, rank, quarter). Offline data: fast, no market call. Use it for "which ETFs hold PLTR", "does Buffett own Apple".
Annotations the server declares
- title: Which ETFs and famous investors hold a stock
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
withholding_checkComputes, on the dividends the user gives (a year of dividends, gross, by payer: a ticker such as "NESN.SW" or a country code), the tax each payer's country keeps at source, the tr…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Computes, on the dividends the user gives (a year of dividends, gross, by payer: a ticker such as "NESN.SW" or a country code), the tax each payer's country keeps at source, the treaty rate, and what was withheld above it over 12 months, which only that country refunds on a claim; for a French resident, also the treaty part France credits on form 2047. Same engine as Portfolio Terminal's Income and Pro tabs: statutory rates as of 2026, a US dividend at 15% (W-8BEN on file), European-listed funds paying no withholding. Countries outside its table are named, never guessed. Nothing is stored. Use it for "how much Swiss tax do I lose on Nestlé dividends", "which of my dividends are over-withheld".
Annotations the server declares
- title: Dividend tax withheld abroad
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 2Show 2 read-only tools
analyze_tickerDated key facts and a plain-English chart read for one ticker Portfolio Terminal covers (390 US stocks, 30 ETFs, 17 cryptocurrencies and 4 commodity futures): price and one-year ch…Reads text others writeNo findings
Why it is in this group
- The name "analyze_ticker" says "analyze": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Dated key facts and a plain-English chart read for one ticker Portfolio Terminal covers (390 US stocks, 30 ETFs, 17 cryptocurrencies and 4 commodity futures): price and one-year change, 52-week range, distance from the 200-day average, 30-day volatility with a risk rating, P/E and dividend yield, all-time high and "lowest since", ten years against the S&P 500 (SPY), support and resistance levels, which tracked ETFs and famous investors (13F) hold it, and related research. Use it for "how is NVDA doing", "is TSLA near its high", "what does the AAPL chart say".
Annotations the server declares
- title: Stock, ETF or coin key facts
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
compareFive-year head-to-head of two covered stocks or ETFs from weekly closes adjusted for dividends and splits: total and annualized return, 1-, 3- and 5-year returns, volatility, worst…Reads text others writeNo findings
Why it is in this group
- The name "compare" says "compare": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Five-year head-to-head of two covered stocks or ETFs from weekly closes adjusted for dividends and splits: total and annualized return, 1-, 3- and 5-year returns, volatility, worst drawdown and worst week, correlation, what $10,000 became, plus each one's dividend yield, beta and (for funds) fee. Use it for "SCHD vs VIG", "NVDA vs AMD".
Annotations the server declares
- title: Head-to-head of two stocks or ETFs
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data or outbound.
- Reads private data0
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write6
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out0
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
No check matched anything in these tool definitions. That is not a safety guarantee.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 1.1.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http portfolio-terminal https://portfolio-terminal.com/api/mcpclaude mcp add --transport http portfolio-terminal https://portfolio-terminal.com/api/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__portfolio-terminal__analyze_ticker",
"mcp__portfolio-terminal__compare"
],
"ask": [
"mcp__portfolio-terminal__who_holds",
"mcp__portfolio-terminal__etf_holdings",
"mcp__portfolio-terminal__etf_overlap",
"mcp__portfolio-terminal__dividend_calendar",
"mcp__portfolio-terminal__earnings_calendar",
"mcp__portfolio-terminal__tax_loss_harvest",
"mcp__portfolio-terminal__withholding_check",
"mcp__portfolio-terminal__fund_fees"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as portfolio-terminal. Review it before you use it.
Capability tags behind 6 rules
- mcp__portfolio-terminal__analyze_ticker untrusted-input
- mcp__portfolio-terminal__compare untrusted-input
- mcp__portfolio-terminal__dividend_calendar untrusted-input
- mcp__portfolio-terminal__earnings_calendar untrusted-input
- mcp__portfolio-terminal__tax_loss_harvest untrusted-input
- mcp__portfolio-terminal__fund_fees untrusted-input
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/com.portfolio-terminal/portfolio-terminal/verify?hash=d5f667d0038c0a0479e652dec32a774ea6f502a4268d1663646f4532872ce8bf" | jq -e '.changed == false'Pinned hash d5f667d0038c, from Nov 1, 2026, 13:17 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/com.portfolio-terminal/portfolio-terminal/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/com.portfolio-terminal/portfolio-terminal)Source: MCP Registry. Synced Nov 1, 2026, 13:17 UTC.