Institutional equity research tools for Claude and other MCP clients
The pinegap MCP server exposes 30+ institutional-grade equity research tools directly inside Claude and any MCP-compatible client. Connect once and get access to earnings analysis, KPI tracking, SEC filing extraction, sentiment detection, read-throughs, investment thesis management, and more — all grounded in pinegap's curated financial data and a synthesis layer built on third-party LLM providers (see our MCP Privacy Policy for which providers process tool call data).
An active PineGap account is required. Sign up at pinegap.ai or contact us for enterprise access.
If you use Claude or ChatGPT, you do not need any of the setup below. pinegap is published in both catalogues — as an Anthropic-verified connector in Claude's Connectors Directory, and as a plugin in ChatGPT's Plugin Directory. Search for pinegap, click install, and sign in.
For everything else, pinegap is a remote MCP server. There is nothing to install and no local bridge to run — you give your client the URL https://mcp.pinegap.ai and sign in with your pinegap account. Every tool call then runs as you, with your entitlements.
Authentication is OAuth 2.1 with WorkOS AuthKit. pinegap supports Dynamic Client Registration and Client ID Metadata Documents, so nearly every client registers itself: leave OAuth client ID and secret blank unless a client gives you no other option. Copilot Studio and Microsoft 365 Copilot are the exceptions — their redirect URLs must be registered with us up front (see below).
API keys (pgap_sk_…) remain available as a fallback for clients that cannot do OAuth. They are a shared service credential rather than a per-user login, so prefer OAuth wherever the client supports it. Contact the pinegap team to obtain a key.
Vendor menus move often. Paths below were verified against current vendor documentation; if a label differs slightly in your build, look for the nearest equivalent.
pinegap is an Anthropic-verified connector in the Claude Connectors Directory, so there is no URL to paste. Install it from the directory and Claude handles the rest. Connect once and it works across claude.ai, Claude Desktop, Cowork and mobile.
Install from the directory
On Team plans, members who cannot manage connectors see Request instead of Connect. That sends it to your admins, who approve it from Organization settings›Connectors under Requested by your team.
Team and Enterprise — enabling it for everyone
Using it in a chat
Open the + menu in the composer, choose Connectors, and toggle PineGap on for that conversation. Research can call pinegap tools automatically once the connector is enabled.
Adding it by URL instead
You only need this to authenticate with an API key, or if we have given you a non-standard endpoint. Go to Customize›Connectors, click + → Add custom connector, and enter https://mcp.pinegap.ai. Team and Enterprise Owners use Organization settings›Connectors → Add → Custom → Web. Leave the OAuth client fields blank.
For an API key, set Authentication to None, open Request headers, choose authorization, and enter Bearer pgap_sk_YOUR_KEY. Claude sends the value verbatim, so the word Bearer and the trailing space are required. Request headers are still gated to some organizations.
Two things that catch people out. Claude Free accounts allow only one custom connector, so pinegap has to be the one you keep — installing from the directory avoids that limit entirely. And Claude reaches pinegap from Anthropic's cloud rather than your laptop, so pinegap never belongs in claude_desktop_config.json; that file is only for local servers and is ignored by claude.ai and Cowork.
--scope user to make pinegap available in every project instead of just the current one.claude mcp add --transport http --scope user \ pinegap https://mcp.pinegap.ai
/mcp to complete the pinegap sign-in.claude mcp list.With an API key instead:
claude mcp add --transport http --scope user \ --header "Authorization: Bearer pgap_sk_YOUR_KEY" \ pinegap https://mcp.pinegap.ai
pinegap is published in the ChatGPT Plugin Directory, so you can install it like any other plugin — no developer mode, and no server URL to paste. OpenAI migrated the former App Directory to the Plugin Directory in July 2026; the same catalog serves ChatGPT and Codex.
Install from the Plugin Directory
In managed workspaces an admin controls availability from Workspace settings›Plugins and Workspace settings›Apps. If Connect is greyed out or reads Disabled by admin, ask your workspace admin to enable it. Availability can also depend on your plan and region.
Adding it manually instead
Only needed to authenticate with an API key or to point at a non-standard endpoint. This route requires developer mode, which an admin enables at Workspace settings›Permissions & Roles›Connected Data, and which each authorized user then turns on at Settings›Apps›Advanced Settings. Create the app from Settings›Apps›Create, enter https://mcp.pinegap.ai, set authentication to OAuth, click Scan Tools, then Create. It lands as a draft in Workspace settings›Apps›Drafts for an Admin to publish. Full write-tool access on this path needs Business, Enterprise or Edu; Pro accounts get read and fetch tools only.
Worth knowing either way: pinegap advertises the offline_access scope, so ChatGPT receives a refresh token and the connection will not silently expire. Deep research can call pinegap read tools; agent mode does not use custom apps at all.
This path needs a registration ID issued from the Teams Developer Portal and a matching OAuth client on our side. Email support@pinegap.us before you start so we can register your tenant.
Admin
https://mcp.pinegap.ai.Each user
Every Copilot Studio connector gets its own redirect URL, and it must be registered with pinegap before OAuth will work. Find it under make.powerapps.com›Custom Connectors›Security and send it to support@pinegap.us. We return a client ID and secret.
https://mcp.pinegap.ai. The description matters — the orchestrator uses it to decide when to call pinegap.Authorization, value Bearer pgap_sk_YOUR_KEY.~/.cursor/mcp.json for all projects or .cursor/mcp.json for a single repository.{
"mcpServers": {
"pinegap": {
"type": "http",
"url": "https://mcp.pinegap.ai"
}
}
}To use an API key instead, add a headers object alongside url containing "Authorization": "Bearer pgap_sk_YOUR_KEY". Never commit a key in a project-level .cursor/mcp.json.
Gemini app
https://mcp.pinegap.ai, click Next, and complete the sign-in.Custom apps require Gemini Spark access, a personal Google account, and Keep Activity switched on. They can only be added on the web, though they then work on mobile too.
Gemini Enterprise
https://mcp.pinegap.ai as the MCP Server URL, name it PineGap, and add a description.Gemini CLI
gemini mcp add --transport http --scope user \ pinegap https://mcp.pinegap.ai
Any spec-compliant client works. Most accept a JSON block of this shape:
{
"mcpServers": {
"pinegap": {
"type": "http",
"url": "https://mcp.pinegap.ai"
}
}
}Some clients spell the transport streamable-http rather than http; both refer to the same thing. A legacy SSE endpoint is available at https://mcp.pinegap.ai/sse for clients that cannot do Streamable HTTP, but it should not be your first choice.
To explore the tool surface before wiring up a client, run the MCP Inspector with npx @modelcontextprotocol/inspector, enter https://mcp.pinegap.ai, complete the OAuth login, and run test calls against the raw responses.
Structured data extracted from SEC filings (10-K, 10-Q, DEF-14A) and primer deep-dives.
management-compensation-driversManagement Compensation Driversread-onlyExtracts the performance drivers and explicit weightings that determine executive incentive pay — not the dollar amounts — from the latest proxy filing (falling back to 20-F/Annual Report). Produces a concise markdown summary separating short-term vs long-term incentive drivers for named executive officers, grounded solely in filing text, and can include the prior fiscal year for comparison.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
| includePriorYear | boolean | no | Include prior fiscal year for comparison (default: true) |
Output
ticker, latestYear, priorYear, content (markdown report of short-term vs long-term incentive drivers and weights).
primerPrimer Dataread-onlyRetrieves the latest primer sections for a company — a deep-dive structured overview covering business model, segments, competitive dynamics, and financial framework. By default it returns all available sections; pass a list of section types via sections to scope the response for token-bounded retrieval across multiple calls.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
| sections | string[] | no | Primer section types to return (e.g. BUSINESS_MODEL, RISKS, COMPETITORS); omit for all. |
Output
ticker, data[] { orderingIndex, type, heading, data, stock }, isPrimerGenerating.
quality-of-earningsQuality of Earningsread-onlyScores earnings quality risk across six accounting dimensions using the most recent 10-K or 10-Q (falling back to 20-F/Annual Report), returning a per-flag status and filing-specific evidence for each raised risk. The six dimensions are revenue-recognition policy changes, disproportionate contract-asset growth, rising DSOs / slower collections, changes in significant accounting judgments and assumptions, aggressive cost capitalization, and non-GAAP creep. Each flag carries a prior-period comparison to distinguish new, persistent, and resolved risks.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
Output
ticker, documentType, documentId, year, quarter/half, analysisDate, source, flags[] { flagName, currentQuarterStatus, previousQuarterStatus, analysis }, quarterlyFlags[].
red-flag-financialFinancial Red Flagsread-onlyFlags financial and accounting risks from the latest 10-K/10-Q — including liquidity stress, earnings-quality issues, aggressive accounting or non-GAAP adjustments, control weaknesses, covenant pressure, and balance-sheet impairment triggers.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
Output
scope: 'financial', source, documentType, redFlags[] { flag, severity, evidence, citations[] }.
red-flag-governanceGovernance Red Flagsread-onlySurfaces corporate governance and shareholder-rights red flags from proxy disclosures (DEF-14A) — board independence/oversight issues, problematic pay practices, related-party transactions, weak say-on-pay signals, and anti-shareholder provisions.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
| allowAnnualFallback | boolean | no | Allow annual/20-F fallback when no DEF-14A |
Output
scope: 'governance', source, ticker, documentId, documentType, analysisDate, year, quarter/half, redFlags[] { flagName, currentQuarterStatus, previousQuarterStatus, analysis, flagCategory, flagHeadingName }, quarterlyRedFlags[].
Stock performance attribution powered by earnings context and return data.
performance-attributionPerformance Attributionread-onlyGenerates a portfolio-style attribution paragraph explaining why a stock outperformed or underperformed over a selected period, incorporating earnings transcript context and quantitative return data.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
| period | string | no | Standard period (YTD | 1M | 3M | 6M | 1Y) or custom start/end dates |
Output
ticker, period, return (%), content (attribution paragraph).
Read-only access to market data, earnings analysis, SEC filings, KPIs, and financial metrics.
company-profileCompany Profileread-onlyFetches key company profile fields for a ticker — market cap, currency, 52-week range, IPO date, geography, beta, and average volume from the market data provider.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
Output
found, ticker, symbol, marketCap, currency, range, ipoDate, city, state, country, lastDividend, beta, avgVolume, message.
conference-recapConference Recapread-onlyRetrieves conference and investor-day-style document summaries for the inter-quarter window following a specified earnings period. The window starts on that period's earnings call release date and ends at the next earnings call. Pass generate:true to enqueue summaries for documents in the window that don't have one yet.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
| year | number | no | Fiscal year |
| quarter | number | no | Quarter (1–4) |
| half | number | no | Half (1–2) |
| generate | boolean | no | Enqueue missing summaries (default: false) |
Output
ticker, basePeriod, startDate, endDate, conferenceRecap[] { title, releaseDate, type, summary, citations[] }, investorDayRecap[] { title, releaseDate, executiveSummary, keyDebates[] }, message.
conference-takeawaysConference Takeawaysread-onlyRetrieves short AI-generated takeaways (one paragraph per conference) for investor/analyst conferences that occurred after a specified earnings call. The window opens on the earnings call release date and has no upper bound, so older periods may bleed across multiple subsequent quarters.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
| year | number | no | Fiscal year (defaults to latest) |
| quarter | number | no | Quarter (1–4) |
| half | number | no | Half (1–2) |
| documentId | number | no | Bypass period resolution with a specific earnings call document ID |
| maxResults | number | no | Limit number of takeaways returned |
Output
ticker, period, earningsDocumentId, conferences[] { documentId, releaseDate, title, year, quarter, half, conferenceTakeaway }, message.
earnings-price-reactionsEarnings Day Price Reactionsread-onlyReturns the historical earnings-day stock-price reaction table — 1-day and 5-day post-earnings price moves for recent fiscal periods, ordered most-recent-first. Reaction and surprise values are null when no genuine data exists for a period; nothing is fabricated. found is true only when the ticker resolved and at least one reaction is available.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
Output
found, ticker, reactions[] { quarter, reportedDate, earningsDate, marketStatus, oneDayReactionPct, fiveDayReactionPct, revenueSurprisePct, epsSurprisePct, ebitdaSurprisePct } (null where unavailable), implied, message.
fetch-documentFetch Company Documentread-onlyRetrieves a company document's full text — earnings call transcripts, press releases, 10-K/10-Q, 8-K, and SEC filings (Form 3/4/5/13F). Call either by documentIds (exact stored documents, re-openable from citation IDs) or by ticker + documentTypes with optional periods. A single document returns paginatable content; several return a documents[] array. deliveryMode defaults to content; viewer and download return a URL only (no text).
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| documentIds | number[] | no | Pinegap document IDs; cannot combine with ticker/documentTypes/periods |
| ticker | string | no | Stock ticker (use with documentTypes) |
| documentTypes | string[] | no | One or more document types to fetch |
| periods | object | no | Array of fiscal periods { year, quarter?, half? }; omit for the latest of each type |
| page | number | no | Page for a single document (default: 1) |
| paginate | boolean | no | Single-document paging; false returns full text (default: true) |
| deliveryMode | string | no | content | viewer | download (default: content) |
Output
mode (content | content_batch | viewer_link | download_link), metadata { documentsCount, documents[] }, content, documents[], truncated, pagination, notFound[], failures[], viewer, download, message.
guidanceManagement Guidanceread-onlyAdvanced guidance extraction that captures all forward-looking statements from management across earnings calls — from precise quantitative targets (revenue, EPS, margins) to qualitative directional commentary — for one or more tickers at once. Classifies each item as RAISED, LOWERED, MAINTAINED, or NEW. Pass generate:true to enqueue extraction when none is stored.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| tickers | string[] | yes | Stock tickers to fetch data for |
| year | number | no | Fiscal year (defaults to latest per ticker) |
| quarter | number | no | Quarter (1–4) |
| half | number | no | Half (1–2) |
| generate | boolean | no | Enqueue extraction when none is stored (default: false) |
Output
results[] { ticker, period, guidance[] { metric, value, period, outcome, commentary, verdict, citations[] }, status, message }, message.
key-debatesKey Debatesread-onlyRetrieves the most discussed topics and key debates from earnings calls, for one or more tickers at once — the themes management and analysts focused on, surfaced through frequency analysis and importance weighting. Each debate summary embeds inline [n] citation markers linking to the source text.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| tickers | string[] | yes | Stock tickers to fetch data for |
| year | number | no | Fiscal year (defaults to latest per ticker) |
| quarter | number | no | Quarter (1–4) |
| half | number | no | Half (1–2) |
Output
results[] { ticker, period, keyDebates[] { topic, summary, tag, citations[] { index, documentId, quote, doc_type, doc_date, link } }, renderHints, status, message }, message.
latest-periodLatest Fiscal Periodread-onlyReturns fiscal period information for a ticker. In latest mode (no year supplied) it returns the most recent period for which content is available. In exists mode (year + quarter/half supplied) it confirms whether a document exists for that specific period. Defaults to earnings calls; pass documentType for another type.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
| documentType | string | no | Document type to resolve (defaults to Earnings call; many types supported) |
| year | number | no | Fiscal year to check |
| quarter | number | no | Quarter (1–4) |
| half | number | no | Half (1–2) for semi-annual reporters |
Output
ticker, documentType, mode (latest | exists), exists, period { year, quarter, half, periodString }, document { id, title, releaseDate }, message.
podcastPodcast Intelligenceread-onlyUnified access to investment-focused podcasts — browse podcasts and episodes, fetch transcripts (JSON or text), retrieve AI-extracted equity insights, and scan one or more tickers for mentions across episodes. The mode field selects the operation.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| mode | string | yes | list-podcasts | list-episodes | get-episode | get-transcript | get-insights | ticker-mentions |
| podcastId | number | no | Required for episode/transcript/insight modes |
| episodeId | number | no | Required for get-episode, get-transcript, get-insights |
| ticker | string | no | Single ticker for ticker-mentions |
| tickers | string[] | no | Multiple tickers to scan in one ticker-mentions call |
| startDate | string | no | ISO date; defaults to last 30 days for ticker-mentions |
| endDate | string | no | ISO date (inclusive) |
| transcriptFormat | string | no | json | text (default: json) |
| includeRawAnalysis | boolean | no | Include raw tagged analysis text (default: false) |
Output
mode, podcasts[], episodes[], episode, executiveSummary, fullAnalysis, topics[], insights[], transcriptItems[] or transcriptText, tickerMentions[], metadata, message.
readthroughsRead-Throughsread-onlyReturns quotes from other companies' recent earnings calls and press releases that mention or link to a target ticker. Each read-through includes inferred impact direction and relationship context — useful for building a mosaic across the value chain.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Target ticker |
| lookBackDays | number | no | Days to look back (default: 30) |
| sourceSectors | string[] | no | Filter by source company sector |
| sourceMarkets | string[] | no | Filter by source market |
| sourceMarketCap | string | no | LargeCap | MidCap | SmallCap |
| targetKinds | string[] | no | customer | supplier | competitor | partner |
Output
ticker, filters, count, data[] { readthroughOrder, classification, topic, quote, citations[] }.
risksRisk Factorsread-onlyReturns risk factors from a company's 10-K/10-Q filing. Mode 'new' returns risks classified as NEW or UPDATED in the specified filing. Mode 'active' returns the full active risk set through the resolved filing.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
| mode | string | yes | new | active |
| year | number | no | Fiscal year (defaults to latest) |
| quarter | number | no | Quarter (1–4) |
| documentId | number | no | Specific 10-K/10-Q document ID |
Output
ticker, mode, period, documentId, count, risks[] { title, description, summary, category, severity, status }.
stock-lookupStock Lookupread-onlyRetrieves stock information by ticker symbol, Bloomberg ticker, Nasdaq ticker, or company name. Returns company metadata including ID, name, exchange, country, sector/industry classification, reporting frequency, and external data-provider identifiers. Ticker lookup tries an exact match then suffixed variants (e.g. MND_US); name search is fuzzy. Use it first to verify a ticker before calling other tools.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | no | Exchange ticker (e.g. AAPL) |
| bloombergTicker | string | no | Bloomberg ticker |
| nasdaqTicker | string | no | Nasdaq ticker |
| name | string | no | Company name (fuzzy search) |
Output
found, ticker/bloombergTicker/nasdaqTicker/query (echo of the term used), stock (single exact match) or stocks[] with count (name search / suffix fallback), message.
value-chainValue Chainread-onlyRetrieves the ordered value-chain peer list for a ticker — the related companies (customers, suppliers, competitors, partners) as configured in pinegap for the authenticated user.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
Output
ticker, topologyId, count, members[] { ticker, name, orderingIndex, type, subType, metadata }.
AI-powered analysis generated fresh from earnings transcripts, SEC filings, and financial data. These tools call third-party LLM providers (see the MCP Privacy Policy) and are rate-limited to 10 req/min.
competitive-landscapeCompetitive Landscaperead-onlyGenerates a competitor identification and competitive landscape analysis from the latest 10-K/20-F filings. Covers market position, key differentiators, and competitive dynamics.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
Output
ticker, content (markdown competitive landscape analysis).
executive-biosExecutive Profilesread-onlyGenerates detailed profiles for the C-Suite leadership team — synthesizing proxy statements, 8-K filings, and web research for background, tenure, and prior roles.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
Output
ticker, summary (leadership team overview), data (executive and board profiles).
management-followupManagement Follow-Up Questionsread-onlyFetches management follow-up questions for the latest earnings call, grouped by thematic section (financial performance, operations, strategy, etc.). Useful for preparing for management meetings or building a monitoring framework.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
Output
ticker, documentId, content (markdown follow-up questions grouped by section), year, quarter, half, documentType.
operating-metrics-commentaryOperating Metrics Commentaryread-onlyPulls verbatim management quotes from a single source document — the latest earnings call transcript, or the latest press release as a fallback — organised into 12 operational categories such as volume, pricing, retention, sales efficiency, capital allocation, and forward indicators. Every bullet is a direct excerpt; nothing is paraphrased or generated.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
| year | number | no | Fiscal year |
| quarter | number | no | Quarter |
| half | number | no | Half |
Output
ticker, period, year, quarter, half, content (markdown with 12 bolded section headings of verbatim quotes), documentId, sourceDocumentType.
proxy-reviewProxy Reviewread-onlyGenerates a markdown proxy review covering board oversight and composition, ownership and voting control, executive compensation structure and performance linkage, and notable shareholder proposals. Grounded solely in DEF-14A filing text.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
| allowAnnualFallback | boolean | no | Fall back to 20-F/Annual Report if no DEF-14A (default: false) |
Output
ticker, documentId, documentTypeUsed, content (markdown proxy review).
proxy-votingProxy Voting Mattersread-onlySummarizes the voting matters in a company's latest DEF 14A proxy statement — each proposal and the board's own stated position on it — for research. This is descriptive: it does not recommend how to vote and returns no AI vote recommendation.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker |
Output
ticker, documentId, eventDate, resultJson (per-proposal summary: proposal text, the board's stated position, and any web sources used — no recommended vote).
sentiment-analysisSentiment Analysisread-onlyTracks how management sentiment around specific keywords shifts across consecutive earnings calls, for one or more tickers at once. Compares the current and previous periods to surface changes in tone, emphasis, confidence, and language, with verbatim supporting excerpts. Omit keywords to return each ticker's stored curated keyword set.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| tickers | string[] | yes | Stock tickers to analyze sentiment for |
| keywords | string[] | no | Keywords to track across the tickers; omit to fetch each ticker's curated keyword set |
| year | number | no | Fiscal year |
| quarter | number | no | Quarter |
| half | number | no | Half |
| generate | boolean | no | Generate keywords not yet stored in the background (default: true); set false to only look up stored sentiment |
Output
results[] { ticker, period, status, sentimentByKeyword{} (change, managementConfidence, managementLanguage, changeReason with citations), pendingKeywords[], missingKeywords[], keywordSources }, message.
unusual-disclosureUnusual Disclosureread-onlyDetects unusual, novel, escalated, or suppressed management disclosures by comparing the latest earnings call or press release against prior periods, for one or more tickers at once. An AI pass surfaces disclosures that are newly added, escalated, withdrawn, or downgraded.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| tickers | string[] | yes | Stock tickers to analyze |
| documentTypes | string[] | no | Source document types (Earnings call, Press Release). Omit to analyze whichever is most recent (one row per ticker); provide one or both for a row per ticker per type |
Output
results[] { ticker, status, eventDate, documentType, period, resultJson { new_and_escalated[], withdrawn_and_suppressed[], disclosure_balance_assessment }, message }.
Server diagnostics and connectivity verification.
healthHealth Checkread-onlyVerifies the MCP server is running and its database connection is active. Use to diagnose connectivity issues before making other requests.
Output
status (ok | degraded | error), dbConnected, timestamp, version.
Create and manage saved watchlists of tickers.
watchlist-createCreate WatchlistwriteCreates a new watchlist for the current user with an optional initial set of tickers. When enableNotifications is true, all supported stock-level notifications are turned on for each added ticker.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | yes | Watchlist name (1–255 characters) |
| enableNotifications | boolean | no | Enable all supported stock-level notifications for each added ticker (default: false) |
| tickers | string[] | no | Initial tickers to add |
Output
watchlist { id, name, tickers[] }, created.
watchlist-listList Watchlistsread-onlyReturns all watchlists for the current user. Optionally supply documentTypes to enrich each ticker with the latest release date for the selected document types.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| documentTypes | string[] | no | Optional multi-select list of document types; when provided, each ticker is returned with its latest release date per type |
Output
watchlists[] { id, name, tickers[] }, count. When documentTypes is supplied, each ticker becomes an object with ticker and latestReleaseDates.
watchlist-updateUpdate WatchlistwriteUpdates an existing watchlist's name and/or ticker list for the current user. Supplying tickers replaces the entire existing ticker list.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| watchlistId | number | yes | Watchlist ID from watchlist-list |
| name | string | no | New name for the watchlist (1–255 characters) |
| tickers | string[] | no | New full ticker list (replaces existing) |
Output
watchlist { id, name, tickers[] }, updated.
watchlist-deleteDelete WatchlistwriteDeletes one of the current user's watchlists, removing it and its stocks from all views. The default watchlist and agent-managed watchlists cannot be deleted, and a watchlist that does not exist or belongs to another user returns a not-found error.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
| watchlistId | number | yes | ID of the watchlist to delete |
Output
watchlistId, deleted.
All errors follow a standard envelope: { error: true, code: string, message: string }
| Code | Description |
|---|---|
| VALIDATION_ERROR | One or more input fields failed validation |
| MISSING_REQUIRED_FIELD | A required input field was not provided |
| INVALID_FIELD_VALUE | A field value is outside the allowed range or format |
| CONFLICTING_PARAMETERS | Two supplied parameters are mutually exclusive |
| NOT_FOUND | The requested resource could not be found |
| STOCK_NOT_FOUND | No stock matching the supplied ticker or name was found |
| DOCUMENT_NOT_FOUND | The requested document does not exist in pinegap's database |
| PERIOD_NOT_FOUND | No data exists for the specified fiscal period |
| EXTERNAL_SERVICE_ERROR | Upstream data provider returned an error |
| DATABASE_ERROR | Internal database query failed |
| AI_SERVICE_ERROR | LLM or AI synthesis step failed |
| S3_ERROR | File storage retrieval failed |
| RATE_LIMITED | Request rate limit exceeded — retry after the indicated delay |
| INTERNAL_ERROR | Unexpected server error |
| UNKNOWN_ERROR | An unclassified error occurred |
| Problem | Fix |
|---|---|
| Can't sign in after OAuth redirect | Ensure your account is active on app.pinegap.ai |
401 Unauthorized | Token missing, expired, or malformed — re-authenticate |
403 Forbidden | Account not recognised — contact support@pinegap.us |
RATE_LIMITED error | AI synthesis tools cap at 10 req/min. Wait and retry. |
STOCK_NOT_FOUND for a valid ticker | Try stock-lookup first to verify the exact ticker in pinegap's database |
DOCUMENT_NOT_FOUND | Use latest-period to confirm the period exists before calling document tools |
| Connector added but no tools show up | In ChatGPT the app stays a draft until an Admin publishes it. In Claude, enable the connector for the conversation from the + menu. |
| New pinegap tools missing in ChatGPT | ChatGPT freezes the tool list at publish time — an Admin must click Refresh in Workspace settings › Apps |
| API key rejected in a Claude request header | Claude sends the value verbatim — the header value must be Bearer pgap_sk_…, including the word Bearer and the space |
| Connection fails only on an IP-restricted account | Claude and ChatGPT call pinegap from their own cloud egress ranges, not your device. Contact support to have them allowlisted. |
Questions or access issues? Email support@pinegap.us.