Koskamo

Good Turn Studio MCP

A collection of remote, read-only MCP servers providing everyday helpers for finance, health, jobs, travel, halal checks, and scripture reading. It uses Streamable HTTP with no sign-in required and stores no user data.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Good Turn Studio MCP logo, by Good Turn StudioCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by Good Turn Studio
MCP endpoint (Streamable HTTP)
https://goodturn-mcp.pages.dev/all/mcp
Vendor documentation

What its tools do

162 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Read-only (162)

162 of 162 have a description · 162 of 162 declare behavior hints · 144 of 144 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Shariah screening of US stocks and halal checks
  • Finding cheap flights and lowest product prices
  • Searching for unclaimed money in US and UK
  • Reading daily scripture or myth passages

Source and maintenance

Community listingRegistry 1.0.1
Maintenance checked

Protocol and capabilities

Server
goodturn-all 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
162 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "resources": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Everyday helpers from Good Turn Studio: Mizan, Halal or Not, Fare Deals, Cheapest Price, Spin My Day, Cancel My Sub, Lower My Bill, Price Drop Back, Find My Money, Supplement Check, Plate Pal, Plan My Workout, Med Bill Check, Appeal My Claim, Job Spotter, Sync My Cycle, Wardrobe Connect, Form Guide, Books Like This, Fair Fare, Art Spotter - Eye of the Beholder, Talmud Scroller, Scroll the Gurbani, Gita Scroller, Scroll the Lore, Stoic Scroller, Bible Swipe. Each tool name starts with its product. Every tool is read-only and nothing about the user is stored. Where an answer has a "say" field, it is a ready-to-read summary.

Tools

162 advertised

mizan_screen_company — Mizan: Screen one company against all four standards
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Mizan. Screen one company against all four standards. Returns a 'say' sentence, the live price, the consolidated share count, the filing figures used, the business screen per standard ('business': main_business, by_standard pass/fail/review, excluded_under), and each standard's ratio, threshold and verdict. In each screens entry, 'compliant' is the overall verdict (false when that standard excludes the company's business, null when the business needs a closer look) and 'debt_compliant' is the debt test alone. Verdicts within one percent of a threshold are flagged borderline. A company name (for example nvidia) also works.

mizan_screen_company input schema
{
  "type": "object",
  "required": [
    "ticker"
  ],
  "properties": {
    "ticker": {
      "type": "string",
      "description": "US listing symbol (a common company name also works)."
    }
  },
  "additionalProperties": false
}
mizan_screen_company annotations
{
  "title": "Screen one company against all four standards",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
mizan_list_standards — Mizan: The four standards, their denominators and thresholds
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Mizan. The four standards, their denominators and thresholds. Screens a US-listed company against four published Shariah equity standards (AAOIFI, Dow Jones Islamic Market, S&P Shariah, MSCI Islamic), first on its business (prohibited industries each standard excludes) and then on its debt, using live...

mizan_list_standards input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
mizan_list_standards annotations
{
  "title": "The four standards, their denominators and thresholds",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
mizan_purify_dividend — Mizan: How much of a dividend to give to charity
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Mizan. How much of a dividend to give to charity. Returns the company's purification ratio (interest income over total revenue, from its latest 10-K that reports interest income; 'latest_annual_filing' and 'note' say when that is older than the latest 10-K) and, if a dividend amount is given, the amount to give to charity. For a company whose main business every standard excludes, 'business_screen' explains that purification does not make it permissible.

mizan_purify_dividend input schema
{
  "type": "object",
  "required": [
    "ticker"
  ],
  "properties": {
    "ticker": {
      "type": "string",
      "description": "US listing symbol."
    },
    "dividend": {
      "type": "number",
      "description": "The dividend received, in any currency."
    }
  },
  "additionalProperties": false
}
mizan_purify_dividend annotations
{
  "title": "How much of a dividend to give to charity",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
mizan_find_halal_alternatives — Mizan: Halal alternatives to a holding
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Mizan. Halal alternatives to a holding. Companies Mizan covers in the same industry (or the nearest related one) whose business is permitted and whose debt passes all four standards at the last quarter-end, largest first, plus Shariah index funds for US and UK investors. Screen a pick live with screen_company before buying.

mizan_find_halal_alternatives input schema
{
  "type": "object",
  "required": [
    "ticker"
  ],
  "properties": {
    "ticker": {
      "type": "string",
      "description": "The holding to replace: a US listing symbol or company name."
    }
  },
  "additionalProperties": false
}
mizan_find_halal_alternatives annotations
{
  "title": "Halal alternatives to a holding",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
mizan_screen_portfolio — Mizan: Screen a whole portfolio
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Mizan. Screen a whole portfolio. Screens up to 15 holdings under all four standards and returns the share of the portfolio that is compliant under each, the holdings that fail, and a combined dividend purification ratio.

mizan_screen_portfolio input schema
{
  "type": "object",
  "required": [
    "holdings"
  ],
  "properties": {
    "holdings": {
      "type": "string",
      "description": "Comma-separated tickers, each optionally followed by a colon and the value held, for weighting."
    }
  },
  "additionalProperties": false
}
mizan_screen_portfolio annotations
{
  "title": "Screen a whole portfolio",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
mizan_calculate_zakat — Mizan: Zakat owed on cash, gold, silver, shares and business stock
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Mizan. Zakat owed on cash, gold, silver, shares and business stock, using live gold and silver prices.

mizan_calculate_zakat input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "cash": {
      "type": "number",
      "minimum": 0,
      "description": "Cash and bank balances."
    },
    "nisab": {
      "enum": [
        "silver",
        "gold"
      ],
      "type": "string",
      "description": "Which nisab to use. Defaults to silver."
    },
    "currency": {
      "enum": [
        "USD",
        "GBP",
        "EUR",
        "CAD",
        "AUD"
      ],
      "type": "string",
      "description": "Defaults to USD."
    },
    "gold_grams": {
      "type": "number",
      "minimum": 0,
      "description": "Gold held, in grams."
    },
    "gold_value": {
      "type": "number",
      "minimum": 0,
      "description": "Or the value of gold held."
    },
    "owed_to_you": {
      "type": "number",
      "minimum": 0,
      "description": "Money owed to you that you expect to be repaid."
    },
    "silver_grams": {
      "type": "number",
      "minimum": 0,
      "description": "Silver held, in grams."
    },
    "silver_value": {
      "type": "number",
      "minimum": 0,
      "description": "Or the value of silver held."
    },
    "debts_due_now": {
      "type": "number",
      "minimum": 0,
      "description": "Debts due now, deducted."
    },
    "business_stock": {
      "type": "number",
      "minimum": 0,
      "description": "Value of business stock for sale."
    },
    "shares_trading": {
      "type": "number",
      "minimum": 0,
      "description": "Market value of shares held for trading (counted in full)"
    },
    "shares_longterm": {
      "type": "number",
      "minimum": 0,
      "description": "Market value of shares held long term."
    },
    "share_zakatable_pct": {
      "type": "number",
      "minimum": 0,
      "description": "Share of long-term holdings treated as zakatable, default 25."
    }
  },
  "additionalProperties": false
}
mizan_calculate_zakat annotations
{
  "title": "Zakat owed on cash, gold, silver, shares and business stock",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
halalornot_check_ingredients — Halal or Not: Check an ingredients list
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Halal or Not. Check an ingredients list. Takes the ingredients exactly as printed on the pack. Returns an overall verdict, a verdict for each school, and every flagged ingredient with the reason.

halalornot_check_ingredients input schema
{
  "type": "object",
  "required": [
    "ingredients"
  ],
  "properties": {
    "context": {
      "enum": [
        "food",
        "cosmetic",
        "medicine"
      ],
      "type": "string",
      "default": "food",
      "description": "'cosmetic' for products used on the skin, 'medicine' for medicines and supplements; these change how alcohol, carmine and necessity are treated."
    },
    "ingredients": {
      "type": "string",
      "description": "Ingredients list as printed, comma separated."
    }
  },
  "additionalProperties": false
}
halalornot_check_ingredients annotations
{
  "title": "Check an ingredients list",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
halalornot_check_product_by_barcode — Halal or Not: Check a product by barcode
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Halal or Not. Check a product by barcode. Looks the barcode up in Open Food Facts, then Open Beauty Facts, and checks its ingredients.

halalornot_check_product_by_barcode input schema
{
  "type": "object",
  "required": [
    "barcode"
  ],
  "properties": {
    "barcode": {
      "type": "string",
      "description": "EAN-13, EAN-8 or UPC barcode digits."
    }
  },
  "additionalProperties": false
}
halalornot_check_product_by_barcode annotations
{
  "title": "Check a product by barcode",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
halalornot_search_products — Halal or Not: Find products by name and check them
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Halal or Not. Find products by name and check them. Searches Open Food Facts by name or brand (for example 'Haribo Starmix') and returns up to five matches, each with a verdict, plus a 'say' line for the best match. Where a brand states the source of an ingredient its label leaves unnamed (Haribo: pork gelatine in its standard UK range), that statement decides it and is quoted in brand_statement.

halalornot_search_products input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "A product, brand or barcode to look up, for example Haribo Starmix or 5000159484695."
    },
    "country": {
      "type": "string",
      "default": "united-kingdom",
      "description": "Open Food Facts country slug, for example united-kingdom, united-states, france. 'world' means no filter. Also picks the Amazon store for halal versions (amazon.co.uk for the UK and Ireland)."
    }
  },
  "additionalProperties": false
}
halalornot_search_products annotations
{
  "title": "Find products by name and check them",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
halalornot_explain_ingredient — Halal or Not: Explain one ingredient or E-number
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Halal or Not. Explain one ingredient or E-number. For example 'E471', 'carmine', 'prawns', 'whey' or 'alcohol denat'. Returns the verdict for each school and the reasoning.

halalornot_explain_ingredient input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "The ingredient or E-number, for example E471, carmine, gelatin or alcohol denat."
    },
    "context": {
      "enum": [
        "food",
        "cosmetic"
      ],
      "type": "string",
      "description": "Whether the ingredient is in food or a cosmetic. Defaults to food."
    }
  },
  "additionalProperties": false
}
halalornot_explain_ingredient annotations
{
  "title": "Explain one ingredient or E-number",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
halalornot_screen_stock — Halal or Not: Is this stock halal?
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Halal or Not. Is this stock halal? Screens a US-listed stock via Mizan: first the business (each standard's excluded industries), then the AAOIFI, Dow Jones Islamic, S&P Shariah and MSCI Islamic debt screens. A company name also works (nvidia, philip morris). Links to halal alternatives in the same industry.

halalornot_screen_stock input schema
{
  "type": "object",
  "required": [
    "ticker"
  ],
  "properties": {
    "ticker": {
      "type": "string",
      "description": "A US stock ticker, for example AAPL or TSLA."
    }
  },
  "additionalProperties": false
}
halalornot_screen_stock annotations
{
  "title": "Is this stock halal?",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
halalornot_ask_is_it_halal — Halal or Not: Ask any 'is it halal' question
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Halal or Not. Ask any 'is it halal' question. Covers money (savings, credit cards, mortgages, BNPL, insurance, pensions, trading), crypto, medicine, food and drink, and everyday life (music, dogs, tattoos, nail polish, smoking, games, photos, jobs). Returns the verdict, the main scholarly views and halal alternatives. Also recognises single ingredients and E-numbers.

halalornot_ask_is_it_halal input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "The question in plain words, for example 'Is a credit card halal?'"
    }
  },
  "additionalProperties": false
}
halalornot_ask_is_it_halal annotations
{
  "title": "Ask any 'is it halal' question",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
halalornot_check_fund — Halal or Not: Is this fund, ETF or pension fund halal?
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Halal or Not. Is this fund, ETF or pension fund halal? Recognises Shariah funds by name or ticker. For other US-registered funds and ETFs, reads the latest SEC holdings report and screens every holding by industry and debt. UK-listed ETFs (VUSA, CSPX, VWRL, SWDA, EQQQ, ISF and others) and fund names (Vanguard S&P 500, FTSE 100 tracker, LifeStrategy) are answered through a US fund tracking the same index, or from what the index holds, with UK Shariah options.

halalornot_check_fund input schema
{
  "type": "object",
  "required": [
    "ticker"
  ],
  "properties": {
    "ticker": {
      "type": "string",
      "description": "Fund or ETF ticker (VOO, QQQ, SPUS) or a Shariah fund name."
    }
  },
  "additionalProperties": false
}
halalornot_check_fund annotations
{
  "title": "Is this fund, ETF or pension fund halal?",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
halalornot_check_crypto — Halal or Not: Is this cryptocurrency halal?
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Halal or Not. Is this cryptocurrency halal? Classifies a coin by what it does (lending, gambling, meme, stablecoin, staking, general-purpose) and gives the scholarly views on crypto and on how it's used.

halalornot_check_crypto input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "coin": {
      "type": "string",
      "description": "Coin name or symbol, for example bitcoin, ETH, AAVE."
    }
  },
  "additionalProperties": false
}
halalornot_check_crypto annotations
{
  "title": "Is this cryptocurrency halal?",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
halalornot_check_medicine — Halal or Not: Is this medicine halal?
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Halal or Not. Is this medicine halal? Reads a medicine's active and inactive ingredients from its US label (openFDA) and flags gelatine, alcohol, pig-derived enzymes and heparin. The headline and say line lead with the ruling on necessity, so nobody stops a prescribed medicine; the ingredient reading follows (ingredient_headline, verdict)

halalornot_check_medicine input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Brand or generic name."
    }
  },
  "additionalProperties": false
}
halalornot_check_medicine annotations
{
  "title": "Is this medicine halal?",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
halalornot_get_prayer_times — Halal or Not: Today's prayer times for a place, with Ramadan suhoor and iftar
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Halal or Not. Today's prayer times for a place, with both Asr times and Ramadan suhoor and iftar. Answers 'is it halal?' for food, cosmetics, medicines, stocks, funds, crypto, money products and everyday life, showing where the four Sunni schools and the main scholarly bodies agree and where they differ, with the reasoning and halal alt...

halalornot_get_prayer_times input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "lat": {
      "type": "number",
      "description": "Latitude of the place, in decimal degrees. Goes with lon instead of city."
    },
    "lon": {
      "type": "number",
      "description": "Longitude of the place, in decimal degrees. Goes with lat instead of city."
    },
    "city": {
      "type": "string",
      "description": "City name, for example London or Chicago, IL."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "The day, YYYY-MM-DD. Defaults to today."
    },
    "method": {
      "enum": [
        "isna",
        "mwl",
        "umm_al_qura",
        "egypt",
        "karachi",
        "moonsighting"
      ],
      "type": "string",
      "description": "Calculation method: isna (North America), mwl (Muslim World League), umm_al_qura, egypt, karachi or moonsighting."
    }
  },
  "additionalProperties": false
}
halalornot_get_prayer_times annotations
{
  "title": "Today's prayer times for a place, with Ramadan suhoor and iftar",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
halalornot_list_topics — Halal or Not: Every question the rulebook covers
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Halal or Not. Every question the rulebook covers. Answers 'is it halal?' for food, cosmetics, medicines, stocks, funds, crypto, money products and everyday life, showing where the four Sunni schools and the main scholarly bodies agree and where they differ, with the reasoning and halal alt...

halalornot_list_topics input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "category": {
      "enum": [
        "money",
        "crypto",
        "medicine",
        "food",
        "life"
      ],
      "type": "string",
      "description": "Only topics in this area: money, crypto, medicine, food or life."
    }
  },
  "additionalProperties": false
}
halalornot_list_topics annotations
{
  "title": "Every question the rulebook covers",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
halalornot_explain_schools — Halal or Not: How the four schools differ on food
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Halal or Not. How the four schools differ on food. Answers 'is it halal?' for food, cosmetics, medicines, stocks, funds, crypto, money products and everyday life, showing where the four Sunni schools and the main scholarly bodies agree and where they differ, with the reasoning and halal alt...

halalornot_explain_schools input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
halalornot_explain_schools annotations
{
  "title": "How the four schools differ on food",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
halalornot_list_rules — Halal or Not: The full rulebook
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Halal or Not. The full rulebook. Answers 'is it halal?' for food, cosmetics, medicines, stocks, funds, crypto, money products and everyday life, showing where the four Sunni schools and the main scholarly bodies agree and where they differ, with the reasoning and halal alt...

halalornot_list_rules input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
halalornot_list_rules annotations
{
  "title": "The full rulebook",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
faredeals_find_deals — Fare Deals: Cheapest recent fares from a city, to a place or anywhere
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fare Deals. Cheapest recent fares from a city, to a place or anywhere. The say field is a ready-made answer.

faredeals_find_deals input schema
{
  "type": "object",
  "required": [
    "from"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "City or airport, or anywhere (default). Same state or country hints as from."
    },
    "from": {
      "type": "string",
      "description": "City or airport, for example New York or JFK. Add a state or country when a name is shared: Birmingham, UK; Birmingham, AL; Portland, Maine."
    },
    "limit": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "How many deals to return, 1 to 20."
    },
    "month": {
      "type": "string",
      "description": "Departure month 2026-11 or date 2026-11-14."
    },
    "return": {
      "type": "string",
      "description": "Return month or date."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country for the currency, for example US, GB, CA, AU, DE. Leave out to use the traveller's location."
    },
    "nonstop": {
      "type": "boolean",
      "description": "True for direct flights only."
    },
    "one_way": {
      "type": "boolean",
      "description": "True for one-way fares only."
    },
    "max_price": {
      "type": "number",
      "description": "Budget in US dollars."
    }
  },
  "additionalProperties": false
}
faredeals_find_deals annotations
{
  "title": "Cheapest recent fares from a city, to a place or anywhere",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
faredeals_cheapest_dates — Fare Deals: Cheapest departure days for a route in a month
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fare Deals. Cheapest departure days for a route in a month. Cheap flights from any city, to one place or anywhere, with the cheapest days to fly. Fares are the cheapest Aviasales travellers found in the last 48 hours. The live price is on the booking page.

faredeals_cheapest_dates input schema
{
  "type": "object",
  "required": [
    "from",
    "to",
    "month"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "Add a state or country when a name is shared, for example Portland, Maine."
    },
    "from": {
      "type": "string",
      "description": "Add a state or country when a name is shared, for example Portland, Maine."
    },
    "month": {
      "type": "string",
      "description": "2026-11."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country for the currency, for example US, GB, CA, AU, DE. Leave out to use the traveller's location."
    }
  },
  "additionalProperties": false
}
faredeals_cheapest_dates annotations
{
  "title": "Cheapest departure days for a route in a month",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
faredeals_look_up_place — Fare Deals: Look up a city or airport code
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fare Deals. Look up a city or airport code. Cheap flights from any city, to one place or anywhere, with the cheapest days to fly. Fares are the cheapest Aviasales travellers found in the last 48 hours. The live price is on the booking page.

faredeals_look_up_place input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "A city or airport name or code, for example Lisbon or LIS."
    }
  },
  "additionalProperties": false
}
faredeals_look_up_place annotations
{
  "title": "Look up a city or airport code",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
cheapestprice_check_price — Cheapest Price: Lowest current price for a product, with compare links
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Cheapest Price. Lowest current price for a product, with compare links. The lowest current price for a product on eBay (and Best Buy in the US), checked live in the shopper's own country and currency, plus Amazon and local shop links to compare.

cheapestprice_check_price input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "The product, as specific as possible, for example AirPods Pro 2."
    },
    "used": {
      "type": "boolean",
      "description": "Include used items on eBay."
    },
    "country": {
      "enum": [
        "US",
        "GB",
        "IE",
        "CA",
        "AU",
        "DE",
        "FR",
        "IT",
        "ES"
      ],
      "type": "string",
      "description": "Two-letter country for prices and shops. Leave out to use the shopper's location."
    }
  },
  "additionalProperties": false
}
cheapestprice_check_price annotations
{
  "title": "Lowest current price for a product, with compare links",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
spinmyday_spin_my_day — Spin My Day: Build a day out
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Spin My Day. Build a day out. Leave out city and location to spin for a random city. Spin up a full day out (morning, lunch, afternoon, dinner, evening) around the weather and what is open, in a city, near a location, or in a random city.

spinmyday_spin_my_day input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "lat": {
      "type": "number",
      "description": "Latitude, in decimal degrees, instead of city."
    },
    "lon": {
      "type": "number",
      "description": "Longitude, in decimal degrees, instead of city."
    },
    "city": {
      "type": "string",
      "description": "The city to plan the day in, for example Manchester or Austin, TX. Leave out with lat and lon for a random city."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "The day to plan, YYYY-MM-DD. Leave it out for today, or tomorrow when it is already past 5pm there (the answer then says tomorrow: true)."
    },
    "diet": {
      "type": "string",
      "description": "Food needs, comma separated: halal, kosher, vegetarian, vegan, pescatarian, gluten_free, dairy_free, jain. Lunch and dinner then name real places that OpenStreetMap lists for all of them (each meal says which in diet and diet_note). halal=true still works."
    },
    "seed": {
      "type": "integer",
      "description": "Repeat a spin exactly; each answer includes a spin_again link with a new seed."
    },
    "vibe": {
      "enum": [
        "chill",
        "adventure",
        "date",
        "family",
        "culture",
        "foodie"
      ],
      "type": "string",
      "description": "The feel of the day: chill, adventure, date, family, culture or foodie."
    },
    "budget": {
      "enum": [
        "any",
        "free"
      ],
      "type": "string",
      "description": "Budget: any, or free for free things only."
    }
  },
  "additionalProperties": false
}
spinmyday_spin_my_day annotations
{
  "title": "Build a day out",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
spinmyday_list_vibes — Spin My Day: The vibes you can ask for
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Spin My Day. The vibes you can ask for. Spin up a full day out (morning, lunch, afternoon, dinner, evening) around the weather and what is open, in a city, near a location, or in a random city.

spinmyday_list_vibes input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
spinmyday_list_vibes annotations
{
  "title": "The vibes you can ask for",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
cancelmysub_get_cancel_steps — Cancel My Sub: How to cancel one subscription
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Cancel My Sub. How to cancel one subscription. For requests like "how do I cancel Netflix?", "cancel my Planet Fitness membership", "how do I leave Sky?", "cancel my PureGym", "what's the cheapest way to keep Spotify?", "stop my Audible". Returns the official page, steps, catches and a cheaper option. UK answers add region ("UK") and uk_rules; a US-only service asked about from the UK has region "US only".

cancelmysub_get_cancel_steps input schema
{
  "type": "object",
  "required": [
    "service"
  ],
  "properties": {
    "country": {
      "type": "string",
      "description": "Two-letter country code. GB (or UK) gives UK pages, UK notice rules and uk_rules; defaults to the caller's country, else US."
    },
    "service": {
      "type": "string",
      "description": "The subscription's name in everyday words, up to 80 characters."
    },
    "renews_on": {
      "type": "string",
      "format": "date",
      "description": "Next renewal or billing date (or next delivery for meal kits), YYYY-MM-DD. Adds cancel_by: the last safe day to cancel using the service's own notice rule, or a day early where it has none, and add_to_calendar: a link to a calendar reminder for that day."
    }
  },
  "additionalProperties": false
}
cancelmysub_get_cancel_steps annotations
{
  "title": "How to cancel one subscription",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
cancelmysub_identify_charge — Cancel My Sub: Which subscription is this charge?
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Cancel My Sub. Which subscription is this charge? For requests like "what is this APPLE.COM/BILL charge?", "I see AMZN Digital on my statement", "what is DD *DOORDASH DASHPASS?". Returns the likely service, or for Apple, Amazon, Google and Microsoft the few it could be and where to check, or match: purchase when it looks like a one-off order (marketplace, a ride, a restaurant through a delivery app). Then call get_cancel_steps.

cancelmysub_identify_charge input schema
{
  "type": "object",
  "required": [
    "text"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "The charge as it appears on the statement, up to 120 characters."
    }
  },
  "additionalProperties": false
}
cancelmysub_identify_charge annotations
{
  "title": "Which subscription is this charge?",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
cancelmysub_get_cancel_reminder — Cancel My Sub: Calendar reminder for the last safe day to cancel
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Cancel My Sub. Calendar reminder for the last safe day to cancel. Returns a calendar file (.ics) with an all-day event on the cancel-by day, the steps and the official link, with alerts at 9am the day before and 9am on the day. Nothing is stored. get_cancel_steps gives this link as add_to_calendar whenever renews_on is given and the day hasn't passed.

cancelmysub_get_cancel_reminder input schema
{
  "type": "object",
  "required": [
    "service",
    "renews_on"
  ],
  "properties": {
    "country": {
      "type": "string",
      "description": "Two-letter country code. GB (or UK) gives UK pages, UK notice rules and uk_rules; defaults to the caller's country, else US."
    },
    "service": {
      "type": "string",
      "description": "The subscription, as for get_cancel_steps."
    },
    "renews_on": {
      "type": "string",
      "format": "date",
      "description": "Next renewal or billing date, YYYY-MM-DD."
    }
  },
  "additionalProperties": false
}
cancelmysub_get_cancel_reminder annotations
{
  "title": "Calendar reminder for the last safe day to cancel",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
cancelmysub_list_services — Cancel My Sub: Every subscription Cancel My Sub covers
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Cancel My Sub. Every subscription Cancel My Sub covers. For requests like "which subscriptions can you help me cancel?" or "what gyms do you know?". Also returns the current status of the FTC click-to-cancel rule and the UK rules (uk_rules)

cancelmysub_list_services input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "country": {
      "type": "string",
      "description": "Two-letter country code. GB (or UK) leaves out US-only services; defaults to the caller's country, else US."
    },
    "category": {
      "type": "string",
      "description": "Category: streaming, music, membership, gym, news, meal kit, software, app store, dating, wellness, home security, phone and internet, tv and broadband."
    }
  },
  "additionalProperties": false
}
cancelmysub_list_services annotations
{
  "title": "Every subscription Cancel My Sub covers",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
lowermybill_get_bill_script — Lower My Bill: A call script to lower a bill
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Lower My Bill. A call script to lower a bill. For requests like "help me lower my Comcast bill", "get my BT broadband cheaper", "lower my Council Tax", "script to get a better phone plan", "how do I negotiate my car insurance?", "lower my credit card interest", "I pay for too many streaming services". Give the bill type, the provider, or both. If the provider doesn't sell that bill, provider_note says so and the general script is returned.

lowermybill_get_bill_script input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "bill": {
      "type": "string",
      "description": "Bill: internet (or broadband), mobile, tv, streaming, car insurance, home insurance, electricity (or energy, gas), water, credit card, gym or council tax (UK). Up to 60 characters."
    },
    "state": {
      "type": "string",
      "description": "US state name or two-letter code. For electricity, adds the state's energy discount programme where there is one. England, Scotland, Wales, Northern Ireland or UK gives the UK answer."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code. GB (or UK) gives UK scripts, schemes and complaint routes; otherwise it picks the Amazon store in own_modem (US by default; IE uses amazon.co.uk). Defaults to the caller's country."
    },
    "provider": {
      "type": "string",
      "description": "Company name, for example Comcast, Xfinity, Spectrum, AT&T, Verizon, Frontier, T-Mobile, Cox, Optimum, Mediacom, Astound, DIRECTV, DISH, GEICO, Progressive, State Farm, Allstate, USAA; UK: BT, Sky, Virgin Media, TalkTalk, Vodafone, EE, O2, Three, Plusnet, NOW Broadband, Hyperoptic, British Gas, Octopus, EDF, E.ON Next, OVO, ScottishPower. Up to 60 characters."
    },
    "deal_ends": {
      "type": "string",
      "format": "date",
      "description": "The date the current promotional price, contract or insurance policy ends, YYYY-MM-DD. Adds call_by (about 30 days earlier, on a weekday, or today if that has passed) and add_to_calendar, a link to a calendar reminder with the script."
    }
  },
  "additionalProperties": false
}
lowermybill_get_bill_script annotations
{
  "title": "A call script to lower a bill",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
lowermybill_get_call_reminder — Lower My Bill: Calendar reminder to call before a deal ends
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Lower My Bill. Calendar reminder to call before a deal ends. Returns a calendar file (.ics) with an all-day event about 30 days before the deal ends, holding the full script, offers to ask for and a confirm-in-writing message, with alerts at 9am the day before and on the day. Nothing is stored. get_bill_script gives this link as add_to_calendar when deal_ends is given.

lowermybill_get_call_reminder input schema
{
  "type": "object",
  "required": [
    "deal_ends"
  ],
  "properties": {
    "bill": {
      "type": "string",
      "description": "Bill type, as for get_bill_script. Give bill, provider or both."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code. GB (or UK) gives the UK script when no provider is named. Defaults to the caller's country, else US."
    },
    "provider": {
      "type": "string",
      "description": "Company name, as for get_bill_script."
    },
    "deal_ends": {
      "type": "string",
      "format": "date",
      "description": "The date the current price or policy ends, YYYY-MM-DD."
    }
  },
  "additionalProperties": false
}
lowermybill_get_call_reminder annotations
{
  "title": "Calendar reminder to call before a deal ends",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
lowermybill_get_bill_help — Lower My Bill: Official help programmes for a bill
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Lower My Bill. Official help programmes for a bill. For requests like "is there help paying my internet bill?", "is there a broadband social tariff?", "help with my energy bill in the UK", "help with my electric bill", "cheap internet for low income", "does Xfinity have a low-income plan?". Returns programmes with who qualifies and how to apply.

lowermybill_get_bill_help input schema
{
  "type": "object",
  "required": [
    "bill"
  ],
  "properties": {
    "bill": {
      "type": "string",
      "description": "Bill: internet, mobile, electricity (or heating, gas), water, tv, streaming, car insurance, home insurance, credit card, council tax (UK), or a provider name. Up to 60 characters."
    },
    "state": {
      "type": "string",
      "description": "US state name or two-letter code. For electricity, adds the state's energy discount programme (California, New York, Ohio, New Jersey, Pennsylvania, Georgia). England, Scotland, Wales, Northern Ireland or UK gives the UK answer."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code. GB (or UK) gives UK schemes (Ofcom social tariffs, Warm Home Discount, WaterSure, Council Tax Reduction). Defaults to the caller's country, else US."
    }
  },
  "additionalProperties": false
}
lowermybill_get_bill_help annotations
{
  "title": "Official help programmes for a bill",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
pricedropback_get_store_policy — Price Drop Back: A store's price adjustment and price match policy
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Price Drop Back. A store's price adjustment and price match policy. For requests like "does Target do price matching?", "does John Lewis refund if the price drops?", "Currys price promise", "what's Best Buy's price adjustment policy?", "will Costco refund the difference?". With an item name it adds links to check today's price.

pricedropback_get_store_policy input schema
{
  "type": "object",
  "required": [
    "store"
  ],
  "properties": {
    "item": {
      "type": "string",
      "description": "Optional item name, up to 100 characters, to link today's prices for it."
    },
    "store": {
      "type": "string",
      "description": "Store name in everyday words, up to 60 characters."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code. GB (or UK) gives the UK policy where the store has one (Apple, Amazon, IKEA) and UK rules; it also picks the price links (US, GB and IE get local Amazon and eBay links). Default from the request."
    }
  },
  "additionalProperties": false
}
pricedropback_get_store_policy annotations
{
  "title": "A store's price adjustment and price match policy",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
pricedropback_check_price_drop_claim — Price Drop Back: Can I get the difference back?
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Price Drop Back. Can I get the difference back? For requests like "I bought a TV at Best Buy 9 days ago for $499 and it's $449 now, can I get the difference?". Says whether a claim is likely (likely, likely_if_member, unlikely, check or no_drop), the amount, and the steps. With an item name it adds a Cheapest Price link and Amazon and eBay links to check today's price. Likely claims also get claim_message, ready to paste into the store's chat or email. policy.refund_paid_as flags stores that pay store credit (Newegg)

pricedropback_check_price_drop_claim input schema
{
  "type": "object",
  "required": [
    "store"
  ],
  "properties": {
    "now": {
      "type": "number",
      "description": "Today's price, 0 to 100000 (US dollars, or pounds for UK stores)."
    },
    "item": {
      "type": "string",
      "description": "Optional item name, up to 100 characters, to link today's price on Cheapest Price, Amazon and eBay."
    },
    "paid": {
      "type": "number",
      "description": "What you paid, 0 to 100000 (US dollars, or pounds for UK stores)."
    },
    "store": {
      "type": "string",
      "description": "Store name, up to 60 characters."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code. GB (or UK) gives the UK policy where the store has one (Apple, Amazon, IKEA) and UK rules; it also picks the price links (US, GB and IE get local Amazon and eBay links). Default from the request."
    },
    "purchase_date": {
      "type": "string",
      "format": "date",
      "description": "The date you bought it, YYYY-MM-DD, instead of days_since_purchase. Adds deadlines: the last day to claim with the store (and in a members' longer window) and Capital One card protection."
    },
    "days_since_purchase": {
      "type": "integer",
      "description": "Days since you bought it (or since delivery), 0 to 400. Give this or purchase_date."
    }
  },
  "additionalProperties": false
}
pricedropback_check_price_drop_claim annotations
{
  "title": "Can I get the difference back?",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
pricedropback_get_claim_reminder — Price Drop Back: Calendar reminder for the last day to claim a price drop
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Price Drop Back. Calendar reminder for the last day to claim a price drop. Returns a calendar file (.ics) with an all-day event on the store's last claim day, how to claim and the policy link, with alerts 3 days before and on the day. Nothing is stored. check_price_drop_claim gives this link as add_to_calendar when purchase_date is given and a claim is likely.

pricedropback_get_claim_reminder input schema
{
  "type": "object",
  "required": [
    "store",
    "purchase_date"
  ],
  "properties": {
    "item": {
      "type": "string",
      "description": "Optional item name for the event title, up to 100 characters."
    },
    "store": {
      "type": "string",
      "description": "Store name."
    },
    "member": {
      "type": "boolean",
      "description": "Set to true to use the longer members' window where the store has one (for example My Best Buy Plus or Total)."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code. GB (or UK) uses the UK policy where the store has one. Default from the request."
    },
    "purchase_date": {
      "type": "string",
      "format": "date",
      "description": "The date you bought it, YYYY-MM-DD."
    }
  },
  "additionalProperties": false
}
pricedropback_get_claim_reminder annotations
{
  "title": "Calendar reminder for the last day to claim a price drop",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
pricedropback_list_stores — Price Drop Back: Every store covered, plus card price protection
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Price Drop Back. Every store covered, plus card price protection. For requests like "which stores give you money back if the price drops?" or "does my credit card have price protection?". With country=GB, lists the UK policies.

pricedropback_list_stores input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "country": {
      "type": "string",
      "description": "Two-letter country code. GB (or UK) lists only stores with a UK policy. Default from the request."
    }
  },
  "additionalProperties": false
}
pricedropback_list_stores annotations
{
  "title": "Every store covered, plus card price protection",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
findmymoney_get_state_search — Find My Money: A state's official unclaimed property search
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Find My Money. A state's official unclaimed property search. For requests like "do I have unclaimed money in Ohio?", "how do I find money I'm owed in the UK?", "how do I find unclaimed property in Texas?", "I've lived in Ohio, Texas and California, where do I look?". Returns the official state search link (and a direct search_url), MissingMoney.com, tips, a claim checklist and a scam warning. With several states, the first is at the top level and the rest are in more_states.

findmymoney_get_state_search input schema
{
  "type": "object",
  "required": [
    "state"
  ],
  "properties": {
    "state": {
      "type": "string",
      "description": "State name or two-letter code, DC or Puerto Rico, or UK (England, Scotland, Wales, Northern Ireland, London). Several can be listed with commas or \"and\" (up to 8). Big city names like NYC also work. Up to 200 characters. Required unless country=GB."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code. GB (or UK) gives the UK tracing services. Defaults to the caller's country, else US."
    }
  },
  "additionalProperties": false
}
findmymoney_get_state_search annotations
{
  "title": "A state's official unclaimed property search",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
findmymoney_get_sources — Find My Money: Federal and other official places to look, by type
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Find My Money. Federal and other official places to look, by type. For requests like "how do I find an old 401k?", "unclaimed tax refund", "lost savings bonds", "money from a failed bank", "FTC refund", "my mum died, did she leave money or life insurance?", "find my old pension" (UK with country=GB), "find my Child Trust Fund". Without a type, returns every source.

findmymoney_get_sources input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "type": {
      "type": "string",
      "description": "Type: tax, retirement, bonds, banks, investments, refunds, insurance, deceased, wages, courts, tribal or all. Everyday words like 401k, pension, stocks or \"my dad died\" also work; UK words like HMRC, Premium Bonds or Child Trust Fund give the UK answer."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code. GB (or UK) gives the UK tracing services. Defaults to the caller's country, else US."
    }
  },
  "additionalProperties": false
}
findmymoney_get_sources annotations
{
  "title": "Federal and other official places to look, by type",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
supplementcheck_get_supplement — Supplement Check: A supplement's label, dose check and halal status
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Supplement Check. A supplement's label: amounts per serving, upper limit check, halal status and a buy link. For requests like "what's in Nature Made vitamin D3?", "is Centrum halal?", "how much melatonin is in OLLY Sleep?" or "is this supplement halal?" with a barcode. Give q (brand and product name) or barcode. Returns per-serving amounts, dose_check (each vitamin and mineral compared with the adult upper limit at the most the label suggests per day, with per_day_base amounts), other_checks (melatonin, caffeine, creatine, ashwagandha and similar, including when a blend hides the amount), halal (likely_halal, doubtful, not_halal or depends_on_school, with the ingredients that need a confirmed source), alternatives (other sizes or versions), an Amazon link, and halal_options (links to halal-certified or gelatine-free versions) when the halal answer is not likely_halal. For a general name like "creatine monohydrate" it reads one common label and says so. With country=GB, dose_check uses the NHS guidance where it sets one (upper_limit says NHS guidance). Salt forms such as magnesium glycinate are counted as the mineral they hold (estimated: true), and omega-3 is read from EPA and DHA, total omega-3, or estimated from the fish oil weight.

supplementcheck_get_supplement input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "q": {
      "type": "string",
      "description": "Brand and product name, for example Nature Made vitamin D3 2000 IU."
    },
    "id": {
      "type": "integer",
      "description": "A label id from the NIH database, for example from alternatives."
    },
    "barcode": {
      "type": "string",
      "description": "UPC or EAN barcode digits (8 to 14)."
    },
    "country": {
      "type": "string",
      "description": "US, GB, IE, CA, AU. GB uses NHS guidance for the dose checks; also picks the buy link site. Default from the request."
    }
  },
  "additionalProperties": false
}
supplementcheck_get_supplement annotations
{
  "title": "A supplement's label, dose check and halal status",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
supplementcheck_get_nutrient — Supplement Check: What a vitamin, mineral or supplement does and how much adults need
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Supplement Check. What a vitamin, mineral or popular supplement does, how much adults need or studies used, limits, cautions and food sources. For requests like "what does magnesium glycinate do?", "what is vitamin K for?", "how much vitamin D do I need?", "is ashwagandha safe?" or "what is creatine?". Covers vitamins A, B1, B2, B5, B6, B12, C, D, E and K, niacin, folate, biotin, choline, calcium, iron, zinc, magnesium, potassium, selenium, iodine, copper, chromium, manganese, molybdenum, phosphorus, boron and omega-3, and explains common forms. Also covers creatine, melatonin, caffeine, ashwagandha, turmeric, CoQ10, collagen, protein powder, probiotics, psyllium, glucosamine, St John's wort, green tea extract, berberine, L-theanine and elderberry: for these it returns supplement, what_studies_looked_at, studied_amounts, ceiling, cautions and source instead of rda and upper_limit. Links the NIH fact sheet. With country=GB the answer gives the UK amounts and NHS supplement guidance, also in the uk field.

supplementcheck_get_nutrient input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "A vitamin, mineral, form or supplement, for example magnesium glycinate or ashwagandha."
    },
    "country": {
      "type": "string",
      "description": "US, GB, IE, CA, AU. GB gives UK (NHS) amounts; also picks the shop link site. Default from the request."
    }
  },
  "additionalProperties": false
}
supplementcheck_get_nutrient annotations
{
  "title": "What a vitamin, mineral or supplement does and how much adults need",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
supplementcheck_check_dose — Supplement Check: Compare an amount of a vitamin or mineral with the adult RDA and upper limit
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Supplement Check. Compare an amount of a vitamin or mineral with the adult RDA and upper limit. For requests like "is 5000 IU of vitamin D too much?", "is 500 mg of magnesium glycinate safe?", "is 10 mg of melatonin a lot?" or "is 300 mg of caffeine too much?". Handles IU, mcg, mg and g, including IU for vitamins A, D and E and DFE for folate. For vitamins and minerals, status is above, at, within or no_upper_limit; when the name is a compound (magnesium glycinate, ferrous sulfate, zinc gluconate) the `compound` field also gives how much of the mineral the compound holds, as US and UK labels list the mineral itself; when only one reading is over the limit, the say line gives both and compared_with.depends_on_label is true. Fish oil, cod liver oil and krill oil amounts are the oil weight, so EPA plus DHA is estimated (amount.epa_dha_estimate_mg). With country=GB the limit is the NHS guidance (compared_with.reference is UK (NHS), with us_upper_limit alongside). For other supplements the answer compares with an official ceiling where one exists (caffeine) or the amounts studies have used, with status above, at, within, above_studied_range, within_studied_range, below_studied_range or no_set_amount, plus cautions. Adult values only, with a note.

supplementcheck_check_dose input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "q": {
      "type": "string",
      "description": "The whole question instead, for example 5000 IU vitamin D."
    },
    "unit": {
      "type": "string",
      "description": "IU, mcg, mg, g, mcg DFE, or billion (CFU) for probiotics. Defaults to IU for vitamin D amounts of 200 or more, otherwise the usual unit."
    },
    "amount": {
      "type": "number",
      "maximum": 10000000,
      "minimum": 0,
      "description": "The amount taken per day, in the unit given."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code. GB compares with NHS guidance and gives UK amounts. Default from the request."
    },
    "nutrient": {
      "type": "string",
      "description": "The vitamin, mineral or supplement, for example vitamin D, magnesium or melatonin."
    }
  },
  "additionalProperties": false
}
supplementcheck_check_dose annotations
{
  "title": "Compare an amount of a vitamin or mineral with the adult RDA and upper limit",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
supplementcheck_check_stack — Supplement Check: Add up everything someone takes and check the daily totals
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Supplement Check. Add up everything someone takes and check the daily totals against adult upper limits. For requests like "I take Centrum, vitamin D 5000 IU and zinc 50 mg, is that too much?" or "is it OK to take OLLY Sleep with extra melatonin?". Takes up to 6 items separated by semicolons: product names, barcodes, or amounts like vitamin D 5000 IU. Products are counted at the most each label suggests per day. Returns totals (each vitamin and mineral added up, with the items it comes from, compared with the adult upper limit, or NHS guidance with country=GB), other_totals (caffeine, melatonin and similar added up, or marked when a label hides the amount), items (what each was matched to) and not_found. Fish oil amounts count the EPA and DHA they typically hold.

supplementcheck_check_stack input schema
{
  "type": "object",
  "required": [
    "items"
  ],
  "properties": {
    "items": {
      "type": "string",
      "description": "What the user takes, separated by semicolons, for example Centrum Silver Men; vitamin D 5000 IU; zinc 50 mg."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code. GB compares totals with NHS guidance. Default from the request."
    }
  },
  "additionalProperties": false
}
supplementcheck_check_stack annotations
{
  "title": "Add up everything someone takes and check the daily totals",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
platepal_get_food_nutrition — Plate Pal: Calories and macros for a food, dish or product, for the amount the user says
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Plate Pal. Calories and macros for a food, dish or product, for the amount the user says. For requests like "how many calories in a Big Mac?", "protein in 200g chicken breast", "calories in chicken biryani", "a slice of pepperoni pizza", "a large latte" or a whole meal like "2 eggs, 2 slices of toast and a coffee". Takes the whole amount and food in q, or grams or servings separately. Generic foods and dishes (thousands, including fast food and restaurant dishes) use USDA values with real portion weights (slice, cup, small, medium, large, one item); brands come from Open Food Facts. Chain items ("McDonald's large fries", "a Greggs sausage roll", "KFC Zinger burger", "grande latte from Starbucks", "6 inch Italian BMT from Subway", "20 piece McNuggets") use the chain's own published figures for that size, UK or US by country, and return a chain object (name, region, item, size, weight_published); when the chain doesn't publish a weight, amount.grams is null and per_100 values are null. For a chain item not in the table, a typical USDA version is used and the say line says so. A whole meal returns items (each food with its amount and nutrition) and total. Returns nutrition for the amount, per_100 values, portions, UK traffic lights (per 100 g, or per 100 ml for drinks) and caffeine_mg for drinks that have it.

platepal_get_food_nutrition input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "The food or meal, optionally with amounts, for example 200g chicken breast, a large banana, or 2 eggs and a slice of toast."
    },
    "grams": {
      "type": "number",
      "maximum": 5000,
      "minimum": 1,
      "description": "Amount in grams (1 to 5000). Overrides any amount in q."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code. Picks UK or US chain figures (GB and IE get UK ones) and prefers local versions of branded products. Default from the request."
    },
    "servings": {
      "type": "number",
      "maximum": 20,
      "minimum": 0.25,
      "description": "Number of servings or items (0.25 to 20)."
    }
  },
  "additionalProperties": false
}
platepal_get_food_nutrition annotations
{
  "title": "Calories and macros for a food, dish or product, for the amount the user says",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
platepal_get_barcode_nutrition — Plate Pal: Nutrition for a packaged product by barcode, with UK traffic lights
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Plate Pal. Nutrition for a packaged product by barcode, with UK traffic lights. For requests like "is this barcode high in sugar?", "how many calories in this?" after a scan, or "what's the salt in 5000157024886?". Returns per 100 g (or 100 ml) and per serving values, traffic lights for fat, saturates, sugars and salt, Nutri-Score, allergens and a Halal or Not? link for checking the ingredients.

platepal_get_barcode_nutrition input schema
{
  "type": "object",
  "required": [
    "code"
  ],
  "properties": {
    "code": {
      "type": "string",
      "description": "Barcode digits (8 to 14)."
    },
    "servings": {
      "type": "number",
      "maximum": 20,
      "minimum": 0.25,
      "description": "Number of servings to total up (0.25 to 20)."
    }
  },
  "additionalProperties": false
}
platepal_get_barcode_nutrition annotations
{
  "title": "Nutrition for a packaged product by barcode, with UK traffic lights",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
platepal_get_meal_ideas — Plate Pal: Simple meal ideas by goal, diet and meal, with rough macros
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Plate Pal. Simple meal ideas by goal, diet and meal, with rough macros. For requests like "give me a high protein halal dinner idea", "a quick vegan lunch", "cheap vegetarian breakfast ideas". Goals: high protein, low carb, budget, quick, high fibre. Diets: vegetarian, vegan, pescatarian, halal. Meals: breakfast, lunch, dinner, snack. The user's words can go in q instead. Ideas rotate daily. It does not set calorie or weight targets; a weight-loss request gets lighter, filling ideas (goal lighter, 450 calories or less) and a pointer to a doctor or dietitian, with no shop links.

platepal_get_meal_ideas input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "n": {
      "type": "integer",
      "maximum": 8,
      "minimum": 1,
      "description": "How many ideas, 1 to 8. Default 3."
    },
    "q": {
      "type": "string",
      "description": "Free text, for example high protein halal dinner."
    },
    "diet": {
      "type": "string",
      "description": "Diet: vegetarian, vegan, pescatarian or halal."
    },
    "goal": {
      "type": "string",
      "description": "Goal: high protein, low carb, budget, quick or high fibre."
    },
    "meal": {
      "type": "string",
      "description": "Meal: breakfast, lunch, dinner or snack."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code for the shop links (US, GB and IE get local Amazon links). Default from the request."
    }
  },
  "additionalProperties": false
}
platepal_get_meal_ideas annotations
{
  "title": "Simple meal ideas by goal, diet and meal, with rough macros",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
planmyworkout_get_workout_plan — Plan My Workout: A weekly workout plan with sets, reps and rest
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Plan My Workout. A weekly workout plan with sets, reps and rest. For requests like "make me a 3 day beginner gym plan", "home workout with just dumbbells, 30 minutes", "a 5 day muscle building split", "I have a pull-up bar and dumbbells", "a 20 minute workout" (days=1 gives a single session), "a workout plan to lose weight", "couch to 5K" or "a 10K running plan" (a 10K or longer goal gets the build-up plan unless the user says they are a beginner), or "give me another one" (the same inputs with seed plus one). Takes either the fields, or the user's words in q, from which the service reads days, minutes, level, goal and equipment from them. Fields win over q. Running plans also return weeks: every week's sessions (a 9-week walk-run build to 30 minutes of running for beginners; easy, interval, tempo and long runs for intermediates), with week 1 laid out in days.

planmyworkout_get_workout_plan input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "q": {
      "type": "string",
      "description": "The user's request in their own words, for example \"3 day beginner gym plan, 45 minutes\"."
    },
    "days": {
      "type": "integer",
      "maximum": 7,
      "minimum": 1,
      "description": "Days per week, 1 to 6 (1 gives a single session). More than 6 (or \"every day\") is planned as 6 with a rest day, and the answer says so in say and in plan.days_asked and plan.days_note. Default 3."
    },
    "goal": {
      "type": "string",
      "description": "Goal: strength, muscle, general (default), conditioning (covers fat loss or weight loss requests), running or mobility."
    },
    "seed": {
      "type": "integer",
      "description": "0 to 9999. Change it for a different mix of exercises with the same setup. Default 0."
    },
    "level": {
      "enum": [
        "beginner",
        "intermediate"
      ],
      "type": "string",
      "description": "Level: beginner (default) or intermediate. Advanced is treated as intermediate."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code for kit links (US, GB, IE, CA, AU). Defaults to the visitor's country."
    },
    "minutes": {
      "type": "integer",
      "maximum": 120,
      "minimum": 15,
      "description": "Minutes per session including warm-up, 15 to 120. Default 45."
    },
    "equipment": {
      "type": "string",
      "description": "Comma separated: none (default), dumbbells, barbell, gym, bands, kettlebell, pullupbar (a pull-up bar), jumprope."
    }
  },
  "additionalProperties": false
}
planmyworkout_get_workout_plan annotations
{
  "title": "A weekly workout plan with sets, reps and rest",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
planmyworkout_get_exercise — Plan My Workout: How to do one exercise, the muscles it works and a picture
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Plan My Workout. How to do one exercise, the muscles it works and a picture. For requests like "how do I do a Romanian deadlift?", "what is a goblet squat?", "what muscles do face pulls work?". Understands everyday names like RDL, press-up and lat pulldown. muscles.main lists the muscles the move mainly works (hand-checked for the main lifts) and muscles.also the ones that help.

planmyworkout_get_exercise input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "The exercise, for example Romanian deadlift or push-up."
    }
  },
  "additionalProperties": false
}
planmyworkout_get_exercise annotations
{
  "title": "How to do one exercise, the muscles it works and a picture",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
planmyworkout_list_exercises — Plan My Workout: Exercises for a muscle and the equipment the user has
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Plan My Workout. Exercises for a muscle and the equipment the user has. For requests like "what can I do for chest with no equipment?", "glute exercises with bands", "back exercises with dumbbells", "some mobility moves". Give a muscle, equipment or both.

planmyworkout_list_exercises input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "level": {
      "enum": [
        "beginner",
        "intermediate"
      ],
      "type": "string",
      "description": "Level: beginner leaves out harder moves."
    },
    "limit": {
      "type": "integer",
      "maximum": 10,
      "minimum": 1,
      "description": "1 to 10. Default 8."
    },
    "muscle": {
      "type": "string",
      "description": "Muscle: chest, back, shoulders, arms, biceps, triceps, legs, quads, hamstrings, glutes, calves, core (or abs), cardio or mobility. Also forearms (grip) and traps."
    },
    "equipment": {
      "type": "string",
      "description": "Equipment: none, dumbbells, barbell, gym, bands, kettlebell, pullupbar or jumprope."
    }
  },
  "additionalProperties": false
}
planmyworkout_list_exercises annotations
{
  "title": "Exercises for a muscle and the equipment the user has",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
medbillcheck_check_price — Med Bill Check: Compare a charge with Medicare's rate for one service
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Med Bill Check. Compare a charge with Medicare's rate for one service. For when someone asks whether a charge is high or what Medicare pays, for example "I was charged $450 for a 99213 office visit in Texas, is that too high?" or "what does Medicare pay for an MRI of the knee?". Takes the billing code if they have it, otherwise the service in plain words as q. Returns Medicare's 2026 rate for the state (or the city's own pricing area when city is given) in medicare_2026, the amount providers typically billed in 2024, and how many times the Medicare rate the charge is. For care in a hospital, hospital_facility_2026 gives Medicare's national rate for the hospital's own facility fee and comparison.compared_with says what the charge was set against. Dental work has no Medicare rate and returns 404 with a pointer to a free dental cost source.

medbillcheck_check_price input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "q": {
      "type": "string",
      "description": "The service in plain words, used when there is no code, like \"knee MRI\" or \"ER visit\"."
    },
    "city": {
      "type": "string",
      "description": "City, for states where Medicare pays big cities differently, like Houston, Chicago, Miami or Los Angeles. Other places use the rest-of-state rate."
    },
    "code": {
      "type": "string",
      "description": "Five-character CPT or HCPCS code from the bill, like 99213, 73721 or G0121."
    },
    "state": {
      "type": "string",
      "description": "US state name or two-letter code, like Texas or TX. Med Bill Check is for US bills; a UK place gets a short answer pointing to UK sources."
    },
    "charged": {
      "type": "number",
      "maximum": 5000000,
      "minimum": 1,
      "description": "The amount on the bill in US dollars, like 450."
    },
    "setting": {
      "enum": [
        "office",
        "facility"
      ],
      "type": "string",
      "description": "Setting: office (clinic, office, imaging center) or facility (hospital or surgery center). Leave out to use the usual setting."
    },
    "billed_by": {
      "enum": [
        "hospital",
        "doctor"
      ],
      "type": "string",
      "description": "Whose bill the charge is on when the service was in a hospital: hospital (the hospital's own facility charge) or doctor (the doctor's or physician group's bill). Leave out if not known: the charge is then compared with both together."
    }
  },
  "additionalProperties": false
}
medbillcheck_check_price annotations
{
  "title": "Compare a charge with Medicare's rate for one service",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
medbillcheck_search_services — Med Bill Check: Find billing codes and Medicare rates by plain words
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Med Bill Check. Find billing codes and Medicare rates by plain words. For when someone describes a service but has no code, or asks what a code means, for example "what's the code for a colonoscopy?", "how much does Medicare pay for a chest x-ray in Ohio?" or "what is code 99214?". Returns up to eight matching codes with Medicare's typical allowed and billed amounts.

medbillcheck_search_services input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "Plain words or a code, like \"hernia repair\" or 99214."
    },
    "state": {
      "type": "string",
      "description": "US state name or two-letter code."
    }
  },
  "additionalProperties": false
}
medbillcheck_search_services annotations
{
  "title": "Find billing codes and Medicare rates by plain words",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
medbillcheck_check_whole_bill — Med Bill Check: Check several lines of an itemized bill at once
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Med Bill Check. Check several lines of an itemized bill at once. For when someone reads out or pastes several lines from an itemized bill, for example "my ER bill has 99284 for $2,500, 85025 twice for $120 and 36415 three times, does anything look off?". Takes the lines as code, optional x and units, then the amount. Returns each line against Medicare's rate, totals, and questions_to_ask: repeated codes, units above Medicare's automated daily limit, the highest visit levels, hospital clinic facility fees and charges far above what providers typically bill. Lines of a hospital bill (any bill with an ER visit on it, or setting=facility) are compared with Medicare's hospital outpatient rate plus the doctor's part; each such line says compared_with.

medbillcheck_check_whole_bill input schema
{
  "type": "object",
  "required": [
    "lines"
  ],
  "properties": {
    "city": {
      "type": "string",
      "description": "City, for big cities with their own Medicare rates."
    },
    "lines": {
      "type": "string",
      "description": "Up to 15 bill lines separated by commas: code, then x and units if more than one, then the amount. Example: 99284:2500, 85025x2:120, 36415:45."
    },
    "state": {
      "type": "string",
      "description": "US state name or two-letter code."
    },
    "setting": {
      "enum": [
        "office",
        "facility"
      ],
      "type": "string",
      "description": "Setting: office or facility. Leave out if not known."
    },
    "billed_by": {
      "enum": [
        "hospital",
        "doctor"
      ],
      "type": "string",
      "description": "Whose bill the charge is on when the service was in a hospital: hospital (the hospital's own facility charge) or doctor (the doctor's or physician group's bill). Leave out if not known: the charge is then compared with both together."
    }
  },
  "additionalProperties": false
}
medbillcheck_check_whole_bill annotations
{
  "title": "Check several lines of an itemized bill at once",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
medbillcheck_look_up_hospital — Med Bill Check: Whether a hospital is nonprofit, for financial assistance
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Med Bill Check. Whether a hospital is nonprofit, for financial assistance. For requests like "is St. Luke's in Boise a nonprofit?" or "does this hospital have to offer charity care?". Returns how Medicare lists the hospital's ownership (nonprofit, government, for-profit), its city and main phone number, and what that means for financial assistance. Nonprofit hospitals must have a financial assistance policy.

medbillcheck_look_up_hospital input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "city": {
      "type": "string",
      "description": "City, to pick between hospitals with the same name."
    },
    "name": {
      "type": "string",
      "description": "Hospital name as on the bill, like St. Luke's Regional Medical Center."
    },
    "state": {
      "type": "string",
      "description": "US state name or two-letter code. Recommended, since many hospitals share names."
    }
  },
  "additionalProperties": false
}
medbillcheck_look_up_hospital annotations
{
  "title": "Whether a hospital is nonprofit, for financial assistance",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
medbillcheck_draft_bill_letter — Med Bill Check: Draft a letter to a billing office for the user to send
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Med Bill Check. Draft a letter to a billing office for the user to send. For requests like "help me dispute this bill", "write a letter asking for an itemized bill", "can I ask for a discount?" or "how do I apply for charity care?". Returns a letter as plain text with [brackets] for anything not given, tips, and the user's No Surprises Act and Good Faith Estimate rights with official CMS links. It never sends anything.

medbillcheck_draft_bill_letter input schema
{
  "type": "object",
  "required": [
    "type"
  ],
  "properties": {
    "code": {
      "type": "string",
      "description": "Billing code of the charge. With amount, a dispute letter adds Medicare's benchmark (for a hospital charge, the hospital outpatient rate as well as the doctor's part)."
    },
    "date": {
      "type": "string",
      "description": "Date of service."
    },
    "name": {
      "type": "string",
      "description": "Patient or account holder name."
    },
    "type": {
      "enum": [
        "itemized",
        "dispute",
        "discount",
        "assistance"
      ],
      "type": "string",
      "description": "Type: itemized (ask for an itemized bill), dispute (ask for a charge to be reviewed), discount (prompt-pay or self-pay discount), or assistance (financial assistance or charity care)."
    },
    "state": {
      "type": "string",
      "description": "US state, used for the benchmark in a dispute letter."
    },
    "amount": {
      "type": "number",
      "maximum": 5000000,
      "minimum": 1,
      "description": "Amount charged or balance due, in US dollars."
    },
    "reason": {
      "type": "string",
      "description": "A sentence on what the user wants checked, for a dispute letter."
    },
    "account": {
      "type": "string",
      "description": "Account or invoice number on the bill."
    },
    "insured": {
      "enum": [
        "yes",
        "no"
      ],
      "type": "string",
      "description": "Set to no if paying without insurance (self-pay), for a discount letter."
    },
    "service": {
      "type": "string",
      "description": "The service in plain words."
    },
    "setting": {
      "enum": [
        "office",
        "facility"
      ],
      "type": "string",
      "description": "Setting: office or facility (hospital or surgery center), for the benchmark in a dispute letter. ER visits and hospital clinic visits count as facility anyway."
    },
    "provider": {
      "type": "string",
      "description": "Hospital, clinic or provider name."
    },
    "billed_by": {
      "enum": [
        "hospital",
        "doctor"
      ],
      "type": "string",
      "description": "Whose bill the charge is on when the service was in a hospital: hospital (the hospital's own facility charge) or doctor (the doctor's or physician group's bill). Leave out if not known: the charge is then compared with both together."
    }
  },
  "additionalProperties": false
}
medbillcheck_draft_bill_letter annotations
{
  "title": "Draft a letter to a billing office for the user to send",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
appealmyclaim_get_appeal_rights — Appeal My Claim: Appeal rights, steps and free help for a plan type and state
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Appeal My Claim. Appeal rights, steps and free help for a plan type and state. For requests like "what are my appeal rights in California?", "my insurer denied my claim, what can I do?" or "how do Medicare appeals work?". Returns who decides, the steps (internal appeal, external review, Medicare levels or Medicaid fair hearing), deadlines, and where to get free help, including the state insurance department. If the plan type is not known, leave it out to get the rules for most private plans.

appealmyclaim_get_appeal_rights input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "state": {
      "type": "string",
      "description": "US state name or two-letter code, like California or CA. Puerto Rico works too."
    },
    "plan_type": {
      "type": "string",
      "description": "Plan type: marketplace, employer, employer_insured, employer_self_funded, medicare, medicare_advantage, part_d or medicaid. Everyday words work too, like \"job\", \"Obamacare\" or \"Medi-Cal\". Default: most private plans."
    }
  },
  "additionalProperties": false
}
appealmyclaim_get_appeal_rights annotations
{
  "title": "Appeal rights, steps and free help for a plan type and state",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
appealmyclaim_get_appeal_deadlines — Appeal My Claim: How long someone has to appeal, and how fast the plan must decide
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Appeal My Claim. How long someone has to appeal, and how fast the plan must decide. For requests like "how long do I have to appeal?", "when is my appeal due?" or "how fast does my insurer have to answer?". With the date on the denial notice, gives an approximate file-by date. The date on the user's own notice is the one that counts.

appealmyclaim_get_appeal_deadlines input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "urgent": {
      "enum": [
        "yes",
        "no"
      ],
      "type": "string",
      "description": "Set to yes if waiting could seriously harm the person's health."
    },
    "plan_type": {
      "type": "string",
      "description": "Same values as plan_type in get_appeal_rights. Default: most private plans."
    },
    "denial_date": {
      "type": "string",
      "description": "Date on the denial notice, like 2026-09-01, 09/01/2026 or September 1, 2026."
    }
  },
  "additionalProperties": false
}
appealmyclaim_get_appeal_deadlines annotations
{
  "title": "How long someone has to appeal, and how fast the plan must decide",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
appealmyclaim_explain_denial_code — Appeal My Claim: Explain the denial codes on an Explanation of Benefits
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Appeal My Claim. Explain the denial codes on an Explanation of Benefits. For requests like "my EOB says CO-50, what does that mean?", "what is denial code PR 204?" or "what does N130 mean?". Returns each code in plain words, who usually fixes it (the provider's billing office, an appeal, or the user), whether the provider can bill the user for it (from the group code CO, PR, OA or PI), and a letter link when an appeal fits.

appealmyclaim_explain_denial_code input schema
{
  "type": "object",
  "required": [
    "code"
  ],
  "properties": {
    "code": {
      "type": "string",
      "description": "One to four codes from the notice, like CO-50, PR 204, 197 or N130."
    },
    "plan_type": {
      "type": "string",
      "description": "Same values as plan_type in get_appeal_rights. Carried into the letter link."
    }
  },
  "additionalProperties": false
}
appealmyclaim_explain_denial_code annotations
{
  "title": "Explain the denial codes on an Explanation of Benefits",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
appealmyclaim_draft_appeal_letter — Appeal My Claim: Draft an appeal letter for the user to review and send
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Appeal My Claim. Draft an appeal letter for the user to review and send. For requests like "my insurer denied my MRI as not medically necessary, help me appeal" or "write an appeal letter for an out-of-network denial". Returns a letter as plain text with [brackets] for anything not given, a checklist of what to attach (denial notice, doctor's letter of medical necessity, records), and tips. It never sends or files anything.

appealmyclaim_draft_appeal_letter input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "date": {
      "type": "string",
      "description": "Date of service."
    },
    "name": {
      "type": "string",
      "description": "Member's name."
    },
    "plan": {
      "type": "string",
      "description": "Insurer or plan name."
    },
    "claim": {
      "type": "string",
      "description": "Claim or reference number."
    },
    "doctor": {
      "type": "string",
      "description": "Treating doctor's name."
    },
    "reason": {
      "enum": [
        "medical_necessity",
        "emergency",
        "experimental",
        "out_of_network",
        "prior_auth",
        "coding",
        "generic"
      ],
      "type": "string",
      "description": "Why the claim was denied: medical_necessity, emergency (said it wasn't an emergency), experimental, out_of_network, prior_auth, coding or generic. Required unless denial_code is given."
    },
    "urgent": {
      "enum": [
        "yes",
        "no"
      ],
      "type": "string",
      "description": "Set to yes to ask for an expedited review."
    },
    "details": {
      "type": "string",
      "description": "A sentence or two in the user's words on why the care should be covered."
    },
    "service": {
      "type": "string",
      "description": "The care that was denied, like \"MRI of the right knee\"."
    },
    "provider": {
      "type": "string",
      "description": "Hospital, clinic or provider name."
    },
    "member_id": {
      "type": "string",
      "description": "Member ID or Medicare number."
    },
    "plan_type": {
      "type": "string",
      "description": "Same values as plan_type in get_appeal_rights. Changes the wording for Medicare."
    },
    "denial_code": {
      "type": "string",
      "description": "The reason code on the notice, like CO-50 or PR-197. Picks the reason when reason is left out, and is quoted in the letter."
    },
    "denial_date": {
      "type": "string",
      "description": "Date on the denial notice."
    }
  },
  "additionalProperties": false
}
appealmyclaim_draft_appeal_letter annotations
{
  "title": "Draft an appeal letter for the user to review and send",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_search_jobs — Job Spotter: Search current job listings
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Search current job listings. For requests like "find remote Python jobs", "marketing jobs in New York", "junior data analyst jobs posted this week", "senior software engineer jobs in London", "nurse jobs in Manchester". Job words go in what and the place in where. Everyday phrasing in what also works: level words (junior, senior), "remote", "in <city>" and "this week" are picked out. The say line credits listings from Remotive, Himalayas, Jobicy and Remote OK to their source.

jobspotter_search_jobs input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "page": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "Which page of results, 1 to 20. Default 1. Use 2 for \"show me more\"."
    },
    "sort": {
      "enum": [
        "relevance",
        "date",
        "pay"
      ],
      "type": "string",
      "description": "Sort: relevance (default), date (newest first) or pay (highest first)."
    },
    "what": {
      "type": "string",
      "description": "Job title, skill or field, for example \"python developer\" or \"marketing\". Required unless where is given."
    },
    "level": {
      "enum": [
        "entry",
        "mid",
        "senior"
      ],
      "type": "string",
      "description": "Level: entry (junior, graduate, intern), mid or senior. With entry, jobs asking for more than 2 years of experience are left out and the answer adds apprenticeship and graduate routes."
    },
    "limit": {
      "type": "integer",
      "maximum": 10,
      "minimum": 1,
      "description": "How many results, 1 to 10. Default 10."
    },
    "shift": {
      "enum": [
        "day",
        "evening",
        "night",
        "weekend",
        "flexible"
      ],
      "type": "string",
      "description": "Shift: day, evening, night, weekend or flexible."
    },
    "where": {
      "type": "string",
      "description": "A city (New York, Austin, TX, London, Birmingham, UK), a US state (Texas), a UK county or region (Kent, Yorkshire), a UK postcode, a city or country abroad (Bangalore, Dublin, Dubai, Sydney, India), a country (USA, UK, Germany), \"remote\", or remote in a country (\"remote US\")."
    },
    "company": {
      "type": "string",
      "description": "Only jobs at this company, for example \"Tesco\"."
    },
    "country": {
      "enum": [
        "US",
        "UK"
      ],
      "type": "string",
      "description": "US or UK, when the place exists in both (Birmingham, Manchester, Cambridge) and the user's country is known. Optional."
    },
    "exclude": {
      "type": "string",
      "description": "Words the advert must not contain, comma separated, for example \"sales, commission\"."
    },
    "include": {
      "type": "string",
      "description": "Words the advert must contain, comma separated, for example \"python, aws\"."
    },
    "benefits": {
      "type": "string",
      "description": "Benefits the advert must mention, comma separated, for example \"pension, private healthcare\"."
    },
    "employer": {
      "enum": [
        "direct",
        "agency"
      ],
      "type": "string",
      "description": "Employer: direct for jobs posted by the employer itself, or agency for recruitment agencies."
    },
    "job_type": {
      "enum": [
        "full time",
        "part time",
        "contract",
        "temporary",
        "internship"
      ],
      "type": "string",
      "description": "Job type: full time, part time, contract, temporary or internship."
    },
    "education": {
      "enum": [
        "degree",
        "no degree"
      ],
      "type": "string",
      "description": "Education: degree for jobs asking for a degree, or no degree for jobs that don't."
    },
    "work_type": {
      "enum": [
        "remote",
        "hybrid",
        "on-site"
      ],
      "type": "string",
      "description": "Work type: remote, hybrid or on-site."
    },
    "salary_max": {
      "type": "string",
      "description": "Highest yearly pay, in the local currency."
    },
    "salary_min": {
      "type": "string",
      "description": "Lowest yearly pay, in the local currency, for example 40000 or 40k. Jobs that list no pay are left out when set."
    },
    "radius_miles": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "How far from the place, in miles, 1 to 100 (boards that support distance)."
    },
    "visa_sponsorship": {
      "enum": [
        "yes"
      ],
      "type": "string",
      "description": "Set to yes for jobs whose advert says visa sponsorship is offered."
    },
    "posted_within_days": {
      "type": "integer",
      "maximum": 90,
      "minimum": 1,
      "description": "Only jobs posted in the last N days, 1 to 90. Default 30. 7 means this week."
    }
  },
  "additionalProperties": false
}
jobspotter_search_jobs annotations
{
  "title": "Search current job listings",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_get_job — Job Spotter: Details for one job from a search result
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Details for one job from a search result. For when the user asks about one of the results, for example "tell me more about the second one" or "what's the apply link for the Uber job?". Takes the id from a search_jobs result exactly as given; ids carry what is needed, so they keep working later. NHS Jobs and Teaching Vacancies results include the closing date.

jobspotter_get_job input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "The id from a search_jobs result, copied exactly, for example muse-22049500, remotive-2091141 or nhsjobs-C9413-26-0725. Some ids are longer, with a ~ and a code after it."
    }
  },
  "additionalProperties": false
}
jobspotter_get_job annotations
{
  "title": "Details for one job from a search result",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_check_salary — Job Spotter: What a job pays in a place
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. What a job pays in a place. For "what does a nurse earn in Birmingham", "average salary for a data analyst in Austin", "is £35k good for a junior developer in London". Gives the typical yearly range (middle half of current adverts), the middle figure and the average advertised, from current job adverts. Advertised pay, not offers.

jobspotter_check_salary input schema
{
  "type": "object",
  "required": [
    "what"
  ],
  "properties": {
    "what": {
      "type": "string",
      "description": "Job title or field, for example \"nurse\" or \"software engineer\"."
    },
    "where": {
      "type": "string",
      "description": "A city, region, postcode or country, for example Birmingham, Austin, TX or remote."
    },
    "country": {
      "type": "string",
      "description": "US or UK when the place exists in both, or a country by name."
    }
  },
  "additionalProperties": false
}
jobspotter_check_salary annotations
{
  "title": "What a job pays in a place",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_similar_jobs — Job Spotter: Jobs like one from a search result
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Jobs like one from a search result. For "show me more like the second one" or "anything similar to that Tesco job?". Takes the id from a search result exactly as given. Returns jobs with a similar title in the same place, without the job itself.

jobspotter_similar_jobs input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "The id from a search result, copied exactly."
    },
    "limit": {
      "type": "integer",
      "maximum": 10,
      "minimum": 1,
      "description": "How many results, 1 to 10. Default 10."
    }
  },
  "additionalProperties": false
}
jobspotter_similar_jobs annotations
{
  "title": "Jobs like one from a search result",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_whats_hiring — Job Spotter: What's hiring most in a place
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. What's hiring most in a place. For "who's hiring in Leeds?", "what jobs are in demand in Austin?", "which companies are hiring nurses in Manchester?". Gives the roles advertised most and the employers with the most open jobs.

jobspotter_whats_hiring input schema
{
  "type": "object",
  "required": [
    "where"
  ],
  "properties": {
    "what": {
      "type": "string",
      "description": "Optional field to narrow it, for example \"nurse\" or \"engineering\"."
    },
    "where": {
      "type": "string",
      "description": "A city, region, postcode or country, for example Birmingham, Austin, TX or remote."
    },
    "country": {
      "type": "string",
      "description": "US or UK when the place exists in both, or a country by name."
    }
  },
  "additionalProperties": false
}
jobspotter_whats_hiring annotations
{
  "title": "What's hiring most in a place",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_hiring_posts — Job Spotter: Posts from people saying they're hiring
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Posts from people saying they're hiring. For "who's posting that they're hiring React developers?", "any startups hiring remote designers?". Public posts from people saying they're hiring, from Hacker News (the monthly Who is hiring? thread), Mastodon and Bluesky, newest first, each with a link to the post. The person posting is often the hiring manager. Also gives a ready search link for X.

jobspotter_hiring_posts input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "what": {
      "type": "string",
      "description": "Job title or field, for example \"nurse\" or \"software engineer\"."
    },
    "limit": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "How many posts, 1 to 20. Default 10."
    },
    "where": {
      "type": "string",
      "description": "A city, region, postcode or country, for example Birmingham, Austin, TX or remote."
    }
  },
  "additionalProperties": false
}
jobspotter_hiring_posts annotations
{
  "title": "Posts from people saying they're hiring",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_company_lookup — Job Spotter: Facts about an employer and its hiring
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Facts about an employer and its hiring. For "tell me about Monzo as an employer", "is Tesco hiring?", "how big is this company?". Gives what the company does, when it was founded, staff numbers, headquarters and website (from Wikidata), UK company records when available (Companies House, Open Government Licence), how many jobs it has open now with examples, and ready searches for people there. Staff reviews are not included. For US employers it adds what they offered on US work visa filings.

jobspotter_company_lookup input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "The company name, for example \"Monzo\" or \"Tesco\"."
    },
    "where": {
      "type": "string",
      "description": "Optional place to narrow its open jobs, for example London."
    }
  },
  "additionalProperties": false
}
jobspotter_company_lookup annotations
{
  "title": "Facts about an employer and its hiring",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_compare_jobs — Job Spotter: Compare jobs side by side
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Compare jobs side by side. For "compare the first three", "which of these pays best?". Takes two to five ids from search results and gives each job's pay (and yearly equivalent), work type, job type, how new it is, direct employer or agency, visa sponsorship and ghost-job check, plus which is best on pay, newest and remote.

jobspotter_compare_jobs input schema
{
  "type": "object",
  "required": [
    "ids"
  ],
  "properties": {
    "ids": {
      "type": "string",
      "description": "Two to five job ids from search results, comma separated, copied exactly."
    }
  },
  "additionalProperties": false
}
jobspotter_compare_jobs annotations
{
  "title": "Compare jobs side by side",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_check_job_link — Job Spotter: Check a job link someone pastes
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Check a job link someone pastes. For "is this job real?", "what does this one pay?" with a link. Reads the advert from the employer's job board (Greenhouse, Lever, SmartRecruiters, Ashby and most career pages) and gives the title, company, place, pay, when it was posted, whether it looks like a live, open job, visa sponsorship and a short summary. LinkedIn, Indeed and Glassdoor pages can't be read; the advert text can be pasted into the CV match instead.

jobspotter_check_job_link input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The full link to the job advert."
    }
  },
  "additionalProperties": false
}
jobspotter_check_job_link annotations
{
  "title": "Check a job link someone pastes",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_interview_prep — Job Spotter: Interview questions and practice
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Interview questions and practice. For "help me prepare for my interview", "what will they ask a staff nurse?", "do a mock interview". Gives likely role questions, questions drawn from the advert, behavioural questions, good questions to ask them, tips for one-way video and AI interviews, and an order for a practice interview with timings. Takes a job id from a search, or the role and company.

jobspotter_interview_prep input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "id": {
      "type": "string",
      "description": "A job id from a search result, copied exactly. Optional if what is given."
    },
    "what": {
      "type": "string",
      "description": "The role, for example \"staff nurse\" or \"data analyst\"."
    },
    "company": {
      "type": "string",
      "description": "The company, for example \"NHS\" or \"Monzo\"."
    }
  },
  "additionalProperties": false
}
jobspotter_interview_prep annotations
{
  "title": "Interview questions and practice",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_find_people — Job Spotter: People worth contacting at a company
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. People worth contacting at a company. For "who should I contact at Monzo about data jobs?", "find the hiring manager". Gives the people who posted the company's hiring ads publicly (they asked applicants to get in touch) and ready LinkedIn and Google searches that open the person's own connections there, its recruiters, likely hiring managers for the role, people in the role (for a referral) and alumni of a school. Nothing is read from LinkedIn and nothing is gathered about anyone.

jobspotter_find_people input schema
{
  "type": "object",
  "required": [
    "company"
  ],
  "properties": {
    "role": {
      "type": "string",
      "description": "The role, for example \"data analyst\"."
    },
    "where": {
      "type": "string",
      "description": "The city, for example London."
    },
    "school": {
      "type": "string",
      "description": "A university or school to look for alumni from."
    },
    "company": {
      "type": "string",
      "description": "The company, for example \"Monzo\"."
    }
  },
  "additionalProperties": false
}
jobspotter_find_people annotations
{
  "title": "People worth contacting at a company",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_match_cv — Job Spotter: How well a CV matches a job
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. How well a CV matches a job. For "how well do I match this job?", "should I apply?", "what's missing from my CV for this?". Scores a CV or profile against a job from a search (or pasted advert) out of 100, the same way every time: skills 45, role 20, experience 15, education 10, place 10. Gives matched and missing skills, strengths, gaps and keywords to add if true. Nothing sent is stored. The score is a fixed formula, not an AI judgement; the person decides what to apply for.

jobspotter_match_cv input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "cv": {
      "type": "string",
      "description": "The CV as plain text. Optional if titles and skills are given."
    },
    "id": {
      "type": "string",
      "description": "A job id from a search result, copied exactly. Or give job_text."
    },
    "skills": {
      "type": "string",
      "description": "Skills, comma separated."
    },
    "titles": {
      "type": "string",
      "description": "Current and past job titles, comma separated."
    },
    "schools": {
      "type": "string",
      "description": "Universities or schools, comma separated."
    },
    "job_text": {
      "type": "string",
      "description": "The job advert as plain text, when there is no id."
    },
    "location": {
      "type": "string",
      "description": "Where the person lives or wants to work."
    },
    "education": {
      "type": "string",
      "description": "Highest qualification, for example \"BSc Economics\"."
    },
    "employers": {
      "type": "string",
      "description": "Current and past employers, comma separated."
    },
    "years_experience": {
      "type": "number",
      "description": "Years of work experience."
    }
  },
  "additionalProperties": false
}
jobspotter_match_cv annotations
{
  "title": "How well a CV matches a job",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_jobs_for_me — Job Spotter: The best current jobs for a CV
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. The best current jobs for a CV. For "find jobs that fit my CV", "what jobs should I apply for?". Searches current jobs for the person's target roles (or past titles) and place, and ranks them by match score, with matched and missing skills for each. Nothing sent is stored. The score is a fixed formula, not an AI judgement; the person decides what to apply for.

jobspotter_jobs_for_me input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "cv": {
      "type": "string",
      "description": "The CV as plain text. Optional if titles and skills are given."
    },
    "limit": {
      "type": "integer",
      "maximum": 10,
      "minimum": 1,
      "description": "How many jobs, 1 to 10."
    },
    "where": {
      "type": "string",
      "description": "Where to look, for example London or remote."
    },
    "skills": {
      "type": "string",
      "description": "Skills, comma separated."
    },
    "titles": {
      "type": "string",
      "description": "Current and past job titles, comma separated."
    },
    "schools": {
      "type": "string",
      "description": "Universities or schools, comma separated."
    },
    "location": {
      "type": "string",
      "description": "Where the person lives or wants to work."
    },
    "education": {
      "type": "string",
      "description": "Highest qualification, for example \"BSc Economics\"."
    },
    "employers": {
      "type": "string",
      "description": "Current and past employers, comma separated."
    },
    "target_roles": {
      "type": "string",
      "description": "Roles to look for, comma separated. Defaults to the CV's titles."
    },
    "years_experience": {
      "type": "number",
      "description": "Years of work experience."
    }
  },
  "additionalProperties": false
}
jobspotter_jobs_for_me annotations
{
  "title": "The best current jobs for a CV",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_apply_kit — Job Spotter: Everything needed to apply for a job
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Everything needed to apply for a job. For "help me apply for this", "write my cover letter", "what should I say in my application?". Gives what the job asks for, the lines in the CV that prove each skill, what is missing, keywords to use if true, a cover letter outline and common application questions with how to answer them, so a tailored letter and answers can be written. Job Spotter never applies or sends anything. Nothing sent is stored.

jobspotter_apply_kit input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "cv": {
      "type": "string",
      "description": "The CV as plain text. Optional if titles and skills are given."
    },
    "id": {
      "type": "string",
      "description": "A job id from a search result, copied exactly. Or give job_text."
    },
    "skills": {
      "type": "string",
      "description": "Skills, comma separated."
    },
    "titles": {
      "type": "string",
      "description": "Current and past job titles, comma separated."
    },
    "schools": {
      "type": "string",
      "description": "Universities or schools, comma separated."
    },
    "job_text": {
      "type": "string",
      "description": "The job advert as plain text, when there is no id."
    },
    "location": {
      "type": "string",
      "description": "Where the person lives or wants to work."
    },
    "education": {
      "type": "string",
      "description": "Highest qualification, for example \"BSc Economics\"."
    },
    "employers": {
      "type": "string",
      "description": "Current and past employers, comma separated."
    },
    "years_experience": {
      "type": "number",
      "description": "Years of work experience."
    }
  },
  "additionalProperties": false
}
jobspotter_apply_kit annotations
{
  "title": "Everything needed to apply for a job",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_connection_score — Job Spotter: How relevant a connection is to your goal
Advertised by the server during the last successful anonymous check.
Advertised read-only

Job Spotter. How relevant a connection is to your goal. For "should I connect with this person?", "is this contact worth messaging about my job search?". Scores how relevant a connection is to the user's goal, out of 100, from two profiles the user provides (it rates the fit with the goal, not the person), the same way every time: works where they want to work, recruiter or likely hiring manager for the goal, same school, same past employer, shared skills, nearby, more senior. Gives the reasons, a short verdict and an outline for a short note. Profiles can be pasted text (for example from LinkedIn's Save to PDF). Nothing sent is stored.

jobspotter_connection_score input schema
{
  "type": "object",
  "required": [
    "me",
    "them"
  ],
  "properties": {
    "me": {
      "type": "object",
      "properties": {
        "text": {
          "type": "string",
          "maxLength": 20000
        },
        "title": {
          "type": "string",
          "maxLength": 120
        },
        "skills": {
          "type": "string",
          "maxLength": 1000
        },
        "company": {
          "type": "string",
          "maxLength": 80
        },
        "schools": {
          "type": "string",
          "maxLength": 300
        },
        "location": {
          "type": "string",
          "maxLength": 60
        },
        "employers": {
          "type": "string",
          "maxLength": 300
        }
      },
      "description": "A profile: text, and or fields title, company, employers, schools, location, skills."
    },
    "goal": {
      "type": "string",
      "description": "What the person is aiming for, for example \"data analyst at Monzo\"."
    },
    "them": {
      "type": "object",
      "properties": {
        "text": {
          "type": "string",
          "maxLength": 20000
        },
        "title": {
          "type": "string",
          "maxLength": 120
        },
        "skills": {
          "type": "string",
          "maxLength": 1000
        },
        "company": {
          "type": "string",
          "maxLength": 80
        },
        "schools": {
          "type": "string",
          "maxLength": 300
        },
        "location": {
          "type": "string",
          "maxLength": 60
        },
        "employers": {
          "type": "string",
          "maxLength": 300
        }
      },
      "description": "A profile: text, and or fields title, company, employers, schools, location, skills."
    }
  },
  "additionalProperties": false
}
jobspotter_connection_score annotations
{
  "title": "How relevant a connection is to your goal",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_networking_plan — Job Spotter: Who to reach out to, from a CV
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Who to reach out to, from a CV. For "who should I network with?", "how do I get a job as a data scientist without applying cold?". From a CV or a few details and the role wanted, gives the kinds of people worth contacting in order (hiring managers at the employers hiring most for the role, recruiters who place it, alumni, former colleagues, people who made the same move, community organisers), with ready searches, the employers hiring most now and named people from public posts. Nothing sent is stored.

jobspotter_networking_plan input schema
{
  "type": "object",
  "required": [
    "goal_role"
  ],
  "properties": {
    "cv": {
      "type": "string",
      "description": "The CV as plain text. Optional if titles and skills are given."
    },
    "where": {
      "type": "string",
      "description": "Where, for example London."
    },
    "school": {
      "type": "string",
      "description": "A university or school, for alumni."
    },
    "skills": {
      "type": "string",
      "description": "Skills, comma separated."
    },
    "titles": {
      "type": "string",
      "description": "Current and past job titles, comma separated."
    },
    "schools": {
      "type": "string",
      "description": "Universities or schools, comma separated."
    },
    "location": {
      "type": "string",
      "description": "Where the person lives or wants to work."
    },
    "education": {
      "type": "string",
      "description": "Highest qualification, for example \"BSc Economics\"."
    },
    "employers": {
      "type": "string",
      "description": "Current and past employers, comma separated."
    },
    "goal_role": {
      "type": "string",
      "description": "The job the person is aiming for, for example \"data scientist\"."
    },
    "years_experience": {
      "type": "number",
      "description": "Years of work experience."
    }
  },
  "additionalProperties": false
}
jobspotter_networking_plan annotations
{
  "title": "Who to reach out to, from a CV",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_check_visa_sponsor — Job Spotter: Is this UK employer a licensed visa sponsor?
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Is this UK employer a licensed visa sponsor? For "does Deliveroo sponsor visas?", "can this company sponsor a Skilled Worker visa?". Looks the employer up in the UK Home Office register of licensed sponsors (workers), with its town and the visa routes it is licensed for, and the register date. A licence means the employer can sponsor; each job still has to qualify. Company names on the register are legal names, so try the legal name if the brand name is not found. For US jobs, the visa_sponsorship field on search results comes from the advert. Register data contains public sector information licensed under the Open Government Licence v3.0.

jobspotter_check_visa_sponsor input schema
{
  "type": "object",
  "required": [
    "company"
  ],
  "properties": {
    "company": {
      "type": "string",
      "description": "The employer, for example \"Tesco\" or its legal name \"Tesco Stores Limited\"."
    }
  },
  "additionalProperties": false
}
jobspotter_check_visa_sponsor annotations
{
  "title": "Is this UK employer a licensed visa sponsor?",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_employer_reply_rate — Job Spotter: How often an employer replies to applications
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. How often an employer replies to applications. For "do they actually reply?". From Job Spotter users who track their applications: the share of applications that got any answer (interview, offer or rejection) within the time tracked, and the usual wait. Shown only from 5 tracked applications, so nobody can be singled out.

jobspotter_employer_reply_rate input schema
{
  "type": "object",
  "required": [
    "company"
  ],
  "properties": {
    "company": {
      "type": "string",
      "description": "The employer, for example \"Monzo\"."
    }
  },
  "additionalProperties": false
}
jobspotter_employer_reply_rate annotations
{
  "title": "How often an employer replies to applications",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_write_job_advert — Job Spotter: Write a job advert and check the pay
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Write a job advert and check the pay. For employers: "help me write an advert for a care assistant", "is £12 an hour enough?". Builds a clear advert from the title, duties, must-haves and pay, flags what puts applicants off (missing pay, too many must-haves, slang like "rockstar", age-coded or gendered wording, "native speaker") and compares the pay with current adverts for the role and place. Nothing is posted or stored; posting is free at jobspotter.pages.dev/employers.

jobspotter_write_job_advert input schema
{
  "type": "object",
  "required": [
    "title"
  ],
  "properties": {
    "must": {
      "type": "string",
      "description": "Must-haves, comma separated."
    },
    "nice": {
      "type": "string",
      "description": "Nice to have, comma separated."
    },
    "type": {
      "type": "string",
      "description": "Type: full_time, part_time, contract, temporary, internship or per_diem."
    },
    "about": {
      "type": "string",
      "description": "A line or two about the company."
    },
    "apply": {
      "type": "string",
      "description": "How to apply."
    },
    "title": {
      "type": "string",
      "description": "Job title."
    },
    "duties": {
      "type": "string",
      "description": "What the person will do, one per line or comma separated."
    },
    "pay_hi": {
      "type": "number",
      "description": "Pay to."
    },
    "pay_lo": {
      "type": "number",
      "description": "Pay from."
    },
    "remote": {
      "type": "boolean",
      "description": "Remote job."
    },
    "company": {
      "type": "string",
      "description": "Company name."
    },
    "pay_cur": {
      "type": "string",
      "description": "GBP, USD, EUR or CAD."
    },
    "pay_per": {
      "type": "string",
      "description": "Pay per: year, hour, day or month."
    },
    "benefits": {
      "type": "string",
      "description": "Benefits, comma separated."
    },
    "location": {
      "type": "string",
      "description": "Where the job is."
    }
  },
  "additionalProperties": false
}
jobspotter_write_job_advert annotations
{
  "title": "Write a job advert and check the pay",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_referral_note — Job Spotter: A ready note asking someone for a referral
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. A ready note asking someone for a referral. For "write to Amy at Monzo asking for a referral". Gives a LinkedIn connection note under 300 characters and a longer email version that asks for a referral or a short chat, built from how they know each other and why the job fits. Nothing is sent or stored.

jobspotter_referral_note input schema
{
  "type": "object",
  "required": [
    "job_title",
    "company"
  ],
  "properties": {
    "ask": {
      "type": "string",
      "description": "Ask: referral (default) or chat."
    },
    "company": {
      "type": "string",
      "description": "The company."
    },
    "why_fit": {
      "type": "string",
      "description": "One line on why the job fits."
    },
    "job_link": {
      "type": "string",
      "description": "Link to the job."
    },
    "job_title": {
      "type": "string",
      "description": "The job."
    },
    "your_name": {
      "type": "string",
      "description": "The sender."
    },
    "their_name": {
      "type": "string",
      "description": "The person being asked."
    },
    "how_you_know": {
      "type": "string",
      "description": "For example \"We worked together at Sunrise\"."
    }
  },
  "additionalProperties": false
}
jobspotter_referral_note annotations
{
  "title": "A ready note asking someone for a referral",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_job_demand — Job Spotter: What job seekers are searching for, by role and place
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. What job seekers are searching for, by role and place. For "how many people are looking for care jobs in Leeds?" or "what are people searching for in Bristol?". Anonymous weekly counts of searches on Job Spotter by role words and place over the last 8 weeks, with the listings people found per search. Leave out what to get the most searched roles in a place (with a rising or falling trend), or where to get the places a role is searched most. For a role, it also gives the easiest places to find openings: where each search finds the most listings. A group is shown only when it holds 10 or more searches.

jobspotter_job_demand input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "what": {
      "type": "string",
      "description": "The role, for example \"care assistant\"."
    },
    "where": {
      "type": "string",
      "description": "A town or city, or \"remote\"."
    },
    "country": {
      "enum": [
        "US",
        "UK"
      ],
      "type": "string",
      "description": "US or UK."
    }
  },
  "additionalProperties": false
}
jobspotter_job_demand annotations
{
  "title": "What job seekers are searching for, by role and place",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_fair_hiring_check — Job Spotter: Check an employer against the fair hiring badge
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Check an employer against the fair hiring badge. For "is this employer fair to applicants?". Four checks from what the employer does: shows pay in its adverts on Job Spotter, replies to tracked applications, hires through scored consent-first introductions, and (UK employers with 250 or more staff) reports its gender pay gap on time. Each check comes with its figures; the badge is earned when every check with data passes and at least two have data. Includes a badge image link.

jobspotter_fair_hiring_check input schema
{
  "type": "object",
  "required": [
    "company"
  ],
  "properties": {
    "company": {
      "type": "string",
      "description": "The employer, for example \"Greggs\"."
    }
  },
  "additionalProperties": false
}
jobspotter_fair_hiring_check annotations
{
  "title": "Check an employer against the fair hiring badge",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_cover_letter — Job Spotter: Draft a cover letter and application answers
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Draft a cover letter and application answers. For "write my cover letter for this job" or "help me answer these application questions". Builds a first draft only from the person's own CV lines and the advert: the strongest matching achievements, the skills the job asks for in the CV's own words, an honest gap line, and draft answers to the form's questions. Anything only the person can know is left as a [bracketed] prompt. Job Spotter never applies or sends anything, and nothing sent is stored.

jobspotter_cover_letter input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "cv": {
      "type": "string",
      "description": "The CV as plain text. Optional if titles and skills are given."
    },
    "id": {
      "type": "string",
      "description": "A job id from a search result, copied exactly. Or give job_text."
    },
    "skills": {
      "type": "string",
      "description": "Skills, comma separated."
    },
    "titles": {
      "type": "string",
      "description": "Current and past job titles, comma separated."
    },
    "company": {
      "type": "string",
      "description": "The employer's name, when the advert is pasted as job_text."
    },
    "schools": {
      "type": "string",
      "description": "Universities or schools, comma separated."
    },
    "job_text": {
      "type": "string",
      "description": "The job advert as plain text, when there is no id."
    },
    "location": {
      "type": "string",
      "description": "Where the person lives or wants to work."
    },
    "education": {
      "type": "string",
      "description": "Highest qualification, for example \"BSc Economics\"."
    },
    "employers": {
      "type": "string",
      "description": "Current and past employers, comma separated."
    },
    "questions": {
      "type": "string",
      "description": "Application form questions to draft answers for, one per line. Common questions are used if left out."
    },
    "your_name": {
      "type": "string",
      "description": "The person's name, to sign the letter."
    },
    "why_company": {
      "type": "string",
      "description": "One specific reason they want this employer, in their words. Left as a gap to fill in if not given."
    },
    "availability": {
      "type": "string",
      "description": "When they could start, for example \"I can start in May\"."
    },
    "years_experience": {
      "type": "number",
      "description": "Years of work experience."
    }
  },
  "additionalProperties": false
}
jobspotter_cover_letter annotations
{
  "title": "Draft a cover letter and application answers",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_interview_practice — Job Spotter: Practise an interview, one question at a time
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. Practise an interview, one question at a time. For "practise an interview with me" or "how was that answer?". Send the role to get the first question; send the question and the person's answer to get a score out of 10 with what went well, one thing to fix and the next question. Scored by fixed rules, the same for everyone: structure (situation, task, action, result), what the person did themselves, a concrete result, length and the question's own words. It scores the answer, never the person, and nothing is stored.

jobspotter_interview_practice input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "n": {
      "type": "integer",
      "maximum": 6,
      "minimum": 0,
      "description": "Which practice question to ask, from 0. The reply gives next_n."
    },
    "role": {
      "type": "string",
      "description": "The job being interviewed for, for example \"staff nurse\"."
    },
    "answer": {
      "type": "string",
      "description": "The person's answer, as they would say it. Leave out to get the next question."
    },
    "question": {
      "type": "string",
      "description": "The question that was answered, copied from the last reply. Leave out to get a question."
    }
  },
  "additionalProperties": false
}
jobspotter_interview_practice annotations
{
  "title": "Practise an interview, one question at a time",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_us_visa_salaries — Job Spotter: What a US employer offered on work visa filings
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. What a US employer offered on work visa filings. For "what does Google pay software engineers?" or "how much does Infosys pay on H-1B?". Wages US employers offered on certified H-1B, H-1B1 and E-3 labour condition applications (US Department of Labor disclosure data): the number of filings, the median and typical range, and the most common job titles with their median offered wage. Offered wages on filings, a guide to pay at that employer; contact people named in the filings are left out.

jobspotter_us_visa_salaries input schema
{
  "type": "object",
  "required": [
    "company"
  ],
  "properties": {
    "title": {
      "type": "string",
      "description": "A job title to pick out, for example \"software engineer\"."
    },
    "company": {
      "type": "string",
      "description": "The employer, for example \"Google\" or \"Amazon.com Services\"."
    }
  },
  "additionalProperties": false
}
jobspotter_us_visa_salaries annotations
{
  "title": "What a US employer offered on work visa filings",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
jobspotter_about_job_spotter — Job Spotter: What Job Spotter can do, for job seekers and employers
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Job Spotter. What Job Spotter can do, for job seekers and employers. The capabilities, the rules (nothing is sent without a yes) and which tool does what. A ready-to-read summary is in `say`.

jobspotter_about_job_spotter input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
jobspotter_about_job_spotter annotations
{
  "title": "What Job Spotter can do, for job seekers and employers",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
syncmycycle_get_todays_phase — Sync My Cycle: Today's cycle phase, with workout and food ideas
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Sync My Cycle. Today's cycle phase, with workout and food ideas. For when the user asks what phase they are in, what workout or food suits them today, or why their energy is up or down, for example "what phase am I in, my last period started September 12th" or "what should I train today?". Needs the first day of their last period. Not for getting pregnant, fertile days, ovulation timing, contraception or pregnancy: this is general wellbeing only, not for pregnancy planning or contraception, and a doctor or pharmacist is the right person for those. When `period_may_be_late` is true the say line says the period may be late and suggests checking with a doctor.

syncmycycle_get_todays_phase input schema
{
  "type": "object",
  "required": [
    "last_period"
  ],
  "properties": {
    "tz": {
      "type": "string",
      "description": "The user's IANA time zone, for example Europe/London or America/Chicago, so today is the user's today. Optional: country is enough in most places."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Day to ask about, YYYY-MM-DD, a real calendar day. Default today where the user is: from tz, else country, else the request, else UTC."
    },
    "diet": {
      "type": "string",
      "description": "Comma separated: vegetarian, vegan, pescatarian, halal. Food ideas are filtered to suit."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code (UK is read as GB). Sets the kit links (US, GB and IE get local Amazon links) and the time zone for today. Default from the request."
    },
    "last_period": {
      "type": "string",
      "format": "date",
      "description": "First day of the user's most recent period, YYYY-MM-DD. Must be within the last 120 days."
    },
    "cycle_length": {
      "type": "integer",
      "maximum": 45,
      "minimum": 20,
      "description": "Usual days from one period start to the next, 20 to 45. Default 28."
    },
    "period_length": {
      "type": "integer",
      "maximum": 10,
      "minimum": 2,
      "description": "Usual days of bleeding, 2 to 10. Default 5."
    },
    "last_period_start": {
      "type": "string",
      "format": "date",
      "description": "Older name for last_period, kept for existing callers; last_period is the current name."
    }
  },
  "additionalProperties": false
}
syncmycycle_get_todays_phase annotations
{
  "title": "Today's cycle phase, with workout and food ideas",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
syncmycycle_get_week_ahead — Sync My Cycle: The days ahead by phase
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Sync My Cycle. The days ahead by phase. For when the user wants to plan training or meals for the week, for example "plan my training this week around my cycle". Returns each day's likely phase, workout focus, intensity and food focus. Not for getting pregnant, fertile days, ovulation timing, contraception or pregnancy: this is general wellbeing only, not for pregnancy planning or contraception, and it is not a fertility calendar. When `period_may_be_late` is true, `days` is empty and the say line suggests checking with a doctor.

syncmycycle_get_week_ahead input schema
{
  "type": "object",
  "required": [
    "last_period"
  ],
  "properties": {
    "tz": {
      "type": "string",
      "description": "The user's IANA time zone, for example Europe/London or America/Chicago, so today is the user's today. Optional: country is enough in most places."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "First day of the plan, YYYY-MM-DD, a real calendar day. Default today where the user is: from tz, else country, else the request, else UTC."
    },
    "days": {
      "type": "integer",
      "maximum": 35,
      "minimum": 1,
      "description": "How many days, a whole number from 1 to 35. Default 7."
    },
    "diet": {
      "type": "string",
      "description": "Accepted for symmetry with get_todays_phase; the week view has no food list, so it has no effect here."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code (UK is read as GB), used for the time zone of today."
    },
    "last_period": {
      "type": "string",
      "format": "date",
      "description": "First day of the user's most recent period, YYYY-MM-DD. Must be within the last 120 days."
    },
    "cycle_length": {
      "type": "integer",
      "maximum": 45,
      "minimum": 20,
      "description": "Usual cycle length, 20 to 45. Default 28."
    },
    "period_length": {
      "type": "integer",
      "maximum": 10,
      "minimum": 2,
      "description": "Usual days of bleeding, 2 to 10. Default 5."
    },
    "last_period_start": {
      "type": "string",
      "format": "date",
      "description": "Older name for last_period, kept for existing callers; last_period is the current name."
    }
  },
  "additionalProperties": false
}
syncmycycle_get_week_ahead annotations
{
  "title": "The days ahead by phase",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
syncmycycle_list_phases — Sync My Cycle: What each phase usually feels like, with workout and food ideas
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Sync My Cycle. What each phase usually feels like, with workout and food ideas. For general questions about cycle syncing that need no dates, for example "what should I eat in my luteal phase?". Not for conception, fertile days, contraception or pregnancy: general wellbeing only, not for pregnancy planning or contraception.

syncmycycle_list_phases input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
syncmycycle_list_phases annotations
{
  "title": "What each phase usually feels like, with workout and food ideas",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
wardrobeconnect_find_clothes — Wardrobe Connect: Find clothes that match a description
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Wardrobe Connect. Find clothes that match a short description of one item, such as "black pleated wide-leg trousers" or "cream cable-knit jumper". Takes only the item description and, if wanted, a size, a price limit, the condition and a country; it needs nothing else from the conversation. Returns eBay listings in the Clothing, Shoes and Accessories category, closest matches first and then cheapest first, plus search links for other shops and a Facebook Marketplace search phrase. Listings must match the colour, fabric and kind of garment named, and men's or women's if given; kids' items only when asked for. Adult, fetish and costume listings are never shown, repeat listings of the same item count once, and listings far below the typical price for the search (usually bait or junk) are left out.

wardrobeconnect_find_clothes input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 100,
      "description": "Just the item, in a few words: colour, type, fabric or style, and brand if known, for example \"navy midi wrap dress\". Up to 100 characters, with no other conversation text or personal details."
    },
    "size": {
      "type": "string",
      "maxLength": 20,
      "description": "The size to match, for example M, XL, 12, UK 9, US 8.5, EU 39 or W32. Dress and shoe sizes are converted between UK, US and EU."
    },
    "country": {
      "enum": [
        "US",
        "GB",
        "IE",
        "CA",
        "AU",
        "DE",
        "FR",
        "IT",
        "ES"
      ],
      "type": "string",
      "description": "Two-letter country code for the eBay site and currency. Defaults to where the request comes from."
    },
    "condition": {
      "enum": [
        "any",
        "new",
        "used"
      ],
      "type": "string",
      "description": "Condition: new, used (pre-owned) or any. Default any. pre-owned and second-hand are read as used."
    },
    "max_price": {
      "type": "number",
      "minimum": 0,
      "description": "Most to pay, in the local currency, shipping included."
    }
  },
  "additionalProperties": false
}
wardrobeconnect_find_clothes annotations
{
  "title": "Find clothes that match a description",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
wardrobeconnect_find_clothes_by_image — Wardrobe Connect: Find clothes that look like a picture
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Wardrobe Connect. Find clothes that look like a picture of one item. Takes the picture's direct https link and, if wanted, a few words naming the item, a size, a price limit, the condition and a country; it needs nothing else from the conversation. Returns visually similar eBay listings from the Clothing, Shoes and Accessories category only, in eBay's look-alike order. If the picture does not show one piece of clothing, `matches` is empty and the say line asks what the item is. A short item name in q makes the results match it, which removes look-alikes of the wrong kind.

wardrobeconnect_find_clothes_by_image input schema
{
  "type": "object",
  "required": [
    "image_url"
  ],
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 60,
      "description": "Which item in the picture, in a few words, for example \"the camel coat\"."
    },
    "size": {
      "type": "string",
      "maxLength": 20,
      "description": "Clothing or shoe size to match, for example M, 10 or UK 8."
    },
    "country": {
      "enum": [
        "US",
        "GB",
        "IE",
        "CA",
        "AU",
        "DE",
        "FR",
        "IT",
        "ES"
      ],
      "type": "string",
      "description": "Two-letter country code for the eBay site and currency. Defaults to where the request comes from."
    },
    "condition": {
      "enum": [
        "any",
        "new",
        "used"
      ],
      "type": "string",
      "description": "Condition: any, new or used."
    },
    "image_url": {
      "type": "string",
      "format": "uri",
      "maxLength": 2048,
      "description": "Direct https link to one JPEG, PNG or WebP picture, 6 MB at most."
    },
    "max_price": {
      "type": "number",
      "minimum": 0,
      "description": "Highest price, in the local currency."
    }
  },
  "additionalProperties": false
}
wardrobeconnect_find_clothes_by_image annotations
{
  "title": "Find clothes that look like a picture",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
formguide_get_team — Form Guide: A club's league position, recent form and next games
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Form Guide. A club's league position, recent form and next games. For requests like "how are Arsenal doing?", "what's Spurs' form?", "when do Birmingham play next?"

formguide_get_team input schema
{
  "type": "object",
  "required": [
    "team"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "Older name for team, kept for existing callers; team is the current name."
    },
    "team": {
      "type": "string",
      "description": "Club name as the user said it, up to 80 characters. Nicknames and small typos are fine."
    },
    "league": {
      "type": "string",
      "description": "One of: premier league, championship, la liga, bundesliga, serie a, ligue 1 (common variants like EPL or German Bundesliga work too). Any other league returns 404. Only needed if two clubs share a name."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code for the shirt link (US, GB and IE get local Amazon links). Default from the request. When passed as US or CA, the say line also gives the next kick-off in US Eastern time."
    }
  },
  "additionalProperties": false
}
formguide_get_team annotations
{
  "title": "A club's league position, recent form and next games",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
formguide_get_fixtures — Form Guide: Upcoming fixtures for a club or a league
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Form Guide. Upcoming fixtures for a club or a league. For requests like "who do Liverpool play next?" or "what's on in La Liga this weekend?". Without team or league, gives the Premier League.

formguide_get_fixtures input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "days": {
      "type": "integer",
      "maximum": 60,
      "minimum": 1,
      "description": "How far ahead, a whole number from 1 to 60. Default 21. If nothing falls in the window (an international break), the next fixtures are returned anyway."
    },
    "team": {
      "type": "string",
      "description": "A club name, for example Liverpool or Real Madrid."
    },
    "league": {
      "type": "string",
      "description": "One of: premier league, championship, la liga, bundesliga, serie a, ligue 1 (common variants like EPL or German Bundesliga work too). Any other league returns 404."
    },
    "country": {
      "type": "string",
      "description": "US or CA adds US Eastern kick-off times to the say line (and to each fixture's us_eastern, which is always there when a time is known)."
    }
  },
  "additionalProperties": false
}
formguide_get_fixtures annotations
{
  "title": "Upcoming fixtures for a club or a league",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
formguide_get_results — Form Guide: Latest results for a club, or the last round of a league
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Form Guide. Latest results for a club, or the last round of a league. For requests like "how did Chelsea get on?" or "what were the Serie A results?". Without team or league, gives the Premier League.

formguide_get_results input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "n": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "How many of the club's results, a whole number from 1 to 20. Default 5."
    },
    "team": {
      "type": "string",
      "description": "A club name, for example Liverpool or Real Madrid."
    },
    "league": {
      "type": "string",
      "description": "One of: premier league, championship, la liga, bundesliga, serie a, ligue 1 (common variants like EPL or German Bundesliga work too). Any other league returns 404."
    }
  },
  "additionalProperties": false
}
formguide_get_results annotations
{
  "title": "Latest results for a club, or the last round of a league",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
formguide_get_table — Form Guide: League table
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Form Guide. League table. For requests like "show me the Championship table" or "who is top of La Liga?". Points include official deductions; a deducted club's row has points_deducted.

formguide_get_table input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "league": {
      "type": "string",
      "description": "One of: premier league, championship, la liga, bundesliga, serie a, ligue 1 (common variants like EPL or German Bundesliga work too). Any other league returns 404. Default premier league."
    }
  },
  "additionalProperties": false
}
formguide_get_table annotations
{
  "title": "League table",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
formguide_compare_teams — Form Guide: Two clubs side by side before they meet
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Form Guide. Two clubs side by side before they meet. For requests like "Arsenal v Leeds, how do they compare?". Gives positions, form, goals, this season's meeting and the next date they play. Stats only, not betting advice.

formguide_compare_teams input schema
{
  "type": "object",
  "required": [
    "home",
    "away"
  ],
  "properties": {
    "away": {
      "type": "string",
      "description": "A different club from home."
    },
    "home": {
      "type": "string",
      "description": "The home club, for example Arsenal."
    },
    "team1": {
      "type": "string",
      "description": "Older name for home, kept for existing callers; home is the current name."
    },
    "team2": {
      "type": "string",
      "description": "Older name for away, kept for existing callers; away is the current name."
    },
    "country": {
      "type": "string",
      "description": "US or CA adds US Eastern kick-off times to the say line (and to each fixture's us_eastern, which is always there when a time is known)."
    }
  },
  "additionalProperties": false
}
formguide_compare_teams annotations
{
  "title": "Two clubs side by side before they meet",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
bookslikethis_get_book — Books Like This: A book's details and any film or series made from it
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Books Like This. A book's details and any film or series made from it. For requests like "tell me about Project Hail Mary", "is The Name of the Wind being made into a film?", "how long is Dune?". Misspellings are fine. If screen_checked is false, the film and TV check could not run just now, so the film and TV status is unknown.

bookslikethis_get_book input schema
{
  "type": "object",
  "required": [
    "title"
  ],
  "properties": {
    "title": {
      "type": "string",
      "description": "The book's title, 2 to 120 characters. Add author for very short or common titles."
    },
    "author": {
      "type": "string",
      "description": "The author's name, to pin down the right book or list their books."
    },
    "country": {
      "type": "string",
      "description": "For buy links: US, GB, IE, CA, AU. Default from the request."
    }
  },
  "additionalProperties": false
}
bookslikethis_get_book annotations
{
  "title": "A book's details and any film or series made from it",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
bookslikethis_find_similar_books — Books Like This: Books like one the user enjoyed, or for a genre
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Books Like This. Books like one the user enjoyed, or for a genre. For requests like "books like The Martian" or "a good cosy mystery". Suggestions are English-language books for the same readers (picture book, children, young adult or adult), one per author and one per series. Well-read books of the same kind come first (picked_from: shelf, and because names the kind, for example "celebrated dystopian novels"), then books sharing specific subjects on Open Library (picked_from: subjects, and because lists the shared subjects). Novels never get self-help, textbooks, anthologies, study guides, category romance lines or explicit books as suggestions, and popular books are preferred over obscure ones. Other books by the same author are left out unless same_author=true. Give title or subject; common other titles work (1984, The Sorcerer's Stone)

bookslikethis_find_similar_books input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "title": {
      "type": "string",
      "description": "A book the user liked, 2 to 120 characters."
    },
    "author": {
      "type": "string",
      "description": "The author's name, to pin down the right book or list their books."
    },
    "country": {
      "type": "string",
      "description": "Two-letter country code for the shop links, for example US or GB."
    },
    "subject": {
      "type": "string",
      "description": "A genre or theme, for example space opera, cozy mystery, heist."
    },
    "same_author": {
      "type": "boolean",
      "description": "True to include more books by the same author."
    }
  },
  "additionalProperties": false
}
bookslikethis_find_similar_books annotations
{
  "title": "Books like one the user enjoyed, or for a genre",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
bookslikethis_get_author_books — Books Like This: An author's books, newest first
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Books Like This. An author's books, newest first. For requests like "what has Andy Weir written?" or "Sally Rooney's books"

bookslikethis_get_author_books input schema
{
  "type": "object",
  "required": [
    "author"
  ],
  "properties": {
    "author": {
      "type": "string",
      "description": "The author's name, to pin down the right book or list their books."
    },
    "country": {
      "type": "string",
      "description": "For buy links: US, GB, IE, CA, AU. Default from the request."
    }
  },
  "additionalProperties": false
}
bookslikethis_get_author_books annotations
{
  "title": "An author's books, newest first",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
fairfare_estimate_fare — Fair Fare: What a trip should cost by taxi, Uber or Lyft
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fair Fare. What a trip should cost by taxi, Uber or Lyft. Distance and time by road between two places, the licensed taxi meter fare with the extras that apply at that hour, any airport flat fare, typical Uber and Lyft prices in New York, airport pickup rules, a pre-booked transfer option for airport trips, and links that open Uber, Lyft or public transport directions with the trip filled in.

fairfare_estimate_fare input schema
{
  "type": "object",
  "required": [
    "from",
    "to"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "Where the trip ends, in the same forms as from."
    },
    "city": {
      "type": "string",
      "description": "Optional tariff city id from list_cities, when the place names are ambiguous."
    },
    "from": {
      "type": "string",
      "description": "Where the trip starts: an address, landmark, postcode, airport code (JFK, LHR) or lat,lon."
    },
    "when": {
      "type": "string",
      "description": "When the trip starts, in local time: now (the default), a time like 18:30 or 6pm, or a date and time like 2026-10-09T18:30."
    }
  },
  "additionalProperties": false
}
fairfare_estimate_fare annotations
{
  "title": "What a trip should cost by taxi, Uber or Lyft",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
fairfare_check_fare — Fair Fare: Was I overcharged? Check a fare that was paid
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fair Fare. Was I overcharged? Check a fare that was paid. Compares what was paid with the official meter tariff, the airport flat fare or New York's typical Uber and Lyft prices for the same trip and hour, gives a verdict (fair, high or overcharged), the next steps for that company or city regulator, and a short message to send asking for a refund.

fairfare_check_fare input schema
{
  "type": "object",
  "required": [
    "paid"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "Where it ended."
    },
    "city": {
      "type": "string",
      "description": "Tariff city id, when giving miles instead of from and to."
    },
    "from": {
      "type": "string",
      "description": "Where the trip started."
    },
    "kind": {
      "enum": [
        "taxi",
        "uber",
        "lyft",
        "bolt",
        "minicab",
        "private_hire"
      ],
      "type": "string",
      "description": "Kind: taxi, uber, lyft, bolt or minicab. Defaults to taxi."
    },
    "paid": {
      "type": "string",
      "description": "What was paid, without the tip, for example 48.50."
    },
    "when": {
      "type": "string",
      "description": "When the trip starts, in local time: now (the default), a time like 18:30 or 6pm, or a date and time like 2026-10-09T18:30."
    },
    "miles": {
      "type": "number",
      "description": "Trip length in miles, instead of from and to."
    },
    "minutes": {
      "type": "number",
      "description": "Trip time in minutes, if known."
    }
  },
  "additionalProperties": false
}
fairfare_check_fare annotations
{
  "title": "Was I overcharged? Check a fare that was paid",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
fairfare_best_time_to_ride — Fair Fare: Cheapest time of day to take a ride
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fair Fare. Cheapest time of day to take a ride. For New York, typical Uber and Lyft prices for a trip of a given length at every hour of the week, from the city's trip records, with the cheapest and most expensive hours today and whether waiting saves money. For other cities, how the taxi meter rates change by time of day.

fairfare_best_time_to_ride input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "city": {
      "type": "string",
      "description": "Tariff city id, for example nyc, london or chicago. Defaults to nyc."
    },
    "when": {
      "type": "string",
      "description": "When the trip starts, in local time: now (the default), a time like 18:30 or 6pm, or a date and time like 2026-10-09T18:30."
    },
    "miles": {
      "type": "number",
      "description": "Trip length in miles (New York only). Defaults to 3."
    }
  },
  "additionalProperties": false
}
fairfare_best_time_to_ride annotations
{
  "title": "Cheapest time of day to take a ride",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
fairfare_get_airport — Fair Fare: Getting a ride at an airport
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fair Fare. Getting a ride at an airport. Where Uber and Lyft pick up, how the taxi rank works, flat taxi fares, drop-off and pickup charges for cars, meet and greet rules, public transport into the city with prices, and tips, from each airport's own pages.

fairfare_get_airport input schema
{
  "type": "object",
  "required": [
    "code"
  ],
  "properties": {
    "code": {
      "type": "string",
      "description": "Airport code or name, for example JFK, LAX, LHR or Heathrow."
    }
  },
  "additionalProperties": false
}
fairfare_get_airport annotations
{
  "title": "Getting a ride at an airport",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
fairfare_get_taxi_tariff — Fair Fare: A city's official taxi meter tariff
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fair Fare. A city's official taxi meter tariff. The starting charge, the rate per mile or kilometre, the waiting rate, time-of-day tariffs, extras and surcharges, flat fares, tipping custom and the official source.

fairfare_get_taxi_tariff input schema
{
  "type": "object",
  "required": [
    "city"
  ],
  "properties": {
    "city": {
      "type": "string",
      "description": "Tariff city id from list_cities, for example nyc, chicago, london or birmingham."
    }
  },
  "additionalProperties": false
}
fairfare_get_taxi_tariff annotations
{
  "title": "A city's official taxi meter tariff",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
fairfare_check_driver_licence — Fair Fare: Check a New York taxi or ride-app driver's licence
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fair Fare. Check a New York taxi or ride-app driver's licence. Whether a TLC licence number is active on New York City's daily open data for for-hire (Uber, Lyft, car service) and taxi drivers, its expiry date, and, if a name is given, whether it matches (the name on the licence is never returned). Other cities get the official way to check.

fairfare_check_driver_licence input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "city": {
      "type": "string",
      "description": "City: nyc (live check) or another city id for guidance. Defaults to nyc."
    },
    "name": {
      "type": "string",
      "description": "Optional name the driver gave, to check it matches."
    },
    "number": {
      "type": "string",
      "description": "The TLC licence number shown in the app or on the partition card."
    }
  },
  "additionalProperties": false
}
fairfare_check_driver_licence annotations
{
  "title": "Check a New York taxi or ride-app driver's licence",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
fairfare_list_cities — Fair Fare: Cities and airports covered
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fair Fare. Cities and airports covered. Every city whose official taxi tariff is on file and every airport with ground transport facts.

fairfare_list_cities input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
fairfare_list_cities annotations
{
  "title": "Cities and airports covered",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
fairfare_check_fleet_file — Fair Fare: Check a cab firm's fleet.json
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fair Fare. Check a cab firm's fleet.json. Reads a taxi or minicab firm's fleet.json (the open format at fairfare.pages.dev/fleet that lets assistants find and book local firms directly) and lists anything to fix.

fairfare_check_fleet_file input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The https address of the fleet.json file."
    }
  },
  "additionalProperties": false
}
fairfare_check_fleet_file annotations
{
  "title": "Check a cab firm's fleet.json",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
artspotter_search_art — Art Spotter - Eye of the Beholder: Find art for sale from independent artists
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Art Spotter - Eye of the Beholder. Find art for sale from independent artists. Searches works in independent artists' own shops and eBay art by words (subject, style, place, artist), kind, original or print, price, size and colour. Results show title, artist, size, price, where it ships from, an image and a link to buy straight from the artist.

artspotter_search_art input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "q": {
      "type": "string",
      "description": "What to look for, for example abstract blue, linocut bird, Scottish landscape or a dog portrait."
    },
    "kind": {
      "enum": [
        "painting",
        "print",
        "printmaking",
        "photography",
        "drawing",
        "watercolour",
        "ceramics",
        "sculpture",
        "textile",
        "illustration",
        "other"
      ],
      "type": "string",
      "description": "Kind: painting, print, printmaking, photography, drawing, watercolour, ceramics, sculpture, textile, illustration or other."
    },
    "unit": {
      "enum": [
        "in",
        "cm"
      ],
      "type": "string",
      "description": "Unit: in or cm. Defaults to in."
    },
    "limit": {
      "type": "integer",
      "description": "How many results, 1 to 20."
    },
    "colour": {
      "type": "string",
      "description": "A main colour, for example blue or ochre."
    },
    "country": {
      "type": "string",
      "description": "Buyer's two-letter country code, for eBay and currency, for example US or GB."
    },
    "currency": {
      "type": "string",
      "description": "Currency for prices, for example USD, GBP or EUR."
    },
    "max_size": {
      "type": "number",
      "description": "Largest longest side, in unit."
    },
    "min_size": {
      "type": "number",
      "description": "Smallest longest side, in unit."
    },
    "original": {
      "type": "boolean",
      "description": "Set to true for one-off originals only, false for prints only."
    },
    "max_price": {
      "type": "number",
      "description": "Highest price, in the currency given (or the buyer's local currency)."
    },
    "min_price": {
      "type": "number",
      "description": "Lowest price."
    },
    "ships_from": {
      "type": "string",
      "description": "Only artists based in this two-letter country."
    }
  },
  "additionalProperties": false
}
artspotter_search_art annotations
{
  "title": "Find art for sale from independent artists",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
artspotter_get_fair_art_price — Art Spotter - Eye of the Beholder: Fair price for a new artwork by size and medium
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Art Spotter - Eye of the Beholder. Fair price for a new artwork by size and medium. What original work or prints of about this size and kind sell for in independent artists' own shops: the typical price, the middle half of prices and the price per square inch, from comparable works for sale.

artspotter_get_fair_art_price input schema
{
  "type": "object",
  "required": [
    "width",
    "height"
  ],
  "properties": {
    "kind": {
      "enum": [
        "painting",
        "print",
        "printmaking",
        "photography",
        "drawing",
        "watercolour",
        "ceramics",
        "sculpture",
        "textile",
        "illustration",
        "other"
      ],
      "type": "string",
      "description": "Kind of work. Defaults to painting."
    },
    "unit": {
      "enum": [
        "in",
        "cm"
      ],
      "type": "string",
      "description": "Unit: in or cm."
    },
    "width": {
      "type": "number",
      "description": "Width, in unit."
    },
    "height": {
      "type": "number",
      "description": "Height, in unit."
    },
    "currency": {
      "type": "string",
      "description": "Currency for the answer, for example USD or GBP."
    },
    "original": {
      "type": "boolean",
      "description": "Set to true for originals (the default), false for prints."
    }
  },
  "additionalProperties": false
}
artspotter_get_fair_art_price annotations
{
  "title": "Fair price for a new artwork by size and medium",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
artspotter_compare_where_to_sell — Art Spotter - Eye of the Beholder: What an artist keeps on each selling platform
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Art Spotter - Eye of the Beholder. What an artist keeps on each selling platform. For a sale price, what the artist keeps after fees on Etsy, eBay, Saatchi Art, Artfinder, Singulart, their own Shopify shop and direct card payments, sorted by money kept, with print-on-demand options for prints. US and UK fee tables.

artspotter_compare_where_to_sell input schema
{
  "type": "object",
  "required": [
    "price"
  ],
  "properties": {
    "kind": {
      "enum": [
        "original",
        "print"
      ],
      "type": "string",
      "description": "Kind: original (the default) or print."
    },
    "price": {
      "type": "number",
      "description": "The price the buyer pays."
    },
    "currency": {
      "enum": [
        "USD",
        "GBP"
      ],
      "type": "string",
      "description": "USD or GBP."
    },
    "shipping": {
      "type": "number",
      "description": "Shipping charged to the buyer, if any."
    }
  },
  "additionalProperties": false
}
artspotter_compare_where_to_sell annotations
{
  "title": "What an artist keeps on each selling platform",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
artspotter_price_commission — Art Spotter - Eye of the Beholder: Price and terms for commissioning a piece
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Art Spotter - Eye of the Beholder. Price and terms for commissioning a piece. A price guide for a commissioned piece by size and the artist's level, what similar finished originals sell for, the usual deposit, revision rounds, cancellation fees, copyright and a contract checklist for buyer and artist.

artspotter_price_commission input schema
{
  "type": "object",
  "required": [
    "width",
    "height"
  ],
  "properties": {
    "unit": {
      "enum": [
        "in",
        "cm"
      ],
      "type": "string",
      "description": "Unit: in or cm."
    },
    "level": {
      "enum": [
        "emerging",
        "mid",
        "established"
      ],
      "type": "string",
      "description": "Level: emerging (the default), mid or established."
    },
    "width": {
      "type": "number",
      "description": "Width, in unit."
    },
    "height": {
      "type": "number",
      "description": "Height, in unit."
    },
    "medium": {
      "type": "string",
      "description": "Kind of work, for example painting or drawing."
    }
  },
  "additionalProperties": false
}
artspotter_price_commission annotations
{
  "title": "Price and terms for commissioning a piece",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
artspotter_size_art_for_wall — Art Spotter - Eye of the Beholder: What size art fits a wall and how high to hang it
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Art Spotter - Eye of the Beholder. What size art fits a wall and how high to hang it. Art width for the furniture or wall, the hanging height, the gap above furniture and gallery wall spacing, with a ready search for works in that size range.

artspotter_size_art_for_wall input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "unit": {
      "enum": [
        "in",
        "cm"
      ],
      "type": "string",
      "description": "Unit: in or cm."
    },
    "wall_width": {
      "type": "number",
      "description": "Width of the wall, if there's no furniture below."
    },
    "furniture_width": {
      "type": "number",
      "description": "Width of the sofa, bed or sideboard below the art."
    }
  },
  "additionalProperties": false
}
artspotter_size_art_for_wall annotations
{
  "title": "What size art fits a wall and how high to hang it",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
artspotter_list_open_calls — Art Spotter - Eye of the Beholder: Open calls, prizes and residencies for artists
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Art Spotter - Eye of the Beholder. Open calls, prizes and residencies for artists. Recurring open exhibitions, prizes, residencies and listing sites in the UK, US and Canada, with entry fees, usual closing month, media and official links.

artspotter_list_open_calls input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "kind": {
      "type": "string",
      "description": "Kind: open call, prize, residency or listing hub."
    },
    "media": {
      "type": "string",
      "description": "For example painting, watercolour, print or photography."
    },
    "country": {
      "type": "string",
      "description": "UK, US or CA."
    }
  },
  "additionalProperties": false
}
artspotter_list_open_calls annotations
{
  "title": "Open calls, prizes and residencies for artists",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
artspotter_get_artist_funding — Art Spotter - Eye of the Beholder: Grants, buyer finance, royalties and copyright for artists
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Art Spotter - Eye of the Beholder. Grants, buyer finance, royalties and copyright for artists. For the UK: arts council grants, Own Art 0% buyer finance and the Artist's Resale Right. For the US: grants and the $85 group copyright registration for 2 to 20 artworks.

artspotter_get_artist_funding input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "country": {
      "type": "string",
      "description": "GB or US."
    }
  },
  "additionalProperties": false
}
artspotter_get_artist_funding annotations
{
  "title": "Grants, buyer finance, royalties and copyright for artists",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
artspotter_calculate_resale_royalty — Art Spotter - Eye of the Beholder: UK Artist's Resale Right on a resale
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Art Spotter - Eye of the Beholder. UK Artist's Resale Right on a resale. The royalty owed to an artist on a UK resale through a gallery, dealer or auction house, by band, with the cap and who collects it.

artspotter_calculate_resale_royalty input schema
{
  "type": "object",
  "required": [
    "price"
  ],
  "properties": {
    "price": {
      "type": "number",
      "description": "Resale price in pounds."
    }
  },
  "additionalProperties": false
}
artspotter_calculate_resale_royalty annotations
{
  "title": "UK Artist's Resale Right on a resale",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
artspotter_check_art_listing — Art Spotter - Eye of the Beholder: Check an art listing before buying
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Art Spotter - Eye of the Beholder. Check an art listing before buying. Whether a link is an independent artist in the index or a marketplace with buyer protection, reverse image search links for the picture, and the checks that catch stolen images, AI work sold as hand-made and payment scams.

artspotter_check_art_listing input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "url": {
      "type": "string",
      "description": "The listing or shop address."
    },
    "image": {
      "type": "string",
      "description": "The address of the artwork's picture."
    }
  },
  "additionalProperties": false
}
artspotter_check_art_listing annotations
{
  "title": "Check an art listing before buying",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
artspotter_make_artwork_passport — Art Spotter - Eye of the Beholder: A free artwork passport for an artist's work
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Art Spotter - Eye of the Beholder. A free artwork passport for an artist's work. Makes a certificate for a work (title, artist, year, medium, size, edition) with a fingerprint of its picture, as printable text and schema.org data the artist can publish, so anyone can later check the picture is unchanged.

artspotter_make_artwork_passport input schema
{
  "type": "object",
  "required": [
    "image",
    "title",
    "artist"
  ],
  "properties": {
    "size": {
      "type": "string",
      "description": "For example 60 x 90 cm."
    },
    "year": {
      "type": "string",
      "description": "Year made."
    },
    "image": {
      "type": "string",
      "description": "The https address of the work's picture."
    },
    "title": {
      "type": "string",
      "description": "Title of the work."
    },
    "artist": {
      "type": "string",
      "description": "Artist's name."
    },
    "medium": {
      "type": "string",
      "description": "For example oil on canvas."
    },
    "edition": {
      "type": "string",
      "description": "For example 3/25, for prints."
    }
  },
  "additionalProperties": false
}
artspotter_make_artwork_passport annotations
{
  "title": "A free artwork passport for an artist's work",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
artspotter_verify_artwork_passport — Art Spotter - Eye of the Beholder: Check a picture matches an artwork passport
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Art Spotter - Eye of the Beholder. Check a picture matches an artwork passport. Recomputes the picture's fingerprint and says whether it matches the one in the passport.

artspotter_verify_artwork_passport input schema
{
  "type": "object",
  "required": [
    "image",
    "sha256"
  ],
  "properties": {
    "image": {
      "type": "string",
      "description": "The https address of the picture."
    },
    "sha256": {
      "type": "string",
      "description": "The fingerprint from the passport."
    }
  },
  "additionalProperties": false
}
artspotter_verify_artwork_passport annotations
{
  "title": "Check a picture matches an artwork passport",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
artspotter_check_artworks_feed — Art Spotter - Eye of the Beholder: Check an artist's artworks.json
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Art Spotter - Eye of the Beholder. Check an artist's artworks.json. Reads an artist's artworks.json (the open format at artspotter.pages.dev/artworks that lets assistants find work sold direct) and lists anything to fix.

artspotter_check_artworks_feed input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The https address of the artworks.json file."
    }
  },
  "additionalProperties": false
}
artspotter_check_artworks_feed annotations
{
  "title": "Check an artist's artworks.json",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
talmud_get_today — Talmud Scroller: Today's reading, line by line (same as the app shows today)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Talmud Scroller. Today's reading, line by line (same as the app shows today). Talmud: daily readings, plans, search and original text lookup; whole books from the Library, read a passage at a time.

talmud_get_today input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "description": "Optional day as YYYY-MM-DD. Defaults to today (UTC)."
    }
  },
  "additionalProperties": false
}
talmud_get_today annotations
{
  "title": "Today's reading, line by line (same as the app shows today)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
talmud_list_readings — Talmud Scroller: All curated daily readings and plans
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Talmud Scroller. All curated daily readings and plans. Talmud: daily readings, plans, search and original text lookup; whole books from the Library, read a passage at a time.

talmud_list_readings input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
talmud_list_readings annotations
{
  "title": "All curated daily readings and plans",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
talmud_get_reading — Talmud Scroller: One reading or plan, line by line
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Talmud Scroller. One reading or plan, line by line. Talmud: daily readings, plans, search and original text lookup; whole books from the Library, read a passage at a time.

talmud_get_reading input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "A reading or plan id from list_readings, or a plan name such as \"japji\" or \"The Gita in 18 Days\"."
    }
  },
  "additionalProperties": false
}
talmud_get_reading annotations
{
  "title": "One reading or plan, line by line",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
talmud_search_readings — Talmud Scroller: Search the curated readings, best match first
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Talmud Scroller. Search the curated readings, best match first. Talmud: daily readings, plans, search and original text lookup; whole books from the Library, read a passage at a time.

talmud_search_readings input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "Words to search for, for example kindness or Shabbat."
    }
  },
  "additionalProperties": false
}
talmud_search_readings annotations
{
  "title": "Search the curated readings, best match first",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
talmud_get_talmud_text — Talmud Scroller: Original text of any Talmud page or passage, or a Mishnah such as Pirkei...
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Talmud Scroller. Original text of any Talmud page or passage, or a Mishnah such as Pirkei Avot 1:14, from Sefaria.

talmud_get_talmud_text input schema
{
  "type": "object",
  "required": [
    "ref"
  ],
  "properties": {
    "ref": {
      "type": "string",
      "description": "A tractate and page, for example \"Berakhot 2a\", \"Bava Metzia 59b\" or \"Shabbat 31a:6\". Spoken forms such as \"Bava Metzia page 59 b\" also work."
    }
  },
  "additionalProperties": false
}
talmud_get_talmud_text annotations
{
  "title": "Original text of any Talmud page or passage, or a Mishnah such as Pirkei...",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
talmud_get_card — Talmud Scroller: Today's reading one line at a time, for voice
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Talmud Scroller. Today's reading one line at a time, for voice.. Talmud: daily readings, plans, search and original text lookup; whole books from the Library, read a passage at a time.

talmud_get_card input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "n": {
      "type": "integer",
      "minimum": 1,
      "description": "Which card, starting at 1. Defaults to 1."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Optional day as YYYY-MM-DD. Defaults to today (UTC)."
    },
    "reading": {
      "type": "string",
      "description": "A reading or plan id from list_readings. Defaults to today's reading."
    }
  },
  "additionalProperties": false
}
talmud_get_card annotations
{
  "title": "Today's reading one line at a time, for voice",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
talmud_list_books — Talmud Scroller: The whole books in the Library that can be read a passage at a time
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Talmud Scroller. The whole books in the Library that can be read a passage at a time. Talmud: daily readings, plans, search and original text lookup; whole books from the Library, read a passage at a time.

talmud_list_books input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
talmud_list_books annotations
{
  "title": "The whole books in the Library that can be read a passage at a time",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
talmud_read_book — Talmud Scroller: Follow next for the next passage; it carries on into the next chapter
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Talmud Scroller. Follow next for the next passage; it carries on into the next chapter. Talmud: daily readings, plans, search and original text lookup; whole books from the Library, read a passage at a time.

talmud_read_book input schema
{
  "type": "object",
  "required": [
    "book"
  ],
  "properties": {
    "n": {
      "type": "integer",
      "minimum": 1,
      "description": "Passage within the section, starting at 1."
    },
    "ref": {
      "type": "string",
      "description": "Optional: jump straight to a passage by its reference, for example \"Havamal 139\", \"Meditations 4.3\", \"Gita 2.47\", \"Iliad 1.5\" or \"10b\". Overrides section and n."
    },
    "book": {
      "type": "string",
      "description": "Book id or title from list_books, for example pirkei-avot, bekhorot."
    },
    "section": {
      "type": "string",
      "description": "Chapter, book, poem, letter or daf to start at, as listed in the book (for example 5, \"chapter 2\", \"havamal\", or 10b for the second side of a daf). Defaults to the beginning; Bekhorot defaults to today's Daf Yomi page while the cycle is in it."
    }
  },
  "additionalProperties": false
}
talmud_read_book annotations
{
  "title": "Follow next for the next passage; it carries on into the next chapter",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gurbani_get_today — Scroll the Gurbani: Today's reading, line by line (same as the app shows today)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Gurbani. Today's reading, line by line (same as the app shows today). Gurbani: daily shabad, plans, search, Ang and shabad lookup; whole books from the Library, read a passage at a time.

gurbani_get_today input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "description": "Optional day as YYYY-MM-DD. Defaults to today (UTC)."
    }
  },
  "additionalProperties": false
}
gurbani_get_today annotations
{
  "title": "Today's reading, line by line (same as the app shows today)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gurbani_list_readings — Scroll the Gurbani: All curated daily readings and plans
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Gurbani. All curated daily readings and plans. Gurbani: daily shabad, plans, search, Ang and shabad lookup; whole books from the Library, read a passage at a time.

gurbani_list_readings input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
gurbani_list_readings annotations
{
  "title": "All curated daily readings and plans",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gurbani_get_reading — Scroll the Gurbani: One reading or plan, line by line
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Gurbani. One reading or plan, line by line. Gurbani: daily shabad, plans, search, Ang and shabad lookup; whole books from the Library, read a passage at a time.

gurbani_get_reading input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "A reading or plan id from list_readings, or a plan name such as \"japji\" or \"The Gita in 18 Days\"."
    }
  },
  "additionalProperties": false
}
gurbani_get_reading annotations
{
  "title": "One reading or plan, line by line",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gurbani_search_readings — Scroll the Gurbani: Search the curated readings, best match first
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Gurbani. Search the curated readings, best match first. Gurbani: daily shabad, plans, search, Ang and shabad lookup; whole books from the Library, read a passage at a time.

gurbani_search_readings input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "Words or a bani's name to search for, for example Japji or humility."
    }
  },
  "additionalProperties": false
}
gurbani_search_readings annotations
{
  "title": "Search the curated readings, best match first",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gurbani_get_ang — Scroll the Gurbani: Every line on an Ang in Gurmukhi with transliteration and English
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Gurbani. Every line on an Ang in Gurmukhi with transliteration and English. Gurbani: daily shabad, plans, search, Ang and shabad lookup; whole books from the Library, read a passage at a time.

gurbani_get_ang input schema
{
  "type": "object",
  "required": [
    "ang"
  ],
  "properties": {
    "ang": {
      "type": "integer",
      "maximum": 1430,
      "minimum": 1,
      "description": "The Ang (page) of Sri Guru Granth Sahib, 1 to 1430."
    }
  },
  "additionalProperties": false
}
gurbani_get_ang annotations
{
  "title": "Every line on an Ang in Gurmukhi with transliteration and English",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gurbani_get_shabad — Scroll the Gurbani: A whole shabad by BaniDB id, with transliteration and English
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Gurbani. A whole shabad by BaniDB id, with transliteration and English. Gurbani: daily shabad, plans, search, Ang and shabad lookup; whole books from the Library, read a passage at a time.

gurbani_get_shabad input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "description": "A BaniDB shabad ID."
    }
  },
  "additionalProperties": false
}
gurbani_get_shabad annotations
{
  "title": "A whole shabad by BaniDB id, with transliteration and English",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gurbani_get_card — Scroll the Gurbani: Today's reading one line at a time, for voice
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Gurbani. Today's reading one line at a time, for voice.. Gurbani: daily shabad, plans, search, Ang and shabad lookup; whole books from the Library, read a passage at a time.

gurbani_get_card input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "n": {
      "type": "integer",
      "minimum": 1,
      "description": "Which card, starting at 1. Defaults to 1."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Optional day as YYYY-MM-DD. Defaults to today (UTC)."
    },
    "reading": {
      "type": "string",
      "description": "A reading or plan id from list_readings. Defaults to today's reading."
    }
  },
  "additionalProperties": false
}
gurbani_get_card annotations
{
  "title": "Today's reading one line at a time, for voice",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gurbani_list_books — Scroll the Gurbani: The whole books in the Library that can be read a passage at a time
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Gurbani. The whole books in the Library that can be read a passage at a time. Gurbani: daily shabad, plans, search, Ang and shabad lookup; whole books from the Library, read a passage at a time.

gurbani_list_books input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
gurbani_list_books annotations
{
  "title": "The whole books in the Library that can be read a passage at a time",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gurbani_read_book — Scroll the Gurbani: Follow next for the next passage; it carries on into the next chapter
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Gurbani. Follow next for the next passage; it carries on into the next chapter. Gurbani: daily shabad, plans, search, Ang and shabad lookup; whole books from the Library, read a passage at a time.

gurbani_read_book input schema
{
  "type": "object",
  "required": [
    "book"
  ],
  "properties": {
    "n": {
      "type": "integer",
      "minimum": 1,
      "description": "Passage within the section, starting at 1."
    },
    "ref": {
      "type": "string",
      "description": "Optional: jump straight to a passage by its reference, for example \"Havamal 139\", \"Meditations 4.3\", \"Gita 2.47\", \"Iliad 1.5\" or \"10b\". Overrides section and n."
    },
    "book": {
      "type": "string",
      "description": "Book id or title from list_books, for example japji, sukhmani."
    },
    "section": {
      "type": "string",
      "description": "Chapter, book, poem, letter or daf to start at, as listed in the book (for example 5, \"chapter 2\", \"havamal\", or 10b for the second side of a daf). Defaults to the beginning; Bekhorot defaults to today's Daf Yomi page while the cycle is in it."
    }
  },
  "additionalProperties": false
}
gurbani_read_book annotations
{
  "title": "Follow next for the next passage; it carries on into the next chapter",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gita_get_today — Gita Scroller: Today's reading, line by line (same as the app shows today)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Gita Scroller. Today's reading, line by line (same as the app shows today). Bhagavad Gita: daily verses, plans, search and verse lookup; whole books from the Library, read a passage at a time.

gita_get_today input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "description": "Optional day as YYYY-MM-DD. Defaults to today (UTC)."
    }
  },
  "additionalProperties": false
}
gita_get_today annotations
{
  "title": "Today's reading, line by line (same as the app shows today)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gita_list_readings — Gita Scroller: All curated daily readings and plans
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Gita Scroller. All curated daily readings and plans. Bhagavad Gita: daily verses, plans, search and verse lookup; whole books from the Library, read a passage at a time.

gita_list_readings input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
gita_list_readings annotations
{
  "title": "All curated daily readings and plans",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gita_get_reading — Gita Scroller: One reading or plan, line by line
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Gita Scroller. One reading or plan, line by line. Bhagavad Gita: daily verses, plans, search and verse lookup; whole books from the Library, read a passage at a time.

gita_get_reading input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "A reading or plan id from list_readings, or a plan name such as \"japji\" or \"The Gita in 18 Days\"."
    }
  },
  "additionalProperties": false
}
gita_get_reading annotations
{
  "title": "One reading or plan, line by line",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gita_search_readings — Gita Scroller: Search the curated readings, best match first
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Gita Scroller. Search the curated readings, best match first. Bhagavad Gita: daily verses, plans, search and verse lookup; whole books from the Library, read a passage at a time.

gita_search_readings input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "Words to search for, for example duty or fear."
    }
  },
  "additionalProperties": false
}
gita_search_readings annotations
{
  "title": "Search the curated readings, best match first",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gita_get_verse — Gita Scroller: A verse or range (e.g
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Gita Scroller. A verse or range (e.g. 47-51) in Sanskrit with transliteration and English. Bhagavad Gita: daily verses, plans, search and verse lookup; whole books from the Library, read a passage at a time.

gita_get_verse input schema
{
  "type": "object",
  "required": [
    "chapter",
    "verse"
  ],
  "properties": {
    "verse": {
      "type": "string",
      "description": "For example: 47-51."
    },
    "chapter": {
      "type": "integer",
      "maximum": 18,
      "minimum": 1,
      "description": "Chapter number, 1 to 18."
    }
  },
  "additionalProperties": false
}
gita_get_verse annotations
{
  "title": "A verse or range (e.g",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gita_get_chapter — Gita Scroller: A whole chapter in Sanskrit with transliteration and English
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Gita Scroller. A whole chapter in Sanskrit with transliteration and English. Bhagavad Gita: daily verses, plans, search and verse lookup; whole books from the Library, read a passage at a time.

gita_get_chapter input schema
{
  "type": "object",
  "required": [
    "chapter"
  ],
  "properties": {
    "chapter": {
      "type": "integer",
      "maximum": 18,
      "minimum": 1,
      "description": "Chapter number, 1 to 18."
    }
  },
  "additionalProperties": false
}
gita_get_chapter annotations
{
  "title": "A whole chapter in Sanskrit with transliteration and English",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gita_get_card — Gita Scroller: Today's reading one line at a time, for voice
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Gita Scroller. Today's reading one line at a time, for voice.. Bhagavad Gita: daily verses, plans, search and verse lookup; whole books from the Library, read a passage at a time.

gita_get_card input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "n": {
      "type": "integer",
      "minimum": 1,
      "description": "Which card, starting at 1. Defaults to 1."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Optional day as YYYY-MM-DD. Defaults to today (UTC)."
    },
    "reading": {
      "type": "string",
      "description": "A reading or plan id from list_readings. Defaults to today's reading."
    }
  },
  "additionalProperties": false
}
gita_get_card annotations
{
  "title": "Today's reading one line at a time, for voice",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gita_list_books — Gita Scroller: The whole books in the Library that can be read a passage at a time
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Gita Scroller. The whole books in the Library that can be read a passage at a time. Bhagavad Gita: daily verses, plans, search and verse lookup; whole books from the Library, read a passage at a time.

gita_list_books input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
gita_list_books annotations
{
  "title": "The whole books in the Library that can be read a passage at a time",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gita_read_book — Gita Scroller: Follow next for the next passage; it carries on into the next chapter
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Gita Scroller. Follow next for the next passage; it carries on into the next chapter. Bhagavad Gita: daily verses, plans, search and verse lookup; whole books from the Library, read a passage at a time.

gita_read_book input schema
{
  "type": "object",
  "required": [
    "book"
  ],
  "properties": {
    "n": {
      "type": "integer",
      "minimum": 1,
      "description": "Passage within the section, starting at 1."
    },
    "ref": {
      "type": "string",
      "description": "Optional: jump straight to a passage by its reference, for example \"Havamal 139\", \"Meditations 4.3\", \"Gita 2.47\", \"Iliad 1.5\" or \"10b\". Overrides section and n."
    },
    "book": {
      "type": "string",
      "description": "Book id or title from list_books, for example gita."
    },
    "section": {
      "type": "string",
      "description": "Chapter, book, poem, letter or daf to start at, as listed in the book (for example 5, \"chapter 2\", \"havamal\", or 10b for the second side of a daf). Defaults to the beginning; Bekhorot defaults to today's Daf Yomi page while the cycle is in it."
    }
  },
  "additionalProperties": false
}
gita_read_book annotations
{
  "title": "Follow next for the next passage; it carries on into the next chapter",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
lore_get_today — Scroll the Lore: Today's reading, line by line (same as the app shows today)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Lore. Today's reading, line by line (same as the app shows today). Greek and Norse myth: daily readings explained line by line, plans, search, and the whole Theogony, Iliad, Odyssey and Poetic Edda read a passage at a time.

lore_get_today input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "description": "Optional day as YYYY-MM-DD. Defaults to today (UTC)."
    }
  },
  "additionalProperties": false
}
lore_get_today annotations
{
  "title": "Today's reading, line by line (same as the app shows today)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
lore_list_readings — Scroll the Lore: All curated daily readings and plans
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Lore. All curated daily readings and plans. Greek and Norse myth: daily readings explained line by line, plans, search, and the whole Theogony, Iliad, Odyssey and Poetic Edda read a passage at a time.

lore_list_readings input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
lore_list_readings annotations
{
  "title": "All curated daily readings and plans",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
lore_get_reading — Scroll the Lore: One reading or plan, line by line
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Lore. One reading or plan, line by line. Greek and Norse myth: daily readings explained line by line, plans, search, and the whole Theogony, Iliad, Odyssey and Poetic Edda read a passage at a time.

lore_get_reading input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "A reading or plan id from list_readings, or a plan name such as \"japji\" or \"The Gita in 18 Days\"."
    }
  },
  "additionalProperties": false
}
lore_get_reading annotations
{
  "title": "One reading or plan, line by line",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
lore_search_readings — Scroll the Lore: Search the curated readings, best match first
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Lore. Search the curated readings, best match first. Greek and Norse myth: daily readings explained line by line, plans, search, and the whole Theogony, Iliad, Odyssey and Poetic Edda read a passage at a time.

lore_search_readings input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "Words or a name to search for, for example Loki or Persephone."
    }
  },
  "additionalProperties": false
}
lore_search_readings annotations
{
  "title": "Search the curated readings, best match first",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
lore_get_card — Scroll the Lore: Today's reading one line at a time, for voice
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Lore. Today's reading one line at a time, for voice.. Greek and Norse myth: daily readings explained line by line, plans, search, and the whole Theogony, Iliad, Odyssey and Poetic Edda read a passage at a time.

lore_get_card input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "n": {
      "type": "integer",
      "minimum": 1,
      "description": "Which card, starting at 1. Defaults to 1."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Optional day as YYYY-MM-DD. Defaults to today (UTC)."
    },
    "reading": {
      "type": "string",
      "description": "A reading or plan id from list_readings. Defaults to today's reading."
    }
  },
  "additionalProperties": false
}
lore_get_card annotations
{
  "title": "Today's reading one line at a time, for voice",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
lore_list_books — Scroll the Lore: The whole books in the Library that can be read a passage at a time
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Lore. The whole books in the Library that can be read a passage at a time. Greek and Norse myth: daily readings explained line by line, plans, search, and the whole Theogony, Iliad, Odyssey and Poetic Edda read a passage at a time.

lore_list_books input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
lore_list_books annotations
{
  "title": "The whole books in the Library that can be read a passage at a time",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
lore_read_book — Scroll the Lore: Follow next for the next passage; it carries on into the next chapter
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scroll the Lore. Follow next for the next passage; it carries on into the next chapter. Greek and Norse myth: daily readings explained line by line, plans, search, and the whole Theogony, Iliad, Odyssey and Poetic Edda read a passage at a time.

lore_read_book input schema
{
  "type": "object",
  "required": [
    "book"
  ],
  "properties": {
    "n": {
      "type": "integer",
      "minimum": 1,
      "description": "Passage within the section, starting at 1."
    },
    "ref": {
      "type": "string",
      "description": "Optional: jump straight to a passage by its reference, for example \"Havamal 139\", \"Meditations 4.3\", \"Gita 2.47\", \"Iliad 1.5\" or \"10b\". Overrides section and n."
    },
    "book": {
      "type": "string",
      "description": "Book id or title from list_books, for example iliad, odyssey."
    },
    "section": {
      "type": "string",
      "description": "Chapter, book, poem, letter or daf to start at, as listed in the book (for example 5, \"chapter 2\", \"havamal\", or 10b for the second side of a daf). Defaults to the beginning; Bekhorot defaults to today's Daf Yomi page while the cycle is in it."
    }
  },
  "additionalProperties": false
}
lore_read_book annotations
{
  "title": "Follow next for the next passage; it carries on into the next chapter",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stoics_get_today — Stoic Scroller: Today's reading, line by line (same as the app shows today)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Stoic Scroller. Today's reading, line by line (same as the app shows today). The Stoics: daily readings from Marcus Aurelius, Epictetus and Seneca explained line by line, plans, search, and the whole Meditations, Enchiridion and Seneca's letters read a passage at a time.

stoics_get_today input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "description": "Optional day as YYYY-MM-DD. Defaults to today (UTC)."
    }
  },
  "additionalProperties": false
}
stoics_get_today annotations
{
  "title": "Today's reading, line by line (same as the app shows today)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stoics_list_readings — Stoic Scroller: All curated daily readings and plans
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Stoic Scroller. All curated daily readings and plans. The Stoics: daily readings from Marcus Aurelius, Epictetus and Seneca explained line by line, plans, search, and the whole Meditations, Enchiridion and Seneca's letters read a passage at a time.

stoics_list_readings input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
stoics_list_readings annotations
{
  "title": "All curated daily readings and plans",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stoics_get_reading — Stoic Scroller: One reading or plan, line by line
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Stoic Scroller. One reading or plan, line by line. The Stoics: daily readings from Marcus Aurelius, Epictetus and Seneca explained line by line, plans, search, and the whole Meditations, Enchiridion and Seneca's letters read a passage at a time.

stoics_get_reading input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "A reading or plan id from list_readings, or a plan name such as \"japji\" or \"The Gita in 18 Days\"."
    }
  },
  "additionalProperties": false
}
stoics_get_reading annotations
{
  "title": "One reading or plan, line by line",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stoics_search_readings — Stoic Scroller: Search the curated readings, best match first
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Stoic Scroller. Search the curated readings, best match first. The Stoics: daily readings from Marcus Aurelius, Epictetus and Seneca explained line by line, plans, search, and the whole Meditations, Enchiridion and Seneca's letters read a passage at a time.

stoics_search_readings input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "Words to search for, for example anger or death."
    }
  },
  "additionalProperties": false
}
stoics_search_readings annotations
{
  "title": "Search the curated readings, best match first",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stoics_get_card — Stoic Scroller: Today's reading one line at a time, for voice
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Stoic Scroller. Today's reading one line at a time, for voice.. The Stoics: daily readings from Marcus Aurelius, Epictetus and Seneca explained line by line, plans, search, and the whole Meditations, Enchiridion and Seneca's letters read a passage at a time.

stoics_get_card input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "n": {
      "type": "integer",
      "minimum": 1,
      "description": "Which card, starting at 1. Defaults to 1."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Optional day as YYYY-MM-DD. Defaults to today (UTC)."
    },
    "reading": {
      "type": "string",
      "description": "A reading or plan id from list_readings. Defaults to today's reading."
    }
  },
  "additionalProperties": false
}
stoics_get_card annotations
{
  "title": "Today's reading one line at a time, for voice",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stoics_list_books — Stoic Scroller: The whole books in the Library that can be read a passage at a time
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Stoic Scroller. The whole books in the Library that can be read a passage at a time. The Stoics: daily readings from Marcus Aurelius, Epictetus and Seneca explained line by line, plans, search, and the whole Meditations, Enchiridion and Seneca's letters read a passage at a time.

stoics_list_books input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
stoics_list_books annotations
{
  "title": "The whole books in the Library that can be read a passage at a time",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stoics_read_book — Stoic Scroller: Follow next for the next passage; it carries on into the next chapter
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Stoic Scroller. Follow next for the next passage; it carries on into the next chapter. The Stoics: daily readings from Marcus Aurelius, Epictetus and Seneca explained line by line, plans, search, and the whole Meditations, Enchiridion and Seneca's letters read a passage at a time.

stoics_read_book input schema
{
  "type": "object",
  "required": [
    "book"
  ],
  "properties": {
    "n": {
      "type": "integer",
      "minimum": 1,
      "description": "Passage within the section, starting at 1."
    },
    "ref": {
      "type": "string",
      "description": "Optional: jump straight to a passage by its reference, for example \"Havamal 139\", \"Meditations 4.3\", \"Gita 2.47\", \"Iliad 1.5\" or \"10b\". Overrides section and n."
    },
    "book": {
      "type": "string",
      "description": "Book id or title from list_books, for example meditations, enchiridion."
    },
    "section": {
      "type": "string",
      "description": "Chapter, book, poem, letter or daf to start at, as listed in the book (for example 5, \"chapter 2\", \"havamal\", or 10b for the second side of a daf). Defaults to the beginning; Bekhorot defaults to today's Daf Yomi page while the cycle is in it."
    }
  },
  "additionalProperties": false
}
stoics_read_book annotations
{
  "title": "Follow next for the next passage; it carries on into the next chapter",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
bible_get_today — Bible Swipe: Today's reading, line by line (same as the app shows today)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Bible Swipe. Today's reading, line by line (same as the app shows today). Bible: daily readings, plans, search and passage lookup (World English Bible)

bible_get_today input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "description": "Optional day as YYYY-MM-DD. Defaults to today (UTC)."
    }
  },
  "additionalProperties": false
}
bible_get_today annotations
{
  "title": "Today's reading, line by line (same as the app shows today)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
bible_list_readings — Bible Swipe: All curated daily readings and plans
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Bible Swipe. All curated daily readings and plans. Bible: daily readings, plans, search and passage lookup (World English Bible)

bible_list_readings input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
bible_list_readings annotations
{
  "title": "All curated daily readings and plans",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
bible_get_reading — Bible Swipe: One reading or plan, line by line
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Bible Swipe. One reading or plan, line by line. Bible: daily readings, plans, search and passage lookup (World English Bible)

bible_get_reading input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "A reading or plan id from list_readings, or a plan name such as \"japji\" or \"The Gita in 18 Days\"."
    }
  },
  "additionalProperties": false
}
bible_get_reading annotations
{
  "title": "One reading or plan, line by line",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
bible_search_readings — Bible Swipe: Search the curated readings, best match first
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Bible Swipe. Search the curated readings, best match first. Bible: daily readings, plans, search and passage lookup (World English Bible)

bible_search_readings input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "Words to search for, for example forgiveness or shepherd."
    }
  },
  "additionalProperties": false
}
bible_search_readings annotations
{
  "title": "Search the curated readings, best match first",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
bible_get_passage — Bible Swipe: Any verse, range, chapter or cross-chapter range (Genesis 1:1-2:3) of the...
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Bible Swipe. Any verse, range, chapter or cross-chapter range (Genesis 1:1-2:3) of the World English Bible.

bible_get_passage input schema
{
  "type": "object",
  "required": [
    "ref"
  ],
  "properties": {
    "ref": {
      "type": "string",
      "description": "For example: John 3:16."
    }
  },
  "additionalProperties": false
}
bible_get_passage annotations
{
  "title": "Any verse, range, chapter or cross-chapter range (Genesis 1:1-2:3) of the...",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
bible_get_card — Bible Swipe: Today's reading one line at a time, for voice
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Bible Swipe. Today's reading one line at a time, for voice.. Bible: daily readings, plans, search and passage lookup (World English Bible)

bible_get_card input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "n": {
      "type": "integer",
      "minimum": 1,
      "description": "Which card, starting at 1. Defaults to 1."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Optional day as YYYY-MM-DD. Defaults to today (UTC)."
    },
    "reading": {
      "type": "string",
      "description": "A reading or plan id from list_readings. Defaults to today's reading."
    }
  },
  "additionalProperties": false
}
bible_get_card annotations
{
  "title": "Today's reading one line at a time, for voice",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

Job Spotter job cards

Advertised by the server during the last successful anonymous check.

Job search results as cards with pay, work type and apply buttons

Job Spotter job cards URI
ui://jobspotter/job-cards.html

MIME type: text/html;profile=mcp-app

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
305 ms
95th percentile latency
305 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 305 ms · metadata changed · 162 tool(s), 1 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http good-turn-studio-mcp https://goodturn-mcp.pages.dev/all/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add good-turn-studio-mcp --url https://goodturn-mcp.pages.dev/all/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable good-turn-studio-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "good-turn-studio-mcp": {
      "url": "https://goodturn-mcp.pages.dev/all/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "good-turn-studio-mcp": {
      "type": "streamableHttp",
      "url": "https://goodturn-mcp.pages.dev/all/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start good-turn-studio-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "good-turn-studio-mcp": {
      "type": "http",
      "url": "https://goodturn-mcp.pages.dev/all/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http good-turn-studio-mcp https://goodturn-mcp.pages.dev/all/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://goodturn-mcp.pages.dev/all/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "good-turn-studio-mcp": {
      "serverUrl": "https://goodturn-mcp.pages.dev/all/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Good Turn Studio MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.