Portfolio MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Portfolio MCPShow me my current holdings and account balances."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Portfolio MCP
Local, read-only MCP server for viewing brokerage accounts, holdings, and transactions. It currently uses fictional fixture data; no real credentials are needed to run or test it.
Provider contract
Every read-only provider adapter implements three operations: list accounts,
get a holdings snapshot, and get a date-bounded transaction history. Account
labels must be safe to display, returned transactions are newest first, and a
missing price, market value, or cost basis is represented as null.
Related MCP server: Cubi MCP Playground
Run and verify
uv run python main.py
uv run ruff format --check .
uv run ruff check .
uv run pyright
uv run pytestSnapTrade configuration
The future SnapTrade adapter will read these local environment variables:
SNAPTRADE_CLIENT_ID=
SNAPTRADE_CONSUMER_KEY=The fixture server does not read these values yet. When the live adapter is
added, export them in your shell or load them from a local .env file before
starting the server. Never commit .env or share its values.
Available Tools
3 toolsget_holdingsA
Get holdings and reported valuations for a portfolio account.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral disclosure burden. It conveys a read-only retrieval via 'Get', but it does not describe pagination, data freshness, authorization requirements, or any other runtime behavior. This leaves a meaningful transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant wording. Every word contributes to identifying the tool's purpose and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has an output schema, and the description states the core action and resource. However, with no annotations and no usage or behavioral detail beyond the purpose, an agent gets only the minimum viable context and may still need to infer details about account selection and response behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It does add context by framing account_id as belonging to a 'portfolio account', but it does not explain where the ID comes from, its format, or any constraints beyond the schema's required flag. For a single simple parameter this is adequate but not rich.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('holdings and reported valuations for a portfolio account'), making the tool's purpose immediately clear. It is also distinguishable from sibling tools like list_accounts and get_transactions based on the resource named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a portfolio account' implies the tool is used after an account is identified, but it does not explicitly say when to choose this over list_accounts or get_transactions. No alternatives or exclusion conditions are stated, so usage guidance is only implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionsB
Get account transactions in an inclusive ISO-8601 date range.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| account_id | Yes | ||
| start_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It only mentions a read operation and date range, but provides no detail on output format, pagination, errors, or permissions. For a read-only tool this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, tightly written sentence conveys the essential action and scope with zero filler. It is appropriately front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal but sufficient for a simple read operation with self-explanatory parameter names. However, without annotations or output schema details, it lacks context on response structure and edge cases, leaving some ambiguity for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only clarifies the date range format ('ISO-8601'). account_id is left entirely unexplained, and start_date/end_date semantics are only partially addressed. The description does not compensate for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb ('Get'), a concrete resource ('account transactions'), and a precise scope ('inclusive ISO-8601 date range'). It clearly distinguishes this tool from siblings list_accounts and get_holdings, which cover different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives. It implies a read operation for transactions, but does not state exclusions or mention that list_accounts/get_holdings are for other data types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsA
List connected taxable brokerage and Roth IRA accounts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'List connected taxable brokerage and Roth IRA accounts,' which conveys a read-only intent but reveals nothing about authentication requirements, rate limits, data freshness, or potential errors. The description is nearly synonymous with the tool name, adding only the account types and 'connected' qualifier.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the action and resource. Every word earns its place, and there is no redundant or irrelevant content. For a zero-parameter tool, this is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no nested objects, and an output schema exists), the description provides sufficient context for an agent to invoke it correctly. It lacks any mention of prerequisites or edge cases, but for a simple account listing operation, these are not critical. The output schema covers return values, so no additional description is required there.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so a baseline of 4 applies. There are no parameter semantics to clarify, and the description does not need to compensate for any schema gaps. The empty schema is fully consistent with the tool's simple purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb 'List' and a clear resource ('connected taxable brokerage and Roth IRA accounts'), and distinguishes itself from sibling tools get_holdings and get_transactions by focusing on accounts rather than holdings or transactions. An agent can determine exactly what this tool does without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool: when the agent needs to list connected taxable brokerage and Roth IRA accounts. It does not explicitly exclude alternatives or mention when to use get_holdings or get_transactions, but the resource distinction is clear and no conflicting context is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct resource: accounts, holdings, and transactions. There is no overlap in their purposes, making selection unambiguous.
All names follow a consistent verb_noun pattern using 'list' or 'get' followed by the resource. Minor verb variation is acceptable and does not introduce confusion.
Three tools is well-scoped for a read-only portfolio server. Each tool covers a necessary aspect without redundancy or bloat.
The set covers core portfolio reading: account discovery, holdings, and transactions. Missing features like account-level performance or cash balances are minor gaps that can be worked around.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read-only access to your bank, investment, and crypto accounts: balances, transactions, holdings.
Read-only access to your net worth, wealth percentile, projections, splits and budget.
Read-only bank & investment accounts via Plaid: balances, holdings, transactions, SQL analytics.
Public read-only Précis Finance MCP demo with synthetic data; no account or credentials required.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA Test/Sandbox MCP server that integrates with the SnapTrade API Sandbox environment to provide portfolio oversight, market data, and trading capabilities.
- FlicenseNot gradedqualityDmaintenanceEnables local prototyping of Cubi integrations with a mock HTTP server, MCP tools for lifecycle management, and a browser UI for workflow testing without real sandbox credentials.1
- FlicenseNot gradedqualityBmaintenanceMCP server exposing portfolio and brokerage data through SSE transport, with tools for account summaries, holdings, quotes, market data, and order previews, backed by mock data with live quote fallback.
- AlicenseNot gradedqualityBmaintenanceA fake MCP server that emulates the Pennylane MCP experience for local development, testing, demos, and CI pipelines, providing deterministic fixtures and authentication modes without needing a real Pennylane account.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/larrytao05/portfolio-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server