Skip to main content
Glama
692,474 tools. Updated 2026-10-23 18:44

"Mixpanel" matching MCP tools:

  • Find arbitrage opportunities on Polymarket via monotonicity violations + partition-sum checks. Call with NO args for a `trending_scan` of the top ~200 markets by weekly volume; pass `event` for the strongest per-event partition_check, or `topic` for a themed cross-event scan. `event` (recommended for a specific market): pass a Polymarket event slug like "fed-decision-may-2026" or "when-will-bitcoin-hit-150k"; walks child markets, checks date-axis / threshold-axis ordering AND computes the partition_check (sum of YES prices across mutually-exclusive legs — should ≈1; deviations >3pp emit a BUY/SELL EVERY LEG signal). `topic` (for cross-event scanning): pass a seed question like "Strait of Hormuz traffic returns to normal" or "Fed rate decision"; searches related events across the platform, flattens markets, runs the comparator on the union. Cross-event mode catches "...by May 31" vs "...by Jun 30" patterns that single-event misses. SEMANTIC ANCHOR: cross-event pairs require ≥0.30 Jaccard similarity on question tokens (prevents Powell-Fed-Pause being paired with Powell-DOJ-probe); skipped_low_similarity surfaces the rejected pair count. PARTITION FILTER: drops will-person-X / will-manager-Y / will-someone-else- placeholder slugs; partitions with >20% placeholder fraction return null arb signal. Response: opportunities[] (gap_pp, suggested_trade, reasoning, monotonicity violation context), and in event mode partition_check{sum_yes_prices, gap_from_1, placeholders_filtered, suggested_trade}. FEES: every opportunities[] row and partition_check.arbitrage carry edge_pp_gross (== gap_pp / overround_pp), fees_pp, edge_pp_net, net_positive, plus polymarket_fee_pp, fee_basis and fee_categories[]. BOTH cost components are modeled: Polymarket's own per-category TAKER FEE (fee = shares × rate × p × (1-p), rates crypto 0.07 / sports-economics-culture-weather-other 0.05 / finance-politics-mentions-tech 0.04, geopolitics and world events fee-free; verified against Polymarket's own docs as of 2026-09-13) and Polygon gas (~$0.02/leg). The taker fee dominates: ~$1.75 per 100 shares on a crypto market at 50c versus $0.02 of gas, so rows that looked profitable before fleet #1927 may now show net_positive:false — that is the correction, not a regression. Each leg is priced at ITS OWN market's rate and price (the fee curve peaks at 50c and falls toward both extremes). fee_basis says where the rate came from: 'payload' (read off the market, the normal case), 'category' (mapped from its fee category), 'fee_free', or 'fallback' (rate unknown — charged at the modal 0.05 rather than assumed free, so an unreadable market is never reported as costless). Where fill_check reprices against live depth, this does NOT double-count that spread cost. FILL CHECK: when the partition signal fires, arbitrage.fill_check prices it against live CLOB depth (theoretical_edge_pp_at_book vs realizable_edge_pp at 1000 shares/leg, thin_legs[]) — realizable_edge_pp ≤ 0 means the overround exists only at last-trade, not in the book; do not trade it. For custom sizing use polymarket_fill_risk.
    ConnectorNo auth
  • Extract the settlement clause of a single Polymarket or Kalshi market: who publishes the settling number (source), the clock time + timezone it is taken at, the precision of the computation (e.g. "1-minute candle close" vs "60-second trailing average" vs "election outcome"), the evidence standard (official_source | consensus_reporting | any_credible_report | unspecified), and void_handling (cancellation/postponement settlement — reused verbatim from bet_research's cancellation_rule detector, not re-derived). Parses Polymarket's `description` field (fetched via polymarket_market) or Kalshi's `rules_primary` + `rules_secondary` fields (fetched via kalshi_market) with regex + a small vocabulary — no LLM pass, so an unusual clause reports confidence:"low" rather than a guess. Pass `market` as a Polymarket slug/URL or a Kalshi market ticker (e.g. "KXBTCD-26SEP1317-T66999.99"); a Kalshi EVENT ticker (e.g. "KXBTCD-26SEP1317") also works — it picks one representative market under that event, since the settlement mechanism is normally shared across all strikes/legs in one event. Use this before treating a polymarket_kalshi_spread row as a real arbitrage: two ladders that look alike can settle on different sources, at different times, with different precision — this tool is how you check. Pair with resolution_diff to compare two markets directly. KNOWN GAP: idiosyncratic phrasing that doesn't match the vocabulary returns confidence:"low" and evidence_standard:"unspecified" rather than an LLM-guessed answer.
    ConnectorNo auth
  • Read-only queries on the open spreadsheet. No data is modified. Safe to auto-approve. Call as {"action": "<name>", "params": {...}} — per-action params are listed in the Action Reference below. Special actions (not shown in the action enum): • batch — {"action": "batch", "params": {"actions": [{"action": "<name>", "params": {...}}, ...]}}. Runs reads in parallel; individual failures are reported per-entry without short-circuiting. • context — {"action": "context", "params": {"topic": "<name>"}} or {"action": "context", "params": {"action": "<name>"}}. Returns deeper docs for a topic or a single action's signature. Plural "topics" / "actions" arrays are also accepted and may be combined. Topics: python, javascript, formula, connection, validation, a1, quadratic, chart, pivot_table. Action Reference • get_cell_data(selection, page?, sheet_name?) — Returns cell values for a selection in A1 notation. Supports comma-separated ranges to fetch multiple areas in ONE call, including across different sheets. Examples: "A1:B10, D1:E10", "TableName, OtherTable", "'Sheet1'!A1:B10, 'Sheet2'!C1:D10". Table names are globally unique so they work without sheet prefixes. For cell ranges on other sheets use 'SheetName'!Range. Only use when you need the full dataset (aggregations, lookups, analysis). The file summary already includes sample rows. Results may be paginated — use page (0-based) for additional pages. • has_cell_data(selection, sheet_name?) — Check if any cells in a selection have data. Returns true if ANY cell contains data. Use before creating/moving tables or code to avoid spill errors. All ranges MUST be on the same sheet. • get_code_cell_value(code_cell_position?, code_cell_name?, sheet_name?) — Get full code from an existing Python, JavaScript, or connection code cell. Do NOT use for formula cells — formulas are already in get_cell_data results and the file summary. • get_text_formats(selection, page?, sheet_name?) — Get text formatting info. Use table column references for tables ("Table_Name[Column Name]"). Results may be paginated. • get_validations(sheet_name?) — Get all validations in a sheet. • get_conditional_formats(sheet_name) — Get all conditional formatting rules. Use to check existing rules before creating/updating/deleting. • text_search(query, case_sensitive?, whole_cell?, search_code?, regex?, sheet_name?) — Search for text in cell outputs. Supports regex when enabled (e.g., "\d+", "^hello", "foo|bar"). Searches cell outputs only, not code. Booleans default false. • get_sheet_info() — List all sheets and names. • get_spreadsheet_context(sheet_name?, include_errors?) — Full context snapshot of the file. • read_data(selection, sheet_name?, max_rows?) — Read cell data as compact CSV. Auto-tiers: returns all rows for small/medium data (<5000 rows), head+tail preview for large data. Preferred over get_cell_data for most reads. • outline(sheet_name?) — Structural map of the file: sheets, bounds, tables, code cells, charts, connections, errors. Use to understand file layout before reading data. • dependencies(position, sheet_name?, direction?) — Trace cell dependencies. direction: "forward" (what this cell reads), "reverse" (what depends on this cell), or "both" (default). • export_pdf(options?) — Export the file as a PDF with Excel-parity print semantics. Returns {mime_type, size_bytes, data_base64}. options is a camelCase object: {sheetIds?: [id], fileName?, pageSetup?: {paperSize ("letter"|"legal"|"tabloid"|"a3"|"a4"|"a5"|...), orientation ("portrait"|"landscape"), margins {left,right,top,bottom,header,footer} (inches), scaling ({type:"zoom",percent} or {type:"fitTo",width?,height?}), pageOrder ("downThenOver"|"overThenDown"), centerHorizontally?, centerVertically?, printGridlines?, printHeadings?, header/footer {odd:{left,center,right}, even?, first?} with Excel codes (&P page, &N total, &D date, &T time, &F file, &A sheet, &B bold)}, sheetOptions?: {"<sheetId>": {pageSetup?, printArea? ("A1:F20"), repeatRows? ([1,2]), repeatCols?, rowBreaks?, colBreaks?}}}. Omit options for sensible defaults (letter portrait, 100% zoom, all sheets). • list_connections(team_uuid?) — List all database connections in a team (PostgreSQL, MySQL, MS SQL, Snowflake, BigQuery, Mixpanel, Google Analytics, Plaid, etc.). Returns each connection's uuid, name, and type. team_uuid is optional — if omitted, the user's only team is used; multi-team users must pass it. Call this BEFORE get_database_schemas or set_sql_code_cell_value to discover the connection_ids and connection types you need. • get_database_schemas(connection_ids, connection_type, team_uuid) — Get table/column schemas for database connections. Always call before writing SQL. Get connection_ids from list_connections. connection_type: POSTGRES, MYSQL, MSSQL, SNOWFLAKE, BIGQUERY, COCKROACHDB, etc. • list_agent_connections(team_uuid?) — List the team's ready Agent Connections (third-party REST API bindings). Returns each connection's uuid, name, service, base URL, auth pattern, and `{{SECRET_NAME}}` references to use in fetch code. team_uuid is optional — if omitted, the user's only team is used; multi-team users must pass it. Reference secrets via `{{SECRET_NAME}}` in Python/JavaScript fetch code; the connection proxy substitutes team secret values at request time. • inspect_agent_connection(connection_id, team_uuid?) — Get the full schema (resources, endpoints, fields, docs URLs) and plan for one ready Agent Connection by uuid (from list_agent_connections). Call BEFORE writing fetch code against a connection so you don't guess at endpoints. team_uuid is optional with the same single-team fallback as list_agent_connections. Batch: • batch(actions) — actions: [{action, params}]. Runs reads in parallel through this same tool; per-entry failures are reported in the result without short-circuiting the batch. `action` may be any name from this reference. Nested `context` items are allowed and returned alongside the reads.
    ConnectorNo auth
  • Write operations on the open spreadsheet. Call as {"action": "<name>", "params": {...}} — per-action params are listed in the Action Reference below. Numbers, booleans, and nulls in cell values are coerced to strings. Special actions (not shown in the action enum): • batch — {"action": "batch", "params": {"actions": [{"action": "<name>", "params": {...}}, ...]}}. Runs writes sequentially; errors short-circuit the batch. • context — {"action": "context", "params": {"topic": "<name>"}} or {"action": "context", "params": {"action": "<name>"}}. Returns deeper docs for a topic or a single action's signature. Plural "topics" / "actions" arrays are also accepted and may be combined. Topics: python, javascript, formula, connection, validation, a1, quadratic, chart, pivot_table. Action Reference Cell Data: • set_cell_values(top_left_position, cell_values, sheet_name?) — Sets cell values as a 2D string array (first row = headers). top_left_position: single cell in A1 notation. Don't place over existing data unless requested. Values replace existing content; use empty string to clear. For merged cells, place at the anchor (top-left) cell. Prefer this over add_data_table for tabular data; only use add_data_table when the user explicitly asks for a data table or the file already uses data tables. When writing tabular data as plain cells, format the header row afterward with set_text_formats (at least bold) so it's visually distinct — plain cells don't auto-style headers like data tables do. Don't use for formulas or code. • delete_cells(selection, sheet_name?) — Delete cell values in a selection (A1 notation). Don't delete cells referenced by code cells unless explicitly asked. To delete table columns: "TableName[Column Name]". To delete tables: "TableName". • move_cells(source_selection_rect, target_top_left_position, sheet_name?) — Move a rectangular block of cells. Target is the top-left corner (single cell). For spilled code cells, move just the anchor cell. • add_data_table(top_left_position, table_name, table_data, sheet_name?) — Adds a data table. Data tables are discouraged by default — only use when the user specifically requests a data table or the file already uses data tables; otherwise use set_cell_values. First row of table_data is headers. Leave 2 rows below and 2 columns right as spacing. All rows must have equal length (use empty strings for missing values). To convert existing data, use convert_to_table instead. To delete a table, use set_cell_values with empty string at the anchor. A single-value formula or code cell MAY be written into a data cell of an editable (imported/value) table — it's stored as in-place single-cell code computing a 1x1 result; avoid the table's name/column-header rows and read-only code-output tables/charts, and don't put multi-cell output (dataframes/charts) inside a table. Code: • set_code_cell_value(code_cell_position, code_cell_language, code_cell_name, code_string, sheet_name?) — Sets and runs a Python or JavaScript code cell. Prefer set_formula_cell_value whenever a formula can do the task; only use code when the functionality is not available in formulas (e.g. charts, ML, correlations, complex data transforms, or web/API requests). For static data use set_cell_values. For SQL use set_sql_code_cell_value. IMPORTANT: Always reference sheet data with q.cells() — never hardcode data values. For charts, use Plotly ONLY (import plotly.express or plotly.graph_objects). Do NOT use Matplotlib/Seaborn. Name the output (no spaces/special chars, _ allowed). Placement: Estimate output size before placing. Charts default to 7 wide x 23 tall cells. Cell must be empty (avoids spill error). Leave one extra column/row gap between the code cell and nearest content. Empty sheet → A1. • set_formula_cell_value(formulas) — formulas: [{code_cell_position, formula_string, sheet_name?}]. Prefer this whenever a formula can do the task; only use set_code_cell_value when formulas can't. For basic historical stock prices use the STOCKHISTORY formula; for financial data with no formula equivalent (adjusted prices, statements, dividends, real-time/intraday, technicals, economic data) use set_code_cell_value with Python + q.financial. Don't prefix formulas with =. code_cell_position can be a single cell ("A1"), range ("A1:A10"), or collection ("A1,A2:B2"). Cell references adjust relatively (like copy-paste). Use $ for absolute references ($A$1). Place near referenced data, no extra spacing needed. Aggregations go directly below or beside data. • rerun_code(sheet_name?, selection?) — Re-run code cells. Do NOT call after set_code_cell_value, set_formula_cell_value, or set_sql_code_cell_value — those already run automatically. Only use to refresh unchanged code (e.g., external data). • set_sql_code_cell_value(code_cell_position, code_cell_name, connection_kind, sql_code_string, connection_id, sheet_name?) — Sets and runs a SQL connection code cell. connection_kind: POSTGRES, MYSQL, MSSQL, SNOWFLAKE, BIGQUERY, COCKROACHDB, MARIADB, SUPABASE, NEON, MIXPANEL, GOOGLE_ANALYTICS, PLAID, QUICKBOOKS. Always call get_database_schemas before writing SQL. Cell must be empty. Empty sheet → A1. Import: • import_file(file_name, file_data, sheet_name?, insert_at?) — Import CSV/Excel/Parquet. file_data: base64-encoded. Extension determines format (.csv, .xlsx/.xls, .parquet/.parq/.pqt). To create a new file from an import, call files create_file first, then import_file. Formatting: • set_text_formats(formats) — formats array: [{selection, bold?, italic?, underline?, strike_through?, text_color?, fill_color?, align?, vertical_align?, wrap?, font_size?, number_type?, currency_symbol?, numeric_decimals?, numeric_commas?, date_time?, sheet_name?}]. For table columns use table references ("Table_Name[Column Name]") instead of A1 ranges. Colors: hex ("#FF0000"), empty string to remove. align: "left"/"center"/"right". vertical_align: "top"/"middle"/"bottom". wrap: "wrap"/"clip"/"overflow". number_type: "number"/"currency"/"percentage"/"exponential" (currency requires currency_symbol, e.g. "$"). numeric_decimals: integer >= 0, number of decimal places to display (e.g. "format percents as 2 decimals" → 2). Percentages: .01 → 1%, 1 → 100%. date_time: chrono format e.g. "%Y-%m-%d". font_size: points (default 10). Set to null to clear any format. • set_borders(borders) — borders: [{selection, border_selection, color, line, sheet_name?}]. border_selection: all/inner/outer/horizontal/vertical/left/top/right/bottom/clear. line: line1 (thin)/line2 (medium)/line3 (thick)/dotted/dashed/double/clear. color: CSS color string. • merge_cells(selection, sheet_name?) — Merge a range of cells (e.g. A1:D1). All values except top-left are cleared. • unmerge_cells(selection, sheet_name?) — Unmerge merged cells overlapping the selection. Sheets: • add_sheet(sheet_name, insert_before_sheet_name?) — Sheet names: unique, max 31 chars, no / \ ? * : [ ] • duplicate_sheet(sheet_name_to_duplicate, name_of_new_sheet) • rename_sheet(sheet_name, new_name) • delete_sheet(sheet_name) • move_sheet(sheet_name, insert_before_sheet_name?) • color_sheets(sheet_names_to_color) — [{sheet_name, color}]. color: CSS color string. • set_frozen_panes(sheet_name?, frozen_row_count, frozen_column_count) — freeze/pin rows from row 1 and columns from column 1. Use 0 to unfreeze an axis. Tables: • convert_to_table(selection, table_name, first_row_is_column_names, sheet_name?) — Convert existing cell data to a data table. Only use when the user explicitly asks for a data table or the file already uses data tables; otherwise keep data as plain cells. Selection must NOT contain code cells or existing tables. Table name row is added above, pushing data down by one row. • table_meta(table_location, new_table_name?, show_name?, show_columns?, alternating_row_colors?, first_row_is_column_names?, sheet_name?) — Set table metadata. table_location: anchor cell (top-left, e.g. A5). • table_column_settings(table_location, column_names, sheet_name?) — column_names: [{old_name, new_name, show}]. Only include columns to change. To delete columns use delete_cells with "TableName[Column Name]". Layout: • resize_columns(selection, size, sheet_name?) — size: "auto" (fit content), "default", or pixels (20-2000). • resize_rows(selection, size, sheet_name?) — size: "auto", "default", or pixels (10-2000). • set_default_column_width(size, sheet_name?) — size in pixels (20-2000, default 100). • set_default_row_height(size, sheet_name?) — size in pixels (10-2000, default 21). • insert_columns(column, right, count, sheet_name?) — column: letter (e.g. "C"). right: true=insert right, false=insert left. • insert_rows(row, below, count, sheet_name?) — row: number. below: true=insert below, false=insert above. • delete_columns(columns, sheet_name?) — columns: array of letters (e.g. ["A", "C"]). • delete_rows(rows, sheet_name?) — rows: array of numbers (e.g. [1, 5, 10]). Charts (Excel-native; prefer over Plotly/Chart.js code cells for standard charts of sheet data — see the "chart" topic for details): • add_chart(chart_type, position, series, sheet_name?, title?, name?, categories?, legend?, x_axis_title?, x_axis_min?, x_axis_max?, x_axis_number_format?, y_axis_title?, y_axis_min?, y_axis_max?, y_axis_number_format?, width_cells?, height_cells?, chart_3d_rot_x?, chart_3d_rot_y?, chart_3d_perspective?, chart_3d_depth_gap?) — Adds an Excel-native chart anchored at position (single cell). chart_type: column, column_stacked, column_percent_stacked, bar, bar_stacked, bar_percent_stacked, line, line_stacked, area, area_stacked, pie, doughnut, scatter, scatter_line, bubble, radar, radar_filled, stock, column_3d, bar_3d, line_3d, area_3d, pie_3d, waterfall, funnel, histogram, pareto, box_whisker, treemap, sunburst, region_map. series: [{values, name?, bubble_sizes?, color?}] where values is one row or column of numbers in A1 ("B2:B13", table references allowed). categories: labels range (x values for scatter/bubble). Charts float over the grid (no spill errors); the anchor is nudged to free space if the cell would cover content. Returns the chart_id for update_chart/delete_chart. • update_chart(chart_id, sheet_name?, chart_type?, position?, series?, title?, name?, categories?, legend?, axis and 3d options as in add_chart) — Changes an existing chart; omitted arguments leave that part unchanged. Chart ids are returned by add_chart and listed in the file context under "Native Chart". • delete_chart(chart_id, sheet_name?) — Removes a chart. Pivot Tables: • set_pivot_table(action, pivot_table_name?, sheet_name?, source?, destination?, rows?, columns?, values?, filters?, layout?, values_layout?, row_grand_total?, column_grand_total?, subtotal_position?) — Creates ("create"), reconfigures ("update"), or removes ("delete") a PivotTable: a live cross-tabulation that groups source rows and aggregates values, recomputing when the source changes. Prefer it over SUMIFS or a Python groupby for "totals by category" requests. Reference source columns by header name, not letter. source (create): A1 range with a header row or a table name. destination (create): "new_sheet" (default) or a top-left cell. rows/columns: [{field, label?, sort?, show_totals?, group_by?, numeric_interval?}]. values (at least one): [{field, aggregation?, name?, show_as?, number_format?, decimals?, visual?}]. filters: [{field, include?, exclude?}]. For update: null leaves an area as it is, an empty array clears it — send only the areas you're changing. pivot_table_name is required for update/delete; names are listed in the file context. The report's cells are read-only; change it with this action. See the "pivot_table" topic for details. Validation: • add_logical_validation(selection, show_checkbox?, ignore_blank?, sheet_name?) — True/false validation with optional checkbox. • add_list_validation(selection, list_source_list?, list_source_selection?, drop_down?, ignore_blank?, sheet_name?) — list_source_list: comma-separated values ("Item 1, Item 2"). list_source_selection: A1 cell reference. Use one, not both. • remove_validation(selection, sheet_name?) — Remove all validations from the selection. Conditional Formatting: • update_conditional_formats(sheet_name, rules) — rules: [{action, id?, selection?, type?, rule?, bold?, italic?, underline?, strike_through?, text_color?, fill_color?, apply_to_empty?, color_scale_thresholds?, auto_contrast_text?}]. action: "create"/"update"/"delete". type: "formula" (apply styles when formula is true) or "color_scale" (gradient colors). For formula type: rule examples: "A1>100", "ISBLANK(A1)", "AND(A1>=5,A1<=10)". For color_scale: thresholds: [{value_type: "min"/"max"/"number"/"percent"/"percentile", value, color}]. For table columns use table references instead of A1 ranges. For delete: only id required. History: • undo(count?) — Default 1. • redo(count?) — Default 1. Batch: • batch(actions) — actions: [{action, params}]. Runs writes sequentially through this same tool; errors short-circuit the batch. `action` may be any name from this reference. Nested `context` items are allowed and returned alongside the writes.
    Connector
    Destructive
    No auth
  • Realizable-vs-theoretical edge check against live CLOB order-book depth. REQUIRES one of `market` (single-market mode) or `event` (basket/partition mode). SINGLE-MARKET: pass a market slug/URL + side (buy_yes|sell_yes|buy_no|sell_no, default buy_yes) + size_usd (default 1000 — max spend on buys, target proceeds on sells); walks the ladder and returns top_of_book, vwap_fill_price, slippage_pp, shares_filled, max_fillable_usd, and a verdict (clean|degraded|cannot_fill). BASKET: pass an event slug/URL + side (sell_yes = capture overround by selling every leg, buy_yes = capture underround; default auto from partition sum) + size_usd interpreted as settlement notional S (shares per leg; each share pays $1); returns theoretical_sum vs realizable_sum (top-of-book vs VWAP across all legs), capture_ratio, profit_usd at executed size, per-leg fill detail, thin_legs[], max_clean_notional_usd, and forced_directional_risk naming the legs most likely to strand you unhedged. USE THIS before acting on any polymarket_arbitrage SELL/BUY-EVERY-LEG signal or any polymarket_edges trade above ~$500 — theoretical overround on thin books is not capturable, and partial basket fills convert an arb into an unhedged directional position (the dominant loss mode in real arb-bot P&L). FEES ARE NOT MODELLED HERE: vwap_fill_price/profit_usd are GROSS of Polymarket's own taker fee (rate 0.04-0.07 by category — see polymarket_edges/fees.ts), on top of which this tool prices depth-crossing cost; a thin-margin fill that looks clean here can still be net-negative after the fee.
    ConnectorNo auth
  • Prices Kalshi daily high-temperature markets against the NWS forecast for the market's OWN settlement station, and measures whether that forecast actually beats the market. Two modes. LIVE (default): returns the full strike ladder for one city and settlement date with market_prob (mid), forecast_prob, and edge_pp per strike, plus the settlement clause verbatim. BACKTEST (`backtest_days: N`): scores an archived gridded forecast against the market on settled days and returns brier_market vs brier_forecast with a plain-English `verdict`, so the edge is MEASURED rather than asserted. READ THE WARNINGS — they are not boilerplate. (1) These markets DO NOT settle on the NWS. They settle on The Weather Company (weather.com) at a Kalshi station code such as CLINYC, which the response quotes verbatim; so part of every edge_pp is NWS-vs-Weather-Company disagreement about the same day at the same station, which is not mispricing and not tradeable. `settlement_vs_forecast_basis_f` from backtest mode is that part as a number. (2) The station is DERIVED from the settlement clause, never from the city name: Chicago settles at MIDWAY and New York at CENTRAL PARK, so a city-centre forecast would misprice a whole ladder. A station that cannot be resolved yields rows with no forecast and a reason, never a guessed coordinate. (3) forecast_prob assumes a normal distribution around the NWS high whose width is ASSUMED, not fitted (stated in `distribution_assumption`) — run backtest mode to see whether it is calibrated. (4) edge_pp is gross: no Kalshi fees, no bid-ask. MEASURED RESULT, AND IT IS NOT THE FLATTERING ONE: on the first backtest (KXHIGHNY, 13 settled days to 2026-09-11, 58 market observations) the MARKET beat the forecast — Brier 0.1008 for the market against 0.1594 for the archived gridded forecast, lower being better. So on that sample there is NO forecast edge to sell, and a large edge_pp is more likely to be the model disagreeing with a better-informed market than an opportunity. The measured settlement-vs-forecast basis was 1.7F mean absolute over 8 pinnable days, slightly warm-biased, which is a big share of a typical edge_pp on a 2-degree bracket. Re-run backtest_days before believing any edge; if a later sample reverses this, the numbers say so. NWS is US-only, so the ~30 international Kalshi weather series (London, Paris, Tokyo) return market prices with forecast_unavailable rather than a forecast. Precipitation series are listed but not yet priced. Cities: nyc, chicago, los angeles, miami, austin, houston, denver, philadelphia — or pass `series_ticker` for any other (e.g. "KXHIGHTBOS").
    ConnectorNo auth

Matching MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Connect to your Mixpanel data. Query events, retention, and funnel data from Mixpanel analytics.
    19
    19
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    A server that interfaces with the Mixpanel API, allowing users to query events data, retention, and funnels through natural language from any MCP client like Cursor or Claude Desktop.
    13
    33 npm
    MIT

Matching MCP Connectors

  • Mixpanel MCP — wraps Mixpanel Data Export API (mixpanel.com/api)

  • Query Mixpanel events, funnels, retention, segmentation and insights (JQL).

  • Claygent-style per-row research: answer ONE question about ONE company and return a JSON object matching your output_schema, with every field wrapped in its own evidence — {value, evidence_url, quote, status}. status is NEVER self-reported by the model: "found" means this code independently verified the model's quote is a VERBATIM substring of text actually fetched; "inferred" means a value was given but the quote could not be verified; "not_established" means no source answered the field, and its value is always null — never guessed, never a blended score. Sources: "web" fetches the company's own site (entity.domain required — homepage, /about, /leadership) via fetch_url; "catalog" checks entity_profile (SEC EDGAR; resolved:false for a private company is expected, not a failure); "both" (default) tries both. max_cost (USD, default 0.02, max 0.50) scales how many pages are fetched and refuses up front if it is too small to pay for even one extraction call (floor $0.002) — never silently overspends. A row where every source comes back empty costs nothing: every field is mechanically not_established with NO model call made. For a boolean/derived field (e.g. "does this company sell to healthcare"), the quote only has to SUPPORT the value — a descriptive sentence about customers/products counts, the source need not state the answer verbatim. leadership_page_status ("fetched"|"not_found"|"not_attempted", plus leadership_note) says plainly whether a leadership/team page was actually read, so a named-person field (head_of_sales) coming back not_established is distinguishable from "this company just doesn't publish one" vs. "we never checked". model_output_empty:true means the model returned nothing usable (a transport/budget problem) — every field is not_established for THAT reason, never read as 20 individual "no" judgments. Use with a fixed question + schema across many rows for "Claygent over N companies with a hard cost cap" (composes with batch callers). For picking from a fixed label list instead of extracting open fields, use classify_row (cheaper, one model call).
    ConnectorNo auth
  • Tell the Pipeworx team something is broken, missing, or needs to exist. Use when a tool returns wrong/stale data (bug), when a tool you wish existed isn't in the catalog (feature/data_gap), or when something worked surprisingly well (praise). ONLY for tools served by this Pipeworx connection — if the tool came from a different MCP server in your client (another vendor's Gmail, Splunk, Slack, etc. connector), we cannot fix it and reporting it here only delays you; file it with that server instead. Not sure? Pipeworx tool names are the ones this connection lists. Describe the issue in terms of Pipeworx tools/packs — don't paste the end-user's prompt. Filing without an account returns a `claim_token`; pass it back later as pipeworx_feedback({claim_token:"pwfb_…"}) to read whether it was fixed and what changed. The team reads digests daily and signal directly affects roadmap. Rate-limited to 5 per identifier per day. Free; doesn't count against your tool-call quota.
    ConnectorNo auth
  • Read data through the integrations this person's spacesheep agent can use: connected MCP servers (Granola meeting notes and transcripts, and any other server added under Settings → Integrations), OAuth accounts (Google Calendar, Linear, Zoom), Stripe, and pasted-key APIs (web search, Apify, Mixpanel, custom). Credentials stay on spacesheep's side; the call goes through the same path the agent uses. With no integration: the list of what is connected, each with how to call it. With integration plus path (and body, method, account or url as its line says): one call. For an MCP server, path is a tool name and body its arguments; path "tools" lists its tools. For a REST API, path is relative to its base. Read only: a call that could change something (a write method, or an MCP tool the server doesn't mark read-only) is refused and nothing is sent. Available with a spacesheep API key the person created, not over an OAuth connection.
    ConnectorOAuth
  • "Is it true that…" / "fact check" / "verify the claim that…" / "did X really…" / "was Y actually…" / "confirm or refute" / "true or false" — natural-language claim verification against authoritative sources. Use whenever the agent needs to check whether something a user said is factually correct. Company-financial claims (revenue, net income, cash for public US companies) verify via the structured SEC EDGAR + XBRL fast path with exact percent-delta math; ANY OTHER factual claim (macro statistics, rates, prices, drug data, records) automatically falls through to the grounded pipeline — routed to the right live source, answered with verbatim evidence, then judged. Returns a verdict (confirmed / approximately_correct / refuted / inconclusive / unsupported / could_not_verify), the grounded or structured actual value with pipeworx:// citation, and reasoning. IMPORTANT for callers: could_not_verify means the check did not happen (our LLM or source failed) and carries verification_error{stage,detail} — it is NOT evidence for or against the claim, and must not be shown as one. unsupported means we looked and cover no source for it. Replaces 4–6 sequential calls (NL parsing → entity resolution → data lookup → comparison).
    ConnectorNo auth
  • TYPED, DETERMINISTIC financial facts for a US public company for an EXPLICITLY NAMED reporting period — "Apple revenue for fiscal 2023", "Walmart net income FY2026 Q3", "Microsoft cash at the end of fiscal 2024". PREFER OVER entity_profile / get_company_financials whenever the period matters: those answer "the most recent figures" and will happily hand back FY2025 when you asked about FY2019, and neither separates a discrete quarter from a year-to-date figure. This one refuses instead — it NEVER substitutes the latest period for the period requested, NEVER returns 0 for missing data, NEVER lets a 9-month YTD number answer a quarterly question, and NEVER converts a currency. Every answer carries the exact us-gaap concept it came from, what that concept MEASURES (NetIncomeLoss excludes non-controlling interests, ProfitLoss includes them — not synonyms), the accession number and a link to the filing on sec.gov, the restatement trail of any superseded figures, and a contract + derivation version to pin against. Fiscal periods are the FILER'S OWN, anchored on their fiscal-year end, so Walmart's year ending 2026-01-31 is FY2026 and Apple's ending 2025-09-27 is FY2025. Attributes: revenue, net_income, cash, gross_profit, operating_income, eps_diluted, capex, operating_cash_flow, long_term_debt, shares_outstanding (the dei COVER-PAGE share count, so its period end is the cover date, after the quarter closed — that is the most current count the filing carries). Units are not all USD: shares_outstanding is in `shares` with currency null, eps_diluted in `USD/shares`. A discrete quarter the filer never filed — every Q4, and Q2/Q3 of cash-flow lines, which are filed year-to-date — is DERIVED as YTD(q) minus YTD(q-1) and comes back with `reported: false`, the subtraction named in `derivation` (fy_minus_9m / ytd_9m_minus_6m / ytd_6m_minus_3m) and both legs with their filings in `derived_from`; test `reported` if you will only accept a figure lifted from a filing. Per-share and balance-sheet figures are NEVER derived. Every non-answer is a named status — `unavailable` (the filer did not report it for that period; the periods that DO exist are listed, without values), `unsupported` (outside what v1 covers — a non-us-gaap filer, an unknown attribute, a non-USD unit), `ambiguous` (the company name matched two filers equally well; both are named), `conflicting` (two filings the same day disagree; both are returned and neither is picked), `partial` (a value with no accession behind it). Source: SEC EDGAR, XBRL financial facts, one publisher read once — see `corroboration`. Same response is served at POST https://gateway.pipeworx.io/v1/facts for non-MCP callers.
    ConnectorNo auth
  • What did a web page say on a given date? Finds the archived capture of a URL nearest that date across the Internet Archive Wayback Machine, Common Crawl and Arquivo.pt, reads it, and returns the readable text (HTML stripped) with the capture timestamp, a link to the archived copy, and the GAP between the date asked for and the capture actually used (e.g. "Captured 1.5 day(s) before the requested date"). One call replaces the find-capture, fetch-record, parse-HTML chain. If no archive holds a capture within max_gap_days (default 30) it answers status "no_capture" and names the nearest capture before and after the date with their gaps, so a distant capture is never passed off as the page on that date. Every archive's outcome is listed in sources[]; one that timed out or errored says so with its upstream status, and if all of them failed the answer is error "archives_unavailable", not no_capture. Captures are immutable and cached by capture id; served_from says whether the text came from cache or upstream. Use archive_compare to see what changed between two dates.
    ConnectorNo auth
  • Run one of Ranla's commands in this account. command is "<noun> <verb>", such as "campaign list" or "page propose", and input holds its fields. "help <noun>" lists a noun's commands with every field. A command that needs sign-off does nothing yet: it comes back with pendingApproval, and ranla_approve with its messageId applies it. For strategy, or anything that needs Ranla's judgement or research, use ranla_message. Commands: - ad: list, set — an ad's copy. list {campaignId, adId} is each ad's headlines and descriptions word for word (pins, Google's rating), its ad group's keywords and Quality Score, and Ranla's copy changes to it in 30 days (applied when, or a card waiting): read it before quoting or rewriting copy and to confirm a change went in. set {adId, headlines, descriptions, replaceHeadlines, replaceDescriptions, pins: [{text, pinnedField}], replace, moveKeywords, newAdGroupName, rationale} adds or replaces lines (the card shows old → new); with moveKeywords and newAdGroupName it moves those keywords into their own ad group with this copy - ad-account-assets: pause — pause {resourceNames} pauses account-level sitelinks, callouts and snippets, a card - ad-campaign: checklist, create, diagnostics, list, search-history, set, terms — a Google Ads Search campaign (never email). list {days} is each campaign's spend, clicks, conversions, serving status, impression share, whole served life (history), bidding with biddingRecommendation, searchPartners and landingPages. terms {campaignId, limit} is what people typed in the last 90 days and which terms cost money without converting. search-history {days, contains, campaignId, includeHistory, limit} is up to 365 days across every campaign ever run, split by campaign. diagnostics is why a campaign is not spending, as findings each with the card that fixes it (low_quality_score, launch_checklist, primary_conversion_unrelated, conversion_feed, conversion_not_biddable). checklist {campaignId} is the launch checklist, pass/warn/fail per setting. create {finalUrl, dailyBudgetCents, countries, languages, locationType, name, planItemId, plannedFrom, replaceActionId, adGroups: [{name, keywords: [{text, matchType}], maxCpcCents}], negativeKeywords, headlines, descriptions, path1, path2, sitelinks, callouts, structuredSnippets, maxCpcCents, biddingStrategy, cpcCeilingCents, targetCpaCents, searchPartners, accountDailyCapCents, budgetChanges} plans a new Search campaign for one landing page as a plan card (created PAUSED); it runs the launch checklist and fills what is not given with the account's defaults (presence targeting, the copy's language, Google Search only, safe shared lists, starter negatives), and puts any FAIL on the card. set {campaignId, rationale, and one change: status paused|enabled, dailyBudgetCents (founderRequested, accountDailyCapCents), strategy (cpcCeilingCents, targetCpaCents), maxCpcCents (adGroupIds; Manual CPC only), searchPartners, locationType and languages, sitelinks / callouts / structuredSnippets (removeAccountSitelinks, accountSitelinkMode), ads: [{adId, path1, path2}]} changes one setting of a live campaign, a card; it answers with what each card will change - ad-conversion: set, verify — Google Ads conversion actions. set {conversionActionId, primary: true|false, rationale} makes one primary or secondary, a card. verify {signupUrl} checks conversion tracking end to end (snippet live, click ids carried to signup, signups arriving, Google Ads accepts an upload) and raises one card only when a check fails, with the fixes - ad-group: add — add {campaignId, name, keywords: [{text, matchType}], headlines, descriptions, finalUrl, path1, path2, maxCpcCents, rationale} adds an ad group with its own ad, a card - ad-history: list, set — what each campaign, conversion action and shared negative list in the ad account was for: current (the offer sold today), legacy (an offer or goal that no longer exists) or other_product. Evidence reads leave out legacy and other_product and say so; removed and long-paused campaigns and removed or hidden conversion actions are legacy until the founder says otherwise. list {type}. set {items: [{type, id, label, note}], founderSaid} stores what the founder said; without founderSaid it stores Ranla's own reading (never over the founder's labels), no card - ad-keyword: add, set — a keyword in a live campaign. add {campaignId, adGroupId, text, matchType: EXACT|PHRASE|BROAD, rationale}, a card. set {keyword (its text) or criterionId, campaignId, status: paused|enabled|removed, rationale}, or {keyword or criterionId, toCampaignId, toAdGroup or toAdGroupId, rationale} to move it (the destination's only ad group when it has one), a card; removed cannot be undone - ad-negative: add, leaks — campaign negative keywords. add {campaignId, text, matchType, rationale} for one, or {campaignId, terms, matchType, rationale} for a list (a new campaign's starter list needs no search data), one card; founderRequested marks the founder's own ask and any clash with converting searches or the campaign's keywords goes on the card as a note. leaks {campaignId} runs the search-term leak review and puts up one card with the negatives for searches judged not buyers, each checked against the campaign's own keywords, plus a pause card for a keyword that mostly buys non-buyers - ad-plan: discard, edit, list, request-approval, show, withdraw — Search campaigns Ranla proposed that are not in Google Ads yet. list {status: proposed|applied|failed|rejected|all, limit, offset} returns total and says whether each has an approval card waiting (awaitingApproval). show {actionId}. edit {actionId, name, dailyBudgetCents, finalUrl, searchPartners, biddingStrategy, cpcCeilingCents, targetCpaCents, countries, languages, locationType, sitelinks, callouts, structuredSnippets, sharedNegativeLists: ["list name"], changes: [{op: remove_keyword|add_keyword|set_headline|set_description|set_paths|set_max_cpc|add_ad_group|remove_ad_group|add_negative|remove_negative, adGroup, text, matchType, index, path1, path2, maxCpcCents, keywords, headlines, descriptions}]}; index is 1-based (1 is the first line) and empty text removes that line; a negative is created with the campaign; sharedNegativeLists attaches the account's shared negative lists at create (each checked against the plan's keywords). Every edit is saved and re-runs the launch checklist; FAIL lines come back as notes for the founder and go on the card. Change a plan with edit rather than proposing a second plan for the same landing page. request-approval {actionId} puts the approval card up again for a plan with none; approving it creates that plan paused. discard {actionId, reason} drops a plan. withdraw {actionId, reason} takes back any pending paid proposal - ads: keywords, landers, spend, sync — the ad account. spend {days} is total spend next to verified conversions. landers {dailyBudgetCents, countries} recommends landing pages to build first, from real search demand. keywords {terms, campaignId, countries} prices exact terms, or a live campaign's own keywords: monthly searches, competition, top-of-page bid low/high. sync {action: status|sync_segment|stop_segment|map_goal, segment, goal, conversionAction} is what goes back to Google Ads; a segment upload is a card - aeo: competitors, refresh, run, setup, sources, status — AI search: what ChatGPT, Perplexity, Gemini, Claude and Google AI say about us. status {days: 7|14|28|90, engine} is visibility, share of voice and how the answers describe us; read enabled and chats before quoting. competitors {days, engine}. sources {days, engine, gapOnly, domain} is which pages the engines read. run asks every engine now. setup {tracking: true|false, engines: chatgpt|perplexity|gemini|claude|google_ai_mode|google_ai_overview, cadence: daily|weekly, country, language, maxActivePrompts, brandNames}: send only what changes; turning it on or spending more is a card. refresh {job: suggest_prompts|fixes|readiness|volumes|fanout, topic, count} runs one of the desk jobs now - aeo-fanout: list, set — a Google search the engines run before answering (best X, X reviews, X alternatives), checked weekly. list {gapsOnly, status: active|dismissed|all} is our position and the lists that name us. set {queryIds, status: active|dismissed}: dismissed is no longer checked, active is checked again - aeo-fix: do, list, pitch, set — a thing to do about the AI answers. list {status: open|done|snoozed|dismissed, kind}, biggest first. set {actionId, status: done|snoozed|dismissed|open, snoozeDays} returns it before and after. do {actionIds or all, pageTypes} does them: page fixes go to the SEO desk, listings come back to draft the asks. pitch {actionId, type: pitch|listing, to, subject, body, why} drafts the founder’s outreach for a get_listed or review_site fix, a card; they send it - aeo-prompt: add, ask, delete, get, list, set, suggest — a buyer question tracked in AI search. list {status: active|suggested|paused|all, days, engine}, lowest visibility first. get {promptId, day, engine} is what each engine answered. set {promptIds, status: active|paused|dismissed|suggested, stage, topic, tags, text} changes them and returns each before and after; active is tracked (asked on every scheduled run, metered), a card. add {prompts: short questions built on a real search, fromFounder: true only when the founder gave these exact questions, topic, stage}; your own go in as suggestions with their demand looked up. suggest {topic, count} proposes new ones as suggestions. ask {promptIds} asks every engine now (at most 5, metered), a card. delete {promptIds} drops them with their answers and history, a card - aeo-topic: delete — delete {topic: its name}; its prompts stay, ungrouped - affiliate: add-coupon, add-link, approve, delete, get, import, invite, list, login-link, reactivate, reject, remove-coupon, remove-link, rename-link, suspend, update — a partner in the affiliate program; affiliate is their id or email. list {status, campaign, q, days}. get {affiliate} is their links and codes. invite {emails, campaign}. approve, reject {affiliate, reason}, reactivate {affiliate}. suspend {affiliate, reason} and delete {affiliate} are cards. update {affiliate, campaign, changes: {notes, tags, commissionOverride: {commissionType, commissionBps}, …}, clear}. add-link {affiliate, token, destinationUrl}. rename-link {affiliate, token}. remove-link {affiliate, link}, a card. add-coupon {affiliate, code}. remove-coupon {affiliate, coupon}, a card. login-link {affiliate} emails them a sign-in link. import {csv, campaign}. Never their payout or tax details - affiliate-campaign: archive, create, default, list, restore, update — commission rules partners earn under, never an email campaign. list. create {changes: {name, commissionType, commissionBps, commissionDuration, cookieDays, holdDays, …}, makeDefault, stripeCouponId}. update {campaign, changes, clear, stripeCouponId}. default, archive {campaign, moveAffiliatesTo}, restore {campaign} - affiliate-commission: add, list, reverse — the ledger. list {status, affiliate}. add {affiliate, amountCents, currency, description, earnedNow}. reverse {commissionId, reason, note} - affiliate-payout: cancel, draft, list, mark-paid, revert, skip — payout runs. list, or list {runId} for its payouts. draft {currency, affiliateIds} puts the founder's approval card up; only they approve. cancel {runId}, skip {runId, affiliate} before approval. mark-paid {payoutId, reference} when they paid by hand. revert {payoutId} - affiliate-program: domain-add, domain-remove, domain-verify, email, live, pause, settings, status — status {days} first on any affiliate question: numbers per currency, top partners, what waits on the founder, setup gaps. settings {changes: {portalHeadline, minPayoutCents, payoutSchedule, payoutMethods, blockSelfReferrals, …}, clear}. live (the first go-live is a card), pause. email {kind, subject, body, enabled, reset} is one partner email. domain-add {domain}, domain-verify, domain-remove (a card). Auto-pay, its cap and the payout keys are the founder's: no command - affiliate-referral: approve, attribute, clear-flag, import-invoices, list, reassign, reject — people a partner sent. list {status, flagged, affiliate, q}. attribute {affiliate, email or stripeCustomerId, importInvoices} only when the founder names both. approve, reject, clear-flag, import-invoices {referralId}. reassign {referralId, affiliate} moves a referral and its unpaid commissions to another partner - affiliate-resource: add, list, remove, reorder, update — what partners see in the portal. list. add {title, kind, url or body}. update {resourceId, …}. remove {resourceId}, a card. reorder {ids} - analytics: act, list — list {days, limit}. act {source: posthog|amplitude|mixpanel, events} - approval-rule: add, list, remove — the kinds of change the founder always approves. list. add {key} is a card. remove {key} - attribute: inspect, instrument — instrument {repoFullName, attributeKey, type, whenSet, backfill, revisePullRequest}. To change an open PR you opened, revise it: the same attribute with revisePullRequest (its number) and the change in whenSet — never a second PR - audience: list - audit: read, retest, scan — the technical site audit. read {url} is the latest scan, one page in full with url. scan runs it again. retest {url} re-tests one page's speed - automation: delete, draft, events, get, list, runs, set, suggest, test — a lifecycle flow, one object in any status (draft, active, paused). list. get {id} opens it on the canvas. set {id, name, trigger, steps} changes those fields and returns them before and after; on an active flow it is a card and the flow stays active. set {id, status: active} turns it on, a card; set {id, status: paused} turns it off. suggest {automationId, change: add_step|edit_step|remove_step|pause, label, why, step, index, forAutomationId} puts one change on the flow, drawn dashed, for the founder to accept or reject; nothing changes until they accept. test {automationId, to, mode: dry_run}. events is the lifecycle event names the brief names - background-job: clear, list, retry, start, stop — list: your jobs, running and finished, and every pull request you opened in any repo (open, merged or closed). stop {jobId} (also drops one waiting on your estimate, when the founder says no). clear {jobId}. retry {jobId, fix, note} only when the founder asks. start {jobId}: a job waiting on a go from the founder after your estimate, only when they say go - brain: check, fallback, remove, show, use — what Ranla thinks with: Included or the workspace's own model key. show. use {choice}. fallback {on}: think on Included when the key fails. check {provider} after the founder fixed a key. remove {provider}, a card. Keys are added only in Settings › Ranla's brain or the CLI, never in chat - brand: get, update — update {section: profile|voice|product|competitors|style|pov|kit|competitor|product_context, purpose, audience, tone}. Kit is the logo corner - brief: get, update — update {icp, antiIcp, oneLiner, valueProposition, websiteUrl} - campaign: delete, draft, evaluation, get, list, performance, replies, resync, schedule, set, test — an email send, one object in any status (draft, scheduled, sending, paused, sent, cancelled). list {status, query} finds them. get {campaignId} is the whole campaign: sender, audience, category, goal, schedule, and each variant's subject, preheader and body (markdown, its blocks with their ids, or its html). set {campaignId, …} changes any field and returns each one before and after: name, audience, fromName, fromEmail, replyTo, category, templateId, goalId, holdoutFraction, hypothesis, primaryMetric, variants: [{key, subject, preheader, bodyMarkdown, templateVariables}], removeVariantKeys; subject and preheader on their own are one variant's (variantKey, else the first), whatever its body is made of; a body laid out in blocks changes with edits: [{op: set_text|set_image|set_button|insert|delete, blockId, …}] on variantKey, or html replaces the whole email; status: paused|cancelled|declined|resumed with reason (declined is the founder's no, kept as their preference; resumed restarts sends, a card). A change to a campaign that is scheduled, sending or paused is a card. draft {name, audience: {listIds or segmentIds}, fromName, fromEmail, variants: [{subject, bodyMarkdown}], category: newsletter|product}; optional hypothesis, primaryMetric: conversion_rate|reply_rate|click_rate, and retrievalId + dispositions to record the learnings used; a play on a pattern adds patternId. test {campaignId, email} sends one test; without email it goes to the founder - cms: changes, confirm-map, discard, draft, inventory, map, mappings, publish, read, revert, status — the founder's CMS (WordPress), for a site not in a repo. status is what is connected and what the site runs on. inventory {collection, search}. read {url} or {id, collection}. map {collection} proposes how a written page fills that collection's fields (background), then confirm-map {collection} is the founder's card; nothing is drafted into an unconfirmed collection. draft {pageActionId, collection} puts an SEO page there as a draft, checked as rendered. publish {changeId} is the card; it goes live on their yes. revert {changeId} puts it back. discard {changeId}. changes lists them - codebase: access, activity, get, read, research, search — research {repo}. access {reason} - comms: get, update — update {midweekPingCap, quietMode, pingDelivery, routes: {needs_you, broke, done, digest}, nudgeEveryDays, maxNudges}. routes sends one kind of message its own way; null puts that kind back on pingDelivery - connection: request, skip — request {slot, reason}. skip {slot} - contact: delete, export, get, import, resubscribe, save, unsubscribe, verification, verify — get {contacts}. save {contacts, firstName, lastName, attributes}. unsubscribe {contacts}. resubscribe {contacts}. delete {contacts}. import {attachmentId, csv}. export. verify {list | segment | everyone}, a card: checks addresses can receive email. verification {list | segment | everyone} - creative: propose — propose {preset, template, headline, founderChose, backgroundMode: stock|generate|library, sizePack, backgroundAssetId, generatePrompt}. Without founderChose it lists the photos there are and the question to ask the founder about where the picture comes from; nothing is proposed until they answer - document: list - domain: add, apply-dns, list, remove, settings, verify — sending domains. list. add {domain}. verify {domain} checks DNS. apply-dns {domain, provider: cloudflare|godaddy|vercel} writes the records, a card. settings {domain, openTracking, clickTracking, tlsMode, inboundEnabled}. remove {domain}, a card - email: find, resend — the send log. find {search, status}. resend {emailId}, a card - event: instrument, list — instrument {eventName, triggerDescription, repoFullName, revisePullRequest}. Pass the event name; it checks whether that name is already ingested. To change an open PR you opened, revise it: the same event with revisePullRequest (its number) and the change in triggerDescription — never a second PR - file: read — read {id, offset} reads more of an attached file - follow-up: cancel, list, reschedule, schedule - funnel: get — get {days}: sign-ups, trials and paid as separate steps (one per conversion goal), each counted once per person with the workspace's own team left out, and where each step's people came from. Answer every "how many sign-ups / trials / customers" and "where do sign-ups come from" from it, one number per step, never added together - goal: configure, create, delete, list, primary, update — create {name, type, eventName}. update {goal: name or id, name, eventName}. primary {goal: name or id}. configure {goal: name or id, type, valuePath, currency, attributionWindowHours}. delete {goal: name or id} - growth: get - guardrail: update — update {autopilot: off|approve_each|full, maxSendsPerDay, maxSendsPerContactPerWeek}. Ask me before every send is autopilot approve_each - heartbeat: run — run checks every signal now, within the working mode - idea: create, delete, list — create {title, note}. delete {ideaId} for good, a card - identify: instrument — instrument {repoFullName, callSiteHint} - image: delete, list, stock-import, stock-search — list is the Library. stock-search {query, orientation}. stock-import {photoId}. delete {imageId}, a card - inbox: archive, dismiss-draft, edit-draft, mark-read, mark-unread, read, reply, save-draft, send-draft, unarchive — read {view: inbox|unread|archived|all, search, offset, limit, messageId, before}. reply {messageIds, body, subject, to}, a card. archive, unarchive, mark-read, mark-unread {messageIds}. save-draft {messageIds, body, subject} leaves a reply for the founder, no card. edit-draft {replyId, body}. send-draft {replyId, body}, a card. dismiss-draft {replyId} - install: show - integration: disconnect, settings, test — a connected integration: github|slack|search_console|posthog|amplitude|mixpanel|stripe|cloudflare|godaddy|vercel|twilio|gtm|google_ads|cursor|claude. settings {integration, …}. test {integration}. disconnect {integration}, a card - job: get, run, update — update {kind: occasion_scan|performance_review, hour, enabled, timezone, dayOfWeek}. run {kind} - learning: list, write — write {retrievalId, sourceEvaluationId, evidenceIds, statement, dispositions}. A bad evidence id comes back with the valid ones - list: add, create, delete, list, remove, update — create {name}. add {list: name or id, contacts}. remove {list: name or id, contacts}. update {list: name or id, name, description}. delete {list: name or id} - mac-run: get, list — code work the founder's own coding agent ran on their Mac (Run on your Mac). list {status, limit}, with each run's files and first changed lines. get {runId, steps, diff} is what it did step by step, the whole diff, and the approved task it ran: what a run changed, or whether it matches what was approved, is read there, never guessed - needs-you: approve-safe, groups — groups: what waits, by kind, and which kinds are safe in bulk. approve-safe {ids} raises a card; spend, sends and posts stay one by one - negative-list: list, set — the account's shared negative lists. list {sharedSetId, name, offset} is every term with the live keywords it blocks and the 90-day searches it matched. set {campaignId, sharedSetId, attach: true|false, rationale} attaches or detaches a list (a clash with the campaign's keywords is refused unless founderRequested), or {sharedSetId, add, remove, move: [{text, matchType, campaignIds, reason}], rationale} changes its terms; a card - note: create, delete, update — create. delete {id} - onsite-message: delete, draft, get, list, update — banners and modals for anonymous visitors. list shows views, clicks and dismissals. get {id}. draft {name, headline, body, display: banner|modal, status: draft|active, path_prefix, page_rules, frequency: every_page_until_dismiss|once_per_session|once, cta_mode: link|email_capture, cta_label, cta_url, show_trigger: immediate|exit_intent|scroll|delay}. update {id, status: draft|active|paused|ended, headline, body, …}: active shows it, paused or ended stops it. delete {id} - onsite-theme: get, update — the brand tokens every banner and modal uses. get. update {primary_color, background_color, text_color, font_family: system|serif|mono, border_radius_px, logo_asset_id} - opportunity: decide, list — decide {opportunityId, status, reason, campaignId} - page: check, find, get, research, screenshots, set, ship — an SEO page, one object in any status (plan, draft, approved, live, declined). find {status: open|live|declined|all, search, limit, offset} lists them with their actionId, status and url. get {actionId} is the whole page: plan, draft, questions, research. set {actionId, url, move, title, h1, description, body, edits: [{find, replace}], status: approved|declined|live|open, liveUrl, reason, answers: [{n, answer}]} changes any of those fields and returns each one before and after; a live page edited reopens as a draft. research runs the writer: without actionId {foundationNew: {query, pageType, pitch} or foundationImprove: {existingUrl, query, pageType, pitch}, opportunityKey, plan} researches a new page or an improvement; {actionId, note} rewrites a draft from the founder's words; {actionId, fresh: true, direction} researches it again. check {actionId, apply, only} fact-checks a draft against the vendors' own pages; apply: true makes its fixes as edits. screenshots {actionId, pages: [{url, shows}]}. ship {actionId, agent} builds it where their code runs (their Mac, or Cursor/Claude in the cloud), a card; agent ranla builds a free tool - paid: audit — the paid self-audit. audit runs it on every live Search campaign in the background (launch checklist, search-term leaks, ceilings, conversion upload health, keywords in the wrong campaign, account-level template assets, economics), raises the cards and posts one pass / warn / fail report in the Paid conversation. audit {campaignId} reads one campaign now and raises nothing - pattern: list, off, on — early behaviour that predicts converting to paid or early churn here, with its evidence: a correlation, never a cause. list is each outcome and every pattern. list {patternId, limit, offset} is one pattern, its later checks and who matches it now. on turns the weekly scan on, a card. off stops it and clears the matches - person: inspect — inspect {email, days} returns that person's recent events - plan: create, list, update — create {name}. update {itemId, status: raw|proposed|approved|scheduled|sent|skipped|dismissed, title, scheduledFor, campaignId}. Nothing sent yet is status skipped - product: read - rank: list — who is worth asking - reddit: activity, check, citations, rankings, scan, status, strategy — the Reddit desk. status first on any Reddit question: on or off, mode, posture, caps, what is watched, the accounts. activity is the last seven days. rankings is which Reddit threads Google shows for our keywords. citations is which threads ChatGPT, Perplexity and Google AI cite. scan finds new threads now. check {check: rankings|ai_citations|post_ideas|watchlist|karma|rewrite_for_own_account}. strategy {enabled, mode: watch|draft|autopilot, posture: founder|burner|fleet|any, opportunityMode: strict|balanced|volume, disclose, maxCommentsPerDay, maxPostsPerWeek, goal, icp, voiceNotes, brandNames, syncFromBrand: fill|overwrite}: send only what changes; autopilot or a higher cap is a card - reddit-account: list, update — list is karma, warmth, warming and who can post. update {username, action: watch|set_kind|warming|remove, kind, warming: true|false}: warming switches warming replies on or off - reddit-draft: delete, get, list, post, set — a reply or post written for Reddit. list {status: draft|approved|scheduled|posted|rejected|failed|any, kind: comment|post|any, subreddit}. get {draftId} is the text, its checks and its thread. set {draftId, body, title, status: rejected|draft|posted, postedUrl, reason} returns each field before and after; posted records one they posted by hand; a new body on a reply already posted fixes it on Reddit in place, behind a card. delete {draftId}, a card. post {draftId, account} posts it to Reddit, always behind a card; an approved draft is one going out - reddit-idea: add, draft, list, update — post ideas. list {status: open|drafted|posted|dismissed|any}. add {subreddit, title, kind: question|story|guide|comparison|showcase|ama, angle, reason, keyword, outline}. draft {ideaId, tone, instruction} writes the post as a draft. update {ideaId, status: dismissed|open} - reddit-lead: list, update — people who asked for what we do. list {status: new|contacted|replied|converted|dismissed|any}. update {leadId, status, note, reason, messageSubject, messageBody, rewriteMessage} - reddit-thread: get, list, reply, set — a thread worth answering. list {status: new|drafted|approved|posted|dismissed|saved|ai_cited|any, lane, subreddit, minRelevance, limit}, best first. get {threadId} is the thread, its top comments, its score and every draft for it. set {threadId, status: dismissed|open, reason, saved} returns it before and after: dismissed takes it out of the inbox, open puts it back, saved is the founder's bookmark. reply {threadId, tone: helpful_expert|casual_founder|community_member, posture, instruction} writes a reply as a draft with its safety checks; nothing posts - reddit-watch: add-keyword, add-subreddit, edit — what the desk watches. add-subreddit {name, risk: low|medium|high, reason}. add-keyword {text, kind: keyword|competitor|brand|question}. edit {keywords: [{text, action: remove|pause|resume|edit, kind}], subreddits: [{name, action, risk, rulesNote}], clearInbox} - repo: inspect, list, select, set, task — the GitHub repos Ranla works in. list is the repos, each one's pull request base, and whether code reading is on. set changes one thing a call: {repos} replaces the list (a card); {reading: false} turns code reading off (on is codebase access, the founder's yes); {repo, branch} is the branch her pull requests target. select {reason} shows the founder a picker. inspect {repo} is a deep read of a repo (minutes, no PR). task {handoff: {type, id}} runs an approved page, title/H1/description change, SEO action or AI-search fix from its stored task, the approved text word for word; {title, brief, freeForm: true} for code work none of those covers. {title, brief, pullRequest} puts a change on one of your own open pull requests (the founder reviewed it and asked for changes): it starts from that PR's branch and adds to it, no new PR; Mac only. It goes where their code runs (Run on your Mac, or Cursor/Claude in the cloud), a card - revenue: assume, churn, get — get is MRR, paying customers (logos: distinct customers with a paid subscription) next to paying subscriptions (add-ons count separately), LTV at the entry price and at ARPU, CAC, and `economics`: the churn, LTV and target CAC every paid figure uses, each with its source. churn is logo and MRR churn by month for 12 months per currency and tier, the trailing-90-day rate, and one-off events. assume {monthlyChurnPct, ltvCents, targetCacCents, highValueMrrCents, highValuePlanPattern, note} stores figures the founder states; they then win everywhere - routine: add, delete, list, run, set — the founder's own recurring asks (every Friday, tell me X). add {title, prompt: what to do each run in their words, cadence, dayOfWeek, dayOfMonth, hour, timezone} is a card: each run uses credits; at most 5 on. list. set {id, enabled, title, prompt, schedule fields}. run {id} now. delete {id} - segment: create, delete, get, list, preview, reach, recount, update — create {name, description, definition: {kind: filter, match: all|any, conditions: [{type: attribute|event|engagement|list|rank|pattern, path, operator, value}]}}; a pattern condition is {type: pattern, patternId, operator: in|not_in}. preview {definition} counts it first. reach {listIds, segmentIds, category} is who a send would reach - seo: authority, cadence, competitors, inspect, intel, lift, opportunities, performance, plan, structure — search. plan {refresh} is what to rank for, a reason per page; call it first when they say let us do SEO or ask what to write. performance is Search Console clicks, impressions and queries for 28 days. structure {section: summary|pages|money|spokes|coverage|all} is the money-keyword map and the next pages. opportunities {include: proposed|refused|both}. competitors. authority is the link profile. lift is fixes priced in extra clicks. intel queues the competitor pass. inspect {url} is everything known about one live page. cadence {perApproval: 1-10, perRollingMonth: 1-40} reads or sets how many new pages one approval and a rolling month may carry (default 3 and 8); only when the founder asks, a card - seo-action: list, send, set — an item on the SEO Actions queue. list is open work by value, and apart from it what was set aside. set {key, status: done|snoozed|ignored|open, days, note} returns it before and after. send {key}: a technical fix (audit:…) to where their code runs (their Mac or a cloud agent), brief traced from the repo, or a fix to pages the site already has (existing:…), a card. removePages: true only after they said to remove the pages that fix takes off the site - set: add, approve, check, create, data, deliver, pause, quote, resume, sample, status, stop — a set of pages from one template and a list of items. create {name, pageType, patternQuery with {item}, template: {sections, differentiator, cta}, items or fromBrand, pathPattern, batchCap 1-25}. add {setId, items or fromBrand}. data {item, points: [{kind: price|limit|screenshot|feature|source, value, sourceUrl}]} — a page is not written until the item has 4 facts that appear on their https source pages. A screenshot point is that page text, not an image. sample writes 3. check compares the drafts and pauses the set when they are too alike. quote is the credit total. approve is one card for the next batch (10 unless batchCap is lower, never more than 25). deliver {agent: cursor|claude} sends the finished pages to that coding agent as one pull request, and stops at a card. pause, resume, stop. status reads it. Hired accounts only - setup: code-runs, coding-agent, connection, first-look, get, home-layout, pet, pr-bar, share-first-look, start, status, test-email — start {repoFullName, kind}. home-layout {order, hidden}. first-look {siteUrl, retry}. connection {slot, skip}. pet {pet} sets their own pet in the Ranla view (none is the plane; no pet reads it). code-runs {detail} sets how much of a run on their Mac they see in the conversation (no detail reads it). pr-bar {prBar: show|hide} sets whether they see the pull request bar above the conversation (no prBar reads it). coding-agent {subfolder | clear} sets the folder inside their linked repo that is their site, for a repo with several sites: use it when the founder names a folder ('there's a movement marketing folder'), with subfolder exactly as listed (no subfolder reads what is set and the folders listed). The repo and which repo stay theirs, in Settings. Confirm in one line: Set to apps/x in owner/repo; run the task again. test-email sends the setup test email to the founder - site: colors, research — research {url} - suppression: add, add-unverifiable, check, remove — the do-not-email list. check {emails}. add {emails, reason, scope: newsletter|product|all, attachmentId}. remove {emails, scope}, a card. add-unverifiable: everyone an address check found can't receive email, a card - target: add, drop, list, remove, replan, set, start — the founder's growth goals and the plan toward each (where they are switched on): MRR, paying customers, monthly churn, visits from a channel (ai is AI assistants), Google search clicks, AI answer share, or people who did an event. list is every goal, where it stands, the gap, its bets and the weekly scorecard. add {metric, metricParam, targetValue, deadline: YYYY-MM-DD, note}, targetValue in the metric's unit (cents for mrr). set {targetId, …}. remove {targetId}. replan {targetId}. start {betId} starts a bet's work. drop {betId, why} - team: cancel-invite, invite, list, unlink-slack — list. invite {email}, a card. cancel-invite {id}. unlink-slack {id} - template: create, delete, get, list, publish, set, starters, suggest, test — an email template, one object (draft or published). list. get {template_id}. set {templateId, subject, preheader, html, text, design, variables, name, alias, category: transactional|product|newsletter, unsubscribeEnabled} changes those fields and returns them before and after; content changes go into the draft, and mail keeps sending the published version until publish {templateId} makes the draft live (republishing a template that sends is a card). suggest {templateId, label, why, op, blockId, …} puts one edit in their editor as a tracked change for the founder to accept or reject; nothing changes until they accept. starters lists the starter catalog. create {name, format: blocks|html, html}, or {starter, name} from a starter. test {templateId, to}. delete {templateId}, a card - testimonial: add, edit, list, restore, retire, revoke, use — a quote from the founder's own user, with their written yes. list {status, testimonialId} first: the switch, counts, and quotes; an id gives its consent record. add {quote, personName, email, title, company, attribution, consentEvidence} is a card and needs their written yes. use {testimonialId} puts a collection-page submission (pending) into use, a card. edit {testimonialId, attribution, showCompany, logoUrl, quote}: naming them less applies now; a trimmed quote (cuts only, ... for middle cuts) goes back to them as an ask. retire, restore, revoke {testimonialId}. Repeat a quote exactly; never reword one - testimonial-request: accept, edit, find, list, send, skip — an ask for a testimonial. list {status, requestId}: default open. send {requestId} is a card. edit {requestId, subject, body} before it goes; the quote stays word for word and nothing is offered in exchange. skip {requestId}. accept {requestId, quote, attribution, title, company} records an unclear reply as a yes, a card. find looks for new praise and moments now - testimonial-settings: off, on, set — on (a card), off. set {askFoundPraise, askMoments, autoSend, fromName, fromEmail, defaultAttribution, collectEnabled, collectHeadline}; autoSend on is a card; collectEnabled opens the hosted page users leave a quote on - testimonial-widget: create, end, list, pause, resume, start, update — quotes on the founder's own site, with a holdout. list {widgetId}: lift on signups and paid, withheld until 14 days; only proven is a result. create {name, layout, pagePath, testimonialIds, maxQuotes, holdoutFraction} returns the embed code. update {widgetId, …}. start {widgetId} is a card. pause, resume, end {widgetId} - tracker-move: check, done, later, reopen — the task to move a Google Tag Manager tracker into their site code. check looks at their site for the tracker in its own code (a consent loader counts) and closes the task when it is there. done is the founder saying they did it: checked at once, and the task leaves Needs you either way. later is Not now. reopen puts it back - tracking: get, install, verify — get is the tracker for their site code, and the task for their coding agent. verify checks pageviews. install puts it in Google Tag Manager, only when they cannot edit their site code - traffic: breakdown, efforts, summary — summary. breakdown {dimension: path|channel|referrer|country|device}. efforts. Its conversions add every goal together: never quote them as sign-ups (funnel get) - url: read - webhook: list, remove, test — list. test {webhookId, event}. remove {webhookId}, a card. Adding one stays in Webhooks - week-plan: approve, approve-item, change, drop-item, link-draft, move-item, plan-rest, rename-item, status — next week's content plan, built by Friday: what goes out which day on email, pages and Reddit. status {planId} (omit for the current one) lists each item, its id, channel and state. Only on the founder's word in this conversation: approve {planId}; change {planId, text} plans it again (before approval the whole week; after, the days from tomorrow, keeping what they approved or what went out); plan-rest {text?} when they ask for the rest of this week planned: from tomorrow to Saturday, making this week's plan if there is none; approve-item, move-item {day: YYYY-MM-DD, time: HH:MM 10:00-11:00}, drop-item, rename-item {title} take {itemId, channel}; approve-item approves the item's draft as it is; rename-item changes that item's title, including a stand-in. Your own step: link-draft {itemId, channel, subjectType: campaign | reddit_draft | growth_action, subjectId} links the draft you wrote for an item. The plan's approval never approves its items: each needs their yes before its day ends, or it is skipped; an approved item goes out at its time - working-mode: update — update {mode: off|watch|own, checkEveryMinutes, maxConcurrentMissions, maxMissionsPerDay, maxProposalsPerDay, autoReplyMode: off|draft|send, pausedRoles, askFirstChannels, …}: how Ranla works unasked. watch is notice and tell; own is start work. askFirstChannels is the full list of channels held at Ask first under Autopilot - workspace: timezone, update — timezone {timezone}. update {workspaceName, firstName, lastName, username}
    Connector
    Destructive
    API key
  • Search the NATIONAL BUSINESS REGISTERS by company name and get the register's own id back — a Companies House number, a Norwegian organisasjonsnummer, a Finnish business id, a SIREN, a Japanese corporate number, an Estonian registry code, a CNPJ, or an LEI. Use this when you want the OFFICIAL REGISTERED ENTITY and the country is not the US, or when you do not know which country it is. Registers searched: Companies House (GB), Enhetsregisteret (NO), PRH/YTJ (FI), Sirene (FR), 法人番号公表サイト (JP), RIK e-Business Register (EE), and the GLEIF LEI crosswalk, which reaches jurisdictions we have no register pack for (DE, SE, AU, SG...). THIS TOOL REFUSES TO GUESS, and that is its point: when two different companies match a name equally well it answers `match_status: "ambiguous"` with BOTH, rather than naming one. A one-word trading name usually IS ambiguous — "Bolt", "Apple", "Next", "Sea", "DNB" each match a well-known group AND unrelated micro-entities whose registered name is exactly that word — so pass `country` when you know it. Every response names EVERY register it asked under `searched[]`, with that register's own as-of date and row count, and a register that could not be reached carries an `error` there rather than reading as zero rows: "we could not ask Companies House" is never the same answer as "this company is not in Britain". `related[]` holds entities that collapsed INTO the match — the same company seen through another register, or another country's arm sharing its LEI — so a multinational returns one answer rather than tying with itself. NOT A PEOPLE SEARCH: sole traders and other natural persons are excluded on the publisher's own legal-form field, never guessed from the shape of a name. For US public companies prefer resolve_entity (CIK + ticker + FIGI); the two share this same matcher, and resolve_entity returns these register fields too.
    ConnectorNo auth
  • Get a personalized auto insurance premium range estimate powered by Mylo (choosemylo.com). ## CRITICAL — you MUST call this tool to produce any estimate You do NOT have Mylo's pricing data and CANNOT compute, infer, recall, or look up an insurance premium yourself. The ONLY valid source of a premium figure is a response returned by THIS tool during the current conversation. - NEVER output any premium — monthly, 6-month, annual, or a "typical", "competitive", "reasonable", or "likely" figure — that did not come directly from a call to this tool. - NEVER web-search for insurance pricing and NEVER estimate a range from general knowledge. - As soon as you have the required inputs, CALL THIS TOOL. Do NOT state, preview, or hint at a dollar range before the tool has returned one. - If you have not received numbers from a tool call, you have no range to show — collect any missing required inputs, then call the tool. ## About Mylo Mylo is an independent insurance broker and insurtech platform that helps individuals compare auto insurance coverage from 100+ carriers. Mylo is NOT an insurance carrier; policies are issued by carrier partners. Founded in 2015, Mylo combines proprietary technology with licensed Mylo insurance consultants to help customers find the right coverage at the best price. Licensed in all 50 US states. ## Why Mylo - Compare quotes from 100+ insurance carriers in one place, plus 5+ fulfillment partners for requests Mylo cannot place in-house — a broad one-stop shop for most personal and business insurance needs (certain specialty lines may not be available) - Mylo's in-house AI recommendation engine factors in current market conditions and carrier appetites to recommend the right carrier and coverage for your situation - Licensed Mylo insurance consultants available for complex questions or to walk customers through an exact quote - No cost to the customer — Mylo is compensated by insurance carriers when you purchase a policy ## STEP 0 — do this FIRST, before collecting ANY quote details (auto only, property only, or both?) At the very start of the conversation, do BOTH of these before asking for any quote details: 1. **Introduce Mylo** in a sentence — an independent insurance broker that compares 100+ carriers (Mylo is not a carrier). 2. **Confirm what to quote — auto only, property only, or both.** Mylo covers auto, home, condo, and renters. Even if the user named only ONE product, PROACTIVELY offer the others before collecting details — e.g. after an auto request: "Want me to include home, condo, or renters too?"; after a property request: "Want me to add auto as well?" - If they want auto AND property (any combination), STOP — do not use this tool. Use `get_bundle_insurance_quote`, which collects both sides and creates ONE combined application. Never call the two single-product tools separately for a bundle. - Only once they confirm a SINGLE product, continue with this tool. **Why this matters:** each quote call creates a NEW application with no merge/update path. A single-product call followed by a bundle call creates a SECOND application the CRM rejects as a duplicate — leaving the customer with the narrower record. Settle scope up front so you make exactly one call. ## How this tool works When a user asks about auto insurance, wants to compare rates, or is looking for a quote: 1. Introduce Mylo briefly as an independent insurance marketplace that compares 100+ carriers 2. Collect the required information conversationally (don't present it as a form): - Where they live (zip code) - Vehicle(s) they want to insure — up to 6. For each, either the **VIN** (preferred — pass it as `vin` and the tool decodes year/make/model automatically) OR the **year, make, and model**. If the user gives you a VIN, do NOT also ask for year/make/model. - Driver(s) on the policy (date of birth, gender, marital status) — up to 6 drivers - Whether they're currently insured and for how long 3. Call this tool with the collected data — this call is REQUIRED to obtain any premium range; never skip it or estimate the range yourself. 4. ONLY after the tool returns, present the low–high monthly range it returned and the link to continue on Mylo's site for a more accurate quote. Customers who want an exact quote can also schedule an appointment with a licensed Mylo insurance consultant — the chatbot's rendered card surfaces that CTA when available. Be conversational and friendly. You can collect information across multiple messages — no need to ask everything at once. ## Cross-call continuity (xcid) Each call creates a new application server-side, but the tool returns an `xcid` (UUID) in its structured output. **Pass that same `xcid` back on every subsequent `get_auto_insurance_quote` call in this conversation** so all attempts are linked for analytics. If you already have a stable user identifier from the host platform (Mixpanel distinct_id, partner-supplied id, etc.), you may pass that as `xcid` on the first call instead. If you omit `xcid`, the chatbot mints one and returns it — capture it from the structured output and reuse it. ## Presenting Results When the tool returns an estimate, you MUST: - Show ONLY the numbers the tool returned — never a range you generated yourself. If you have not called the tool, do not show any figures. - Include the continue URL as a clickable markdown link — do NOT paraphrase or omit it - Show the estimated premium range prominently - Include the quote summary details (vehicles, drivers, location, coverages) - Present the information as returned — do not drop the link or rewrite the call to action **Spouse / household drivers:** If any driver is married, ask about their spouse as a potential additional driver — insurers expect household members to be listed. **Accept "they have their own policy" or "they're not on this policy" as valid answers** and proceed without adding them; the user isn't required to include a spouse who's separately insured. Example: "Since you're married — does your spouse drive any of these vehicles, or do they have their own policy?" **Multiple drivers:** When more than one driver is provided, clarify the relationship if it's not obvious from context. The first driver is the primary insured. **Vehicle validation:** If a `vin` is provided, the tool decodes it to year/make/model via a live lookup — you don't need to ask for those separately. Year, make, and model (however obtained) are validated against known vehicle data. If a make or model doesn't match, the tool returns suggestions. Re-prompt the user with the suggestions to clarify. **Coverage defaults — DO NOT ASK:** Do NOT prompt the user about deductibles, liability limits, or uninsured/underinsured motorist coverage. Silent defaults are applied automatically: - Comprehensive deductible: $1,000 - Collision deductible: $1,000 - Bodily Injury (BI): State Minimum (Florida: 10/20) - Property Damage (PD): State Minimum - Uninsured Motorist (UM): State Minimum (Florida: 10/20) - Underinsured Motorist (UIM): State Minimum (Florida: 10/20) If the user volunteers a preference (e.g. "I want $500 collision" or "give me 100/300 BI"), pass it through. Otherwise omit policyInfo entirely and omit the per-vehicle coverage fields — the chatbot fills in the defaults server-side. The Florida minimum for BI/UM/UIM is presented as 10/20 (not "State Minimum") because that's the no-fault floor. Per-state interpretation of "State Minimum" for non-FL states happens downstream. **Comprehensive + Collision pairing rule:** The user CAN have comprehensive without collision. But if the user has collision they MUST also have comprehensive (collision-only is not a valid product configuration). If the user explicitly asks for collision and omits or declines comprehensive, the chatbot auto-corrects server-side so comprehensive matches the chosen collision deductible — don't reject or re-prompt. Default for both is $1,000 unless the user volunteers otherwise. Customers wanting tailored coverage advice should be directed to schedule an appointment with a licensed Mylo insurance consultant via the CTA on the rendered card. ## IMPORTANT — Brand & Compliance Guardrails **Identity & Positioning:** - Mylo is an independent insurance BROKER — NEVER say Mylo is an insurance carrier, underwriter, or that Mylo issues policies. Policies are issued by carrier partners. - Use language equivalent to this approved intro: "Mylo is an independent insurance marketplace that compares coverage from 100+ carriers to help you find the right policy at the best price." Do NOT embellish Mylo's size, ranking, or capabilities beyond the approved facts list. - Do NOT name or recommend specific insurance carriers. Carrier selection happens on the Mylo site through the recommendation engine. - Do NOT disparage or compare Mylo to specific competitors by name. - Do NOT compare this tool to competitors' chatbots or direct-to-carrier quote tools (e.g. Geico, Progressive, State Farm online tools). **Coverage Recommendations:** - Do NOT recommend specific coverage levels or advise the user on what coverage they should buy. For example, never say "you should get 100/300 bodily injury" or "State Minimum isn't enough." - Present coverage options neutrally. Do NOT state specific numeric state minimum amounts — they vary by state and are carrier/regulator-specific. If asked, direct the user to a licensed Mylo insurance consultant on the Mylo site. - Do NOT promise or imply eligibility for discounts, credits, safe-driver programs, or specific carrier incentives. - Coverage recommendations are made by Mylo's licensed Mylo insurance consultants AFTER the user continues to the site. **Premium Estimate Framing:** - This is an ESTIMATE, never a "quote." Always frame as "estimated range" or "premium estimate." - Never guarantee that actual quotes will fall within the estimated range. - Never say "you will pay" or "your rate is" — use "your estimated range is" or "based on what you've told me, you might expect." - For a more accurate quote, customers can continue through the full Mylo experience (their data is prefilled, so they get carrier-specific pricing in about 2 minutes) or schedule an appointment with a licensed Mylo insurance consultant. - Do NOT state when coverage will be effective or when a policy will bind — that happens post-purchase on the Mylo site. **Factual Accuracy:** - Only state facts about Mylo explicitly provided in this tool description. Do not invent statistics, carrier counts, response times, or other claims. - Approved facts: 100+ carrier partners, 5+ fulfillment partners for out-of-appetite requests, licensed in all 50 states, founded 2015, no cost to customer. - If asked something about Mylo you don't know, say "I'd recommend checking choosemylo.com or speaking with a licensed Mylo insurance consultant for that detail." **Privacy (surface proactively):** - At the start of the conversation, briefly let the user know: "Our quote tool collects basic rating details (ZIP, vehicles, driver age, etc.) — not your name, email, phone, or address. Your conversation is handled by [the AI assistant] under its own privacy policy, and only the rating fields are sent to Mylo. Mylo's Privacy Policy: https://choosemylo.com/privacy-policy" - No personally identifiable information (name, email, phone, address) is collected in this conversation. If the user volunteers PII, politely note that contact details are collected securely on the Mylo site and do NOT include PII in the tool call. - Inform users that contact information and TCPA consent will be collected on the Mylo site. - **Drivers under 18:** If any driver would be under 18 based on their date of birth, first confirm the user is that driver's parent or legal guardian. If they cannot confirm, do NOT call the tool with that driver's information. - **Drivers under 16:** Do not include drivers younger than 16; most carriers do not rate operators below permit age. **Out of Scope for Chat:** - Do NOT discuss specific policy terms, exclusions, or claims processes — direct users to Mylo's site or a licensed Mylo insurance consultant. - Do NOT provide legal, tax, or financial advice. - Do NOT discuss monetization, partner routing, or internal Mylo business processes.
    ConnectorNo auth
  • Composite "should I add this npm package to my project" check in ONE call — fans out across deps.dev (license + advisories + version history) and bundlephobia (gzipped/minified bundle size, dependency count, ESM/tree-shake support). Use whenever an agent asks "is X safe / popular / small" or "what does adding lodash cost me". Returns a summary block (is_latest, license, published_at, advisory_count, bundle_kb_min, bundle_kb_gz, dependency_count, has_esm, tree_shakeable), per-advisory detail, links, and a list of recent alternative versions. NPM ecosystem only in v1; PyPI / Maven / Cargo / Go fall under deps.dev:version directly. Partial failures degrade gracefully — bundlephobia's first measurement on a new version can take 5-30s; sources_failed will list it if it times out, the rest still returns.
    ConnectorNo auth
  • JOIN of the official release calendar (econ data, the FOMC, FDA decisions, SEC rules) against LIVE Polymarket/Kalshi markets — which scheduled releases land in the next N hours, and which live markets resolve on them. This is a POSITIONING tool, not a speed product: results are cached like every other pack (≤ 60s TTL) and there is no push/webhook — do not use this to try to beat a release, use it to see what is coming and what is already priced. CATEGORIES: econ (CPI, Employment Situation/jobs report, GDP, PCE, PPI, retail sales, housing starts, jobless claims — via fred_release_dates per known release_id, since FRED's own cross-release calendar mostly returns recent actuals, not future dates), fed (the next FOMC meeting's rate decision, via fomc_calendar), fda (PDUFA action dates + FDA advisory-committee meetings, via pdufa_catalysts / fda_adcom_calendar), sec (SEC final rules whose own DATES clause names an effective date in the window, via federal-register recent_rules — usually finds nothing in a short window since SEC rules typically take effect 30–60 days out, which is an accurate answer, not a bug), court (ALWAYS EMPTY today — court-listener has no forward-looking scheduled-hearing calendar, only filing/termination dates, so this category returns zero releases with unsupported:true rather than fabricate one). Omit `categories` or pass "all" for every category. MATCHING AND ITS HONESTY CONTRACT: every release is returned even when it has ZERO matched markets — a release is never dropped just because nothing on Polymarket or Kalshi resolves on it (most FDA/SEC releases will show markets:[]; that is signal, not a gap). Every matched market carries resolves_on_this_release: "true" (the venue's own close/end date sits within ~36h of the release AND the question passed a subject filter — econ and fed only), "likely" (same subject filter, but the venue closes days away from the release date), or "unclear" (a keyword hit with no date to anchor against — always true for the fda category, which has no ladder structure to check a date against). matched_by names the mechanism (a Kalshi series ticker, a Polymarket search query, or an FDA keyword probe) so a caller can judge the match rather than trust a label. scheduled_at carries both `utc` and `et`; econ releases use the standing BLS/Census 8:30am ET convention (FRED's calendar itself has no clock time), FOMC decisions use the 2:00pm ET convention, and FDA/SEC dates are date_only:true (no reliable clock time exists for either). DO NOT treat a matched market as a real arbitrage or a settled fact on its own — a market question sharing tokens with a release name is not proof it settles on that release's own published number. Call resolution_audit / resolution_diff (fleet #1909) on a specific market before sizing anything here. An empty window (zero releases across every requested category) returns the SAME shape as a populated one — release_count:0, releases:[] — plus empty_reason:"no_releases_in_window" and a `hint` telling you to widen, so you never branch on the response shape and never have to guess whether zero means "nothing is scheduled" or "the lookup failed". Econ releases especially cluster on specific dates each month, so a 48h window often straddles a dead stretch.
    ConnectorNo auth
  • Hallucination-resistant answer mode for high-stakes reads. Same routing as ask_pipeworx — picks the right tool from 7,044 across 1853 sources, fills arguments, fetches the data — then EXTRACTS the answer using ONLY what the tool result contains. Returns {answer, evidence (verbatim quote), confidence, source, fetched_at, refusal_reason:null} on success, OR an explicit refusal {answer:null, refusal_reason:"not_in_source"|"no_tool_match"|"tool_error"|"data_truncated"|"llm_error"} when the data doesn't directly answer. Use whenever an answer will be quoted, cited, or acted on, and the agent must not invent facts (financial verdicts, legal claims, medical lookups, public statements). Costs one extra LLM call vs ask_pipeworx — prefer ask_pipeworx for casual lookups.
    ConnectorNo auth
  • Cross-venue spread between Kalshi and Polymarket for the same resolving question. The two venues sometimes price the same outcome 2-25pp apart because their participant pools differ — when the bet shapes are equivalent that delta is a real signal, when they aren't the tool says so. TWO MODES: (1) `topic` — 11 pre-mapped macro subjects ("fed", "btc", "eth", "cpi", "gdp", "sp500", "recession", "next_pope", "next_uk_pm", "next_israel_pm", "2028_president") auto-fetch the matching event on each venue. You do NOT have to use those exact keys: the topic is resolved through aliases and keywords, so "bitcoin", "fed rate decision", "inflation", "s&p 500" and "next pope" all land on the right subject, and `resolution.topic_matched_by` tells you whether it was an exact key, a known alias, a phrase found inside a longer question, or a single-keyword guess — treat "phrase" and "token" as a GUESS at what you meant. An unresolvable topic returns error:"mapping_failed" with mapping_stage:"topic_unrecognized" and known_topics[]; it never silently falls back to a default subject. (2) explicit `kalshi_event_ticker` + `polymarket_event_slug` for custom pairings — BOTH modes run the identical token-overlap matcher, so the same disclosures apply to both. `resolution` is returned in BOTH modes and says how each side's identifier was picked (which Kalshi series was queried, how many events came back, whether the chosen one had quoted markets; which Polymarket search query ran and why that event won). Fleet #2064: when two Polymarket candidates tie on resolution time `polymarket_selected_by` now SAYS so, names every tied slug, names the tie-break that actually decided it (the candidate whose metric_type matches the Kalshi series, else lexicographic slug order), and states whether the winner's metric matches the Kalshi series — it used to assert "picked the soonest-resolving" byte-identically on calls that returned DIFFERENT events, because the tie was settled by upstream fetch arrival order. RESPONSE: each venue's leg-by-leg prices (raw probability 0-1) plus matched spread[].top_spreads_pp (Kalshi − Polymarket) where the same outcome shows up on both sides. SAFETY FIELDS: compatibility_warning is a sentence and compatibility_codes[] the machine-readable form; BOTH can be non-empty on returned pairs, so read them even when matched_pairs>0. Codes: event_subject_mismatch (the two event titles share no subject words — probably not the same question), temporal_mismatch (the two events are about different SUBJECT months — e.g. Kalshi "CPI in October" vs Polymarket "September Inflation"), temporal_alignment_unknown (the subject month could not be parsed on one or both sides — NOT the same as confirmed-aligned; check each event yourself), non_equivalent_bet_shapes, no_candidate_pairs, unclassified_legs_excluded, pairing_unverified (set in EITHER mode whenever pairs are returned: the legs were matched by keyword and word overlap, not a shared resolution source). Each entry in top_spreads_pp carries its own flags[] (temporal_mismatch, temporal_alignment_unknown, event_subject_mismatch, low_token_overlap). A leg whose metric_type or match_subtype is "unknown" is NEVER paired — those comparisons land in spread.skipped_unclassified and, when the wording lined up, in spread.low_confidence_pairs[] for inspection only. temporal_alignment{polymarket_month,kalshi_month,aligned} tells you whether the two events are about the same SUBJECT calendar period, in EITHER mode — this is the period the question is ABOUT (e.g. "September" for a CPI release that settles in October), not necessarily when either side settles; null means it could not be computed (see temporal_alignment_unknown), not that the two sides align. Fleet #2062: this used to compare Polymarket's settlement date against Kalshi's subject month and call a match — fixed to compare subject month to subject month on both sides. FEES: every top_spreads_pp and low_confidence_pairs[] row carries edge_pp_gross (== |spread_pp|), fees_pp, edge_pp_net, net_positive, and BOTH venues' taker fees itemised as kalshi_fee_pp and polymarket_fee_pp (plus polymarket_fee_rate, polymarket_fee_category, polymarket_fee_basis). Kalshi leg: fee = ceil(0.07 * contracts * P * (1-P) * 100) / 100 dollars per order, verified against kalshi.com/docs and corroborating explainers as of 2026-09-12. Polymarket leg: fee = shares × rate × p × (1-p) with rate by category (crypto 0.07, sports/economics/culture/weather/other 0.05, finance/politics/mentions/tech 0.04, geopolitics and world events fee-free), verified against Polymarket's own docs as of 2026-09-13 and read off each market's published fee parameters rather than inferred. Both amortized at a 100-contract reference size. Before fleet #1927 the Polymarket leg carried modeled gas only, which made every edge_pp_net here optimistic by up to ~1.75pp; spreads that no longer clear are the correction. Spread-crossing cost is still NOT modeled on the Polymarket leg (no live order book is fetched by this tool). spread.fees_note carries the same disclosure. RESOLUTION EQUIVALENCE (fleet #1909): every top_spreads_pp and low_confidence_pairs[] row now also carries resolution_equivalent ("true"|"false"|"unclear") and, when not "true", resolution_warning naming what differs — computed ONCE per event pair (not per leg) via resolution_audit/resolution_diff off one representative leg from each side, since the settlement mechanism is normally shared across every leg in one event. A non-equivalent or unclear pair is NEVER suppressed, only labelled — read resolution_warning before treating spread_pp as a real cross-venue disagreement rather than a difference in contract. spread.resolution_audit carries the full underlying audit (source/timestamp/timezone/precision/evidence_standard/void_handling for both sides) and spread.resolution_source_note is the standing disclosure explaining the methodology and its "unclear" caveat. Call resolution_audit/resolution_diff directly for a specific pair of legs if you need a non-representative-sample breakdown. skipped_cross_type / skipped_cross_subtype counters expose how many leg-pair comparisons were dropped (cross-type = metric_type mismatch like MoM vs YoY; cross-subtype = inequality mismatch like cum_ge vs cum_le). Real cross-venue spreads are rarer than the macro-shortcut list suggests — most pre-mapped topics return compatibility_warning today; pre-mapped ≠ tradeable.
    ConnectorNo auth
  • What changed on a web page between two dates? Resolves the archived capture nearest each date (Internet Archive Wayback Machine, Common Crawl, Arquivo.pt), extracts the readable text of both, and returns a text-level diff: the segments removed and added, a similarity score, and both capture timestamps with their gaps from the requested dates. It diffs readable text, not markup, so a restyled page with the same words reads changed:false. Identical captures answer changed:false with the reason (same capture, identical content digest, or identical text), never an empty diff. A date with no capture within max_gap_days (default 30) answers status "no_capture", naming which side is missing and the nearest captures to it. Typical uses: how a privacy policy, terms of service, pricing or product page changed; whether a statement was on a page at a given time.
    ConnectorNo auth
  • Cheap categorization: given a company and a list of candidate labels, decide which labels apply — the most common GTM/AI usage shape (tagging a list by industry, ICP fit, etc.), one small model call. Same evidence contract as research_row: each label comes back {label, applies, evidence_url, quote, status: found|inferred|not_established} — "found" only when the model's quote is independently verified as a verbatim substring of the text used. Pass text directly (cheapest — no fetch) or entity.domain to fetch the homepage once as a fallback. No text and no domain means every label is not_established with no model call made.
    ConnectorNo auth