What is the Parqet MCP?
The Parqet MCP server is a remote Model Context Protocol server that lets AI agents and other MCP-compatible clients access your Parqet portfolio data. It acts as a bridge between your Parqet account and AI, so you can ask questions about your holdings, performance, transactions, and dividends in natural language.
The server is hosted at https://mcp.parqet.com and uses OAuth 2.0 via Parqet Connect for authentication. All tools are read-only: the MCP server cannot modify your portfolio data.
Key features
- Portfolio overview: list all your portfolios with names, currencies, and connected brokers
- Holdings & valuation: see current positions, market values, weights, and total portfolio worth
- Performance metrics: get XIRR, TTWROR, realized/unrealized gains, dividends, fees, taxes, and net allocations (net exposure)
- Transaction history: browse buy/sell/dividend/transfer activities with filtering and pagination
- Multi-portfolio aggregation: query performance across multiple portfolios at once
Authentication
The Parqet MCP server uses OAuth 2.0 authorization code flow via Parqet Connect. It implements RFC 9728 (OAuth Protected Resource Metadata):
- MCP Server (
mcp.parqet.com) = issues and validates tokens, enforces bearer auth and MCP session ownership - ChatGPT / Claude / other MCP clients = obtains and uses tokens
When you connect through an MCP client, you'll be redirected to Parqet to authorize access. The MCP server then uses your access token to fetch data from the Parqet Connect API on your behalf.
Discovery endpoints:
| Endpoint | URL |
|---|---|
| MCP Server Information | https://mcp.parqet.com/.well-known/mcp-server |
| Protected Resource Metadata | https://mcp.parqet.com/.well-known/oauth-protected-resource |
| OAuth Authorization Server | https://mcp.parqet.com/.well-known/oauth-authorization-server |
| Health Check | https://mcp.parqet.com/health |
Supported scopes: portfolio:read
Available tools
All tools require authentication and are read-only (readOnlyHint: true, destructiveHint: false, openWorldHint: false). Call parqet_get_user first to discover portfolio IDs.
parqet_get_user
Returns the authenticated user's info and their accessible portfolios. Use the portfolio IDs from the response for all other tools.
Parameters: none
Returns: userId, state, permissions[] (each with resourceId and access level)
parqet_list_portfolios
Lists all portfolios with metadata (name, currency, creation date, connected brokers) in a single call.
Parameters: none
Returns: items[] with id, name, currency, createdAt, distinctBrokers
parqet_get_portfolio
Gets metadata for a single portfolio by ID.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
portfolioId | string | yes | Portfolio ID from parqet_get_user |
Returns: id, name, currency, createdAt
parqet_get_activities
Retrieves transactions (buys, sells, dividends, transfers, deposits, withdrawals, fees) for a portfolio. Results are paginated.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
portfolioId | string | yes | Portfolio ID |
activityType | string | string | no | Filter by type: buy, sell, dividend, interest, transfer_in, transfer_out, fees_taxes, deposit, withdrawal |
assetType | string | string | no | Filter by holding asset type: cash, security, crypto, commodity, custom, real_estate |
holdingId | string | string | no | Filter by one or more holding IDs |
limit | number | no | Page size, 10–500 (default: 100) |
cursor | string | no | Pagination cursor from previous response |
Returns: activities[] (each with type, nested asset object discriminated by assetIdentifierType, holdingId, holdingAssetType, shares, price, amount, amountNet, currency, datetime, tax, fee, broker; sell and transfer_out also include realizedGains, realizedGainsNet, avgHoldingPeriod, buyAmountNet), cursor
parqet_get_performance
Returns portfolio value, returns, gains, dividends, holdings, net allocations, and other performance metrics. This is the primary tool for most portfolio questions.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
portfolioIds | string | yes | One or more portfolio IDs (max 25) |
intervalType | string | no | "relative" for preset ranges, "absolute" for custom date range. Defaults to relative "max" if omitted |
intervalValue | string | no | Preset range (only for intervalType: "relative"): 1d, 1w, mtd, 1m, 3m, 6m, 1y, ytd, 3y, 5y, 10y, max |
intervalStart | string | no | ISO 8601 datetime for interval start (only for intervalType: "absolute") |
intervalEnd | string | no | ISO 8601 datetime for interval end (only for intervalType: "absolute", defaults to now) |
Returns:
holdings[]— current positions withasset(name, ISIN/symbol, type),position(shares, purchasePrice, purchaseValue, currentPrice, currentValue, isSold), per-holdingperformance(kpis, gains, dividends, fees, taxes, valuation),quoteandstartQuote(price, currency, exchange, fx),nickname,logokpis.inInterval.xirr— annualized money-weighted returnkpis.inInterval.ttwror— time-weighted returnvaluation.atIntervalEnd— current total portfolio valuerealizedGains.inInterval— profit from sold positionsunrealizedGains.inInterval— paper profit on current holdingsdividends.inInterval— dividend incomefees.inInterval.fees— total fees paidtaxes.inInterval.taxes— total taxes paidnetAllocations.net— net total across positive and negative holdingsnetAllocations.base— larger absolute side used as the allocation basenetAllocations.positive— positive bucket withtotal,shareOfBase, and aholdingsmap by holding IDnetAllocations.negative— negative bucket withtotal,shareOfBase, and aholdingsmap by holding ID
Connect to the Parqet MCP server
Any MCP client that supports Streamable HTTP transport and OAuth 2.0 can connect:
{
"parqet": {
"url": "https://mcp.parqet.com"
}
}
The server uses OAuth for authentication. Your client will be redirected to Parqet Connect to authorize access.
See Connect the Parqet MCP to Claude for a full walkthrough.
Usage examples
Example 1: Check portfolio value and top holdings
Prompt: "What's my portfolio worth and what are my biggest positions?"
The AI will call parqet_get_user to find your portfolios, then parqet_get_performance to get the current valuation and holdings sorted by weight. You'll get a response like:
Your portfolio "Main Account" is currently worth €47,230. Your top 3 positions are:
- iShares MSCI World ETF — €18,500 (39.2%)
- Apple Inc. — €8,200 (17.4%)
- NVIDIA Corp. — €5,100 (10.8%)
Example 2: Review dividend income
Prompt: "How much dividend income did I receive, and from which holdings?"
The AI calls parqet_get_performance and reads the dividends.inInterval data along with the holdings array. You'll see a breakdown of gross/net dividend income, taxes withheld, and which assets paid dividends.
Example 3: Analyze recent transactions
Prompt: "Show me all my stock purchases in the last month."
The AI calls parqet_get_activities with activityType: ["buy"] and filters by date. You'll get a list of recent buys with asset names, share counts, prices, and total amounts.
Example 4: Compare portfolio performance
Prompt: "What's my annualized return across all portfolios?"
The AI calls parqet_get_user to discover all portfolio IDs, then parqet_get_performance with all IDs to get aggregated metrics. You'll see your XIRR (money-weighted return) and TTWROR (time-weighted return) across all accounts.
Example 5: Look up a specific holding
Prompt: "How many Tesla shares do I have and what's my profit on them?"
The AI calls parqet_get_performance and filters the holdings array for Tesla. You'll see your share count, current value, purchase value, and unrealized gain/loss.
Example 6: Understand net exposure
Prompt: "What's my net exposure, and which holdings contribute to negative allocations?"
The AI calls parqet_get_performance and reads netAllocations.net, netAllocations.positive, and netAllocations.negative.holdings. You'll get the overall net exposure plus a breakdown of which holding IDs make up the positive and negative sides of the portfolio.
Privacy & data handling
- The MCP server only accesses data you explicitly authorize via OAuth
- All communication uses HTTPS/TLS
- No conversation data is collected or stored by the MCP server
- Access tokens are scoped to the permissions you grant during OAuth
- You can revoke access at any time through your Parqet account settings
For details, see the Parqet Privacy Policy.
Support
If you run into issues with the Parqet MCP server:
- Email: [email protected]
- Developer Hub: developer.parqet.com
