InvestJournal 远程 MCP 服务器是什么?
InvestJournal 的远程 MCP 服务器是一个托管的 Model Context Protocol 端点,地址是 https://mcp.investjournal.io/mcp,AI 助手无需在本地安装或运行任何东西即可连接。

基本信息
Your investing research inside Claude: watchlists, financial ratios, reverse-DCF valuations, investment theses, notes, portfolio, earnings calendar and news for the companies you follow. 70 read and write tools; ask what's on your morning desk, rank a watchlist by ROE, log a trade or save a thesis. OAuth sign-in. Free to start.
https://mcp.investjournal.io/mcpclaude mcp add investjournal --transport http https://mcp.investjournal.io/mcpAdd or update YOUR OWN custom metric for a stock — a number the standard ratios don't cover (backlog, store count, bookings, net adds, fleet size). Private to you: no other user ever sees it. Send every period you know in one call. Values are plain numbers ('5 million' is 5000000). There is no unit field: for a percentage or per-unit figure, put that in the metric name, e.g. 'Gross margin (%)' with value 42. Re-sending a period overwrites its value.
Add a task to YOUR OWN Morning Desk checklist ('Your list'), optionally attached to a stock (it then also shows on that stock's page) and/or dated. Plain text only — no tags, priorities or folders by design.
Record a buy or sell. Holdings recompute from the ledger, so this is the only way to change a position — there is no 'set holding' tool by design. To start tracking a portfolio already owned WITHOUT re-keying its history, use type 'Opening' with the shares held and the average cost (it asserts the position as of that date); 'Adjustment' reconciles against a broker statement the same way and supersedes everything earlier for that stock. A sell is validated against the position as of ITS OWN trade date, so a back-dated sell is fine if the shares were held then. Never call the average cost 'ACB' or 'adjusted cost base' — it is the user's own figure, not a tax basis.
Save a NOTE or post a COMMENT on a stock — two different acts: a note is private research only the user sees; a comment is a public post on the stock's page under the user's real name. Defaults to a note — pass isPrivate=false ONLY when the user has explicitly asked to post publicly.
Add a stock to one of the user's watchlists by stock name or ticker and watchlist name
Archive an EMPTY account (wrapper): it leaves the portfolio page and accepts no new writes; its journal history stays readable. Only an account with no open positions and no cash can be archived — a card that can hide money must not be hideable, so a non-empty one is refused and told so rather than moved. A fully exited history is fine; what matters is what it holds NOW. Archiving is not deletion; it is marked destructive because the account disappears from the user's page.
Archive (soft-delete) one of your watchlists by name. Archived watchlists are hidden but not permanently removed.
Ask about the documents (e.g. annual reports) attached to a stock; check list_documents first. Uses Gemini API credits. When turned off it says so: use get_stock_summary and list_news instead.
A hypothetical DCF intrinsic value from raw inputs, without persisting anything. Pair with GetLatestDcf to reuse a stock's saved FCF/cash/debt/shares while varying growthRate, discountRate or perpetualGrowthRate. growthRate is uniform across projected years 1-5. Defaults match the UI: discountRate=0.12, perpetualGrowthRate=0.035.
Check a task off YOUR list. If it has a stock attached and the user's 'checking off writes a journal line' preference is on (the default), this also writes a private note on that stock, as checking it off on the desk does. Ids from list_my_tasks.
Create a new, empty account (wrapper) in the portfolio, e.g. 'My RRSP' holding USD. Positions land in it via add_portfolio_transaction or set_opening_positions by name. Currency can widen to Both later; it can never narrow once used.
A price alert: triggers (and optionally emails you) when the price drops to or below the threshold. Requires an existing DCF valuation for the stock — save one first if needed.
Create a new, empty portfolio — its own accounts, transactions and cash, kept entirely separate from the user's others. Call list_portfolios first: the name must not match an existing one (case-insensitive), archived included. The ACTIVE count is a plan limit — one on the free plan, five on Pro — and the tool is refused at it: an entitlement boundary, not a transient error, so do not retry it or offer a workaround. Archiving a portfolio in the app frees its slot. A SECOND portfolio changes every other portfolio tool: from then on a write that doesn't name a `portfolio` is refused rather than guessed at.
Create an empty watchlist; names are unique per user, ignoring case. Add stocks with add_stock_to_watchlist.
Permanently delete one of YOUR alerts. id from list_alerts. To pause it instead, use set_alert_enabled(false).
Soft-delete one of your own DCF valuations by its ID (UUID).
Delete one of YOUR OWN custom metrics for a stock: give a period to remove just that value, or omit it to remove the whole metric and all its periods.
Delete a task from YOUR list (open or done). Ids from list_my_tasks. The web desk offers a brief undo; over MCP treat this as final.
Remove one ledger row, by the Id from list_portfolio_transactions. Not a local edit: holdings are computed from the whole ledger, so deleting a buy re-averages every later cost for that stock and can change the current position. Confirm which row the user means — read the row back to them first. To correct a position rather than erase what happened, record an Adjustment instead.
Permanently delete one of YOUR notes or comments (isMine). id from get_stock_comments or search_comments.
Hide a company's item from YOUR Morning Desk, like the desk's own buttons: reason 'not_useful' hides it for 90 days, 'snooze' for 7 days. Hides every reason that item currently shows; nothing is deleted and it comes back on its own. The ticker must be on the desk now (see get_morning_desk). Private to you.
Change a task on YOUR list: its text, the attached stock and/or the due date. Every field is optional and independent — send only what changes. To REMOVE the stock or the due date, set clearTicker / clearDue rather than sending an empty value. Ids come from list_my_tasks. Use it to reschedule ('push that to Friday') instead of deleting and re-adding.
Correct a ledger row (a typo'd price, the wrong share count, the wrong date), identified by the Id from list_portfolio_transactions. This REPLACES the whole row, so send every field, including the unchanged ones — an omitted field is not preserved. Holdings recompute afterwards, so editing an early buy re-averages every later cost for that stock. To change what a position IS rather than fix a past event, record an Adjustment instead — it keeps the original history readable.
Replace the text of one of YOUR notes or comments (isMine); its privacy is unchanged (set_comment_privacy). id from get_stock_comments or search_comments.
YOUR most recent DCF valuations for a stock (up to 10, newest first) with intrinsic values and growth rates. Valuations are private per user — never anyone else's; the dcfValuationCount from list_stocks / search_stocks / get_stock_summary is YOUR total for that stock, which can exceed the 10 returned here.
When the companies the user follows report. EVERY row is a date the company itself made public — there are no estimates: a company with no row has simply not announced or reported, the normal case (only ~24% pre-announce, 9% on TSX-V). Never fill that silence with a guess. One row per company and fiscal period: 'Scheduled' = the company announced this date in a press release; 'Reported' = the results release is out (sourceUrl links either). isRefreshDue on a Reported row means InvestJournal's ratios still predate that report — say so before quoting them; numbersEndAt names the newest fiscal year held. Default window: today to +90 days plus anything Reported in the last 14 days. scope: 'watched' (held ∪ watched, the default), 'held', or 'all' (the whole tracked universe; the only scope without a signed-in user).
Get the most recent DCF valuation for a stock with full breakdown
Latest known closing price and its date. From a daily Yahoo Finance fetch, so up to a day old — cite 'date' when freshness matters. For a range use get_price_history.
YOUR Morning Desk, as the app shows it: the items that need you (thesis reviews due, prices in your buy zone, valuations on outdated numbers, earnings ahead), ranked by what ignoring them costs, plus the quiet strip, recently viewed stocks, what's coming up, and a count of your own tasks. Use it for 'what's on my desk?'. Private to you.
YOUR OWN custom metrics for a stock (from add_my_metrics), every period recorded — e.g. to check before correcting or deleting one. User-supplied figures, not the app's sourced financial data.
Daily closing history plus the latest known price, from a daily Yahoo Finance fetch that may be up to a day old — cite 'latestPrice.date' when freshness matters. Default: the last year of daily closes; 'from'/'to' (yyyy-MM-dd) change the range and 'interval' (daily|weekly|monthly) aggregates to the last close of each period. At most 1000 points; beyond that the oldest are dropped and 'truncated' is true.
Get a stock's entries, newest 20: the user's own NOTES (private research) plus every investor's public COMMENTS. isPrivate=true marks a note; isMine marks the user's own, the only ones they can edit or delete. search_comments searches every stock.
All ratios for a stock (ROE, ROA, FCF/Sales, Net Income Margin, Debt/Equity, Diluted Shares). 'ratios' are the app's sourced, canonical figures. 'yourMetrics' — present only when the signed-in user added custom metrics via add_my_metrics — are that user's OWN numbers (backlog, store count, and the like). Keep them apart: never present a user metric as sourced financial data, and never mix it into a comparison of canonical ratios.
A stock's profile: name, ticker, the shared ratio count, YOUR DCF valuation count (valuations are private per user), and metadata (sector, industry, country, exchange, business description, website). Also nextEarnings { status, date, periodLabel } — 'Scheduled' = an announced date not yet reached, 'Reported' = results out in the last 14 days — and numbersEndAt, the newest fiscal period InvestJournal holds ratios for. BOTH ARE ABSENT WHEN UNKNOWN, never placeholders: no nextEarnings means the company has announced nothing (the normal case — only ~24% pre-announce); no numbersEndAt means no dated ratios. When numbersEndAt is OLDER than a Reported nextEarnings, the ratios predate that report — say so before quoting them.
Your investment thesis for a stock (bull case, bear case, key assumptions, catalysts, verdict, price target, review cadence) with its revision history. Per-user: you only ever see your own.
Rank a watchlist's stocks by one ratio and return the top N. ratioType: ROE (ReturnOnEquity), ROA (ReturnOnAssets), FCFSales (FreeCashFlowOnSale), NetIncomeMargin, DebtEquity (LongTermDebtOnEquity), DilutedShares (DilutedWeightedAverageSharesOutstanding), RevenueGrowth (TotalRevenueYoYGrowth), EPSGrowth (DilutedEPSYoYGrowth), CFOGrowth (CashFromOperationsYoYGrowth). For questions like 'top 5 stocks by ROE in my watchlist'. Rows carry nextReportDate (announced date, or null when the company has announced nothing — the normal case; never guess one).
All stocks in a watchlist by name. Rows carry nextReportDate — the date the company ANNOUNCED it will report — or null when it has announced nothing, the normal case (only ~24% pre-announce, 9% on TSX-V). Null is silence, not an error, and must never be filled in with a guess.
All stocks in a watchlist with the latest value of every ratio in one call. Keys: ReturnOnEquity, ReturnOnAssets, FreeCashFlowOnSale, NetIncomeMargin, LongTermDebtOnEquity, DilutedWeightedAverageSharesOutstanding. Prefer it for multi-metric questions ('top 5 by ROE and ROA') and rank from the data.
The portfolio's name and its accounts (wrappers): name, currencies held, and whether archived. Use it to echo the user's own nouns ('in My TFSA…') and to disambiguate before a write. Archived accounts keep their journal history but accept no new writes.
YOUR price alerts, enabled or not (up to 50): id, ticker, threshold, expiry, isEnabled. An alert switches off once it fires. The id feeds update_alert, set_alert_enabled and delete_alert.
List all uploaded documents (PDFs) for a stock with their processing status
What the user actually OWNS: positions with cost basis, unrealized P&L and allocation, grouped by currency, computed from the ledger at average cost — so always in agreement with list_portfolio_transactions. A group's Cash, when present, is the user's asserted balance (set_cash_balance) and is already folded into that group's MarketValue, so summing the Holdings alone undercounts it. A watchlist is what they study; a holding is what they bought. Report figures as of PricesAsOf, and never add the per-currency subtotals together.
YOUR OWN checklist ('Your list'), ONE section of the Morning Desk: open tasks first (with their optional ticker and due date), then recently checked-off ones. Returns each task's id, which the other task tools take. Not the whole desk: for that, use get_morning_desk. Private to you.
List press releases, newest first. PAGINATED, may be PARTIAL: { items, total, limit, hasMore, nextCursor, note } — check 'total' and 'hasMore', and keep paging while 'hasMore' is true via 'cursor'. Filters are optional and combined with AND. Prefer 'ticker' for exactly one stock's news; 'query' is the broader free-text search, matched against the headline, the linked stock's ticker and name, and the release's raw exchange:ticker symbols (so 'BRM.V' and 'Biorem' both find the same stories). 'since'/'until' are inclusive UTC dates — for 'yesterday' set both to that date. Items carry a short excerpt (includeBody=true adds full bodies — use a small limit) and 'kind': 'earnings' when the release put a row on the earnings calendar (a results release, or an announcement of when results are coming), else null. Items not linked to a known stock have a null ticker but still match date/source/query.
The ledger, newest first — every buy, sell, opening position and adjustment. Buy/Sell move shares and cash; Opening and Adjustment are assertions of an absolute position: no cash moved (Total is null) and everything earlier for that stock stops feeding the position. A holding whose history starts at an assertion has NO record before that date — never describe returns or realized P&L as spanning further back. Filters run over the WHOLE ledger, not the last page, so filter rather than page when hunting a row, and read its Id to edit or delete it.
Every portfolio the user has — name, active account and position counts, whether it accepts writes, whether archived. Use it for the exact names to pass as `portfolio` to every other portfolio tool, and to disambiguate a write once the user has 2+. Carries NO monetary figure, on purpose: nothing is FX-converted, portfolios stay separate, and two portfolios' values in one payload are a combined total waiting to be summed. Use list_holdings, named to one portfolio, for its figures.
List tracked stocks (name, ticker, ratioCount, dcfValuationCount), ordered by name. ratioCount is the shared catalog's; dcfValuationCount is YOURS — valuations are private per user, so it is 0 until you have valued that stock. PAGINATED, may be PARTIAL: { stocks, total, limit, hasMore, nextCursor }, NOT the full universe — check 'total' and 'hasMore' before concluding a stock is absent, and keep paging while 'hasMore' is true via 'cursor'. To look up one stock, prefer search_stocks. Rows also carry metadataFieldCount (0-6), to target stocks still missing metadata.
List all watchlists with their stock counts and favorite status
Ends the current MCP session: revokes its refresh tokens AND invalidates the current access token immediately (rejected on the next request). To sign in as a different account, restart your MCP client / clear its cached tokens so it re-runs the login flow.
Remove a stock from one of the user's watchlists by stock name or ticker and watchlist name
Rename an account (wrapper), change the currencies it holds, and/or set how it is taxed — the three facts the app's own account editor changes (e.g. fix a typo from set_opening_positions without touching positions). Found by its current name, case- and article-insensitively. Currency can always WIDEN to Both; narrowing to one is refused while the other is still held (an open position, or cash that is not zero) — a fully exited currency can be dropped, which removes its cash row too.
Rename a portfolio. `portfolio` says WHICH one (by its current name); `name` is the new one. `portfolio` is REQUIRED once the user has 2+ active portfolios: with none named the tool refuses and lists them rather than guessing. Empty `name` is refused; the old name stays.
Rename one of YOUR watchlists; its stocks and settings stay. Refused if the new name is taken.
Set the order of YOUR open tasks: pass every open task id in the order you want — ids you leave out keep their current position. Only VISIBLE under the 'My order' sort; under 'Due first' or 'By ticker' the reply says so rather than letting the change look applied.
Ask the InvestJournal team to add a company that isn't in the app yet, like the app's Feedback dialog. It is filed in the team's private GitHub repository with your account email, so they can tell you once it's added. At most 3 feedback messages or stock requests per day.
Persist a new DCF valuation for a stock using the app's standard bands (midpoint 12% WACC / 3.5% perpetual). Growth is applied uniformly to projected years 1-5.
Filter and rank the WHOLE tracked universe by GICS metadata and the latest ratios — the bulk screen watchlist tools cannot do. PAGINATED, may be PARTIAL: { stocks, total, limit, hasMore, nextCursor, note } — check 'total' and 'hasMore' before concluding nothing else qualifies; page with 'cursor'. Ratio thresholds are DECIMAL FRACTIONS, not percents: pass 0.15 for 15%. Rows carry the four ratio values with each snapshot's fiscal year, plus 'upside' — your own DCF fair value vs the latest price, null when you have no valuation. Read 'upsideBasis' before quoting it: 'reverseDcf' means the valuation was FITTED to a price, so its fair value IS that price and the upside is the price move since — NOT a discount to an independent estimate of worth.
Search by keyword across the user's own notes and everyone's public comments.
Find a tracked company by part of its name or ticker: up to 10 best matches, with price. To page through every stock use list_stocks; to filter by sector or ratios, screen_stocks.
Send feedback about InvestJournal to its team, like the app's Feedback dialog. It is filed in the team's private GitHub repository with your account email, so they can reply. At most 3 feedback messages or stock requests per day.
Pause (false) or re-arm (true) one of YOUR alerts; one that fired stays off until re-armed. id from list_alerts.
Assert the cash balance for ONE currency — the amount held right now. It REPLACES that currency's balance; it is NOT added to the previous figure and is NEVER a deposit/withdrawal ledger entry (no running history, no ledger row — only the latest assertion). Only the named currency is touched. The amount counts toward that currency's card total beside its holdings; call again whenever the true balance changes. OMIT `amount` to STOP TRACKING that currency's cash — the balance is removed. That is different from 0, which asserts 'I hold none of it' and keeps the row. The currency must be one the account holds: USD cash on a CAD-only account is refused, not silently accepted — widen the account first with rename_account.
Convert one of the user's own entries, by its ID (UUID), between a NOTE (private research) and a COMMENT (a public post on the stock's page under their real name). Turning a note into a comment publishes it — confirm before doing so.
Set your verdict on one of your DCF valuations: Undervalued, FairlyValued, Overvalued. Replaces any earlier one. id from get_dcf_valuations or get_latest_dcf.
Start tracking a portfolio the user ALREADY owns without re-keying its history: assert every position AND the cash beside them as of one date, in ONE call — saved all-or-nothing, so a failed call changes nothing and there is never a half-entered portfolio whose P&L reads as complete. Cash belongs in THIS call, not a follow-up set_cash_balance, so it is dated with the positions. There is no record before the as-of date, so returns can never be described as spanning further back. Use once at the start; correct a single position later with an Adjustment via add_portfolio_transaction.
Star (true) or unstar (false) one of YOUR watchlists; several can be favorites.
How many shares of one stock the user held at the END of a given date. Use it before recording a sell — a sell is validated against the position as of its own trade date, so this decides whether a back-dated sell will be accepted. The guard is PER ACCOUNT, and so is this: at 2+ accounts the account is required and the tool refuses rather than summing wrappers into a number no sell can be validated against.
Change one of YOUR alerts' threshold and/or expiry; an omitted field keeps its value. id from list_alerts. To pause it, use set_alert_enabled.
Create or update your thesis for a stock. Every save records a revision snapshot, so nothing is lost. Omitted (null) fields keep their value; pass an empty string to clear a text field or the verdict, 0 to clear the price target or review interval. verdict: Undervalued | FairlyValued | Overvalued. reviewIntervalMonths: 3, 6 or 12 — a periodic 'review your thesis' reminder.
The account this MCP session is authenticated as (email and user ID) and whether it has admin privileges — for 'which account am I signed in with?' or 'is this an admin session?'.
Your investing research, inside Claude. InvestJournal is a stock-research journal for people who pick their own stocks: watchlists, financial ratios, reverse-DCF valuations, a thesis per company with its revision history, a portfolio, an earnings calendar and curated news. This remote MCP server lets Claude read and write your own data in it.
| Area | What Claude can do |
|---|---|
| Morning desk | See what needs your judgment today; snooze or dismiss an item; manage your own task list |
| Watchlists | List, create, rename, archive; add and remove stocks; rank by any ratio |
| Research | Stock summaries, financial ratios, price history, curated news, earnings calendar (announced dates only, never estimates) |
| Valuations | Reverse-DCF: the growth today's price already implies; save valuations and your verdict |
| Thesis & notes | Investment theses with revision history; private notes and public comments; your own custom metrics |
| Portfolio | Accounts (TFSA, RRSP…), transactions, cash, holdings with cost basis — entered by you, never linked to a broker |
| Alerts | Price alerts: create, update, pause, delete |
| Screener | Filter the whole tracked universe by sector, exchange and ratio thresholds |
Covers US and Canadian listings (NYSE, NASDAQ, TSX, TSX-V). Prices update once a day after the close.
Claude (web, desktop, mobile) — Settings → Connectors → Add custom connector → paste https://mcp.investjournal.io/mcp. Works on every Claude plan, including Free. Step-by-step: https://investjournal.io/connect
Claude Code — add to .mcp.json:
{
"mcpServers": {
"investjournal": {
"type": "http",
"url": "https://mcp.investjournal.io/mcp"
}
}
}
Sign in with Google or Apple when prompted. Tick "modify your data" to let Claude write; leave it off for read-only access.
Privacy policy: https://investjournal.io/privacy-policy
Free to start — every tool works on the free plan. Pro (Canada & US) adds your fair-value margin on every holding, up to five portfolios, fair-value alerts and the screener in the app.
Website: https://investjournal.io
Not investment advice. InvestJournal is a research and journaling tool; nothing in it recommends buying or selling a security.
InvestJournal 的远程 MCP 服务器是一个托管的 Model Context Protocol 端点,地址是 https://mcp.investjournal.io/mcp,AI 助手无需在本地安装或运行任何东西即可连接。
把端点 https://mcp.investjournal.io/mcp 添加到任意支持 MCP 的客户端,比如 Claude Code、Cursor 或 VS Code。本页的接入代码块可以一步配置好每个客户端。
需要。InvestJournal 使用 OAuth——第一次连接时,你的 MCP 客户端会打开浏览器窗口登录并授权,之后会复用这个凭证。
InvestJournal 暴露的是 Streamable HTTP 端点,这是远程 MCP 服务器普遍使用、主流客户端都支持的传输方式。
Ideate, create, and deliver with Adobe pro tools
Search and read public data from X/Twitter, Reddit, YouTube, Instagram, TikTok, Facebook, Threads, Bluesky, Trustpilot, Amazon, Google Maps, news, forums and the web. 90+ read-only tools plus ready-made research playbook
Marketing campaign and audience insights from Adobe
Official 42min MCP server: let Claude, ChatGPT, Cursor or any MCP client manage your meeting scheduling. Check availability, find free slots, book, cancel and reschedule meetings, manage recurring series, secret booking
App Store keyword research, rank tracking, competitor analysis and authorized performance data.
评论