Skip to main content
Glama
larrytao05

Portfolio MCP

by larrytao05

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 pytest

SnapTrade 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 tools
get_holdingsA

Get holdings and reported valuations for a portfolio account.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
account_idYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A3.8/5.0
Disambiguation5/5

Each tool targets a distinct resource: accounts, holdings, and transactions. There is no overlap in their purposes, making selection unambiguous.

Naming Consistency5/5

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.

Tool Count5/5

Three tools is well-scoped for a read-only portfolio server. Each tool covers a necessary aspect without redundancy or bloat.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A Test/Sandbox MCP server that integrates with the SnapTrade API Sandbox environment to provide portfolio oversight, market data, and trading capabilities.
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP 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.
  • A
    license
    Not graded
    quality
    B
    maintenance
    A 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

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