Bullrun
Server Details
Global stock research, ML forecasts, valuation signals, screeners & portfolio tracking in Claude
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- ferinator/bullrun-mcp
- GitHub Stars
- 0
- Server Listing
- BullRun
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.5/5 across 16 of 16 tools scored.
Each tool has a clear, distinct purpose. Portfolio creation tools are differentiated by whether the user provides a brief (create_portfolio_draft), exact holdings (create_portfolio_from_positions), or wants additions to an existing portfolio (create_position_draft). Financial data tools are separated by type (financial history, forward estimates, earnings transcripts, operating KPIs, quality metrics, revenue breakdown). Portfolio analysis tools are distinct: get_portfolio_context for snapshot, get_portfolio_analytics for risk/diversification, and list_portfolios for listing. Screening and ETF search are separate. No ambiguity.
All tool names follow a consistent verb_noun pattern using snake_case. Creation tools start with 'create_', data retrieval tools with 'get_', listing with 'list_', screening with 'screen_', and querying with 'query_'. No mixing of styles or conventions. The naming is predictable and readable.
With 16 tools, the server strikes a good balance between coverage and manageability. It covers portfolio creation and management (3 tools), portfolio analysis (2), stock research (financials, estimates, transcripts, KPIs, quality, metrics, screening, ETF search – 10 tools), and capabilities checking (1). This is appropriate for the domain of stock analysis and portfolio management, neither too few nor too many.
The tool surface covers the main user workflows: portfolio creation (drafting, exact input, adding positions), portfolio analysis (context, risk/diversification), and stock research (financials, estimates, transcripts, screening, etc.). Missing are tools for deleting or updating portfolios directly, or for accepting drafts programmatically (these are done via the UI). Also, there is no tool for placing real trades, but that matches the server's draft-only design. Overall, the gaps are minor and do not severely hinder the primary use case.
Available Tools
16 toolscreate_portfolio_draftCreate a portfolio draftAInspect
Use when the user wants you to BUILD or PROPOSE a brand-new portfolio for them — e.g. "build me a portfolio", "put together a dividend portfolio", "draft a portfolio of AI stocks", "create a new portfolio for $10k". Generates a REVIEWABLE paper-portfolio draft for the signed-in Bullrun user from a natural-language brief (e.g. "a diversified European dividend portfolio"). Requires OAuth with the write:drafts scope and a Bullrun Pro account. This is DRAFT-ONLY and never changes any live position: the draft is saved to the user's account and appears in the Bullrun Portfolio tab under "Pending AI drafts", where the user reviews it and explicitly accepts it to create a new portfolio (or discards it). To suggest additions to an EXISTING portfolio instead, use create_position_draft. Tickers are chosen only from Bullrun's priced stock/ETF universe; pass instrumentUniverse for stocks only, ETFs only, or a mix. If the brief is vague, first ask ONE quick round of up to three multiple-choice questions (investing style, region focus, and size), each with a default the user can accept with "just pick for me", then build; skip any dimension the user already specified and do not interrogate across multiple turns.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | No | What kind of portfolio to draft, e.g. "a defensive dividend portfolio of large EU stocks". Optional: if you omit it, the server collects a quick style/region/size brief from the user directly (a native form on clients that support elicitation; otherwise it asks you to gather those first). | |
| maxPositions | No | Maximum number of holdings (3-20, default 10). | |
| startingCash | No | Starting cash in USD (default 10000). | |
| instrumentUniverse | No | Candidate universe: stocks only, ETFs only, or a mix. Default mix unless the prompt says otherwise. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate non-read-only and non-destructive. The description adds crucial context: draft-only (never changes live positions), requires OAuth write:drafts scope and Bullrun Pro account, and the draft appears under 'Pending AI drafts' after creation. This goes well beyond the sparse annotations.
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 front-loaded with purpose and usage context. It is fairly long but every sentence provides necessary information (scope, distinction, behavior, authentication, vague brief handling). Could be slightly more compact without losing clarity, but overall well-structured.
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 complexity (creation with multiple options), the description covers all essential aspects: when to use, what it does, authentication requirements, draft lifecycle, alternative tool, universe constraints, and vague brief handling. No output schema needed as the description explains the outcome (draft saved and viewable).
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 coverage is 100%, so the baseline is 3. The description adds extra value: explains the prompt parameter's optional behavior (server-collected if omitted), clarifies the instrumentUniverse default (mix unless specified), and provides context for the starting cash and max positions defaults. A slight improvement over the schema alone.
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 explicitly states the tool builds or proposes a brand-new portfolio from a natural-language brief. It uses specific verbs like 'BUILD' and 'PROPOSE', clearly identifies the resource (portfolio draft), and distinguishes itself from the sibling create_position_draft.
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 provides explicit when-to-use guidance ('when the user wants you to BUILD or PROPOSE a brand-new portfolio'), alternative tool for existing portfolios (create_position_draft), and handling of vague briefs with a quick multiple-choice question strategy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_portfolio_from_positionsSave a portfolio from explicit holdingsAInspect
Use when YOU (or the user) have ALREADY decided the exact holdings and want them saved as-is — e.g. after researching and settling on a specific basket with target weights. Persists a REVIEWABLE paper-portfolio draft built from the tickers you supply, sized by weight (percent) or by explicit USD amount. Unlike create_portfolio_draft this does NOT use the LLM and NEVER re-selects tickers: your basket lands exactly as given. It is NOT Pro-gated (it mirrors manual position entry, which is free) and needs only OAuth with the write:drafts scope. DRAFT-ONLY: the draft is saved to the user's Bullrun account and appears in the Portfolio tab under "Pending AI drafts", where the user reviews it and explicitly accepts it (creating a NEW portfolio) or discards it — it never changes any live position. Tickers must exist in Bullrun's priced stock/ETF universe; any that cannot be priced are returned in unresolved and skipped (use query_etfs / screen_stocks / get_stock_metrics to confirm exact tickers first). For a vague brief where the model should pick, use create_portfolio_draft instead.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Portfolio name. Default "Custom Portfolio Draft". | |
| cashPct | No | Explicit cash percentage to hold back. Overrides the weight-remainder rule. | |
| positions | Yes | The exact holdings to persist (1-30). Tickers are used verbatim, never re-selected. | |
| startingCash | No | Total portfolio cash in USD. Default 10000 in weight mode; the sum of amounts in amount mode. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations give readOnlyHint=false and destructiveHint=false. The description adds significant context: it is draft-only, never changes live positions, not Pro-gated, needs OAuth write:drafts scope, and explains unresolvable tickers are skipped and returned. No contradiction.
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 detailed but every sentence earns its place. It is front-loaded with the main purpose and usage, then covers behavior, limitations, auth, and alternatives efficiently.
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 no output schema, the description explains return behavior (unresolved tickers). It covers all relevant aspects: use case, behavior, limitations, auth, scope, and parameter interactions, making it complete for agent decision-making.
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 100%, but the description adds value beyond schema: explains mutual exclusivity of weight vs amountUsd, remainder cash rule, default values, and behavior of startingCash and cashPct.
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 clearly states it saves a portfolio from explicit holdings. It distinguishes from create_portfolio_draft by noting it does not use the LLM and never re-selects tickers, making the purpose precise and differentiated.
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?
Explicitly says when to use (when user already decided exact holdings) and when not to (for vague briefs, use create_portfolio_draft). Also mentions prerequisites like tickers must exist in Bullrun's priced universe and suggests using other tools to confirm tickers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_position_draftCreate a position draftAInspect
Use when the user asks what to BUY or ADD to an EXISTING portfolio — e.g. "what should I buy next", "suggest a stock or ETF for my portfolio", "what should I add", "recommend a position", "any ideas to round out my holdings". Generates REVIEWABLE suggested additions for one existing Bullrun portfolio. Requires OAuth with the write:drafts scope and a Bullrun Pro account. This is DRAFT-ONLY: the suggested position(s) are saved to the user's account and appear in the Bullrun Portfolio tab under Pending AI drafts, where the user reviews and accepts them into the target portfolio or discards them. It never changes live holdings by itself. To draft a whole new portfolio from scratch use create_portfolio_draft; to test whether a specific named ticker fits, use get_portfolio_analytics with candidateTicker. Pass instrumentUniverse for stocks only, ETFs only, or a mix. If it is unclear, first confirm which portfolio (use list_portfolios when the user has more than one) and how many ideas (a single best idea or a few) in ONE quick step; otherwise just build.
| Name | Required | Description | Default |
|---|---|---|---|
| portfolioId | Yes | The Bullrun portfolio id to propose additions for. Use list_portfolios first if unsure. | |
| maxPositions | No | How many suggested additions to save, 1-5. Use 1 for a single-position idea; default 3. | |
| instrumentUniverse | No | Candidate universe: stocks only, ETFs only, or a mix. Default mix. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate not read‑only and not destructive. The description adds that the tool is draft‑only and never changes live holdings, clarifying the write behavior. It also mentions required auth scope and account type. Slightly more detail on error handling would push it higher, but the current disclosure is strong.
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 front‑loaded with usage guidance and packs dense information. While it is longer than a single sentence, every sentence adds value. Could be slightly streamlined, but overall highly efficient.
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?
For a tool with 3 well‑documented parameters and no output schema, the description covers purpose, usage, behavior, parameter details, and sibling differentiation. It doesn't describe the response format, but given the tool's simplicity (draft creation), this is adequate.
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 covers 100% of parameters. Description adds value by explaining the instrumentUniverse parameter ('stocks only, ETFs only, or a mix'), advising to use list_portfolios for portfolioId, and noting default value for maxPositions (1 for single idea, default 3). This exceeds the baseline of 3 for high schema coverage.
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 clearly states the tool generates reviewable draft suggestions for adding positions to an existing portfolio, using specific verbs like 'generates REVIEWABLE suggested additions'. It explicitly distinguishes from siblings by naming create_portfolio_draft and get_portfolio_analytics.
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 specifies exactly when to use this tool (e.g., 'when the user asks what to BUY or ADD to an EXISTING portfolio' and gives example queries). It also tells when not to use it (for new portfolios or specific ticker checks) and provides prerequisites (OAuth scope, Bullrun Pro) and pre-invocation steps (confirm portfolio with list_portfolios).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_capabilitiesGet account capabilitiesARead-onlyInspect
Discover what the connected Bullrun account can do BEFORE attempting an action, so you can plan instead of learning by hitting a 403. Reports whether you are authenticated and as WHICH identity (email + userId), whether the account has Bullrun Pro and why (subscription / trial / admin), the granted OAuth scopes, portfolio usage vs the free/max limits, and a per-tool entitlement map: create_portfolio_from_positions (free), create_portfolio_draft and create_position_draft (Pro-only), and whether another portfolio can be created now. Call this first when a draft/write tool might be gated, or to confirm which account a request will act on. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and description reinforces 'Read-only' and details every output field, going beyond annotations. No contradictions.
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?
Concise at 3-4 sentences, front-loaded with purpose ('discover... BEFORE attempting an action'), and well-structured without waste.
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?
Despite no output schema, the description comprehensively covers all returned aspects (auth, identity, Pro, scopes, usage, tool map). Complete for a discovery tool.
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?
No parameters; schema coverage is 100%. Description compensates by detailing the output, though param semantics are not applicable. Baseline 4 for zero parameters.
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 clearly states the tool discovers account capabilities and lists specific information returned (authentication, identity, Pro status, OAuth scopes, portfolio usage, tool entitlements). It distinguishes from siblings as a pre-action check rather than a data retrieval tool.
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?
Explicitly advises calling this first when a draft/write tool might be gated, or to confirm the acting account. Provides clear when-to-use guidance and implies not for other purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_earnings_call_transcriptGet earnings call transcriptARead-onlyInspect
Fetch speaker-tagged earnings-call transcript chunks for one exact Bullrun ticker, optionally filtered by fiscal period or search text. Use this for management guidance language, analyst Q&A, and qualitative judgment that is not visible in financial statements. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Optional case-insensitive text/speaker search across transcript chunks. | |
| ticker | Yes | The ticker exactly as listed on Bullrun, e.g. "CRWD", "SPGI", "V". | |
| maxChunks | No | Maximum speaker-tagged transcript chunks to return. | |
| fiscalYear | No | Optional fiscal year filter. | |
| fiscalQuarter | No | Optional fiscal quarter filter. | |
| maxCharsPerChunk | No | Maximum characters per transcript chunk in the MCP response. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, and the description confirms "Read-only". The description adds that the tool returns "speaker-tagged" chunks and supports optional filtering, which goes beyond the annotation. No contradictions or missing critical behavioral traits (e.g., no pagination detail, but acceptable given the simplicity).
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?
Two sentences: the first succinctly describes the action and options, the second explains the use case. Every word earns its place; no redundancy or filler.
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 has 6 parameters (all documented in schema) and no output schema. The description explains the purpose and use case adequately. It could mention that results are ordered by speaker or time, but omitting that is a minor gap given the simplicity. The description is complete enough for an agent to understand what to expect.
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 coverage is 100%, so baseline is 3. The description adds meaning by explaining the purpose of filtered chunks (qualitative judgment) and emphasizing the "exact Bullrun ticker" requirement. It also frames the optional filters (fiscal period, search text) in the context of finding specific transcript content, which helps an agent select parameters meaningfully.
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 clearly states the verb "Fetch", the resource "speaker-tagged earnings-call transcript chunks", and the specific scope "for one exact Bullrun ticker". It distinguishes the tool from its siblings (which are portfolio, position, and financial metrics tools) by focusing on qualitative transcript data.
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 explicitly tells the agent to use this for "management guidance language, analyst Q&A, and qualitative judgment that is not visible in financial statements". This provides clear context for when to invoke this tool over siblings like get_financial_history or get_forward_estimates. It does not explicitly state when not to use it, but the positive guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financial_historyGet financial historyARead-onlyInspect
Fetch 1-15 years of historical financial statements for one exact Bullrun ticker. Returns annual and/or quarterly rows grouped into income statement, balance sheet, cash flow, per-share metrics, margins, source currency, and annual growth/CAGR consistency checks. Use this when evaluating multi-year revenue/net-income growth, margin trajectories, leverage, cash flow quality, or whether a stock passed a rule such as 10% revenue and net-income growth every year.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | How many fiscal years of history to return, counting backward from the latest fiscal year available. | |
| ticker | Yes | The ticker exactly as listed on Bullrun - the native local-exchange symbol, e.g. "AAPL", "BMW" (not "BMW.DE"), "ABBN" (not "ABBN.SW"), "NESN", or a numeric code like "005930". Do not append Yahoo-style country suffixes; if a lookup returns nothing, use screen_stocks to find the exact symbol. | |
| periodType | No | Return annual rows, quarterly rows, or both. Annual rows use fiscalQuarter=0. | both |
| includeEmptyRows | No | Include sparse rows that have no major income statement, balance sheet, cash-flow, or EPS values. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true; description adds details on return structure (grouped rows, consistency checks) and ticker format warnings, but does not contradict annotations.
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?
Four sentences with no redundancy; front-loaded with purpose, then return details, then usage guidance. Every sentence adds value.
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?
Describes output components (income statement, balance sheet, etc.) comprehensively despite no output schema. Covers key input aspects. Minor lack of details on pagination or limits beyond year range.
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 has 100% parameter description coverage; description adds high-level context (e.g., '1-15 years' for years) but does not significantly enhance parameter understanding beyond the schema.
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?
Description uses specific verb 'Fetch' and resource 'historical financial statements' for one ticker, clearly distinguishing from siblings like get_forward_estimates and get_earnings_call_transcript.
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?
Explicitly states when to use: 'Use this when evaluating multi-year revenue/net-income growth, margin trajectories, leverage, cash flow quality, or whether a stock passed a rule such as 10% revenue and net-income growth every year.' Provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_forward_estimatesGet forward estimatesARead-onlyInspect
Fetch forward consensus revenue/EPS/EBITDA estimates, management guidance ranges, and estimate-revision percentages for one exact Bullrun ticker. Also derives simple forward P/E and PEG-style context from the latest close when EPS estimates are available. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum estimate rows to return. | |
| ticker | Yes | The ticker exactly as listed on Bullrun, e.g. "AAPL", "CRWD", "SPGI". | |
| periodType | No | Return annual estimates, quarterly estimates, or both. | both |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant value beyond the readOnlyHint annotation by stating that the tool derives P/E and PEG context from the latest close, and it explicitly marks itself as read-only. No contradictions with annotations.
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?
Three sentences, each providing distinct value: core function, derived context, and read-only designation. No superfluous words; well front-loaded with the main purpose.
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?
For a tool with 3 parameters and no output schema, the description covers the main return data (estimates, guidance, revisions, derived metrics). It lacks details on pagination or error handling, but these are not critical for basic usage.
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?
With 100% schema coverage, the description does not need to repeat parameter details but adds context about the type of estimates (revenue, EPS, EBITDA) which relates to the output. It does not provide additional parameter syntax or behavior beyond the schema.
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 explicitly states the verb 'Fetch' and the resource 'forward consensus revenue/EPS/EBITDA estimates' for a specific Bullrun ticker, clearly distinguishing it from sibling tools like 'get_earnings_call_transcript' or 'get_financial_history' which cover other data types.
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 states it is for 'one exact Bullrun ticker', implying it should not be used for multiple tickers or other platforms. However, it does not explicitly exclude alternative uses or mention sibling tools for comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_operating_kpisGet operating KPIsARead-onlyInspect
Fetch period-specific operating KPIs and unit-economics metrics for one exact Bullrun ticker: ARR, net revenue retention, RPO, billings, customer counts, payments volume, cross-border volume, processed transactions, or other domain-specific metrics when populated. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum KPI rows to return. | |
| ticker | Yes | The ticker exactly as listed on Bullrun, e.g. "CRWD", "SNOW", "V". | |
| category | No | Optional category filter such as SaaS, payments, marketplace, banking, or other domain labels. | |
| metricKey | No | Optional exact metric key to filter, e.g. ARR, NRR, RPO, BILLINGS, PAYMENT_VOLUME. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation declares readOnlyHint: true, and the description repeats 'Read-only'. This is consistent and adds no contradiction. However, beyond that, the description does not disclose additional behavioral traits such as pagination, error handling, or rate limits. Given the annotation covers the safety profile, a score of 3 is appropriate.
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 two sentences with no superfluous words. The first sentence conveys the purpose and examples, the second confirms idempotency. Highly efficient.
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 no output schema, the description lists example metrics, which helps the agent anticipate return values. It also specifies that the ticker must be exact. It does not mention result ordering or pagination limits (though limit parameter exists), but overall it is complete enough for a read-only data retrieval tool.
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 coverage is 100%, so the schema already documents all parameters. The description lists example values for ticker, category, and metricKey but does not add significant meaning beyond the schema. The baseline of 3 is correct.
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 clearly states the tool fetches operating KPIs and unit-economics metrics for a specific ticker, listing concrete examples like ARR, NRR, RPO. This distinguishes it from sibling tools that handle financial history, transcripts, etc.
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 says 'for one exact Bullrun ticker', implying a required ticker. It provides context about period-specific KPIs but does not explicitly state when to use this tool vs. alternatives like get_financial_history or get_forward_estimates. However, the examples differentiate it sufficiently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolio_analyticsGet portfolio analyticsARead-onlyInspect
Use when the user asks about THEIR portfolio's risk, diversification, or concentration, or whether to add a stock — e.g. "is my portfolio diversified", "how risky is my portfolio", "am I too concentrated", "what's my exposure to X", "should I add NVDA", "would AAPL improve my diversification". Fetches portfolio-level relationship analytics for one signed-in user's portfolio: correlation and annualized covariance matrices across holdings, contribution-to-risk, concentration by weight and risk, currency/sector/country exposures, value/growth/momentum/quality/size proxy factor scores, scenario/stress tests (rates +100bp, oil -20%, USD +10%), and optional candidateTicker fit analysis showing correlation to the current portfolio plus pro-forma volatility (set candidateTicker when the user asks whether to add a specific stock). Pass a portfolioId from list_portfolios. The risk math only covers holdings with enough price history, dropping unpriced/unmatched ones (ETFs, funds, untracked tickers) and renormalizing all percentages over what remains; the response leads with a coverage banner (first text block) stating how many holdings were excluded, so never read these figures as the whole portfolio. For a plain holdings/value snapshot and the full matched/unmatched breakdown use get_portfolio_context instead. Requires OAuth (read:portfolios) and returns the caller's own data only. privacyMode defaults to "full"; "weights_only" hides absolute USD amounts while keeping weights, percentages, correlations and scores.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Calendar-day lookback for daily USD return analytics. Default 370. | |
| portfolioId | Yes | The portfolio id, as returned by list_portfolios. | |
| privacyMode | No | "full" (default) includes absolute USD amounts; "weights_only" returns only relative figures. | |
| candidateTicker | No | Optional exact Bullrun ticker to test as a candidate diversifier - the native local-exchange symbol, e.g. AAPL, BMW, ABBN, NESN (not Yahoo-style suffixes like BMW.DE). | |
| candidateWeightPct | No | Optional hypothetical candidate allocation for pro-forma volatility. Default 5 (%). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses behavioral traits beyond annotations: risk math drops holdings with insufficient history, coverage banner in response, privacyMode hides USD amounts while keeping weights/scores. No contradiction with readOnlyHint=true.
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?
Description is comprehensive but somewhat lengthy; every sentence adds value. Front-loaded with use cases. Could be slightly more terse, but no wasted text for a complex tool.
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 5 parameters, no output schema, and complex behavior (holding filtering, privacy mode), the description covers all critical aspects: return structure, limitations, alternatives, required inputs, parameter behaviors. Very complete.
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 coverage is 100%, so baseline is 3. Description adds extra context: candidateTicker explanation (Bullrun ticker, not Yahoo-style), days default 370, privacyMode default 'full' vs 'weights_only', candidateWeightPct default 5%. Not all parameters need extra detail, but adds value beyond schema.
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 starts with clear use cases (risk, diversification, concentration) and explicitly states the tool fetches portfolio-level analytics. It distinguishes from sibling tool get_portfolio_context, which does plain holdings snapshot.
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?
Explicitly states when to use (user asks about risk, diversification, adding a stock) and when not (use get_portfolio_context for plain snapshot). Also mentions required portfolioId from list_portfolios and optional candidateTicker for 'should I add' queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolio_contextGet portfolio contextARead-onlyInspect
Use when the user asks to look at, review, or analyze THEIR portfolio / holdings / positions — e.g. "analyze my portfolio", "how is my portfolio doing", "what's in my portfolio", "review my holdings", "how am I invested", "what should I improve". Fetches a deep snapshot of ONE of the signed-in user's portfolios: the summary (value, day change, total return), every holding (with position weight %, sector and return) and Bullrun's computed insights (benchmark comparison, concentration, diversification, dividend income). Pass a portfolioId from list_portfolios (call that first if the user hasn't named a portfolio). The response ALWAYS returns the complete holdings list with each position flagged matched/unmatched, plus a coverage summary: holdings that Bullrun can't link to its universe (ETFs, funds, untracked tickers) carry no weight, sector, insight or ML score, so weights/insights/ML below describe ONLY the matched subset. Read the coverage banner (the first text block) and never present matched-only figures as the whole portfolio. For risk/diversification math, correlations, factor exposure, or whether to add a specific stock, use get_portfolio_analytics instead. Requires OAuth (read:portfolios) and returns the caller's own data only. privacyMode defaults to "full" (absolute $ included); "weights_only" returns only relative figures. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Insights look-back window in days (default 30). | |
| portfolioId | Yes | The portfolio id, as returned by list_portfolios. | |
| privacyMode | No | "full" (default) includes absolute $; "weights_only" returns only relative figures. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description doesn't need to reiterate safety. However, it adds critical behavioral context: the response always returns a complete holdings list with matched/unmatched flags, a coverage summary, and warns against presenting matched-only figures as the whole portfolio. This is valuable beyond the annotation.
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 somewhat long but well-structured: usage guidance first, followed by response structure details, caveats, and alternative tool reference. Every sentence adds value, though it could be slightly tighter without losing clarity.
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 no output schema, the description fully explains the return shape (summary, holdings, insights, coverage banner). It also covers privacyMode and clarifies that holdings may lack weight/sector/insight for unmatched items. This is exceptionally complete for a non-trivial tool.
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 coverage is 100% (each parameter has a description). The description adds value by explaining portfolioId's origin ('from list_portfolios'), clarifying days as a look-back window, and illustrating privacyMode's effect on output format. This enriches the schema's baseline.
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 starts with explicit use cases ('Use when the user asks to look at, review, or analyze THEIR portfolio / holdings / positions') and provides concrete example queries. It clearly distinguishes the tool from siblings like get_portfolio_analytics by naming that alternative for risk/diversification analysis.
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 explicitly states when to use (portfolio review/analysis), when not to use for risk analytics (points to get_portfolio_analytics), and instructs to call list_portfolios first if portfolio ID is unknown. This provides clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quality_moat_metricsGet quality and moat metricsARead-onlyInspect
Compute annual quality, moat, earnings-quality, and capital-allocation metrics for one exact Bullrun ticker from existing financial statements: ROIC, ROE/ROA, ROIC-vs-supplied-WACC, accruals, cash conversion, capex intensity, dividend payout/growth, diluted share-count changes, and a buyback proxy. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | How many fiscal years of annual history to evaluate. | |
| ticker | Yes | The ticker exactly as listed on Bullrun - the native local-exchange symbol, e.g. "AAPL", "BMW" (not "BMW.DE"), "ABBN" (not "ABBN.SW"), "NESN", or a numeric code like "005930". Do not append Yahoo-style country suffixes; if a lookup returns nothing, use screen_stocks to find the exact symbol. | |
| estimatedWaccPct | No | Optional user-supplied WACC assumption, in percent. When omitted, ROIC-vs-WACC spread is returned as null. | |
| taxRateFallbackPct | No | Fallback tax rate used for NOPAT only when reported tax/pretax data is missing or unusable. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already indicates no side effects. The description adds that metrics are computed from 'existing financial statements', implying no new data creation or modification. It lists the specific metrics computed, providing insight into the return content beyond the annotation.
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 concise and front-loaded, with the primary purpose in the first sentence. Every sentence contributes value: the first states the overall function and the second lists key metrics. No unnecessary words or repetition.
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 four well-documented parameters, no output schema, and readOnly annotation, the description covers the tool's purpose and what it computes. It could be more complete by specifying output format (e.g., table or JSON) or data prerequisites (e.g., financial statements must exist). However, the 'existing financial statements' hint partially addresses this.
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 100%, with detailed descriptions for each parameter (e.g., ticker includes format guidance and fallback instructions). The tool description adds no additional parameter semantics beyond what the schema already provides. Baseline 3 is appropriate as the description does not enhance parameter understanding.
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 clearly states the action ('Compute'), the resource ('annual quality, moat, earnings-quality, and capital-allocation metrics'), and the scope ('for one exact Bullrun ticker from existing financial statements'). It lists specific metrics (ROIC, ROE/ROA, etc.), which distinguishes it from sibling tools like get_financial_history or get_stock_metrics. The 'Read-only' tag aligns with the annotation.
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 implies usage for computing quality and moat metrics from existing financial statements but does not explicitly state when to use this tool versus alternatives such as get_financial_history or get_forward_estimates. No when-not-to-use scenarios or preconditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_revenue_breakdownGet revenue breakdownARead-onlyInspect
Fetch segment, geography, product, customer, or other revenue breakdown rows for one exact Bullrun ticker. Use this to separate cyclical businesses from recurring segments or inspect geographic exposure instead of relying on blended revenue. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum breakdown rows to return. | |
| ticker | Yes | The ticker exactly as listed on Bullrun, e.g. "SPGI", "MSFT", "V". | |
| dimension | No | Breakdown dimension to return, or all dimensions. | all |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description confirms 'Read-only.' Beyond that, it adds minimal behavioral context (e.g., no mention of rate limits, pagination, or error handling). The description is adequate but does not significantly enrich behavioral transparency beyond what annotations provide.
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?
Two sentences front-loaded with action and resource, followed by usage guidance and a read-only note. Every sentence adds value with no redundancy.
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 (3 parameters, no output schema), the description covers what, when, and safety. It could mention that return format is an array of rows, but that's implicitly understood from 'rows'. Slightly incomplete but largely sufficient.
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 100%, so baseline is 3. The description mentions the dimension types (segment, geography, etc.) but the schema already defines them via an enum. No additional parameter semantics beyond what the schema provides.
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 verb 'Fetch' and specific resource 'revenue breakdown rows for one exact Bullrun ticker' clearly state the tool's function. It distinguishes from siblings like get_financial_history by focusing on revenue breakdowns and exact ticker-level data.
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?
Explicitly provides use cases: 'separate cyclical businesses from recurring segments or inspect geographic exposure instead of relying on blended revenue.' This gives strong context for when to use, though it lacks explicit when-not-to-use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_metricsGet stock metricsARead-onlyInspect
Fetch a consolidated metrics snapshot for a single stock by ticker: identity (company, exchange, currency, sector, industry, country, ISIN), latest daily price (OHLCV), latest valuation (market cap, P/E, dividend yield, annual dividend per share), the most recent reported financials (revenue, gross/operating income, EBITDA, net income, diluted EPS, free & operating cash flow, total debt, cash, total assets, equity) and a short company description. Use the exact ticker as listed on Bullrun - the native local-exchange symbol (e.g. AAPL, BMW, ABBN, NESN, or a numeric code like 005930), NOT Yahoo-style country suffixes like BMW.DE or ABBN.SW. If a ticker returns no data, use screen_stocks (by sector/country) to find the exact symbol. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | The stock ticker exactly as listed on Bullrun - the native local-exchange symbol, e.g. "AAPL", "BMW" (not "BMW.DE"), "ABBN" (not "ABBN.SW"), "NESN", or a numeric code like "005930". Do not append Yahoo-style country suffixes. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the readOnlyHint annotation by stating it is 'Read-only' and explaining error behavior ('If a ticker returns no data'). However, it does not discuss rate limits or authentication, but given the annotation already covers safety, the additional context is sufficient.
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 detailed yet every sentence adds value. It is front-loaded with the main purpose, uses clear enumeration, and avoids redundancy. No unnecessary words.
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 has one parameter, no output schema, and rich annotations, the description fully covers input, failure behavior, and output data fields. It is complete for an agent to use correctly.
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 single parameter 'ticker' has 100% schema coverage, but the description adds extensive meaning: it specifies the exact format (native local-exchange symbol, examples, prohibited suffixes). This goes well beyond the schema's description.
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 clearly states it fetches a consolidated metrics snapshot for a single stock by ticker, listing specific data categories (identity, price, valuation, financials, description). It distinguishes from siblings like screen_stocks by focusing on a single stock and providing ticker format guidance.
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 explicitly says when to use the tool (fetch stock metrics) and when not to ('If a ticker returns no data, use screen_stocks...'). It also provides detailed ticker format instructions, preventing common mistakes like appending Yahoo suffixes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_portfoliosList my portfoliosARead-onlyInspect
Use when the user refers to THEIR portfolio(s) or holdings — e.g. "my portfolios", "what portfolios do I have", "how are my investments doing", "show my holdings", "my account". Lists the signed-in Bullrun user's virtual portfolios with computed summaries: name, base currency, total value (USD), day change, cost basis and total return, plus position counts. Start here when a portfolio question doesn't name a specific portfolio, then pass a portfolioId to get_portfolio_context or get_portfolio_analytics. Requires connecting this server to a Bullrun account (OAuth, read:portfolios scope) — it returns that user's own data only. privacyMode defaults to "full" (includes absolute $ amounts); pass "weights_only" to hide absolute money and return only relative figures (returns %, counts). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| privacyMode | No | "full" (default) includes absolute $; "weights_only" hides cash/value/cost-basis and keeps only %. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and description adds OAuth requirement, user-specific data limitation, privacyMode behavior, and read-only nature. No contradiction.
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?
Well-structured with purpose first, then details. Slightly verbose but every sentence adds value. Could be shortened without loss.
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?
Covers all necessary aspects: purpose, prerequisites (OAuth), return value, parameters, privacy mode, and relationship to sibling tools. No output schema needed for this list operation.
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?
Only one parameter (privacyMode) with 100% schema coverage. Description adds context beyond enum values: explains defaults and effect on returned data. Slightly redundant with schema description but clear.
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?
Description uses specific verb 'list' and resource 'portfolios', explains it returns computed summaries, and distinguishes from siblings by stating 'start here when a portfolio question doesn't name a specific portfolio'.
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?
Explicitly states when to use (user refers to 'their' portfolios/holdings) with examples. Provides clear context: start here, then pass portfolioId to get_portfolio_context/analytics. Does not mention when not to use or list alternatives, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_etfsQuery ETFsARead-onlyInspect
Search the Bullrun ETF universe by ticker/fund name plus ETF asset class, exposure, domicile, exchange and currency. For an exact ticker, returns ETF profile details, recent historical price rows, and latest holdings. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | Exact ETF exposure filter, such as Japan, Equity - Australia, TOPIX, or an exchange/source exposure label. Kept as focus for API compatibility. | |
| limit | No | Maximum ETF search rows to return, 1-100. | |
| search | No | Free-text ETF search by ticker or fund name. Omit to list the first ETFs. | |
| ticker | No | Exact ETF ticker for profile, prices, and optional holdings, e.g. SPY, VWRL.L, EUNL.DE. | |
| category | No | Exact broad ETF asset-class filter, such as Equity, Fixed Income, Commodity, Crypto, or Real Estate. Kept as category for API compatibility. | |
| currency | No | Exact trading currency filter, e.g. USD, EUR, CHF. | |
| domicile | No | Exact ETF domicile filter. | |
| exchange | No | Exact exchange filter, e.g. NYSE ARCA, LSE, XETRA. | |
| priceLimit | No | Recent daily price rows to return for an exact ticker. Use 0 to skip prices. | |
| holdingsLimit | No | Maximum holdings to return for an exact ticker, 1-100. | |
| includeHoldings | No | When ticker is supplied, include latest holdings. Ignored for broad searches. | |
| includeInactive | No | Include ETFs with no recent price bar. Default false. | |
| includeSecondary | No | Include secondary/cross-listed ETF tickers. Default false. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description confirms 'Read-only,' with no contradiction. The description adds behavior details on return types (profile, prices, holdings) and filtering dimensions, exceeding annotation requirements.
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?
Two concise sentences: first defines the search functionality, second details the exact ticker output. No redundant words, well-structured, and front-loaded.
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 covers main use cases, filters, and output types. Given 13 parameters and no output schema, it provides sufficient context for an AI agent to understand the tool's capabilities, though it could briefly mention output structure.
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 100%, so each parameter is already well-described. The tool description summarizes filter dimensions (asset class, exposure, etc.) but does not add critical new information beyond the schema.
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 clearly states the tool searches the Bullrun ETF universe by various filters (ticker, asset class, etc.) and returns profile, prices, and holdings for exact tickers. It distinguishes from sibling tools, which focus on portfolios, transcripts, and other metrics.
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 explains when to use the tool (ETF search by filters, exact ticker for details), but does not explicitly state when not to use or compare to alternatives. However, the sibling tools are clearly different, providing implicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_stocksScreen stocksARead-onlyInspect
Screen the global Bullrun stock universe with the same rule engine as the app screener. Filter by sector, industry, country/countries, primary vs secondary listings, active vs inactive listings, lookback mode, AND/OR rule groups, comparison operators, money units, growth metrics and latest-value metrics. Returns a compact table of matching stocks. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deprecated alias for lookbackMode; kept for compatibility. | |
| limit | No | Maximum number of stocks to return (1-100). | |
| order | No | Sort direction. Nulls always sort last regardless of direction. | desc |
| rules | No | Fundamental rules. Same groupId means AND; different groupIds mean OR. | |
| sector | No | Exact sector name to filter by, e.g. "Technology", "Healthcare". Omit for all sectors. | |
| sortBy | No | Metric to sort by. revenueGrowth is accepted as an alias for revenueGrowthPct. | marketCap |
| country | No | Exact country name to filter by, e.g. "United States", "Germany". Omit for all countries. | |
| periods | No | Deprecated alias for lookback; kept for compatibility. | |
| industry | No | Exact industry name to filter by, e.g. "Software - Infrastructure". Omit for all industries. | |
| lookback | No | How many reporting periods to evaluate. Growth rules need at least 2 comparable periods. | |
| countries | No | Exact country names to include. Use this for multi-country screens; it overrides country when provided. | |
| lookbackMode | No | Whether rule evaluation uses annual or quarterly reporting periods. | annual |
| minMarketCap | No | Compatibility shortcut: adds marketCap >= this absolute value to every rule group. | |
| includeInactive | No | Include delisted/inactive tickers with no recent price bar. Default false. | |
| includeSecondary | No | Include secondary cross-listings of the same security. Default false (primary listings only). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'Read-only'. It adds context about using the same rule engine as the app screener and returning a compact table, which is helpful beyond the annotation.
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 extremely concise: two sentences that capture the tool's purpose, scope, and result type. Every word adds value, with no redundancy.
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 complexity (15 parameters, no output schema), the description provides a solid overview. The schema handles detailed parameter info. It could mention default values or array behavior, but overall it's reasonably complete.
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 coverage is 100%, but the description synthesizes the parameters into a coherent narrative (e.g., 'AND/OR rule groups', 'comparison operators', 'money units'). This adds meaning beyond individual parameter descriptions, earning a 4.
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 clearly states that the tool screens the Bullrun stock universe using the same rule engine as the app, and lists the many filtering criteria. It distinguishes itself from sibling tools like get_stock_metrics and query_etfs by focusing on screening with complex rule logic.
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 implicitly explains when to use this tool (to filter stocks by various criteria), but does not explicitly contrast with alternatives or state when not to use it. The context is clear enough for an agent to decide, but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- AlicenseAqualityDmaintenanceReal-time financial superpowers for Claude. Live crypto prices, US and Indian NSE stock quotes, full portfolio P\&L, Bittensor/TAO network stats, Fear & Greed index with 7-day history, top movers and global market overview. 8 tools. Zero API keys needed. Free to install.8MIT
- AlicenseBqualityAmaintenanceProvides 32 trading analysis tools for AI-powered market analysis, including real-time data, technical indicators, options Greeks, scanners, and Interactive Brokers portfolio management, all accessible via natural language in Claude Desktop.35319MIT
- Alicense-qualityBmaintenanceAI equity-research analyst for Indian NSE/BSE markets with 28 MCP tools enabling sector screens, valuations, SWOTs, and forensic audits using Claude Agent SDK.Apache 2.0
- AlicenseAqualityDmaintenanceInstitutional 13F intelligence for Claude Desktop, Cursor, and VS Code. Nine Read tools: manager search, holdings, portfolio similarity, consensus portfolio, market regime, sector flows.91MIT
Your Connectors
Sign in to create a connector for this server.