Quartr Pro MCP
Access financial data, company profiles, earnings events, and documents through the Model Context Protocol.
Getting started#
Connect to the Quartr Pro MCP server from any MCP-compatible client. A Quartr Pro subscription is required. Student plans are not eligible.
The MCP server is for individual subscribers doing their own research workflows. If you are building a product or integration on top of Quartr data, use the Quartr Public API instead — it is designed for teams and programmatic access.
Anthropic Marketplace#
Search for Quartr in the Anthropic Marketplace to install the integration directly.
ChatGPT App Store#
Search for Quartr in the ChatGPT App Store to install the integration directly.
Microsoft 365 Copilot#
Quartr is available in Microsoft 365 Copilot in two ways. Both ask you to sign in with your Quartr account on first use, and both are controlled by your Microsoft 365 admin.
Quartr agent#
A dedicated agent you open or @-mention for Quartr research.
- Install Quartr from the Microsoft Marketplace, or open Agents → Get agents in Microsoft 365 Copilot or Teams and search for Quartr.
- Admins: allow the Quartr app in the Teams admin center under Teams apps → Manage apps.
Quartr connector#
A data source Copilot uses in its regular answers, without opening the agent. Works in Copilot Chat, Researcher, Copilot in Excel, and Copilot Cowork.
- Copilot Chat: Settings → Sources, then Connect on Quartr.
- Researcher: the Sources menu.
- Cowork: Sources & Skills → Plugins.
- Admins: enable Quartr in the Microsoft 365 admin center under Copilot connectors → Your connections.
Perplexity#
In Perplexity, go to Settings → Connectors → Add connector, select Advanced, and add the server URL:
https://mcp.quartr.com/mcp
Claude Desktop#
Add the following to your Claude Desktop configuration:
{
"mcpServers": {
"quartr": {
"type": "streamable-http",
"url": "https://mcp.quartr.com/mcp"
}
}
}
Claude Code#
Run the following command to add the Quartr Pro MCP server:
claude mcp add --transport http quartr https://mcp.quartr.com/mcp --scope user
Then sign in with your Quartr account:
claude mcp login quartr
Alternatively, start claude, run /mcp,
select quartr, and choose
Authenticate.
Codex#
Run the following command to add the Quartr Pro MCP server:
codex mcp add --transport http quartr https://mcp.quartr.com/mcp
Then sign in with your Quartr account:
codex mcp login quartr
Inside a Codex session, /mcp shows whether the server is
connected and authenticated.
Other MCP clients#
Any MCP client that supports the Streamable HTTP transport can connect using:
https://mcp.quartr.com/mcp
Configure this URL as an HTTP MCP server in your client of choice. OAuth authentication is handled automatically on first connection. If your client asks for connection details, use:
| Server URL | https://mcp.quartr.com/mcp |
| Transport type | Streamable HTTP (also listed as “Streaming HTTP” or “HTTP”), with JSON responses |
| Sessions | Stateless — no session ID required |
| Authentication | OAuth 2.0 with PKCE and client ID metadata documents or dynamic client registration — no manual API key or token |
Authentication#
The server uses OAuth 2.0 with PKCE. On first connection, your MCP client will:
- Identify itself with a client ID metadata document, or register as an OAuth client (dynamic client registration)
- Redirect you to authorize via your Quartr account
- Receive tokens scoped to
mcp:tools
Tokens are automatically refreshed. All requests require a valid
Bearer token.
Clients can revoke a token at /oauth/revoke (RFC 7009).
Revoking a refresh token also revokes its access token.
To connect without write access, tick Read-only access
on the consent screen, or have your client request the
mcp:read scope. Read-only connections only see the tools
marked Read-only below, so the AI can't create, change, or delete
watchlists, keywords, saved items, workspaces, or search filters.
Rate limits#
Requests are rate-limited per user, at two levels:
| Scope | Limit |
|---|---|
| Per tool | 20–100 requests per minute, shown on each tool below |
| All tools combined | 100 requests per minute |
| 2,250 requests per hour | |
| 8,500 requests per day |
If you exceed a combined limit, you will receive a 429
response with a Retry-After header indicating when to
retry. If you exceed a per-tool limit, the tool call returns an error
result with error: "rate_limited" and
retryAfterSeconds.
Rejected requests do not count toward the hourly or daily limits, so a brief burst clears within a minute rather than triggering a longer lockout.
Users#
get_current_user#
Get information about the currently signed-in user, including name, email, and subscription. Available regardless of subscription status.
No parameters.
Response fields
id
number
required
url
string
required
email
string
required
fullName
string | null
required
firstName
string | null
required
lastName
string | null
required
customer
object | null
required
customerId
number
required
customerName
string | null
required
customerType
string | null
required
subscription
object | null
required
subscriptionType
string
required
subscriptionStatus
string
required
subscriptionStart
string | null
required
subscriptionEnd
string | null
required
Companies#
search_companies#
Search for companies by name, ticker symbol, CIQ ID, FIGI, or ISIN. Results are paginated (default 5 per page). Use page/perPage params to navigate.
query
string
required
page
integer
perPage
integer
Response fields
query
string
required
totalCount
number
required
page
number
required
perPage
number
required
totalPages
number
required
matches
object[]
required
id
number
required
url
string
required
ticker
string
required
name
string
required
country
string
required
gics
string | null
required
status
string
required
get_company#
Get a company's full profile
companyId
number
required
Response fields
id
number
required
url
string
required
name
string
required
ticker
string
required
country
string
required
gics
string | null
required
status
string | null
required
statusUpdatedAt
string | null
required
acquiredBy
string | null
required
acquiredById
number | null
required
marketCap
object[]
required
currency
string
required
value
number
required
list_companies#
List companies with optional filters. Results are paginated (default 20 per page). Use page/perPage params to navigate.
gics
string[]
countries
string[]
status
enum[]
marketCaps
enum[]
page
integer
perPage
integer
Response fields
totalCount
number
required
page
number
required
perPage
number
required
totalPages
number
required
companies
object[]
required
id
number
required
url
string
required
ticker
string
required
name
string
required
country
string
required
gics
string | null
required
status
string
required
Events#
list_events#
List events for a company or watchlist. At least one of companyId or watchlistId is required; if both are passed, returns events for either.
companyId
number
watchlistId
number
eventTypes
enum[]
limit
number
startDate
string
endDate
string
order
enum
after
string
expand
enum[] | null
required
Response fields
events
object[]
required
id
number
required
url
string
required
title
string
required
date
string
required
fiscalYear
string | null
required
language
string | null
required
upcoming
boolean
required
eventType
string | null
required
parentEventType
string | null
required
expectedContent
object | null
contentDates
object[]
company
object
required
documents
object[]
transcript
object
pagination
object
required
hasNextPage
boolean
required
endCursor
string | null
required
get_event#
Get details for a specific event
eventId
number
required
Response fields
id
number
required
url
string
required
title
string
required
date
string
required
fiscalYear
string | null
required
language
string | null
required
upcoming
boolean
required
eventType
string | null
required
parentEventType
string | null
required
expectedContent
object | null
transcript
boolean
required
report
boolean
required
slides
boolean
required
audio
boolean
required
contentDates
object[]
date
string | null
required
dateLabel
string | null
required
contentType
string | null
required
contentStatus
string | null
required
company
object
required
id
number
required
name
string
required
ticker
string | null
required
country
string | null
required
documents
object[]
id
number
required
url
string
required
documentType
string | null
required
parentDocumentType
string | null
required
transcript
object
available
boolean
required
isLive
boolean
required
list_event_types#
List all event types
No parameters.
Response fields
eventTypes
object[]
required
id
number
required
name
string | null
required
parentId
number | null
required
category
string | null
required
url
string
required
Conferences#
list_conferences#
List investor / industry conferences. Conferences group related events from multiple companies (e.g. JPMorgan Healthcare Conference, Citi Tech Conference). Supports filtering by date range, organizer company, and title search. Sorted by start date (newest first). Use get_conference to fetch a conference's events.
startDate
string | null
endDate
string | null
organizerCompanyId
number | null
query
string | null
watchlistId
number | null
limit
number | null
after
string | null
Response fields
conferences
object[]
required
id
number
required
url
string
required
title
string
required
startDate
string
required
endDate
string
required
organizer
object | null
required
numberOfEvents
number
required
pagination
object
required
hasNextPage
boolean
required
endCursor
string | null
required
get_conference#
Get a specific conference by id (from list_conferences): its events — the companies that presented, their dates, and one-line summaries — plus title, dates, type, and total event count. Use this to answer who presented at or what happened at a named conference. Returns up to 25 events per call; raise limit (max 100) or pass pagination.endCursor as after to fetch more.
conferenceId
number
required
watchlistId
number
limit
number
after
string
Response fields
id
number
required
title
string
required
startDate
string
required
endDate
string
required
type
string
required
numberOfEvents
number
required
events
object[]
required
id
number
required
url
string
required
title
string
required
date
string
required
summary
string | null
required
company
object
required
pagination
object
required
hasNextPage
boolean
required
endCursor
string | null
required
Documents#
list_documents#
List documents for a company
companyId
number
required
documentTypes
enum[]
startDate
string
endDate
string
limit
number
after
string
Response fields
companyId
number
required
documents
object[]
required
id
number
required
url
string
required
title
string
required
documentType
string
required
filingType
string | null
required
filingDate
string | null
required
eventDate
string
required
language
string | null
required
pageCount
number | null
required
eventId
number | null
required
pagination
object
required
hasNextPage
boolean
required
endCursor
string | null
required
read_document#
Read a slide deck or report document by `documentId`. Use `read_transcript` for transcripts. `structuredContent.pages[]` contains each page with its `text` and a deep-link `url`. Long documents are returned in chunks — when `nextPage` is set, call again with `startPage: nextPage` to continue.
documentId
number
required
startPage
number
maxPages
number
Response fields
documentId
number
required
url
string
required
documentType
string | null
required
companyId
number | null
required
eventId
number | null
required
eventTitle
string | null
required
companyName
string | null
required
totalPages
number
required
returnedPages
number
required
nextPage
number | null
required
sourcePdfUrl
string | null
pages
object[]
required
documentDataId
number
required
pageNumber
number
required
url
string
required
text
string
read_transcript#
Read the transcript for an event. Picks the best available variant automatically (in-house, raw, or live). Pass `eventId`, or `documentId` for a transcript document (resolved to its event, best variant served). Use `section: "qna"` for the Q&A section only. To find a specific statement, figure or guidance, pass `query` to get only the matching paragraphs. Each paragraph has a timestamped deep-link `url`.
eventId
number
documentId
number
section
enum | null
fromTimestamp
number | null
query
string
Response fields
eventId
number
required
companyId
number
required
isLive
boolean
required
lastTimestamp
number | null
nextFromTimestamp
number | null
paragraphs
object[]
required
paragraphId
number | null
required
start
number
required
end
number
required
text
string
required
speakerName
string
speakerRole
string
url
string
required
search_documents#
Full-text search across transcripts, slides, and reports
query
string
required
documentTypes
enum[]
required
limit
number
startDate
string
endDate
string
filingTypes
enum[]
filter
string
Response fields
totalCount
number
required
count
number
required
hits
object[]
required
documentType
string
required
url
string
required
companyName
string
required
companyId
number
required
eventId
number
required
eventTitle
string
required
documentId
number
required
text
string | null
required
pageNumber
number
targetTime
number
speakerName
string
speakerRole
string
failedQueries
string[]
Summaries#
get_document_summary#
Get a Quartr summary of a document (transcript, report, or slides). `summary` is `null` when no summary exists for the document.
documentId
number
required
Response fields
summary
string | null
required
url
string
required
companyId
number | null
required
get_event_summary#
Get a Quartr summary of an event, covering all attached documents. `summary` is `null` when no summary exists for the event.
eventId
number
required
Response fields
summary
string | null
required
url
string
required
companyId
number | null
required
Financials#
get_financials#
Get a company's reported financial figures — revenue, margins, EPS, net income, cash flow — as standardized income statement, balance sheet, and cash flow values, newest period first. Prefer this over transcript or summary tools for any numeric or financial-figure question: the values are standardized and sourced from the company's filing, and each period links to its report on Quartr (`reportUrl`). Quarterly and half-year cash flow values are as filed and are often year-to-date (a US 10-Q's Q3 cash flow covers nine months), so confirm the period in the report before treating one as a single quarter. Pass `metrics` to return only the line items you need.
companyId
number
required
startDate
string
endDate
string
periodType
enum
financialType
enum
metrics
enum[]
includeNullValues
boolean
includeReferenceUrls
boolean
Response fields
financials
object[]
required
eventId
number
required
eventUrl
string
required
eventTitle
string
required
eventDate
string
required
currency
string
required
financialType
enum
required
reportUrl
string | null
required
data
object
required
unmatchedMetrics
string[]
Reference#
list_gics#
List GICS classification hierarchy
No parameters.
Response fields
classifications
object[]
required
id
number
required
parentId
number | null
required
name
string
required
code
string | null
required
level
number | null
required
url
string
required
Watchlists#
list_watchlists#
List the user's watchlists
No parameters.
Response fields
watchlists
object[]
required
id
number
required
name
string
required
companyCount
number
required
updatedAt
string
required
url
string
required
get_watchlist#
Get a watchlist with its companies
watchlistId
number
required
Response fields
id
number
required
name
string
required
companies
object[]
required
id
number
required
name
string
required
ticker
string
required
country
string | null
required
url
string
required
create_watchlist#
Create a new watchlist
name
string
required
companyIds
number[]
Response fields
id
number
required
name
string
required
url
string
required
rename_watchlist#
Rename a watchlist
watchlistId
number
required
name
string
required
Response fields
watchlistId
number
required
name
string
required
url
string
required
delete_watchlist#
Delete a watchlist
watchlistId
number
required
Response fields
deleted
boolean
required
watchlistId
number
required
watchlistName
string
required
url
string
required
add_to_watchlist#
Add companies to a watchlist
watchlistId
number
required
companyIds
number[]
required
Response fields
watchlistId
number
required
watchlistName
string
required
addedCompanyIds
number[]
required
url
string
required
remove_from_watchlist#
Remove companies from a watchlist
watchlistId
number
required
companyIds
number[]
required
Response fields
watchlistId
number
required
watchlistName
string
required
removedCompanyIds
number[]
required
url
string
required
Keywords#
list_keywords#
List the user's keyword alerts
No parameters.
Response fields
keywords
object[]
required
id
number
required
name
string
required
companySetting
enum
required
watchlists
object[]
required
companies
object[]
required
eventTypeIds
number[]
required
documentTypes
enum[]
required
countries
string[]
required
gics
string[]
required
marketCapCategories
string[]
required
monitoring
string
required
url
string
required
list_keyword_matches#
List what the user's keyword alerts matched, newest first. Each match is one document or live call. Matches are pruned weekly to the latest 100 per user, so a missing match does not mean the keyword was never mentioned.
keywordId
number
companyId
number
limit
integer
after
string
Response fields
matches
object[]
required
keyword
string
required
matchCount
number
required
description
string | null
required
matchedAt
string
required
company
object
required
event
object
required
document
object | null
required
url
string
required
pagination
object
required
hasNextPage
boolean
required
endCursor
string | null
required
create_keyword#
Create a keyword alert. Supports scoping to all companies, followed companies, specific watchlists, specific companies, or followed-plus-watchlists, optionally narrowed by country, industry, or market cap.
name
string
required
companySetting
enum
required
watchlistIds
number[]
companyIds
number[]
eventTypeIds
number[]
documentTypes
enum[]
countries
string[]
gics
string[]
marketCapCategories
enum[]
Response fields
id
number
required
name
string
required
companySetting
enum
required
watchlists
object[]
required
id
number
required
name
string
required
companies
object[]
required
id
number
required
name
string
required
eventTypeIds
number[]
required
documentTypes
enum[]
required
countries
string[]
required
gics
string[]
required
marketCapCategories
string[]
required
monitoring
string
required
url
string
required
update_keyword#
Update a keyword alert. Supports scoping to all companies, followed companies, specific watchlists, specific companies, or followed-plus-watchlists, optionally narrowed by country, industry, or market cap. Replaces the company scope, event types, and document types, so re-supply those to keep them (list_keywords returns them). Omitted countries, gics, and marketCapCategories keep their current values; pass an empty array to clear one.
keywordId
number
required
name
string
required
companySetting
enum
required
watchlistIds
number[]
companyIds
number[]
eventTypeIds
number[]
documentTypes
enum[]
countries
string[]
gics
string[]
marketCapCategories
enum[]
Response fields
id
number
required
name
string
required
companySetting
enum
required
watchlists
object[]
required
id
number
required
name
string
required
companies
object[]
required
id
number
required
name
string
required
eventTypeIds
number[]
required
documentTypes
enum[]
required
countries
string[]
required
gics
string[]
required
marketCapCategories
string[]
required
monitoring
string
required
url
string
required
delete_keyword#
Delete a keyword alert
keywordId
number
required
Response fields
deleted
boolean
required
keywordId
number
required
keywordName
string
required
url
string
required
Saved#
list_saved_items#
List user's saved items (transcript paragraphs, report pages, etc). Newest first. When the user asks about their own saved items, use visibility private; null also returns teammates' items from team folders. In text, <mark> wraps the words the user highlighted.
folderId
number | null
type
enum | null
visibility
enum | null
companyIds
number[] | null
eventTypeIds
number[] | null
limit
number | null
after
string | null
Response fields
items
object[]
required
id
number
required
type
enum
required
url
string
required
savedAt
string
required
savedBy
string | null
required
folder
object | null
required
company
object
required
event
object
required
documentId
number | null
required
documentDataId
number
page
number
startTime
number
speaker
string | null
text
string | null
required
pagination
object
required
totalCount
number | null
required
hasNextPage
boolean
required
endCursor
string | null
required
save_item#
Save a transcript paragraph or a slide/report page to the user's saved items. Read the source with read_transcript or read_document first; search results don't carry the ids.
item
object
required
type
enum
required
paragraphId
number
required
startTime
number
required
type
enum
required
documentDataId
number
required
folderId
number | null
Response fields
saved
boolean
required
savedItemId
number
required
name
string
required
url
string
required
remove_saved_item#
Remove one item from the user's saved items. Only their own items, not a teammate's.
savedItemId
number
required
Response fields
removed
boolean
required
savedItemId
number
required
name
string
required
url
string
required
move_saved_items#
Move saved items into or out of a folder. Only their own items, not a teammate's.
savedItemIds
number[]
required
targetFolderId
number | null
required
Response fields
moved
number
required
targetFolderId
number | null
required
name
string
required
url
string
required
list_folders#
List the folders in the user's saved items
No parameters.
Response fields
folders
object[]
required
id
number
required
name
string
required
visibility
string
required
itemCount
number
required
url
string
required
create_folder#
Create a folder in the user's saved items
name
string
required
visibility
enum
Response fields
id
number
required
name
string
required
visibility
string
required
url
string
required
rename_folder#
Rename a folder in the user's saved items
folderId
number
required
name
string
required
Response fields
folderId
number
required
name
string
required
url
string
required
delete_folder#
Delete a folder in the user's saved items
folderId
number
required
Response fields
deleted
boolean
required
folderId
number
required
name
string
required
url
string
required
Workspaces#
list_workspaces#
List the user's workspaces
query
string
visibility
enum
Response fields
workspaces
object[]
required
id
number
required
name
string
required
visibility
string
required
updatedAt
string
required
url
string
required
read_workspace#
Read a workspace's properties and content
workspaceId
number
required
Response fields
id
number
required
name
string
required
visibility
string
required
updatedAt
string
required
taggedCount
number
required
url
string
required
content
string
required
write_workspace#
Edit a workspace document body from Markdown, either appending content to the end or overwriting it entirely (controlled by mode). The edit lands live for any connected user. A snapshot of the prior state is automatically taken so the user can revert via the workspace's version history.
workspaceId
number
required
mode
enum
required
markdown
string
required
Response fields
workspaceId
number
required
mode
enum
required
childrenApplied
number
required
snapshotInserted
boolean
required
workspaceName
string
required
url
string
required
create_workspace#
Create a new workspace
name
string
required
visibility
enum
Response fields
id
number
required
name
string
required
visibility
string
required
url
string
required
delete_workspace#
Delete a workspace
workspaceId
number
required
Response fields
deleted
boolean
required
workspaceId
number
required
workspaceName
string
required
url
string
required
tag_company_to_workspace#
Tag a company to a workspace
workspaceId
number
required
companyId
number
required
Response fields
workspaceId
number
required
companyId
number
required
tagId
number
required
workspaceName
string
required
url
string
required
untag_company_from_workspace#
Remove a company tag from a workspace
workspaceId
number
required
tagId
number
required
Response fields
workspaceId
number
required
tagId
number
required
removed
boolean
required
workspaceName
string
required
url
string
required
Search filters#
list_search_filters#
List the user's saved search filters
No parameters.
Response fields
filters
object[]
required
id
number
required
name
string
required
category
string | null
required
companyCount
number
required
countryCount
number
required
url
string
required
create_search_filter#
Create a saved search filter
name
string
required
gics
string[]
countries
string[]
eventTypes
string[]
companyIds
number[]
marketCapCategories
enum[]
Response fields
id
number
required
name
string
required
companyCount
number
required
countryCount
number
required
url
string
required
delete_search_filter#
Delete a saved search filter
filterId
number
required
Response fields
deleted
boolean
required
filterId
number
required
filterName
string
required
url
string
required