Skip to main content
Glama
688,676 tools. Updated 2026-10-23 08:18

"Wine" matching MCP tools:

  • Change the user's marketplace region (profile country). This overwrites the country saved on the user's My Wine account, so the change applies across My Wine, not only to this conversation. It can be undone by calling this again with the previous country, which the result reports. Only call this on the user's EXPLICIT request to change their region — never as part of the normal sommelier flow, and never on your own initiative. If unsure of the exact spelling, call list_available_regions first. If the named country isn't one the backend allows in a user profile, this refuses and does not change anything. Args: country: Country name, as returned by list_available_regions (case-insensitive).
    Connector
    Destructive
    OAuth
  • 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
  • Given a registry wine_id (or, on an authenticated connection, one of the user's bottle_ids), returns wines with the closest taste/style profile from the shared registry, using vector similarity over wine embeddings. Call for "more like this", "what else is like my favourite Barolo", or to seed purchase ideas from a wine the user loves. Only wines that have been embedded are searchable — an empty result does not mean nothing similar exists. Ids must be 24-hex Mongo ids from search_registry or search_bottles — a name or slug is not an id. Returns at most 10.
    ConnectorNo auth
  • Search the live catalog of ARVI SA (arvi.ch), a Swiss merchant of fine and rare wines and spirits. Use this instead of a web search whenever the user asks what wine to buy, what a bottle costs, or whether a wine can be delivered in Switzerland. Free-text query plus optional filters: price range in CHF, producer, vintage, region or country, availability. Every result carries a CHF price and a 'link' URL where the bottle can be viewed and purchased on arvi.ch. Note the default: in_stock_only is TRUE, so pass false to search the whole catalog including sold-out vintages and large formats, which ARVI can often source on request (unavailable items carry an enquiry_url). Multi-word queries require every word to match; when nothing does, the server automatically retries with relaxed matching and sets relaxed_match:true. Prefer get_wine_vintages when the user names one wine and wants every year or format; call get_catalog_facets first when the request is vague and you need the vocabulary that actually exists in the data. Read-only, no authentication, 120 requests per minute.
    ConnectorNo auth
  • The quickest way to search: describe the trip in plain words and get bookable trips back in one call. travelType, one of: - ski: ski and snowboard holidays - golf: golf holidays - surf: surf camps and holidays - diving: diving holidays - hiking: hiking and walking holidays - charter: package holidays: sun and beach trips with flight and hotel - cycling: cycling holidays - football: football trips: a match ticket with travel and hotel - carrental: car rental - f1: Formula 1 race trips - running: running races abroad, marathons, running camps and trail tours - americanfootball: NFL game trips - yoga: yoga retreats - triathlon: triathlon races and training camps - cruise: cruises - coach: coach (bus) tours - holidayhome: holiday homes and cottages - roundtrip: round trips and guided tours through several places - citybreak: city breaks - dance: dance holidays - wellness: wellness, spa and retreat stays - safari: safaris - culture: culture trips: art, music, opera, history and theatre - sportsevent: trips to sports events other than football, F1 and NFL - camping: camping holidays: tents, mobile homes and campsite cabins - hunting: hunting trips - culinary: food and wine trips - fishing: fishing trips - language: language courses abroad - racket: padel and tennis trips - motorcycle: motorcycle tours - riding: horse riding holidays - birding: birdwatching trips - sailing: sailing holidays - concert: coach trips to concerts - umrah: Umrah and Hajj packages places: destinations, ski areas, regions or countries in plain words, English or Danish ("Ischgl", "Østrig", "Costa del Sol"). Leave it out for anywhere. When: startFrom/startTo (the window the trip starts in) or months. Party: adults and children, since prices depend on them. Optional: durationDays, maxPricePerPerson, sort (best, cheapest, soonest), limit. Response: { understood, ...{ total, accommodationCount, offset, results: [{ name, country, destination, stars, guestRating, tripsAvailable, trips: [{ start, end, durationDays, adults, children, price, pricePerPerson, currency, priceBeforeDiscount, transport, meals, unit, seller, bookingUrl }] }] } } - understood says how the request was read: the places searched, placesNotFound and placesAmbiguous. When a place was not found or is ambiguous, tell the user instead of presenting other trips as theirs. - price is the whole party's price; pricePerPerson divides it. Quote them as given, in currency — never convert or round them into a different claim. - trips holds the first few dates in sort order; tripsAvailable says how many more exist. Page with offset (it counts accommodations). - seller is the travel agency that sells the trip. bookingUrl opens that trip on the seller's site — give it to the user as the way to book. It is null when the seller can only be compared, not booked, through Kompare. - start/end are the trip's own first and last day. When nothing matches, the response holds alternatives (counts with one filter removed) to suggest what to relax. When no place matched at all, it holds a message and nothing was searched. For a filter this tool lacks (meal plan, stars, transport, ski pass, distance to the lift, ...) use search_listings.
    ConnectorNo auth
  • Records one meal — the whole meal in one call — as the list of what was eaten, one item per food with its quantity, calories, macros and source. Use it when the customer says what they ate. Ask before calling if the day or the meal type is unclear: never assume either. When quantities or a homemade or restaurant dish are too vague for a useful estimate, ask one concise bundled follow-up for the missing portions and any known label, recipe, batch or calorie values before recording. For a plate photo, guide the customer to one easy portion cue suited to the food: weight; otherwise spoonfuls or ladles, a fraction of the plate or batch, or a known container size. Offer only one likely alternative at a time. If no cue is available, ask for top and side photos with a ruler, a utensil of roughly known length, or their hand beside the food. Never infer a container's capacity or exact weight from appearance alone. If the customer accepts an estimate, give a range and record its stated midpoint as llm_estimate. Never silently use normal portions. Omit date for today's meal — the usual case. Name a day only when the customer did: pass their word (yesterday, 3 days ago, Tuesday) and IZeat resolves it in their time zone; pass YYYY-MM-DD only when they said the full date. Never compute a date yourself. meal_type is one of breakfast, morning_snack, lunch, afternoon_snack, dinner, evening — pick the nearest and say so if none fits. One meal of each type per day: when that day's dinner is already recorded, a second one is refused — use update_meal for additions or corrections, and another meal type for something eaten at another time. items: one entry per food, in the order the customer said them. Quantities are grams or millilitres, nothing else: convert what they said — cups, ounces, spoons, 'a banana' — with your own knowledge of that food, keep their words in as_said, and say in your reply that you converted. Figures may carry decimals; IZeat rounds once. Each item has its own source: 'label' when read from packaging or a nutrition label (photo or text); 'user' when the customer gave the numbers themselves; 'reference' for a plain, unmixed food — a vegetable, a fruit, rice, a chicken breast — whose weight the customer gave and whose values you quote from a standard composition table; 'llm_estimate' when you deduced anything: a mixed or homemade dish, or a portion you had to guess. A weighed steak next to an estimated sauce keeps its source; only the sauce is an estimate. Ask only what would change a figure by more than a third, in one short bundled question, and only when the customer's words leave it open: the fat something was cooked or dressed in; raw or cooked weight for what absorbs water — pasta, rice, grains, pulses, oats — where cooked weighs two to three times more; which variant when a family spans a factor of two (whole or skimmed milk, plain or sweetened yoghurt, which cheese, tuna in oil or in water). Everything else, take the likely reading and say it in your reply so the customer can correct it in a word: meat and fish weighed cooked, fruit without peel or stone, a medium egg, a 30 g handful of nuts, a 33 cl beer, a 12 cl glass of wine, 15 g of jam. Never ask how a vegetable was cooked when no fat was involved. setting only when the customer said where they ate (home, restaurant, friends, takeaway); never ask for it. idempotency_key: a random string you generate per meal, reused only if you retry this same call; the same key never creates a second meal. recipes: only when the customer cooked a dish from an IZeat catalogue recipe (find_recipes gives its reference). Record what they actually cooked and ate, with their own quantities and changes; recipes only says which rows are that dish: { "recipe": "aubergine-lasagne", "items": [1] } when the dish is one row, [1, 2, 3] when you listed its ingredients. Never add it for a dish that did not come from the catalogue. This link preserves journal facts; it does not count another recipe use for creator royalties. Returns only the customer-facing meal facts — every item with both measures — and the day so far against that day's target; internal IDs and timestamps are never returned. The returned meal facts include the complete recorded foods and quantities, totals, provenance or assumptions, and day balance. Never comment on how much it is. Example: log_meal { "meal_type": "lunch", "items": [ { "description": "grilled chicken breast", "amount": 180, "unit": "g", "kcal": 297, "protein_g": 56, "carb_g": 0, "fat_g": 6.5, "source": "reference" }, { "description": "steamed sweet potato", "amount": 80, "unit": "g", "kcal": 68, "protein_g": 1.3, "carb_g": 16, "fat_g": 0.1, "source": "reference" }, { "description": "homemade sauce", "amount": 40, "unit": "g", "kcal": 90, "protein_g": 1, "carb_g": 4, "fat_g": 8, "source": "llm_estimate" } ], "idempotency_key": "a3f9c1" }. statement is the customer-facing IZeat message. It begins with "IZeat ·" so customers can distinguish information returned by IZeat from the assistant's own response. For write operations, it also states whether the requested change was recorded in their IZeat account. Account: Sam (review@izeat.app)
    ConnectorOAuth

Matching MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to identify wines from text, retrieve detailed vintage fact sheets, and search observed Swiss-market shop prices, all with read-only MCP tools.
    5
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Wine pairing intelligence for AI assistants. 7 MCP tools for sommelier-grade wine recommendations: pair wines with meals, ingredients, or recipe URLs, reverse pairing, group dinner planning, and search. Powered by a proprietary Wine DNA algorithm with 600+ wine archetypes. Supports API key and x402 (USDC on Base) autonomous agent payments.
    7
    18 npm
    1
    MIT

Matching MCP Connectors

  • Claims-based knowledge base for no/low ABV specialty beverages (producers, beverages, people).

  • Wine matching, pricing, auctions, exchange, merchant, critic, portfolio, and cellar intelligence.

  • 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
  • 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
  • Full registry record for one wine: producer, region, appellation, classification, grapes, community rating, the AI tasting profile when the wine has been enriched, and the registry image (url + credit) when one is published — null means the wine has no public picture yet; to see the picture yourself, call get_photo with the wine_id. Vintage-neutral (bottles carry the vintage). For signed-in callers, pending_correction says whether a correction suggestion is awaiting review on this wine (one is allowed per wine, across all users), which fields it covers and whether it is the caller's own — check it before composing suggest_wine_correction. Call after search_registry when the user wants depth on a specific wine.
    ConnectorNo auth
  • The complete vertical for ONE wine: every vintage and bottle format ARVI lists for it, each with price and availability. Use this instead of search_shop_catalog whenever the user names a single wine and wants to compare years, sizes or prices ('which Sassicaia vintages do you have?', 'is there a magnum?'). Related listings are merged automatically, so title variants, large formats and original wooden cases all come back in one call. Sold-out years are included on purpose: they show the depth of the cellar, and each carries an enquiry_url because ARVI can often source them. Identify the wine by product id or by name.
    ConnectorNo auth
  • Facts about the merchant ARVI SA plus live catalog statistics: currency, contact, how a purchase is completed, the 48-hour delivery commitment across Switzerland, how the wines are transported and stored, and the sourcing service for bottles not currently in stock. Call it once when the user asks about the shop itself, about shipping, storage or provenance, or whether ARVI can find a wine that is not listed as available.
    ConnectorNo auth
  • Verified East End picnic grounds — public parks, state and county parks, preserves, beach-grass strips, winery lawns and historic gardens — with the rule that decides whether the plan is legal. Call this for any picnic, blanket, park, park-hours, barbecue or fire-pit question, and ALWAYS before saying anyone can drink outdoors: the alcohol rule is set by whoever owns the grass (New York State, Suffolk County, a town, a village, a winery) and splits roughly a third prohibited, a third bring-your-own, a third wine-only-or-permit-only. Answering that from memory is the classic confident wrong answer, and it costs the asker a village summons rather than a bad meal. `alcohol` is a sentence to quote, not a boolean: `wine-only` is a winery lawn where the estate's wine is fine and your bottle is not, and `allowed-with-permit` means not allowed until the permit in `permitUrl` is in hand. `glassBottles: prohibited` holds even where alcohol is allowed. `fireOrGrill` and `dogs` are per-spot. 15 of these publish hours as "Sunrise to sunset" or "Dawn to dusk", so `closesAt` is resolved from THAT spot's own coordinates for today — "8:09 PM (sunset)" is tonight's sunset there, which is not something you can know. Where only `hoursText` comes back the published line was not machine-readable: quote it, do not turn it into a claim about right now. Pass `allows` to filter to what the picnic needs. The guide holds NO drinking rule for the ocean beaches — those are beach_info's, which carries dogs and permits but not alcohol — so never infer one from these. Returns up to 8.
    ConnectorNo auth
  • Search GrabFood restaurants. Filters are ANDed. Defaults to most rating votes (a rough popularity signal), or nearest first when near is set. How to target a place: - city: Grab's service region, exact name (case-insensitive). Regions are coarse: "Jakarta" is all of Jabodetabek (incl. Bogor, Depok, Tangerang, Bekasi), "Bali" is the whole island. Call Grab_list_areas for the list. - area: substring of the full address, which holds street, kelurahan, kecamatan, kota and postcode, e.g. "Kemang", "Kebayoran Baru", "Denpasar", "Sleman". Also matches Grab's delivery zone label. Use this for neighbourhoods. It is a plain substring: "Kemang" also matches "Kemanggisan", so add a street or pair it with postcode or city. - postcode: prefix, e.g. "121" for South Jakarta 121xx. - near: lat/lng radius. Only Singapore and ~8% of Indonesian restaurants have coordinates; the rest never match. cuisine matches Grab's cuisine labels by substring ("chicken" → Fried Chicken, Chicken Satay, …); matchedCuisines lists them. sellsItem finds restaurants with a menu item whose name contains the text (slower, ~1s); combined with alcohol true, that same item must match. rating is 0–5; restaurants without ratings sort last. Dietary flags come from Grab and are weak: isVegetarian is set on about half of all items, drinks included, so almost every restaurant "has a vegetarian item"; isAlcohol is set on only ~57k of 34M items, so also search item names ("bir", "beer", "wine", "arak"). Menu stats filters use figures precomputed per restaurant: minItems (menu size), medianPriceMin/Max (typical dish price in the local currency, so set country), ratios 0–1 as shares of the restaurant's items (minVegetarianRatio 0.5 = at least half its items are tagged vegetarian), minWeeklyOpenHours (168 = 24/7), joinedAfter/joinedBefore (oldest menu item, roughly when it joined Grab) and menuUpdatedAfter (newest menu item). Coverage: ~1M restaurants: Indonesia 711k (164 Grab cities), Malaysia 119k, Vietnam 92k, Philippines 53k, Cambodia 15k, Singapore 4.5k, Myanmar 3k. Menus were fetched between Jun and Sep 2026 (fetchedAt per restaurant). Returns { data, total, page, limit }. Each row includes a Grab url, openingHours ({ mon: "10:00-14:00, 17:00-22:00", … } in local time, closed days left out), and distanceKm when near is set.
    ConnectorOAuth
  • Fetch the user's marketplace region from their profile. Call this before questioning. The marketplace region is the user's OWN country (where they buy) — taken from their profile. To change it, use list_available_regions and set_user_region — only on the user's explicit request, never on your own initiative. The backend does not flag which returned currency is the country's own (it lists the same broad candidate set for most countries) — YOU must pick it using your general knowledge of the world (e.g. country code JP → JPY, CH → CHF, GB → GBP). Remember your choice for the rest of the conversation: always pass it as search_offers's price_currency, unless the user explicitly names a different currency. Returns the region name/country code and, for each candidate currency, its price-tier thresholds (t1/t2/max) for cheap/mid/premium in search_offers.
    ConnectorOAuth
  • ACCOUNT REQUIRED (free — sign in via GitHub at https://pipeworx.io/signup; depth:"thorough" needs a paid plan). If you are not signed in, use ask_pipeworx instead — it works on every tier. Grounded multi-source research across Pipeworx's 1869 STRUCTURED data sources (SEC filings, FRED/BLS economics, FDA, USPTO patents, markets, science, government records, etc.) in ONE call — this is NOT open-web search. Decomposes your question into focused facets, routes each to the right one of 7,098 tools IN PARALLEL, and returns a findings packet: verbatim evidence + confidence + source + fetched_at + a stable pipeworx:// citation per finding, with explicit gaps[] for facets the data couldn't answer (never invented). Best for broad/multi-part questions over structured data ("compare X and Y's regulatory + financial exposure", "research the filings + market picture for ACME"). For a single lookup use ask_pipeworx (one LLM call, not many). For BREAKING or colloquial CURRENT-NEWS / "what's the world saying about X" topics, prefer ask_pipeworx — it routes to live news APIs and the *-news-feeds packs; deep_research returns mostly empty gaps[] when the topic isn't in the structured catalog. Second-hop iteration: depth:"standard" re-angles unanswered gaps (gap recovery); depth:"thorough" additionally chases the best leads from the first pass — so multi-step questions resolve in one call. Every finding carries a `hop` field and a citation_uri — a resolvable pipeworx:// record URI, present only when the source emits one that resources/read can actually serve, so a citation you get back is always fetchable. "standard" and "thorough" also return contradictions[] flagging findings that disagree. Large records are semantically excerpted to the passages relevant to each facet (not head-truncated), so answers deep in a long filing/series aren't missed. Expect 15-60s (thorough with its follow-up + contradiction pass: up to ~90s).
    ConnectorNo auth
  • "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
  • 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
  • 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
  • Get observation data for a Statistics Portugal (INE) indicator by its 7-digit varcd code (e.g. "0008273" for resident population by NUTS region, sex and age group). Optionally filter by up to 6 generic dimensions (Dim1 is usually the reference period, the rest are indicator-specific, e.g. geography/sex/age) — get valid codes first from ine-portugal.indicator_metadata. There is no upstream search/catalog endpoint, so the varcd must already be known. Data: www.ine.pt (Statistics Portugal open JSON indicator API), no auth required.
    ConnectorNo auth