Overview
Dividends works by reading the per-share dividend amounts a US public company reports in its SEC XBRL filings and layering on derived intelligence the raw filings do not carry - year-over-year dividend growth, 3 and 5 year growth rates, average growth and the number of consecutive years the dividend has increased (the classic dividend-grower signal). Data is refreshed continuously from official SEC filings. Dividend yield is intentionally not included because it depends on a live share price.
The tool
Once your client is connected to the VerveContext server, this appears in its tool list as DividendsGroundingData. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.
{
"name": "DividendsGroundingData",
"arguments": {
"ticker": "AAPL"
}
}You do not name the tool yourself; the model picks it. Asking about AAPL in the terms this source covers is enough for it to reach for DividendsGroundingData on its own — naming it explicitly also works, and is the way to force the call.
Connecting
One server URL covers every source in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.
{
"mcpServers": {
"vervecontext": {
"url": "https://api.vervecontext.com/v1/mcp"
}
}
}https://api.vervecontext.com/v1/mcpPer-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.
Arguments
These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.
| Argument | Type | Description |
|---|---|---|
tickerRequired | string | Stock ticker symbol (e.g. AAPL, MSFT, KO) length 1–6 |
periodOptionalPremium | string | Which series to return in the history list: quarterly (default) or annual. |
limitOptionalPremium | integer | Number of periods to return in the history list (1-25). Defaults to 5. range 1–25 |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"ticker": "AAPL",
"cik": "0000320193",
"company": "Apple Inc.",
"currency": "USD",
"paysDividend": true,
"latestDividendPerShare": 0.26,
"latestDividendPeriod": "CY2026Q1",
"latestDividendDate": "2026-03-28",
"count": 5,
"dividends": [
{
"period": "CY2026Q1",
"periodEnd": "2026-03-28",
"perShare": 0.26,
"form": "10-Q"
},
{
"period": "CY2025Q4",
"periodEnd": "2025-12-27",
"perShare": 0.26,
"form": "10-Q"
},
{
"period": "CY2025Q2",
"periodEnd": "2025-06-28",
"perShare": 0.26,
"form": "10-Q"
},
{
"period": "CY2025Q1",
"periodEnd": "2025-03-29",
"perShare": 0.25,
"form": "10-Q"
},
{
"period": "CY2024Q4",
"periodEnd": "2024-12-28",
"perShare": 0.25,
"form": "10-Q"
}
],
"analytics": {
"dividendGrowth1Y": 4.08,
"dividendGrowth3YCagr": 4.26,
"dividendGrowth5YCagr": 5.11,
"consecutiveYearsOfGrowth": 7,
"averageAnnualGrowthRate": 5.98,
"isDividendGrower": true,
"annualHistory": [
{
"period": "CY2018",
"perShare": 0.68
},
{
"period": "CY2019",
"perShare": 0.75
},
{
"period": "CY2020",
"perShare": 0.795
},
{
"period": "CY2021",
"perShare": 0.85
},
{
"period": "CY2022",
"perShare": 0.9
},
{
"period": "CY2023",
"perShare": 0.94
},
{
"period": "CY2024",
"perShare": 0.98
},
{
"period": "CY2025",
"perShare": 1.02
}
]
}
}
}Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
ticker | string | AAPL | Stock ticker symbol for the company |
cik | string | 0000320193 | SEC Central Index Key unique identifier |
company | string | Apple Inc. | Official registered name of the company |
currency | string | USD | Currency of the dividend amounts |
paysDividend | boolean | true | Whether the company reports a common-stock dividend |
latestDividendPerShare | number | 0.26 | Most recent reported dividend per share |
latestDividendPeriod | string | CY2026Q1 | Period of the most recent reported dividend (e.g. CY2025Q4) |
latestDividendDate | string | 2026-03-28 | Period-end date of the most recent reported dividend |
count | number | 5 | Number of periods returned in the history list |
dividends | array[5] | Reported dividend history, most recent first | |
dividends.0.period | string | CY2026Q1 | Reporting period (e.g. CY2025Q4 or CY2025) |
dividends.0.periodEnd | string | 2026-03-28 | Period-end date for the dividend |
dividends.0.perShare | number | 0.26 | Dividend per share reported for the period |
dividends.0.form | string | 10-Q | SEC form the amount was reported on (10-Q, 10-K) |
analytics | object | {…} | Derived dividend-growth summary |
analytics.dividendGrowth1YPremium | number | 4.08 | Year-over-year dividend growth (percent) |
analytics.dividendGrowth3YCagrPremium | number | 4.26 | 3-year dividend growth rate, annualized (percent) |
analytics.dividendGrowth5YCagrPremium | number | 5.11 | 5-year dividend growth rate, annualized (percent) |
analytics.consecutiveYearsOfGrowthPremium | number | 7 | Consecutive years the annual dividend has increased |
analytics.averageAnnualGrowthRatePremium | number | 5.98 | Average year-over-year dividend growth across the series (percent) |
analytics.isDividendGrowerPremium | boolean | true | Whether the latest annual dividend rose versus the prior year |
analytics.annualHistoryPremium | array[8] | Full-year declared dividend per share by year | |
analytics.annualHistory.0.periodPremium | string | CY2018 | |
analytics.annualHistory.0.perSharePremium | number | 0.68 |
Why ground on it
A model can produce something that looks like this answer from its training data, and be confidently out of date or simply wrong. This source returns the current value in a shape you can check, which is the difference between an answer you can cite and one you have to hedge.
Point an evaluation at cik: it is the field most worth pinning a claim to, and it is either present and current or absent — never plausibly invented.
Failure modes
Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.
| Status | What it means |
|---|---|
400 / 422 | The arguments did not validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Blocked by a key restriction or an IP allow-list. Never a bad identity. |
404 | This source is not part of VerveContext. Check the catalog. |
429 | Out of credits, or a brief rate limit. The message tells them apart. |
A call costs 1 credit each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Other ways to use Dividends Grounding Data
Set up Dividends Grounding Data on VerveContext, or reach the same source a different way. Your VerveContext account and credits work on all of them — one key, one balance.
Related
More in Finance: