"Information about prediction markets and Polymarket platform" matching MCP tools:
- Call this when the user wants current price/volume for several markets at once -- a watchlist, a portfolio, "check on these 5 markets" -- instead of calling foresea_analyze_market once per market. Each ref is "platform:ident", e.g. "kalshi:KXFED-25JUN-H" or "polymarket:some-market-slug". Every quote carries fetched_at and age_seconds so you can judge freshness yourself -- both venues rate-limit hard, so don't assume a quote is live without checking age_seconds. One bad ref returns an error on that entry only; the rest of the batch still succeeds. Up to 50 refs per call. Example: refs=["kalshi:KXFED-25JUN-H", "polymarket:fed-cut-2026"] → {quotes: [{platform, ident, probability, volume, fetched_at, age_seconds, error}], count, truncated}.ConnectorNo auth
- Leave feedback about AgentMarketplace itself — bugs, confusing tools, feature requests. This is for feedback about the platform, not about a counterparty. There is no reputation or rating system here — that lives in AgentTrust. Args: access_token: AgentAuth bearer token (requires ``market.read``). message: Free-text feedback, up to 2000 characters. Returns: ``{"recorded": true}`` on success.ConnectorNo auth
- Retrieve The Hill Kinabalu’s official public wedding venue and 2026/2027 package information, including capacity, event sizes, starting package prices, key inclusions, add-ons without prices, payment structures, and enquiry links. Use this when someone asks about weddings, wedding packages, the event venue, guest capacity, package pricing, or how to enquire. This tool does not check date availability or submit an enquiry.ConnectorNo auth
- Get a Chinese-metaphysics signal on a binary prediction-market question (Polymarket/Kalshi style yes/no outcomes). Use when a user — or a trading agent — wants an UNCORRELATED, for-fun read on a market: 'will X happen by date Y'. Returns a lean (yes/no/neutral), a confidence, the 五行 reasoning from the resolution date's energy, and a mandatory disclaimer. This is ENTERTAINMENT and a falsifiable ritual — NOT financial advice. Always present it as a novelty signal, never as a recommendation to place a bet.ConnectorNo auth
- The oracle's standing questions recomputed daily (BTC/ETH/SOL vs price targets, next FOMC decision, most-traded Polymarket markets, upcoming CPI/NFP): for each, probability, 80% interval, base rate, market odds, edge and commitment hash — no waiting, no LLM call, cached. Pass slug to get one forecast with full drivers/failure modes and its history. Poll in a loop for cheap calibrated priors. $0.002/call. Use for today's standing forecasts without waiting; to ask your own question use oracle_forecast.ConnectorNo auth
- The oracle's standing questions recomputed daily (BTC/ETH/SOL vs price targets, next FOMC decision, most-traded Polymarket markets, upcoming CPI/NFP): for each, probability, 80% interval, base rate, market odds, edge and commitment hash — no waiting, no LLM call, cached. Pass slug to get one forecast with full drivers/failure modes and its history. Poll in a loop for cheap calibrated priors. $0.002/call. Use for today's standing forecasts without waiting; to ask your own question use oracle_forecast.ConnectorNo auth
Matching MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides AI agents with real-time prediction market odds from Polymarket and Kalshi, enabling them to browse active markets, retrieve detailed probabilities and trading data, and discover trending markets via x402 micropayments.MIT
- AlicenseAqualityDmaintenanceProvides search, trending, odds, arbitrage, and category browsing for prediction markets (Polymarket & Kalshi) via the Model Context Protocol, enabling AI agents to access live market data without API keys.51MIT
Matching MCP Connectors
Live Kalshi + Polymarket prices, orderbooks, trades, results. Pay per result via Apify.
Your agent needs the crowd's number — live odds on elections, policy, macro prints and sport, from the venues where people put money behind the opinion. **What you can ask for** • "What are the current odds on this event?" • "List the open markets on this topic across both venues." • "Show recent trades and how the price moved." • "What is the implied probability now versus a week ago?" **How to use it** Point any MCP client at https://mcp.aisa.one/prediction-market-data/mcp and sign in with OAuth — there is no key to create or paste. 5 tools: Kalshi markets and trades, Polymarket markets, events and activity. **Why this rather than the source** Both venues in one shape, so the same question can be priced twice. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Read the odds here, then ask the same agent for the market data or the news behind them — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/finance/mcp for equities, crypto and prediction markets in one place.
- Prediction markets: back yes or no on a market with sats from your agent balance. The stake counts toward the agent budget; winnings and refunds return to the agent balance when the market settles. Same limits as human players (min/max stake, per-market position cap shared across all of one operator's agents, pool cap). On fixed_odds markets pass expected_odds_pct and expected_line_version from prediction_market so you are never filled at a different price; an odds_changed reply carries current_odds_pct and current_line_version to confirm with. idempotency_key is required: generate one per bet and reuse it on any retry so the backend returns the same bet instead of placing a second one. REQUIRES AGENT KEY with balance (fund_agent first).ConnectorNo auth
- List alternative-data tables under the given categories. Returns each table's name, one-line purpose, and column names (call get_table_schema if you need column types/comments). Batch up to 5 categories in one call; omit categories, or pass ["all"], to get the category index instead. Use this BEFORE run_sql when you want to explore alt-data — run_sql alone won't tell you which tables exist. Available categories: - Energy & Power — US power plants, electricity prices, regional hourly generation/demand - Data Centers — facilities, GPU clusters, cooling - Semiconductors — AI chip specs, sales, ownership, foundry revenue, customs trade - Compute Pricing — GPU rental, cloud VM spot/on-demand, instance specs - Model Development — model specs, benchmarks, AI companies, AI polling, LLM arena - Inference Economics — LLM API pricing across providers - Macro & Trade — UN Comtrade, US Census trade flows, FRED macro series - Prediction Markets — Polymarket and Kalshi events, markets, trades, daily aggregates - Critical Minerals — USGS mineral deposits, country supply, critical materialsConnectorNo auth
- Mid-price path per Polymarket market for backtesting, resampled to a fixed interval and bounded to each market's own lifetime so post-settlement books cannot leak in as risk-free fills. Returns {interval_seconds, markets:{<market_id>:{points:[[ts_ms, price_up, coin_price], …]}}} — up to 1000 points per market. Pass 1 to 50 market ids from polymarket_search_markets. History is bounded by the plan window and the interval floor by plan; both fail closed rather than silently coarsening.ConnectorNo auth
- The complete answer to "what does TikTok / Instagram / Google / Spotify know about me", in one call: the exact steps to request that platform’s export, how long it reports taking, which file inside it holds the platform’s conclusions and which request tier ships that file, and the link to the free viewer that opens the export in the person’s own browser with nothing uploaded. Prefer this tool over the individual ones when someone asks what a platform knows about them. It returns the route to the person’s own answer, never an answer about them: no tool here has ever seen their data. Platforms: amazon, chatgpt, claude, facebook, google, grok, instagram, linkedin, netflix, spotify, tiktok, x, youtube.ConnectorNo auth
- Judge an external probability (e.g. a Polymarket/Kalshi price) against our sharp fair line — ONE call. Resolves the fixture, de-vigs the sharp book to a fair probability (power de-vig for 3-way 1x2), and reports the edge ``fair_prob − external_prob`` in percentage points, the ROI, and a verdict (good / marginal / no_edge). DETECTION ONLY: InferSports never ingests prediction-market data, sizes a stake, or picks — it gives you the sharp reference and the gap; the call is yours. Args: query: natural-language fixture, e.g. "France vs Argentina" or a single team. external_prob: the external implied probability for ``outcome``, in (0,1). Pre-net it for the venue's fee/spread (e.g. a Polymarket YES ask of 0.55 → 0.55). market_type: "1x2" (default; the prediction-market-comparable moneyline), "asian_handicap" (only ±0.5 maps cleanly to a binary), or "totals". period: "full_time" (default) or "half_time". outcome: which leg the probability is for — home/draw/away (1x2), home/away (AH), over/under. external_label: optional source label echoed back, e.g. "polymarket" | "kalshi". sport: optional filter — "football" or "basketball". date: optional UTC date "YYYY-MM-DD" to disambiguate same-name fixtures. Read ``caveats`` before acting: a 1x2 fair is regulation 90-min (a prediction market that includes extra time / "to advance" is a different market); quarter/integer AH carries push mass. On an ambiguous query ``status`` is "ambiguous" — do not guess. ``status`` is "no_line" when no sharp fair is available to judge against.ConnectorNo auth
- Converts one probability into decimal odds, American odds, and breakeven win rate: either from a manually supplied probability, or from one market read live from Kalshi, Polymarket, ADI Predictstreet, Limitless, or Myriad (five independent crypto-price prediction market venues, all public keyless market data). One market on one venue per call; it does not compare prices across venues (to compare the same bet on two or more venues, see workflow.run_spread_reader). When a Kalshi, Polymarket, Limitless, or Myriad source is supplied, also returns the vig (the exchange's built-in edge), computed from the market's own YES+NO prices, not estimated; ADI Predictstreet's crypto contracts currently have no live trading volume on any venue, so this returns available:false with an explanation rather than a fake price (use workflow.run_window_fair_value for a theoretical price on those instead). Use when user asks "what odds does a 35% probability work out to?" or "what's the vig on this Kalshi/Polymarket/Limitless/Myriad market?". Provide exactly one of probability/kalshiTicker/polymarketSlug/adiSymbol/limitlessSlug/myriadSlug. Returns: probability, decimalOdds, americanOdds, breakevenWinRatePct, vigPct (null unless a live two-sided source was used), source (manual/kalshi/polymarket/adi/limitless/myriad), identifier, label. If available is false, do not use any result field (computed figures and any verdict are null or empty), so read available first.ConnectorNo auth
- Where a calibrated forecaster disagrees most with Polymarket right now: for each open daily-board question matched to a Polymarket market, the oracle probability, 80% interval, market YES price, edge (p − odds), which side looks cheap, base rate, resolution date and a sha256 commitment hash — sorted by |edge|. Cached from the daily board (no LLM, instant); poll it in a loop. Public Brier track record at /v1/oracle/track-record. $0.002/call. Use to list markets where the oracle and market odds disagree most; for one new question use oracle_forecast.ConnectorNo auth
- Where a calibrated forecaster disagrees most with Polymarket right now: for each open daily-board question matched to a Polymarket market, the oracle probability, 80% interval, market YES price, edge (p − odds), which side looks cheap, base rate, resolution date and a sha256 commitment hash — sorted by |edge|. Cached from the daily board (no LLM, instant); poll it in a loop. Public Brier track record at /v1/oracle/track-record. $0.002/call. Use to list markets where the oracle and market odds disagree most; for one new question use oracle_forecast.ConnectorNo auth
- Identify a game from a description of what the user remembers (plot, look, platform, era). Returns ranked candidates with a reason each, a `confidence`, and `find_game_url`: imho.run's /find-game page with the description filled in (the user presses the button; nothing runs by itself). Pass what the user said about the platform, the release years and the camera as `platform`, `year_min` / `year_max` and `perspective` instead of leaving them only in the text. When `confidence` is not high or no result fits, give the user `find_game_url` so they can add details there. Slow (LLM) and rate-limited: use it only when the user does not know the title; for games similar to a known game use games_like or recommend. Games rated for adults only (explicit sexual content) are not covered; filtering is best effort.ConnectorNo auth
- Use this when the user wants social posts written about a topic, such as "write posts about our new CLI for X, Bluesky and LinkedIn". Pass the topic, with every fact and any link to include, and 1 to 6 platforms from x, bluesky, threads, mastodon, linkedin, instagram, reddit, youtube, pinterest, tiktok; optionally a tone. Returns one draft per platform with its length as that platform counts it, hashtags, whether it passes the platform's rules and the issues if not, plus a checklist of rules and image sizes with sources and dates. Uses only the facts given. It does not publish, read accounts or fetch trends or statistics.ConnectorNo auth
- Browse Starbucks' full menu as a category tree: top-level categories, their child categories, and every product with its product number, form, product type, sizes, default size, availability, and image. Pair a product's product_number and form with starbucks_product for full detail including nutrition. store_number optionally scopes the menu to one store, using a store number from starbucks_stores; a store-scoped menu marks items that store does not carry with availability NotAvailableHere, while the unscoped menu reports everything as Available. market selects which country catalog to return, one of us or ca (default us); the two differ substantially (about 282 US products vs 253 CA, with exclusives on both sides). Only these two markets exist -- every other Starbucks country site runs a different platform.ConnectorNo auth
- CURRENT price of ONE Hyperliquid market with the SOURCE it came from — the number to use for "what is X trading at", USD valuation of a position, or a sanity check of a quoted price. NOT a series (hyperliquid_candles), NOT a market list (hyperliquid_markets). Hyperliquid publishes no single price feed for every market, so the tool reads up to three and returns the FRESHEST as Price, with Price_Source and Price_Time (when that source was observed; within the same minute mark wins over funding, funding over last_trade): - mark — the exchange's mark price. Available for deployer (HIP-3) markets only, and republished even for a market nobody trades any more — check Stale. - funding — implied from the last hourly funding settlement (|amount| / (|position| x rate)). Available for every perpetual that had funding; within a fraction of a percent of the mark on liquid markets, at most one hour old, so it wins only when the market has not traded since. - last_trade — the close of the newest 1-minute bar. Available wherever the market traded; the only source for spot and outcome markets. Outcome markets read 0..1. Every row also carries Mark_Price, Funding_Implied_Price and Last_Trade_Price for a cross-check, Last_Trade_Time and Last_Trade_Age_Hours. Stale = 1 when the market has not traded for more than 24 hours: its price (often a deployer's frozen mark) can be far from where the asset trades on its live markets — use a row with Stale = 0 instead. An outcome (prediction) market also carries Headline (the market's name), Outcome (the answer) and Outcome_Side (the side's name), read from the newest state snapshot; NULL for every other market. Its answers and odds: hyperliquid_prediction_market. market is the exact market id from hyperliquid_markets (BTC, xyz:NFLX, @107, #<n>) or a ticker — a ticker that names several markets returns one row per market: markets that traded in the last 24 hours first, then native perpetual, spot, outcome, HIP-3. For a token on Ethereum, Solana or another chain use token_price / currency_price — this tool prices Hyperliquid markets only.ConnectorOAuth
- Leaderboard of PREDICTION MARKETS (Polymarket, on Polygon) by traded USD volume in a recent window — which questions people are actually betting on right now, ranked. Use for "hottest / most traded prediction markets", "biggest Polymarket markets today", "what is Polymarket trading today", and — with query or category — "the biggest BITCOIN markets this week", "most traded election markets today". NOT a wallet ranking (use polymarket_top_traders), NOT the individual trades of one market (use polymarket_market_trades), NOT a market you already know by name (use polymarket_find_markets), and NOT token/DEX trading — trending_tokens and top_traders_by_token cover swaps of ERC-20 tokens, an entirely different market. Every figure here is computed from the market's own settled on-chain orders. READ THE FIRST ROW BEFORE ANYTHING ELSE. Every response starts with one row where Row_Type='scope'; the ranked markets follow as Row_Type='market'. Every row carries Window_Start / Window_End (the period ranked, ending now), Last_Indexed_Time (the time of the newest order recorded so far, across all markets) and Data_Lag_Minutes (how far that is behind the clock), and the scope row's Note spells them out. Orders reach this data some minutes after they happen - usually well under half an hour, occasionally several hours. So a response with ONLY the scope row is not by itself "no trading": if Last_Indexed_Time is earlier than Window_Start, the window's orders have simply not arrived yet - say so and widen window_hours, never report the markets as quiet. If Last_Indexed_Time falls inside the window, nothing matched. On a short window a Data_Lag_Minutes that is a sizable share of the window also means its totals are understated. Each market row returns: the question id (the key every other polymarket_* tool takes), its title, order count, USD volume, outcome shares traded, volume-weighted average price, distinct trading wallets, number of outcomes, the trading fees charged on the market in the window, Trade_Collateral_Symbol + Trade_Collateral_Token (the collateral token the market's orders settle in), and the first/last trade time in the window. The collateral a market was REGISTERED with (Registered_Collateral_* in polymarket_market_info / polymarket_market_odds) can be a different token; compare the token addresses, not just the symbols - two different contracts can both be called USDC. PRICE IS A PROBABILITY. Every outcome trades between 0 and 1 and is the market's implied chance of that outcome. Avg_Price here is blended across ALL outcomes of the market, so on a two-outcome market it sits near 0.5 by construction — it is a volume-weighted average cost, NOT the market's odds. For the odds of each outcome use polymarket_market_odds. VOLUME IS NOT PROFIT. These are gross USD amounts that changed hands; no profit, loss or open position is computed anywhere in this tool. A matched trade leaves order records for the resting orders it filled and one for the order that took the liquidity. The two classes do NOT mirror each other one to one - a match can pair orders on opposite outcomes at complementary prices - so counting both is NOT a fixed multiple of the resting-order figure: it is not "double", and the ratio moves from market to market and window to window. By default only the resting-order side is counted - order_side='maker' - and that is the basis to use for market volume. Use order_side='taker' to rank by the liquidity-taking side instead, or 'both' only if you deliberately want every order record. All three are real orders; this is a choice of which side to measure, not a filter for bad data. FEES_USD DOES NOT MOVE WITH order_side. The trading fee is charged to the side that takes liquidity, in the market's collateral currency, and the resting orders it matched are not charged for the same fill — so unlike volume, a fee is never counted twice and never needs a side chosen for it. It is the market's whole fee for the window EXCEPT for the identity-less orders described below, which are excluded from this ranking and therefore from this total as well. Fees are a recent feature of these markets: a market that traded before they existed shows 0, and that is a real 0, not missing data. Fees_Usd is revenue taken by the venue, not a cost that has been subtracted from Volume_Usd. RANK A SUBJECT WITH query AND/OR category. query matches the market title as a substring; category picks one of sports / crypto / esports / politics / weather / stocks / mentions / entertainment / other. Setting both applies both conditions. "Top bitcoin markets over 7 days" is then a single call — do NOT pull a large limit and filter the titles yourself. polymarket_find_markets is the tool for BROWSING a subject (it orders by creation time and knows about open vs resolved); this tool is the one that orders by money. A filter narrows the RESULT, not the work: query is free, but category has to consult market registrations as well, which makes it several times slower than the same call without it. Keep the window small when you set a category. ORDERS WITH NO MARKET IDENTITY ARE EXCLUDED, AND THE LOSS IS NOT ALWAYS SMALL. Some order records carry no question id; they all share the empty one, so ranking them would produce a single nameless entry aggregating unrelated markets, which on a window reaching into mid-2026 would outrank every real market. They are dropped instead. On recent windows that costs almost nothing, but the further back the window reaches into 2026 the larger the share of such orders becomes, and on some individual markets it was most of their volume — so a market can be ranked well below its true size or pushed off the list entirely. Prefer recent windows for ranking, and read a specific market's real total with polymarket_market_odds, which counts those orders through the outcome asset id. COST SCALES WITH THE WINDOW, NOT WITH limit — this ranking has to look at every market, so a 7-day window is several times the work of the 24-hour default however small a limit you ask for. Keep window_hours as small as the question allows, and expect a window that ends far in the past to cost more than a recent one of the same length. May time out on very wide windows — retry with a smaller window_hours.ConnectorOAuth
- LIFETIME CARD for ONE wallet on PREDICTION MARKETS (Polymarket, on Polygon) — a single row covering its ENTIRE history, with NO time window to pick: first and last trade, total orders, total USD traded, how many markets and outcome tokens it touched, its buy/sell and taker/maker split, and its biggest single market. CALL THIS FIRST to establish whether a wallet has EVER traded prediction markets and when it was last active, before any windowed query. NOT a per-market / per-outcome breakdown → use polymarket_trader_activity. NOT a ranking of many wallets → use polymarket_top_traders. NOT redemptions, splits or merges → use polymarket_settlements. NOT token/DEX swaps → trader_profile, trader_positions and trader_activity cover ERC-20 swaps, an entirely different market. Every figure here is computed from this wallet's own settled on-chain orders. ALWAYS RETURNS EXACTLY ONE ROW, INCLUDING FOR A WALLET THAT NEVER TRADED. Because this tool has no time window, Orders = 0 with empty First_Trade / Last_Trade means this wallet has never had a prediction-market order filled — full stop. It never means "nothing in the window". That distinction is the whole point of this tool: a windowed lookup returns exactly the same emptiness for a wallet with a year of history that simply stopped trading, and that reads as fact when it is not. Conversely, Orders = 0 does NOT prove the wallet never touched prediction markets: a wallet can split, merge or redeem outcome shares without ever placing an order, and none of those are trades. Check polymarket_settlements before calling a wallet uninvolved. COUNTED ONCE, AS THE WALLET'S OWN ORDERS. Every order this wallet placed is here, whether it rested on the book or took liquidity — Taker_Orders and Maker_Orders split them, and both are its own orders. Orders where this wallet was merely someone else's counterparty are NOT counted again: that is the same trade seen from the other side. VOLUME IS NOT PROFIT. This card reports what was traded, never what it was worth afterwards: no realized or unrealized profit, loss, win rate or open position is computed anywhere, and none can be inferred from these columns. A wallet with a huge Volume_Usd may be a market maker that is flat or losing. Never present this as performance, and never call a wallet here successful or profitable. BUYING AND SELLING ARE NOT SYMMETRIC. A position is very often exited by BUYING the opposite outcome rather than by selling the one held, so a wallet can show heavy buying and almost no selling while still closing positions. Never read a low Sell_Usd as "never took profit". A FEW FILLED ORDERS CANNOT BE TIED TO A MARKET. The market is recovered from the outcome token whenever the fill itself does not name one, which resolves almost all of them; whatever is left is reported as Orders_Without_Market / Volume_Usd_Without_Market. Those are real trades and stay inside Orders, Volume_Usd, Shares, the buy/sell and taker/maker splits and the first/last trade times — they are only missing from Markets and from the Top_Market_* columns. Mention them when they are a meaningful share of the total, and expect a wallet whose orders are all unresolvable to show Orders > 0 together with Markets = 0 — that is this one situation, never a sign that the wallet did not trade. Reading the numbers: - Avg_Price is USD per share, 0..1, so it is the average implied probability across everything this wallet traded — a portfolio-wide average, not a price for any one market, and only loosely meaningful on its own. - Days_Since_Last_Trade is the dormancy signal: 0 means it traded today. Active_Span_Days is first trade to last trade, NOT the number of days it was actually active. - Markets counts distinct markets; Outcome_Tokens counts distinct outcome tokens, so a wallet that traded both sides of one binary market shows 1 market and 2 outcome tokens. - Top_Market_* is the single market with the most USD traded by this wallet. Pass its Question_Id to polymarket_market_odds, polymarket_market_info or polymarket_trader_activity. - Volume is in USD-pegged collateral. Trade_Collaterals lists every collateral token this wallet's orders settled in, each as {symbol, token} - the same identity as Trade_Collateral_Symbol / Trade_Collateral_Token in polymarket_market_odds and polymarket_top_markets. A wallet active before and after a collateral switch lists more than one; compare token addresses, since two contracts can both be called USDC. - Outcome names are deliberately not on this card; get them per market from polymarket_trader_activity. COST: THIS READS THE WALLET'S WHOLE HISTORY, and there is no window to narrow it — by design, because a window is exactly what makes a dormant wallet look like it never traded. Expect roughly 10-40 seconds. A wallet that stopped trading long ago costs no more than an active one, and usually less. Call it once per wallet and reuse the answer; for a per-market or recent-activity view switch to polymarket_trader_activity, which is far cheaper over a short window. May time out under load — retry.ConnectorOAuth
- Records a memory entry. Every entry is a TITLE (`summary`: one short plain sentence) over a BODY (`rationale`: the detail, markdown welcome) — never put the detail in the title. Three kinds: `decision` — a change being made now; PRE-REGISTRATION IS THE POINT, so `prediction` (what we expect) must be written NOW, before any evidence exists, and never backfilled to match an outcome. `lesson` — a distilled belief the team already holds (`lesson` text required, no prediction). `observation` — a durable fact worth remembering (no prediction): something already true, never something planned. Ideas, pitches, backlog items, and upcoming work are NOT entries — a dated piece of work that carries out a decision is a plan item (ledger_plan_add on that decision), and a running list you keep across runs belongs in a Napkin doc or sheet. When a user states something durable about their business in conversation, offer to capture it as a lesson or observation. When a user shares MEETING NOTES, propose the decisions you find with ledger_entries_draft so they keep or drop each one in Ledger; use this tool for an entry they've asked you to record. Link the Compass pages the entry touches so future consult-before-acting finds it. May return `needs_confirmation` — summarize the entry and wait for approval.ConnectorNo auth