Static source inference · medium confidence · detected: Logging
Deprecated protocol patterns detected
Summary
The server provides 34 tools for trading analysis and Pine Script development. While tool names follow action-verb conventions and are generally clear, most descriptions are moderately detailed but lack LLM-optimization. The critical issue is SCHEMA VISIBILITY: the source code excerpt provided does NOT contain explicit input schema definitions for ANY of the 34 tools, only names and descriptions are visible in the tool list. Per HARD SCORING RULES, if input schemas are not visible, schema scores MUST be 0. This directly collapses the definition quality score. Additionally, parameter descriptions in the listing are minimal (often 1-2 lines), and no output schemas are documented. Error handling is not visible in the provided code. The server uses FastMCP framework with STDIO transport, limiting remote accessibility.
Tools (34)
analyze_pairread onlyauthsource verified50/100
Comprehensive technical analysis for any symbol.
convert_pine_scriptread only50/100
Convert Pine Script code between versions (v1 to v6).
detect_pine_versionread onlysource verified52/100
Automatically detect Pine Script version of provided code.
explain_pine_errorread onlysource verified52/100
Get detailed explanation of a Pine Script error message.
NO INPUT SCHEMAS VISIBLE for any of 34 tools. Per HARD SCORING RULES, all schema scores MUST be 0. The provided source code shows tool names and descriptions but no explicit @mcp.tool() decorators with input_schema definitions or JSONSchema validation. This is a critical blocker for LLM tool selection.
ADD EXPLICIT INPUT SCHEMAS to all 34 tools. Use FastMCP's @mcp.tool() decorator with explicit parameter type definitions (string, number, array, object) and constraints (enum, min/max, pattern). Example: @mcp.tool(input_schema={'symbol': {'type': 'string', 'description': 'Trading symbol (e.g., EURUSD, AAPL, BTC)', 'enum': ['EURUSD', 'GBPUSD', '...']}, 'timeframe': {'type': 'string', 'enum': ['5m', '15m', '1h', '4h', '1d']}})
DOCUMENT OUTPUT SCHEMAS. For each tool, add a 'Returns' section describing response fields, their types, and meaning. Example for get_price: 'Returns: {symbol: string, price: number, bid: number, ask: number, timestamp: ISO8601_string, currency: string}'. Use structured dict with typed fields, not free-text responses.
EXPAND PARAMETER DESCRIPTIONS TO 30-60 CHARS. Examples: 'Symbol to analyze (e.g., EURUSD, AAPL, BTC)' → 'Trading symbol: Forex pair (EURUSD), US stock ticker (AAPL), or cryptocurrency (BTC). Must be uppercase.' This clarifies format, valid values, and use cases without example values LLM reuses literally.
REPLACE EXAMPLE VALUES WITH ENUMS. For timeframe (appears in 20+ tools), define enum: ['5m', '15m', '30m', '1h', '4h', '1d']. For Pine Script version, define enum: ['1', '2', '3', '4', '5', '6', 'auto']. Prevents hallucinated invalid values.
ADD DEPENDENCY HINTS TO TOOL DESCRIPTIONS. E.g., get_price description: 'Get current price for any asset. If you don't know the symbol format, call list_available_pairs() or list_supported_assets() first to discover valid symbols.' This guides multi-step planning.
Spec posture evidence
Inferred effective spec: <=2025-11-25.
Relies on Logging (deprecated) - log to stderr or use OpenTelemetry
Score history
Overall score trend
↑ 27 points across a rubric change (v1 → v2)
47/100
Scored
Grade
Overall
Spec posture
Rubric
2026-09-21
F
47
<=2025-11-25
v2
2026-03-09
F
20
1.12.0+
v1
get_cciread onlyauthsource verified52/100
Calculate Commodity Channel Index (CCI) momentum indicator.
NO OUTPUT SCHEMAS DOCUMENTED. The code excerpt does not show return type definitions, field descriptions, or response structures. LLMs cannot plan downstream tool calls or extract data without knowing response shape. Missing for all 34 tools.
PARAMETER DESCRIPTIONS MINIMAL AND UNDER 20 CHARS. Per HARD SCORING RULES, description score cannot exceed 20 if under 20 chars. Descriptions like 'Symbol to analyze' (19 chars) and 'Time interval' (13 chars) lack context for when/why to use parameters. Examples: get_rsi has 'Symbol to analyze' (no hints on valid symbol formats), get_macd has 'Time interval' (no enum values for '5m', '15m', etc.).
NO ENUMS FOR CONSTRAINED VALUES. timeframe parameter appears in 20+ tools and accepts '5m', '15m', '1h', '4h', '1d' but is defined as free-form string. LLMs will hallucinate invalid timeframes like '2h', '30sec', 'monthly'. Must declare as enum.
EXAMPLE VALUES IN DESCRIPTIONS RISK LITERAL REUSE. Multiple tools include examples like 'EURUSD', 'AAPL', 'BTC' in descriptions. Replace with format constraints or enums. E.g. get_price says '(e.g., 'EURUSD', 'AAPL', 'BTC', 'TSLA')', LLM may pass 'TSLA' literally for crypto queries.
MISSING DEPENDENCY HINTS. No guidance on when to call discovery tools first. E.g., list_available_pairs() and list_supported_assets() exist but no other tool documents 'Call list_available_pairs() first to see all available symbols.' This forces trial-and-error.
NO VISIBLE ERROR HANDLING OR RECOVERY GUIDANCE. Source code excerpt ends before error responses are shown. No evidence of error categorization (retryable, user-fixable, fatal) or recovery hints like 'Invalid symbol, try list_available_pairs() first.' Critical for agent reasoning.
AMBIGUOUS PARAMETER NAMES LACK TYPE SUFFIXES. 'symbol' and 'pair' are used interchangeably (get_price takes 'symbol', get_spread takes 'pair'). No suffix like 'symbol_id' vs 'symbol_name' to clarify whether LLM should pass 'EURUSD' or an internal ID.
PINE SCRIPT TOOLS LACK SCOPE AND SAFETY DOCUMENTATION. validate_pine_script, convert_pine_script, test_pine_strategy, and explain_pine_error accept user code as input but descriptions don't clarify safety boundaries (e.g., 'code runs in sandboxed environment', 'no network access'). Critical for agents to understand risk.
NO DOCUMENTED RATE LIMITS OR QUOTAS. Alpha Vantage API has known rate limits (5 calls/min free tier). No tool description hints at rate limiting or retry guidance. Agents will hit limits and receive cryptic errors with no recovery path.
PAGINATION NOT MENTIONED. list_available_pairs() and list_supported_assets() return collections but no description mentions limit/offset/pagination. If lists are large (20+ items), LLM context window bloats.
list_available_pairslist_supported_assets
IMPLEMENT AND DOCUMENT ERROR RESPONSES. Add error cases to each tool: 'Returns error if symbol not found: "Invalid symbol XXXX. Valid symbols: [EURUSD, GBPUSD, ...]". Retryable: yes, suggest calling list_available_pairs().' Use format_error_response() consistently with actionable hints.
CLARIFY SYMBOL VS PAIR NAMING. Standardize parameter name (prefer 'symbol' for all) and add description suffix: 'symbol: Unified identifier for any asset (Forex: EURUSD, Stock: AAPL, Crypto: BTC).' Or use separate tools with explicit names: get_forex_quote, get_stock_quote, get_crypto_quote.
DOCUMENT PINE SCRIPT SAFETY BOUNDARIES. test_pine_strategy and validate_pine_script descriptions should clarify: 'Runs in sandboxed environment. No network access. No external API calls. Memory and CPU limits: [X] MB, [Y] sec timeout.' This reassures agents about containment.
ADD RATE LIMIT GUIDANCE. health_check tool should return current rate limit status (calls_used / calls_available). Each tool description should note: 'Alpha Vantage API limit: 5 calls/min (free). If rate-limited, retry after 60 seconds.' Prevents agent thrashing on rate limit errors.
IMPLEMENT PAGINATION FOR DISCOVERY TOOLS. Modify list_available_pairs() and list_supported_assets() to accept optional parameters: limit (default 20, max 100), offset (default 0). Return {items: [...], total: N, has_more: bool, offset: N}. Prevents context bloat from large lists.
ADD IDEMPOTENCY DOCUMENTATION. Tools like validate_pine_script and explain_pine_error are idempotent (same input → same output). Mark in description: 'Idempotent: Safe to retry. No side effects.' This lets agents safely retry on transient failures.
SPLIT COMPOSITE TOOLS IF ANY EXIST. Review implementation: if any tool combines 'and' operations (create + send, fetch + analyze), split into separate composable tools. Current tool list looks well-separated, but verify implementation doesn't combine unrelated operations.