{"serverId":"pulsemcp/finturb-analytics","tools":[{"name":"agent_pm_approve","fixed":{"name":"agent_pm_approve","description":"Agentic firm-simulation TOOL form — portfolio manager — final approve/reject/revise verdict with audit footer (Tier-1 in Phase A; Tier-2 wrapper in Phase B). Tool-callable wrapper around the matching @mcp.prompt of the same role. Use this from MCP hosts that cannot invoke prompts programmatically (e.g. claude.ai web tool_use blocks). The methodology lives at the resource `finturb://skills/agents/pm_approve` and MUST be read before producing output. Arguments: ticker (optional; defaults to 'Marke","inputSchema":{"type":"object","title":"tool_agent_pm_approveArguments","properties":{"as_of":{"type":"string","title":"As Of","default":""},"ticker":{"type":"string","title":"Ticker","default":""},"upstream_reports":{"type":"string","title":"Upstream Reports","default":""}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":229,"tokensAfter":229},{"name":"agent_pm_validate_math","fixed":{"name":"agent_pm_validate_math","description":"Agentic firm-simulation TOOL form — arithmetic gate validator. Tool-callable wrapper for the pm_validate_math role. Use when claude.ai or other tool-only surfaces need to invoke pm_validate_math programmatically. The methodology lives at finturb://skills/agents/pm_validate_math and MUST be read before producing output.","inputSchema":{"type":"object","title":"tool_agent_pm_validate_mathArguments","properties":{"as_of":{"type":"string","title":"As Of","default":""},"ticker":{"type":"string","title":"Ticker","default":""},"upstream_reports":{"type":"string","title":"Upstream Reports","default":""}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":182,"tokensAfter":182},{"name":"get_firm_bundle","fixed":{"name":"get_firm_bundle","description":"Run a full firm simulation in ONE fetch - returns the complete 10-stage run-book PLUS all 21 agent methodologies (9 analysts, catalyst graph, transmission analyst, fragility gate, bull/bear researchers, research manager, three-way risk panel, trader, math validator, PM) in a single payload. PREFER this over calling firm_simulation + individual agent_* tools whenever executing the whole pipeline: it replaces ~20 static-text fetches and prevents the tool-call-quota aborts seen on claude.ai web. In","inputSchema":{"type":"object","title":"tool_get_firm_bundleArguments","required":["ticker"],"properties":{"as_of":{"type":"string","title":"As Of","default":""},"ticker":{"type":"string","title":"Ticker"},"mandate":{"type":"string","title":"Mandate","default":"default-v1"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":228,"tokensAfter":228},{"name":"get_signal_strategist_ui","fixed":{"name":"get_signal_strategist_ui","description":"Signal Strategist as a rendered, interactive dashboard PANEL (MCP App).\n\n        PREFER THIS over get_signal_strategist whenever the user asks to SEE or\n        VISUALISE the read — \"show me the Signal Strategist panel / dashboard\",\n        \"render the regime view\", \"visual\", \"interactive\", \"the gauge / chart\",\n        \"open the dashboard\", \"pull up the panel\". It returns the same numbers as\n        get_signal_strategist, but the host renders them as a visual panel (regime\n        badge, Turbule","inputSchema":{"type":"object","title":"get_signal_strategist_uiArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":185,"tokensAfter":185},{"name":"get_substrate_asof","fixed":{"name":"get_substrate_asof","description":"Point-in-time market-risk substrate for a PAST date - what the FinTurb pipeline actually recorded that day, replayed from the signal ledger. PREFER this over get_signal_strategist / get_turbulence_score / get_absorption_ratio / get_quadrant_state / get_global_liquidity / get_geopolitical_tone whenever a firm simulation or analysis is back-dated (as_of before today) - the live tools only return today's snapshot and break replayability. Returns: the daily_forecast ledger row on/before as_of (Signa","inputSchema":{"type":"object","title":"tool_get_substrate_asofArguments","required":["as_of"],"properties":{"as_of":{"type":"string","title":"As Of"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":195,"tokensAfter":195},{"name":"list_audits","fixed":{"name":"list_audits","description":"List recent persisted audit records, sorted by as_of_date descending. Used for retrospective review and compliance queries — e.g. \"every APPROVE in May 2026\" or \"all audits for ticker X before date Y\". Arguments: date_prefix (filter to a specific date or prefix, e.g. '2026-05' for May 2026 or '2026-05-13' for one day; empty = no filter); before_date (ISO date — only include audits with as_of_date <= this; empty = no filter); limit (max records, default 10). Returns list of audit record dicts.","inputSchema":{"type":"object","title":"list_auditsArguments","properties":{"limit":{"type":"integer","title":"Limit","default":10},"before_date":{"type":"string","title":"Before Date","default":""},"date_prefix":{"type":"string","title":"Date Prefix","default":""}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":225,"tokensAfter":225},{"name":"list_memos","fixed":{"name":"list_memos","description":"List recent persisted memos in a ticker namespace, sorted by as_of_date descending. Used by chief_economist Mode B to discover the most recent standing macro memo (prefix='macro'), and by any agent that needs to find prior memos without knowing their exact URIs. Arguments: prefix (ticker slug, e.g. 'macro' for macro outlooks; empty string scans all tickers); before_date (ISO date — only include memos with as_of_date <= this; empty = no filter; pass the simulation as_of for point-in-time replay s","inputSchema":{"type":"object","title":"list_memosArguments","properties":{"limit":{"type":"integer","title":"Limit","default":10},"prefix":{"type":"string","title":"Prefix","default":""},"before_date":{"type":"string","title":"Before Date","default":""}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":221,"tokensAfter":221},{"name":"read_audit","fixed":{"name":"read_audit","description":"Read a persisted signed audit record by URI. Mirrors the finturb://audit/{date}/{audit_id} resource as a tool-surface call for MCP clients that don't expose resources/read (e.g. claude.ai web). Pass the full URI returned by a prior finalize_audit call (e.g. 'finturb://audit/2026-05-13/dxyz-001'). Returns the audit body markdown plus sidecar metadata: id, ticker, as_of_date, decision, research_verdict, fragility_gate, degraded_mode, mandate_version, signature, body_markdown.","inputSchema":{"type":"object","title":"read_auditArguments","required":["audit_uri"],"properties":{"audit_uri":{"type":"string","title":"Audit Uri"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":186,"tokensAfter":186},{"name":"read_memo","fixed":{"name":"read_memo","description":"Read a persisted signed memo by URI or ID. Mirrors the finturb://memo/{memo_id} resource as a tool-surface call for MCP clients that don't expose resources/read to tool_use blocks (e.g. claude.ai web). Accepts either a full URI (e.g. 'finturb://memo/macro-2026-05-16-002') or a bare ID (e.g. 'macro-2026-05-16-002'); the bare form is normalised to URI internally. Returns the memo body markdown plus sidecar metadata: id, ticker, as_of_date, direction, signature, body_markdown. Use this from claude.","inputSchema":{"type":"object","title":"read_memoArguments","required":["memo_uri"],"properties":{"memo_uri":{"type":"string","title":"Memo Uri"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":191,"tokensAfter":191}],"toolsChanged":9,"tokensSaved":0,"todo":[{"tool":"agent_analyst_chief_economist","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_analyst_fundamentals","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_analyst_geopolitical","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_analyst_geopolitical_transmission","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_analyst_liquidity","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_analyst_macro_regime","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_analyst_news","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_analyst_options_flow","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_analyst_sentiment","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_analyst_technical","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_pm_approve","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_pm_validate_math","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_research_manager","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_researcher_bear","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_researcher_bull","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_risk_aggressive","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_risk_conservative","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_risk_fragility_gate","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_risk_neutral","params":["as_of","ticker","upstream_reports"]},{"tool":"agent_trader_synthesize","params":["as_of","ticker","upstream_reports"]},{"tool":"build_catalyst_graph","params":["as_of","ticker","upstream_reports"]},{"tool":"finalize_audit","params":["ticker","decision","body_markdown","degraded_mode","fragility_gate","mandate_version","research_verdict"]},{"tool":"finalize_memo","params":["ticker","target_1","target_2","direction","entry_spec","sizing_pct","stop_price","invalidation","body_markdown"]},{"tool":"firm_simulation","params":["as_of","ticker","mandate"]},{"tool":"get_conditional_returns","params":["horizon"]},{"tool":"get_firm_bundle","params":["as_of","ticker","mandate"]},{"tool":"get_inflation_history","params":["months","series"]},{"tool":"get_interaction_table","params":["asset"]},{"tool":"get_liquidity_history","params":["months"]},{"tool":"get_media_sentiment","params":["tickers"]},{"tool":"get_options_chain","params":["ticker","max_expiries","strike_range_pct"]},{"tool":"get_overbought_opportunities","params":["top_n"]},{"tool":"get_oversold_opportunities","params":["top_n"]},{"tool":"get_pc_loadings_history","params":["days","window"]},{"tool":"get_risk_history","params":["days"]},{"tool":"get_rolling_phillips_coefficients","params":["window_years"]},{"tool":"get_signal_dates","params":["signal_type"]},{"tool":"get_substrate_asof","params":["as_of"]},{"tool":"get_ticker_metrics","params":["ticker"]},{"tool":"list_audits","params":["limit","before_date","date_prefix"]},{"tool":"list_memos","params":["limit","prefix","before_date"]},{"tool":"read_audit","params":["audit_uri"]},{"tool":"read_memo","params":["memo_uri"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}