InvestJournal MCP Server

Documentation for AI-assistant integration via the Model Context Protocol


What this connector does

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.

How to connect

Claude (web or desktop)

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.

Claude Code

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.

OAuth flow summary

Tool catalog

Admin-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.

NameTitleWhat it doesRead-onlyDestructive
GetStockSummaryStock SummaryProfile of a stock by ticker — name, ratio count, DCF count.
ListStocksList StocksPaginated list of tracked stocks with profile counts. Returns total/hasMore/nextCursor and may be partial — page with cursor. Optional nameOrTickerPrefix and currency filters.
SearchStocksSearch StocksSubstring search by name or ticker.
GetPriceHistoryPrice HistoryDaily closing-price history from the database (optional from/to range and daily/weekly/monthly granularity), plus the latest known price and its date.
GetLatestPriceLatest PriceA stock's latest known daily closing price and its date.
AddStockAdd 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).
EditStockEdit Stock (admin)Admin-only: rename/reticker an existing stock or fix its currency, preserving its price/news/comment/watchlist history.
DeleteStockDelete 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.
ListWatchlistsList WatchlistsThe user's watchlists with stock counts.
GetWatchlistStocksGet Watchlist StocksAll stocks in a named watchlist.
GetWatchlistRatioRankingRank Watchlist by RatioTop N watchlist stocks ranked by a single ratio (ROE, ROA, FCFSales, etc.).
GetWatchlistStocksWithLatestRatiosWatchlist with Latest RatiosAll ratios for all watchlist stocks in one call.
AddStockToWatchlistAdd Stock to WatchlistAdd a stock to one of the user's watchlists.
RemoveStockFromWatchlistRemove Stock from WatchlistRemove a stock from one of the user's watchlists.
CreateWatchlistCreate WatchlistCreate a new watchlist for the signed-in user.
ArchiveWatchlistArchive WatchlistArchive (soft-delete) one of the user's watchlists by name.
RenameWatchlistRename WatchlistRename one of the user's watchlists.
SetWatchlistFavoriteSet Watchlist FavoriteMark a watchlist as a favorite or remove the flag.
GetStockRatiosGet Stock RatiosAll financial ratios for a stock, plus the user's own custom metrics when they have any (returned separately, never mixed into the sourced ratios).
AddMyMetricsAdd My MetricsAdd 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.
GetMyMetricsGet My MetricsThe user's own custom metrics for a stock, with every period recorded.
DeleteMyMetricDelete My MetricDelete one of the user's own custom metrics — a single period, or the whole metric.
AddFinancialRatioAdd Financial Ratio (admin)Admin-only: add or update a financial ratio for a stock.
ListNewsList NewsList news items (press releases), newest first, with optional ticker/date/source filters, free-text search across headline, company name and ticker, and pagination.
AddNewsItemAdd 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.
EditNewsItemEdit News Item (admin)Admin-only: update an existing news item (matched by sourceUrl) — fix a wrong headline, date, source, body, or stock link.
DeleteNewsItemDelete News Item (admin)Admin-only: soft-delete a news item (matched by sourceUrl) so it no longer appears in the feeds.
ReportNewsDigestReport 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.
GetDcfValuationsList DCF ValuationsAll DCF valuations for a stock with intrinsic values.
GetLatestDcfLatest DCFMost recent DCF valuation for a stock.
CalculateDcfCalculate DCFCompute a hypothetical DCF intrinsic value from raw inputs without persisting anything.
SaveDcfValuationSave DCF ValuationCreate and persist a new DCF valuation for a stock (app-standard discount/terminal bands).
DeleteDcfValuationDelete DCF ValuationSoft-delete one of the user's own DCF valuations by id.
SetDcfVerdictSet DCF VerdictSet the user's manual verdict (Undervalued / FairlyValued / Overvalued) on a DCF valuation.
GetStockCommentsGet CommentsThe user's notes for a stock (privacy-filtered).
SearchCommentsSearch CommentsSubstring search across the user's comments.
AddStockCommentAdd CommentCreate a public or private comment on a stock.
DeleteStockCommentDelete CommentDelete one of the user's own comments by id.
EditStockCommentEdit CommentEdit (overwrite) the text of one of the user's own comments by id.
SetCommentPrivacySet Comment PrivacyMake one of the user's own comments private or public by id.
GetThesisGet ThesisThe user's investment thesis for a stock, with revision history.
UpsertThesisUpsert ThesisCreate or update the user's thesis (every save records a revision).
ListAlertsList AlertsThe user's price alerts.
CreateAlertCreate AlertCreate a price alert for a stock (requires an existing DCF valuation).
UpdateAlertUpdate AlertUpdate an alert's threshold price and/or expiration date by id.
SetAlertEnabledSet Alert EnabledEnable or disable one of the user's alerts by id.
DeleteAlertDelete AlertPermanently delete one of the user's alerts by id.
ListDocumentsList DocumentsUploaded PDFs for a stock with processing status.
AskDocumentAsk Question on DocumentsRAG query on a stock's uploaded PDFs (uses Gemini API credits).
WhoAmIWho Am IReport which account the session is signed in as (email and user ID) and whether it has admin privileges.
LogoutFromMcpDisconnectEnd 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.

Pagination & filters (ListStocks)

ListStocks is paginated and may return a partial list. It accepts these optional parameters:

ParameterDefaultMeaning
limit50Max stocks per page; clamped to the range 1–200.
cursorOpaque token from the previous response's nextCursor. Omit for the first page; keep calling with it while hasMore is true.
nameOrTickerPrefixCase-insensitive prefix match on stock name or ticker.
currencyExact, 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.

Guided prompts

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.)

PromptTitleWhat it doesArguments
show_me_aroundShow me aroundGuided tour: checks who you are, looks at your watchlists, and demonstrates one real insight with your own data.
analyze_stockAnalyze a stock end-to-endFull research brief on one stock: summary, ratios, reverse-DCF vs price, recent news, price history.ticker
weekly_portfolio_reviewWeekly portfolio reviewWhat changed this week: watchlist ranking, news, alerts, and valuation drift for the most interesting names.
build_first_watchlistBuild my first watchlistStarts 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.

Example prompts

These prompts are designed for an Anthropic reviewer using the seeded test account. Each demonstrates a representative tool path.

1. Read flow — multi-tool composition

"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 ListWatchlistsGetWatchlistStocksGetLatestDcfGetStockRatios, composes a multi-stock summary.

2. Write flow with explicit user intent

"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.

3. RAG flow — document Q&A

"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.

Privacy & data handling

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.

Support

For issues, account requests, or questions: [email protected].