InvestJournal is a stock research workspace. This MCP server lets AI assistants (like Claude) query your tracked stocks, daily price history, financial ratios, DCF valuations, watchlists, and personal notes — all scoped to your authenticated account. Read-only by default; opt-in write tools let your assistant create and manage watchlists, save and annotate DCF valuations, write and edit comments, manage price alerts, and ask questions about uploaded company PDFs via Retrieval-Augmented Generation. Every write tool operates exclusively on data you own.
InvestJournal is not yet listed in Claude's built-in connector directory, so it won't appear when you browse the connector list — add it as a custom connector instead (available on every plan; the Free plan allows one). Open claude.ai/settings/connectors (or Settings > Connectors in the Claude Desktop app), click Add custom connector, and paste this URL:
https://mcp.investjournal.io/mcp
Connectors are tied to your Claude account — once added on the web or desktop, InvestJournal also works in the Claude mobile apps.
Add the server with one command:
claude mcp add --scope user --transport http investjournal https://mcp.investjournal.io/mcp
Then, inside Claude Code, run /mcp, select investjournal, and choose Authenticate.
On first connection Claude will open a browser tab to https://mcp.investjournal.io/authorize, which redirects to the InvestJournal login page. After you log in (using either the reviewer test account credentials or your own InvestJournal account), tokens are issued and your tools become available in chat.
Granting write access: connections are read-only by default. On the authorization screen, tick “modify your data” to also grant the stockgrade:write scope — this is what lets the write tools (create/edit watchlists, comments, price alerts, and DCF valuations) run. Leave it unticked to keep the connection read-only. Without the write scope, write tools are refused with a message asking you to reconnect and grant write access.
GET https://mcp.investjournal.io/authorize (PKCE S256 required)POST https://mcp.investjournal.io/tokenGET https://mcp.investjournal.io/.well-known/oauth-authorization-serverGET https://mcp.investjournal.io/.well-known/oauth-protected-resourcehttps://mcp.investjournal.io/sessionsAdmin-only tools (titled …(admin) below) are listed by tools/list only for admin accounts — a regular account's session simply doesn't see them, and they additionally refuse non-admin callers if invoked directly.
| Name | Title | What it does | Read-only | Destructive |
|---|---|---|---|---|
GetStockSummary | Stock Summary | Profile of a stock by ticker — name, ratio count, DCF count. | ✓ | — |
ListStocks | List Stocks | Paginated list of tracked stocks with profile counts. Returns total/hasMore/nextCursor and may be partial — page with cursor. Optional nameOrTickerPrefix and currency filters. | ✓ | — |
SearchStocks | Search Stocks | Substring search by name or ticker. | ✓ | — |
GetPriceHistory | Price History | Daily closing-price history from the database (optional from/to range and daily/weekly/monthly granularity), plus the latest known price and its date. | ✓ | — |
GetLatestPrice | Latest Price | A stock's latest known daily closing price and its date. | ✓ | — |
AddStock | Add Stock (admin) | Admin-only: add a new stock to the tracked universe by its real Yahoo Finance ticker (revives a previously soft-deleted stock with the same ticker). | — | — |
EditStock | Edit Stock (admin) | Admin-only: rename/reticker an existing stock or fix its currency, preserving its price/news/comment/watchlist history. | — | ✓ |
DeleteStock | Delete Stock (admin) | Admin-only: soft-delete a stock so it no longer appears in the app; history is preserved and it can be revived later. | — | ✓ |
ListWatchlists | List Watchlists | The user's watchlists with stock counts. | ✓ | — |
GetWatchlistStocks | Get Watchlist Stocks | All stocks in a named watchlist. | ✓ | — |
GetWatchlistRatioRanking | Rank Watchlist by Ratio | Top N watchlist stocks ranked by a single ratio (ROE, ROA, FCFSales, etc.). | ✓ | — |
GetWatchlistStocksWithLatestRatios | Watchlist with Latest Ratios | All ratios for all watchlist stocks in one call. | ✓ | — |
AddStockToWatchlist | Add Stock to Watchlist | Add a stock to one of the user's watchlists. | — | — |
RemoveStockFromWatchlist | Remove Stock from Watchlist | Remove a stock from one of the user's watchlists. | — | ✓ |
CreateWatchlist | Create Watchlist | Create a new watchlist for the signed-in user. | — | — |
ArchiveWatchlist | Archive Watchlist | Archive (soft-delete) one of the user's watchlists by name. | — | ✓ |
RenameWatchlist | Rename Watchlist | Rename one of the user's watchlists. | — | — |
SetWatchlistFavorite | Set Watchlist Favorite | Mark a watchlist as a favorite or remove the flag. | — | — |
GetStockRatios | Get Stock Ratios | All financial ratios for a stock, plus the user's own custom metrics when they have any (returned separately, never mixed into the sourced ratios). | ✓ | — |
AddMyMetrics | Add My Metrics | Add or update the user's own custom metric for a stock — backlog, store count, anything the standard ratios don't cover. A whole series in one call. | — | — |
GetMyMetrics | Get My Metrics | The user's own custom metrics for a stock, with every period recorded. | ✓ | — |
DeleteMyMetric | Delete My Metric | Delete one of the user's own custom metrics — a single period, or the whole metric. | — | ✓ |
AddFinancialRatio | Add Financial Ratio (admin) | Admin-only: add or update a financial ratio for a stock. | — | ✓ |
ListNews | List News | List news items (press releases), newest first, with optional ticker/date/source filters, free-text search across headline, company name and ticker, and pagination. | ✓ | — |
AddNewsItem | Add News Item (admin) | Admin-only: manually add a news item (press release) to the Latest News feed and, when the ticker matches, a stock's page. Insert-only; duplicate URLs are rejected. | — | — |
EditNewsItem | Edit News Item (admin) | Admin-only: update an existing news item (matched by sourceUrl) — fix a wrong headline, date, source, body, or stock link. | — | ✓ |
DeleteNewsItem | Delete News Item (admin) | Admin-only: soft-delete a news item (matched by sourceUrl) so it no longer appears in the feeds. | — | ✓ |
ReportNewsDigest | Report News Review Digest (admin) | Admin-only: files one GitHub issue for a news-ingestion run — the leftovers a human must finish, and/or the run's own statistics. A clean run with statistics files a closed record; a clean run with neither files nothing. | — | — |
GetDcfValuations | List DCF Valuations | All DCF valuations for a stock with intrinsic values. | ✓ | — |
GetLatestDcf | Latest DCF | Most recent DCF valuation for a stock. | ✓ | — |
CalculateDcf | Calculate DCF | Compute a hypothetical DCF intrinsic value from raw inputs without persisting anything. | ✓ | — |
SaveDcfValuation | Save DCF Valuation | Create and persist a new DCF valuation for a stock (app-standard discount/terminal bands). | — | — |
DeleteDcfValuation | Delete DCF Valuation | Soft-delete one of the user's own DCF valuations by id. | — | ✓ |
SetDcfVerdict | Set DCF Verdict | Set the user's manual verdict (Undervalued / FairlyValued / Overvalued) on a DCF valuation. | — | — |
GetStockComments | Get Comments | The user's notes for a stock (privacy-filtered). | ✓ | — |
SearchComments | Search Comments | Substring search across the user's comments. | ✓ | — |
AddStockComment | Add Comment | Create a public or private comment on a stock. | — | — |
DeleteStockComment | Delete Comment | Delete one of the user's own comments by id. | — | ✓ |
EditStockComment | Edit Comment | Edit (overwrite) the text of one of the user's own comments by id. | — | ✓ |
SetCommentPrivacy | Set Comment Privacy | Make one of the user's own comments private or public by id. | — | — |
GetThesis | Get Thesis | The user's investment thesis for a stock, with revision history. | ✓ | — |
UpsertThesis | Upsert Thesis | Create or update the user's thesis (every save records a revision). | — | ✓ |
ListAlerts | List Alerts | The user's price alerts. | ✓ | — |
CreateAlert | Create Alert | Create a price alert for a stock (requires an existing DCF valuation). | — | — |
UpdateAlert | Update Alert | Update an alert's threshold price and/or expiration date by id. | — | — |
SetAlertEnabled | Set Alert Enabled | Enable or disable one of the user's alerts by id. | — | — |
DeleteAlert | Delete Alert | Permanently delete one of the user's alerts by id. | — | ✓ |
ListDocuments | List Documents | Uploaded PDFs for a stock with processing status. | ✓ | — |
AskDocument | Ask Question on Documents | RAG query on a stock's uploaded PDFs (uses Gemini API credits). | ✓ | — |
WhoAmI | Who Am I | Report which account the session is signed in as (email and user ID) and whether it has admin privileges. | ✓ | — |
LogoutFromMcp | Disconnect | End the session: revoke the user's MCP refresh tokens and invalidate the current access token immediately (rejected on the next request). Restart your MCP client to sign in as a different account. | — | ✓ |
ListStocks)ListStocks is paginated and may return a partial list. It accepts these optional parameters:
| Parameter | Default | Meaning |
|---|---|---|
limit | 50 | Max stocks per page; clamped to the range 1–200. |
cursor | — | Opaque token from the previous response's nextCursor. Omit for the first page; keep calling with it while hasMore is true. |
nameOrTickerPrefix | — | Case-insensitive prefix match on stock name or ticker. |
currency | — | Exact, case-insensitive currency filter (e.g. USD, CAD). |
The response is an object { stocks, total, limit, hasMore, nextCursor } — always check total and hasMore before concluding a stock is absent; it may simply be on a later page.
The server ships four named MCP prompts — they appear as clickable entries in the + menu of claude.ai and Claude Desktop once the connector is added. Each one walks Claude through a multi-tool workflow so you don't have to compose it yourself. (Prompts are available on the remote connector; local stdio mode exposes tools only.)
| Prompt | Title | What it does | Arguments |
|---|---|---|---|
show_me_around | Show me around | Guided tour: checks who you are, looks at your watchlists, and demonstrates one real insight with your own data. | — |
analyze_stock | Analyze a stock end-to-end | Full research brief on one stock: summary, ratios, reverse-DCF vs price, recent news, price history. | ticker |
weekly_portfolio_review | Weekly portfolio review | What changed this week: watchlist ranking, news, alerts, and valuation drift for the most interesting names. | — |
build_first_watchlist | Build my first watchlist | Starts from zero: finds companies you care about and saves them to a new watchlist (needs write access). | — |
The server also ships initialize-time instructions: if your first message is vague ("hi", "what can you do?"), Claude demonstrates with your real data instead of listing tools; a concrete request is simply fulfilled.
These prompts are designed for an Anthropic reviewer using the seeded test account. Each demonstrates a representative tool path.
"Show me a summary of every stock I'm tracking, ordered by my watchlist priority. For my top 3, include the latest DCF intrinsic value and ROE."
Expected behaviour: Claude calls ListWatchlists → GetWatchlistStocks → GetLatestDcf → GetStockRatios, composes a multi-stock summary.
"Add a comment to AAPL: 'Re-reviewed Q3 — services revenue growth holding at 13% y/y, watching for hardware refresh cycle.' Make it private."
Expected behaviour: Claude calls AddStockComment(ticker="AAPL", text="...", isPrivate=true). Per MCP conventions for readOnlyHint: false tools, Claude confirms with the user before invoking.
"For NVDA, what does the latest annual report say about competitive risks from custom silicon?"
Expected behaviour: Claude calls ListDocuments(ticker="NVDA") to find the annual report, then AskDocument(ticker="NVDA", question="...") which performs RAG over the PDF.
Read the full policy at /privacy. Summary: this server only accesses data the authenticated user owns; only the AskDocument tool sends data to a third party (Google Gemini) and only for RAG queries; all OAuth tokens are revocable.
For issues, account requests, or questions: [email protected].