bull-milker-mcp
Server Quality Checklist
Latest release: v0.1.0
- Disambiguation5/5
Each tool has a clearly distinct purpose: health check, market snapshot, account positions, portfolio exposure, two screeners (basic vs extended), and two quarterly summaries (transactions vs tax). The screeners and summaries are differentiated by their specific scope and outputs, so an agent should have no trouble selecting the right tool.
Naming Consistency4/5Most tools follow a consistent verb_noun pattern with lowercase and underscores (check_, get_, run_). However, the two quarterly summary tools end with '_tool', which breaks the pattern slightly, and the use of 'run_' for screeners versus 'get_' for others is a minor deviation. Overall, the naming is predictable and readable.
Tool Count5/5With 8 tools, the server is well-scoped for its apparent purpose of trading analysis and portfolio monitoring. Each tool serves a distinct function without redundancy, and the count falls comfortably within the typical range for a focused MCP server.
Completeness4/5The server covers the core workflows: health check, market data, position reading, portfolio concentration, screening (basic and advanced), and quarterly reporting. Minor gaps exist, such as no historical price data or individual order lookup, but these are not critical given the server's explicit read-only and analysis-oriented focus. The tax summary's caveats are well-documented, and the presence of both screeners adds flexibility.
Average 4.4/5 across 8 of 8 tools scored. Lowest: 3.9/5.
See the Tool Scores section below for per-tool breakdowns.
- No community issues in the last 6 months
- 4 commits in the last 12 weeks
- No stable releases found
- No critical vulnerability alerts
- No high-severity vulnerability alerts
- No code scanning findings
- CI status not available
Add a LICENSE file by following GitHub's guide. Once GitHub recognizes the license, the system will automatically detect it within a few hours.
If the license does not appear after some time, you can manually trigger a new scan using the MCP server admin interface.
MCP servers without a LICENSE cannot be installed.
This repository includes a README.md file.
No tool usage detected in the last 30 days. Usage tracking helps demonstrate server value.
Tip: use the "Try in Browser" feature on the server page to seed initial usage.
Add a glama.json file to provide metadata about your server.
If you are the author, simply .
If the server belongs to an organization, first add
glama.jsonto the root of your repository:{ "$schema": "https://glama.ai/mcp/schemas/server.json", "maintainers": [ "your-github-username" ] }Then . Browse examples.
Add related servers to improve discoverability.
How to sync the server with GitHub?
Servers are automatically synced at least once per day, but you can also sync manually at any time to instantly update the server profile.
To manually sync the server, click the "Sync Server" button in the MCP server admin interface.
How is the quality score calculated?
The overall quality score combines two components: Tool Definition Quality (70%) and Server Coherence (30%).
Tool Definition Quality measures how well each tool describes itself to AI agents. Every tool is scored 1–5 across six dimensions: Purpose Clarity (25%), Usage Guidelines (20%), Behavioral Transparency (20%), Parameter Semantics (15%), Conciseness & Structure (10%), and Contextual Completeness (10%). The server-level definition quality score is calculated as 60% mean TDQS + 40% minimum TDQS, so a single poorly described tool pulls the score down.
Server Coherence evaluates how well the tools work together as a set, scoring four dimensions equally: Disambiguation (can agents tell tools apart?), Naming Consistency, Tool Count Appropriateness, and Completeness (are there gaps in the tool surface?).
Tiers are derived from the overall score: A (≥3.5), B (≥3.0), C (≥2.0), D (≥1.0), F (<1.0). B and above is considered passing.
Tool Scores
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explicitly states 'Read-only — returns candidates for you to evaluate, never places any order,' which is a crucial behavioral disclosure. It also explains the effect of overriding bounds. It does not mention rate limits or data freshness, but for a screening tool the key behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each serving a distinct purpose: purpose, defaults/overrides, market values, and safety guarantee. It is front-loaded with the main action and contains no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 7 parameters, lack of annotations, and presence of an output schema, the description provides enough context for an agent to select and invoke the tool correctly. It covers defaults, market values, and read-only behavior. It does not mention the relationship to the extended screener or any limitations, but the output schema presumably covers return values, making the description reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so effectively by naming the three filter dimensions (turnover, volume, % change) and providing default values with units (2-10%, 500k-5M, 1-8%). It also explains that any bound can be overridden and gives valid market values. This meaningfully adds to the bare schema, though it does not map each parameter name explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose4/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs a screener with turnover, volume, and % change filters. It is specific about the resource (Bull Milker screener) and action (run), but does not explicitly distinguish itself from the sibling run_bull_milker_extended_screener, so it lacks full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines3/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on how to use the tool: it provides default filter ranges and explains that any bound can be overridden to widen or narrow the scan. It also lists allowed market values. However, it does not mention when to use this tool versus the extended screener or other alternatives, so usage guidance is 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.
- Behavior4/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. It explicitly states the tool is read-only and cannot place, modify, or cancel orders, which is valuable behavioral context. It does not detail return format or potential error states, but for a health check the disclosure is reasonably complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and every word earns its place. It conveys the purpose, scope, and a key limitation without any fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of a health check and the lack of output schema, the description covers the essential purpose and limitations. It could be more explicit about the return value (e.g., status object or boolean), but it is adequate for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no complexity. The description adds no parameter details, but none are needed; the baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Check' and identifies the resource 'moomoo OpenD' plus the state being verified ('reachable and logged in'). It also distinguishes itself from siblings by clarifying it is read-only and cannot place, modify, or cancel orders, which is a clear differentiator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines3/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: one would call this to verify connectivity and login status before performing other operations. However, there is no explicit statement about when to use it versus alternatives, nor any mention of exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior5/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses that institutional_pct is always None due to moomoo's API limitations, instructs to treat None as unknown, and explicitly states the tool is read-only and never places orders. This goes beyond the absent annotations and covers the tool's safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is 3 sentences, front-loaded with the tool's purpose, then adds critical behavioral details. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key behavioral caveat (institutional_pct always None) and read-only nature, and the output schema exists to document returns. However, it doesn't explain the base Bull Milker criteria or how the PE bounds interact, so some context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions PE ratio filtering, which gives meaning to pe_min and pe_max, but does not describe the market parameter or the interaction of pe_min and pe_max. With 0% schema coverage, the description only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs a 'Bull Milker screener' with additional PE ratio filtering and short-interest enrichment, and the name 'extended' differentiates it from the sibling run_bull_milker_screener.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines3/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for screening with PE and short-interest needs, but does not explicitly state when to prefer this over run_bull_milker_screener or other screeners, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior5/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite having no annotations, the description is highly transparent about the tool's read-only nature and its inability to place orders. It also discloses a critical limitation regarding paper vs. live account confirmation, which goes beyond what annotations would typically cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two efficient sentences, with the purpose front-loaded and no redundant wording. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter read tool, the description covers purpose, safety profile, and a caveat. The output schema presumably documents the return structure, so the description does not need to duplicate that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters in the schema, so the description has no parameter-specific information to add. The baseline for 0-param tools is 4, and nothing in the description undermines that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose4/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource ('Get current positions in the connected moomoo account'). While it does not explicitly distinguish from sibling tools, the scope is unambiguous and the read-only caveat adds clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is for reading positions and explicitly cautions that it cannot place/modify/cancel orders. It also directs the user to cross-check with check_health when paper vs. live status matters, which is an explicit alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states 'Read-only — cannot place, modify, or cancel orders,' which is a key safety-relevant trait. It also discloses that it handles multiple codes. Further details about rate limits or auth are absent, but for a simple read-only snapshot, this 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.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and every word adds value. The safety note is concise yet important. Zero fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness5/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and an output schema, the description covers purpose, parameter format, and read-only behavior. No critical operational gaps. The output schema likely documents return fields, so omitting them here is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates by explaining the 'codes' parameter: it takes one or more stock codes, with concrete examples like 'US.AAPL' and 'US.TSLA'. This adds meaning beyond the bare schema, though it does not specify all accepted formats or limitations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches current price, volume, % change, and other live data for stock codes, with specific examples. The verb 'get' and resource 'market snapshot' are specific, and the scope (one or more codes) distinguishes it from siblings like portfolio exposure or screeners.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly defines when to use the tool: whenever live market data for specific stock codes is needed. It provides example code formats, making the intended use clear. It does not explicitly name alternative tools for exclusion, but sibling context makes the differentiation obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/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. It discloses read-only behavior, deterministic calculation, and detailed output structure (total market value, sector/symbol breakdown, concentration_flags at 25%). This provides meaningful behavioral context beyond a bare tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action verb, and every sentence adds distinct information: computation purpose, return contents, and behavioral traits. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness5/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only analytical tool, the description specifies the threshold, the output components, and the computational nature. It is complete enough to invoke correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and coverage is 100%, so the baseline is 4. The description adds value by explaining what the zero-argument call returns, which is sufficient for invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Compute') and identifies a clear resource ('sector/symbol concentration for the current portfolio'), which distinguishes it from sibling tools like get_account_positions and get_market_snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear that this tool is for concentration analytics on the current portfolio, but it does not explicitly name alternatives or state when not to use it. The 'deterministic calculation, not a model estimate' note adds useful selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses read-only nature, paper trading default (SIMULATE), and the _lookback_warning field when start is omitted. It does not fully specify the return structure (e.g., exact fields or error handling), but adds substantial behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short paragraphs with no fluff. The first sentence states the core purpose, the second handles alternatives, and the third covers parameters and warnings. Every sentence earns its place, and it is front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 optional parameters and no output schema, this description covers purpose, usage, parameter semantics, operational context (read-only, paper trading), and a returning warning field. It could mention the exact response format (e.g., a list of quarter objects) but the content is sufficiently complete for an AI agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains start/end are 'YYYY-MM-DD' strings and details the consequence of omitting start (default lookback and warning). It doesn't explicitly explain what happens if end is omitted, but the provided format and behavior for start add significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compiles filled trades into quarterly buckets labeled Q126, etc., including trade count, buy/sell split, gross notional, and symbols. It also distinguishes itself from get_quarterly_tax_summary_tool by explicitly noting it does no cost-basis matching, a clear differentiator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines5/5Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs users to use get_quarterly_tax_summary_tool for realized gains/losses instead, and explains the behavior when start is omitted (default ~90-day lookback). This provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior5/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the transparency burden. It discloses that the tool is read-only ('cannot place, modify, or cancel orders'), requires a specific environment variable, raises errors rather than silently failing, uses FIFO cost-basis, and does not account for wash sales, dividends, or corporate actions. It also clearly labels outputs as estimates, not final tax advice. This is comprehensive behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
Although the description is relatively long, every sentence serves a purpose: the opening line summarizes functionality, the IMPORTANT section groups safety and limitation warnings, and the parameter note at the end is practical. The structured use of bullet points and bold headings makes it easy for an agent to parse. No filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness5/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a tax-related tool with no annotations, no output schema, and two flexible parameters, the description covers all necessary aspects: what it computes, its data source, prerequisites, limitations, and parameter usage. It appropriately omits return-value details since no output schema exists, but the description still gives enough information for the agent to understand the tool's behavior and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters5/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates fully. It explains that `start` and `end` are 'YYYY-MM-DD' strings and warns about the ~90-day default lookback, with an explicit example for a full tax year. This adds meaningful semantics beyond the bare schema, which only shows nullable string defaults. It even clarifies the consequence of omitting `start`, which is crucial for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Realized capital gain/loss by quarter (Q126 format), split into short-term and long-term, using FIFO cost-basis matching against your LIVE trading account's deal history.' This specifies the exact verb (get/realized), resource (capital gain/loss), and scope (LIVE trading account, FIFO). It differentiates from siblings like `get_quarterly_transaction_summary_tool` by focusing on tax-specific figures rather than generic transactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines5/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: it is for planning estimates only and warns against treating it as final tax figures, recommending reconciliation with the broker's 1099-B. It also explains prerequisites (TAX_AUDIT_ENABLE_LIVE=true) and gives concrete advice on date handling (pass an explicit start for a full tax year). These guidelines help the agent decide when to invoke this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
GitHub Badge
Glama performs regular codebase and documentation scans to:
- Confirm that the MCP server is working as expected.
- Confirm that there are no obvious security issues.
- Evaluate tool definition quality.
Our badge communicates server capabilities, safety, and installation instructions.
Card Badge
Copy to your README.md:
Score Badge
Copy to your README.md:
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/mDemarco12/bull-milker-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server