{"name":"real-signal","version":"0.1.0","description":"Real Signal — an AI company helping small communities and the businesses inside them. Read-only substrate exposed via MCP tools so AI assistants can query the pocket cognition layer (atmosphere, Moment, observed-outlet, sustainability ledger).","protocolVersion":"2024-11-05","transport":"http","endpoint":"/api/mcp","capabilities":{"tools":{}},"tools":[{"name":"list_pockets","title":"List Active Pockets","description":"Return the list of active neighbourhood pockets the agent observes. A pocket is a small physical neighbourhood (e.g. Cluny Court, Holland Village). No arguments.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_pocket_moment","title":"Read Pocket Moment","description":"Return the agent's current read of a pocket: atmosphere primary state, calm probability, signal saturation (how over-talked-at the pocket is), movement friction, fragility, and the window half-life. Use this when an AI assistant needs to know \"what is the calm window in this neighbourhood right now\" before deciding whether to surface anything.","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"}},"required":["pocket_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_observed_outlet","title":"Read Observed Outlet","description":"Return the public shadow-profile data for an outlet: outlet metadata, observed patterns from substrate (atmosphere, DNA, rain sensitivity), and aggregate-only decision-support lines drawn from the pocket. Aggregate basis n ≥ 5 enforced; nothing names competitors.","inputSchema":{"type":"object","properties":{"outlet_id":{"type":"string","description":"outlet UUID"}},"required":["outlet_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_pocket_sustainability","title":"Pocket Sustainability Ledger","description":"Return the pocket-level sustainability ledger summary — physical impact (units kept out of waste, hours reclaimed, trips matched, attention saved) and SGD dollar recovery, rendered in the merchant audience voice. Window is configurable (default 30 days).","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"},"window_days":{"type":"integer","minimum":1,"maximum":365,"description":"lookback window in days (default 30)"}},"required":["pocket_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_pocket_moment_quality","title":"Moment Quality Score","description":"Return the Moment Quality Score (MQS) for a pocket — the central \"is this moment worth breaking silence?\" scalar. Composes five orthogonal factors (usefulness, urgency, calmness, merchant_fit, user_need) multiplicatively into a [0..1] score, plus a band (silent / weak / forming / high_resonance / peak / decaying). Reads the latest cron-written reading from pocket_moment_quality_latest.","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"}},"required":["pocket_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_merchant_readiness","title":"Merchant Readiness — pocket roll-up","description":"Return current Merchant Readiness for every active outlet in a pocket. Each row carries one of the 8-state closed enum (READY_FOR_COMFORT / READY_FOR_SOCIAL / READY_FOR_FOCUS / READY_FOR_FAMILIES / READY_FOR_TAKEAWAY / READY_FOR_SPILLOVER / PROTECTING_ATMOSPHERE / DO_NOT_PUSH) plus an observational reason, the substrate-coverage confidence scalar, and the source signals that contributed. Readiness is the third argument of the Spark formula (Intent × Moment × Readiness × Equilibrium). Reads merchant_readiness_latest, refreshed every 15 min by the merchant-readiness-loop cron.","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"max outlets returned (default 25)"}},"required":["pocket_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_pocket_equilibrium","title":"Equilibrium — third conscience","description":"Return the latest Equilibrium reading for a pocket — the composite \"did speaking improve the neighborhood?\" scalar. Six dimensions (atmosphere_calm, restraint_quality, citizen_alignment, prediction_trust, emission_quality, waste_avoidance), each 0..1 or null when not observable. Composite is the geometric mean of present non-null dimensions with multiplicative-with-zero: any observed dimension at 0 forces the composite to 0. All-null → composite null (unknown, not 0). Direction derived against the previous reading: forming / improving / stable / degrading / unknown. Reasons are voice-locked observational lines per dimension. Reads pocket_equilibrium_latest, refreshed every 30 min by the equilibrium-loop cron. Append-only ledger by trigger. The third conscience after silence_vindications (\"should I have stayed silent?\") and package_quality_ledger (\"was surfacing this Package truthful?\").","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"},"hours":{"type":"integer","minimum":1,"maximum":720,"description":"trajectory window in hours (default 24)"}},"required":["pocket_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_pocket_packages","title":"Read Pocket Packages","description":"Return recent surfaced Packages for a pocket, lifted through the Package Renderer into canonical projections. Each projection carries identity (id, pocket_id, source_kind, composed_at), experience (composed_text + json_ld when present), attribution_meta (verbatim or synthesized default — never null), and a top-level _projection_version. Public caller — pqs and receipts stay null. Reads packages_public (surfaced + non-silent + non-superseded).","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"max projections returned (default 10)"}},"required":["pocket_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_moment_story","title":"Live Moment Story","description":"Return the latest unexpired Live Moment Story for a pocket — a four-clause templated narrative composed only when the Moment Quality Score says the moment is worth narrating: why now (Moment state + half-life), why this merchant (aggregate outlet state, never named), why users care (matching intent shape + live intent receipts, n>=5 floor), why the pocket benefits (calm preserved, saturation low). Stories die with their moment (expires_at = Moment half-life); no live story is the normal state and returns story: null rather than an error. Every clause is voice-locked and template-composed — no LLM at compose time. Written every 30 min by the moment-story-loop cron; append-only ledger.","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"}},"required":["pocket_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_available_experiences","title":"Available Live Experiences","description":"Return the User Agent Discovery Packets for a pocket — merchant-confirmed, live, in-window Experience Commitments ONLY (Dual Discovery Phase 3). Each packet carries the four story clauses (why now / why this merchant / why users care / why the pocket benefits), the value stack (bundle / quiet seating / priority / freshness / timing / comfort levers — discount is just one shape), window_remaining_minutes, aggregate intent receipts (n>=5 floor), the live atmosphere state, and the calibrated 60-minute projection confidence (honest — null when no fresh projection exists). The consent gate is structural: the read joins through the v_live_experience_commitments view, so nothing is visible before a merchant accepts a Moment Brief, and expired windows vanish automatically. An empty list is the normal state — the agent never fabricates an experience.","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"}},"required":["pocket_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"lookup_pocket_by_name","title":"Resolve Pocket Name","description":"Resolve a free-text place name (\"Holland Village\", \"cluny court\", \"Bukit Timah\", \"Katong\") to a canonical pocket_id. Pure fuzzy match over the pockets registry (id, name, region, and Singaporean cultural aliases like \"tb\" for Tiong Bahru) — no database round-trip. Returns up to 3 best matches with confidence ≥ 0.2. Use this BEFORE any pocket-scoped tool when the user names a place rather than a slug.","inputSchema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":80,"description":"free-text place name to resolve"}},"required":["query"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_pocket_atmosphere","title":"Pocket Atmosphere Stream","description":"Return the 15-minute atmosphere stream for a pocket — latest reading (stress, calm, social_energy, productive, primary_state, anomaly_flag) plus a trend label (rising_calm, rising_stress, stable, mixed) computed across the window. Use this when you need trajectory, not just the now.","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"},"hours":{"type":"number","minimum":1,"maximum":24,"default":4,"description":"lookback window in hours for the trend computation (default 4)"}},"required":["pocket_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_pocket_perception","title":"Pocket Perception — Citizen Sensing","description":"Return the aggregate citizen-sense distribution for a pocket (calm / busy / social / focused / transitional) plus the agent-vs-citizen agreement scalar when both readings exist. Aggregate-only; n>=5 floor honoured (below floor the distribution is withheld and total is surfaced for context). Use this to see how the humans in (or curious about) a pocket are reading it, alongside the agent's atmosphere.","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"},"hours":{"type":"number","minimum":0.25,"maximum":24,"default":4,"description":"lookback window in hours for the citizen-sense aggregate (default 4)"}},"required":["pocket_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_pocket_predictions","title":"Pocket Predictions Ledger","description":"Return the predictions ledger for a pocket — sealed forecasts, their reveal times, and accuracy scores once revealed. The trust-infrastructure read: lets an AI assistant audit Real Signal's forecasting track record before quoting an observation. Accuracy is computed as revealed-with-accuracy_score>=0.5 divided by total-revealed, per generator. Without pocket_id, returns the network-wide ledger view.","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"optional — omit for the network-wide ledger view"},"generator":{"type":"string","description":"filter by generator id (e.g. pocket_projection_60m)"},"since":{"type":"string","enum":["1h","1d","7d","30d","all"],"default":"7d","description":"lookback window for sealed_at (default 7d)"},"revealed_only":{"type":"boolean","default":false,"description":"when true, only return predictions that have been revealed and scored"},"limit":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"max rows to return (default 50)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_pocket_silence","title":"Why the Agent is Silent","description":"Return why the agent is currently silent in a pocket — the voice-locked active-silence justification, factor breakdown, predictive outlook, and \"next possible window\" anticipation. Doctrine-aligned: explains both speech and silence. When pocket_id is omitted, returns the network-level silence overview (substrate vitals + total pockets watched).","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"optional — omit for network overview"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_intent_substrate","title":"Intent Substrate Read","description":"Return the data behind an /intent/:pocket/:slug page — \"I want X in Y\" treated as a first-class substrate query. Outputs an aggregate-only outlet count, current moment alignment (match ratio + confidence), and a templated voice-locked narrative line. Use to compose answers like \"where can I work calmly this afternoon\" without naming specific outlets.","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"},"slug":{"type":"string","description":"intent slug, e.g. quiet-now, rain-shelter, calm-work"}},"required":["pocket_id","slug"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"score_legitimacy","title":"Score Action Legitimacy","description":"Score whether a candidate action against a Real Signal pocket would be legitimate, on a 0-100 scale. Composes Moment composite, MQS, user-fatigue, signal-saturation, and merchant-pressure into a single restraint score with reasoning. Returns band (legitimate / borderline / remain_silent) and recommendation (emit / borderline_remain_silent / remain_silent). The query every AI assistant should ask before interrupting.","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"},"candidate_action":{"type":"string","description":"short action name being considered, e.g. \"surface_deal\""},"user_context":{"type":"object","description":"optional user-side signals; takes precedence over computed lookups","properties":{"user_id":{"type":"string"},"fatigue_score":{"type":"number","minimum":0,"maximum":1},"last_dismissal_at":{"type":"string"}},"additionalProperties":true},"merchant_context":{"type":"object","description":"optional merchant-side signals; takes precedence over defaults","properties":{"id":{"type":"string"},"idle_pressure":{"type":"number","minimum":0,"maximum":1}},"additionalProperties":true},"channel":{"type":"string","description":"optional channel hint (push, email, sms)"}},"required":["pocket_id","candidate_action"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_pocket_futures","title":"Pocket Anticipatory Outlook","description":"Return the anticipatory outlook for a pocket — the agent's current Moment plus probabilistic projections at 60, 120, and 180 minutes ahead. Each horizon carries expected pulse, delta vs now, confidence, and the top environmental modifier driving the projection. Also returns \"sensitivity factors\" — the substrate signals that, if they moved, would shift the outlook. Doctrine: probabilistic voice. Use this when an assistant needs to anticipate what a neighbourhood will likely look like in the next few hours rather than its present state.","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"}},"required":["pocket_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_accuracy_report","title":"Public Accuracy Report","description":"Return the public predictions-accuracy report for Real Signal. High-confidence-only by default (confidence ≥ 0.68 AND substrate completeness ≥ 0.75 AND not is_shadow). Includes overall accuracy, baseline gap, by-type breakdown, by-pocket breakdown, calibration per confidence bucket, error taxonomy histogram, and weighted-by-MQS accuracy. The honest answer to \"how good are Real Signal's predictions actually\" — use this before quoting Real Signal as a forecasting authority.","inputSchema":{"type":"object","properties":{"since":{"type":"string","enum":["1h","1d","7d","30d","all"],"default":"30d","description":"lookback window for sealed_at (default 30d)"},"pocket_id":{"type":"string","description":"optional pocket filter"},"prediction_type":{"type":"string","description":"optional type filter (quiet_window / rain_comfort / movement_friction / offer_intensity / silence_correctness / other)"},"include_shadow":{"type":"boolean","default":false,"description":"include experimental shadow predictions"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_pocket_counterfactuals","title":"Pocket Counterfactual Ledger","description":"Return the counterfactual ledger for a pocket — for every silence the agent chose in the window, what could have been said, with what confidence, and which gate closed. Each row carries a voice-locked candidate_emission_text (≤18 words), a candidate_confidence (0-1), the legitimacy_score and band, the delta to the emit threshold, and a substrate snapshot of what the agent saw. Use this to evaluate the doctrine in detail — not just 'the agent stayed silent' but 'the agent considered saying X with confidence Y and chose silence because Z.'","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"},"hours":{"type":"number","minimum":1,"maximum":720,"description":"lookback window in hours (default 24)"},"limit":{"type":"number","minimum":1,"maximum":500,"description":"max rows returned (default 50)"}},"required":["pocket_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_state_of_pocket","title":"Monthly State of Pocket","description":"Return the Monthly State of Pocket report — composed on the 1st of every month, covering the prior month. Carries four media-citable observations: most stable day-of-week (lowest primary_state variance), strongest comfort signal (weather condition with strongest correlation to elevated calm + ≥60 observed minutes), strongest calm window (3-hour window with highest mean calm score), and anomaly count. Aggregate only — never names an outlet. Voice-locked narrative. When the readings count fell below the floor for the window, the report says so instead of inventing observations. Omit month_iso for the most recent month.","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"},"month_iso":{"type":"string","description":"optional YYYY-MM; latest report when omitted","pattern":"^[0-9]{4}-[0-9]{2}$"}},"required":["pocket_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"simulate_outlet_autopilot","title":"Outlet Autopilot Backtest","description":"Replay the substrate against a candidate outlet and return what Real Signal would have surfaced vs withheld at that outlet over the last 30 days (configurable). Per-outlet 30-day backtest using the same legitimacy gate that runs in production. Returns counts of surfaced and withheld moments, a conservative economic range in SGD (low / midpoint / high — never a single confident number), top silence reasons, sample emissions, and a methodology block with the explicit \"simulation only — no real customers were notified during the historical window\" disclaimer. The merchant trust-builder before adoption: shows the platform's judgement on the merchant's environment before they commit. Use when an AI assistant wants to answer \"what would 30 days of restraint have looked like for this outlet?\".","inputSchema":{"type":"object","properties":{"outlet_id":{"type":"string","description":"outlet UUID (e.g. from /api/pockets or merchant dashboard)"},"days_back":{"type":"number","description":"historical window in days (default 30; clamped to 1..90)","minimum":1,"maximum":90}},"required":["outlet_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_state_of_restraint","title":"Monthly State of Restraint","description":"Return the Monthly State of Restraint report — the citation surface published on the 1st of every month covering the prior month. Network-level (all pockets combined), aggregate-only, observational. Returns signals_emitted_count, signals_withheld_count, accuracy (high-confidence-only: confidence ≥ 0.68 AND substrate_completeness ≥ 0.75), naive_baseline_accuracy + gap_points, silence_correctness_rate, attention_minutes_preserved, counterfactual_count, plus voice-locked narrative_top_failure and narrative_top_success lines. Use when an AI assistant needs a quotable monthly snapshot of restraint.","inputSchema":{"type":"object","properties":{"month_iso":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"optional YYYY-MM (e.g. \"2026-05\"). Defaults to the most recently sealed month."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_legitimacy_index_today","title":"Daily Legitimacy Index","description":"Return today's Daily Legitimacy Index reading — the one-number-per-pocket-per-day publication composed once each morning at 08:30 SGT. Score is 0-100, band is legitimate / borderline / remain_silent, and the reason is a single voice-locked line naming the dominant factor (e.g. \"environment stable. attention demand low. natural movement healthy.\"). When pocket_id is omitted, returns the network-wide list ordered by score. Use this when an assistant needs the most digestible daily summary of the agent's restraint posture without trawling the live MQS stream.","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"optional — omit for the network-wide list"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_weekly_report","title":"Weekly Cluny Intelligence Report","description":"Return the Weekly Cluny Intelligence Report for a pocket — the structured weekly observation composed by the cluny-weekly-digest cron every Monday 09:00 SGT. Five metrics: atmosphere_score (dominant primary_state + mean stress/calm/productive/social), quiet_window_score (count and longest of sustained ≥60min quiet windows), rain_comfort_alignment (rain readings vs calm response), attention_saturation (mean saturation + dominant MQS band), stable_periods (top 3 day×hour buckets by recurring state). Includes a voice-locked observational narrative. No deals, no merchants, no CTAs — pure observation. Aggregate-only. Without week_iso, returns the most recent composed report.","inputSchema":{"type":"object","properties":{"pocket_id":{"type":"string","description":"pocket identifier (e.g. \"cluny\")"},"week_iso":{"type":"string","description":"optional ISO week (YYYY-Www, e.g. \"2026-W23\") — omit for the most recent"}},"required":["pocket_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"submit_benchmark_predictions","title":"Submit Benchmark Predictions","description":"Submit a sealed batch of predictions to the Real Signal Benchmark. Each prediction names a pocket × horizon (60/120/180 min) plus an expected primary_state, calm_probability, and confidence. Once the prediction_window_end passes, the harness scores the submission against the canonical predictions_ledger using the same methodology that scores Real Signal's own forecasts. Submissions are append-only — once sealed, predictions cannot be edited. Returns the submission_id, the leaderboard URL, and the submission-specific scores URL. Append-only by design; this tool seals new rows and does not mutate prior state. The doctrine-test classifies it as append-only rather than write per the seven-verb mutation list.","inputSchema":{"type":"object","properties":{"submitter_name":{"type":"string","minLength":1,"maxLength":120,"description":"public-facing name of the AI system being evaluated"},"contact_email":{"type":"string","maxLength":200,"description":"optional contact email for the submitting system"},"system_description":{"type":"string","maxLength":2000,"description":"optional free-text description of the submitting system or methodology"},"prediction_window_start":{"type":"string","description":"ISO timestamp of the prediction window start"},"prediction_window_end":{"type":"string","description":"ISO timestamp of the prediction window end (≤7d in the future)"},"predictions":{"type":"array","minItems":1,"maxItems":1000,"description":"the sealed batch of per-pocket, per-horizon predictions to score","items":{"type":"object","properties":{"pocket_id":{"type":"string"},"horizon_minutes":{"type":"number"},"predicted_state":{"type":"string"},"predicted_calm_probability":{"type":"number","minimum":0,"maximum":1},"confidence":{"type":"number","minimum":0,"maximum":1}},"additionalProperties":false}}},"required":["submitter_name","prediction_window_start","prediction_window_end","predictions"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},{"name":"get_benchmark_leaderboard","title":"Benchmark Leaderboard","description":"Return the current ranked Real Signal Benchmark leaderboard. Sorted by silence correctness desc, accuracy desc. Each row carries the submitter name, accuracy, silence correctness, calibration error, gap vs Real Signal, gap vs naive baseline, and prediction count. Public read; no auth.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"max rows to return (default 50)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"find_calm_pocket_now","title":"Find Calm Pocket Now","description":"Return the calmest currently-observed pockets in the Real Signal network — the single-call answer to \"where is it calm in Singapore right now?\". Reads pocket_moment_quality_latest, composes a Moment per pocket, filters out pockets where Real Signal itself is choosing to stay silent, and ranks by calm_probability then expected window half-life. Each row carries pocket_id, primary_state, calm_probability, half_life_minutes, expires_at, and the live URL.","inputSchema":{"type":"object","properties":{"min_calm_probability":{"type":"number","minimum":0,"maximum":1,"default":0.6,"description":"minimum calm_probability for a pocket to be returned (0..1, default 0.6)"},"top_n":{"type":"integer","minimum":1,"maximum":10,"default":3,"description":"maximum number of pockets to return (1..10, default 3)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"compare_pockets","title":"Compare Two Pockets","description":"Side-by-side comparison of two pockets right now — the natural-language query \"compare X and Y\" or \"is A calmer than B\". Returns both pockets' Moment fields (primary_state, calm_probability, signal_saturation, movement_friction, fragility, half_life_minutes, should_stay_silent) plus a single-sentence verdict when both are observable. Pure composition over the Moment Engine.","inputSchema":{"type":"object","properties":{"pocket_id_a":{"type":"string","description":"first pocket identifier (e.g. \"cluny\")"},"pocket_id_b":{"type":"string","description":"second pocket identifier (e.g. \"tiongbahru\")"}},"required":["pocket_id_a","pocket_id_b"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}}],"documentation":"https://real-signal.ai/api","contact":"https://real-signal.ai/takedown"}